#!/usr/bin/env python3 """ Check how scenarios at the ASL Scenario Archive are connected to those at ROAR. """ import sys import json from vasl_templates.webapp.scenarios import _match_roar_scenario, \ _asa_scenarios, _build_asa_scenario_index, _roar_scenarios, _build_roar_scenario_index # --------------------------------------------------------------------- def asa_string( s ): """Return an ASL Scenario Archive scenario as a string.""" return "[{}] {} ({})".format( s["scenario_id"], s.get("title"), s.get("sc_id") ) def roar_string( s ): """Return ROAR scenario as a string.""" return "[{}] {} ({})".format( s["roar_id"], s.get("name"), s.get("scenario_id") ) # --------------------------------------------------------------------- # load the ASL Scenario Archive scenarios fname = sys.argv[1] with open( fname, "r", encoding="utf-8" ) as fp: asa_data = json.load( fp ) _build_asa_scenario_index( _asa_scenarios, asa_data, None ) # load the ROAR scenarios fname = sys.argv[2] with open( fname, "r", encoding="utf-8" ) as fp: roar_data = json.load( fp ) _build_roar_scenario_index( _roar_scenarios, roar_data, None ) # try to connect each ASA scenario to ROAR exact_matches, multiple_matches, unmatched = [], [], [] for scenario in asa_data["scenarios"]: matches = _match_roar_scenario( scenario ) if not matches: unmatched.append( scenario ) elif len(matches) == 1: exact_matches.append( scenario ) else: multiple_matches.append( [ scenario, matches ] ) # output the results print( "ASL Scenario Archive scenarios: {}".format( len(asa_data["scenarios"]) ) ) print() print( "Exact matches: {}".format( len(exact_matches) ) ) print() print( "Multiple matches: {}".format( len(multiple_matches) ) ) if multiple_matches: for scenario,matches in multiple_matches: print( " {}:".format( asa_string(scenario) ) ) for match in matches: print( " - {}".format( roar_string( match ) ) ) print() print( "Unmatched: {}".format( len(unmatched) ) ) if unmatched: for scenario in unmatched: print( " {}".format( asa_string(scenario) ) )