Note
Go to the end to download the full example code.
Compares two models#
In this example we show how to use polaris testing capabilities for comparing two different networks
import shutil
from pathlib import Path
from polaris import Polaris
from polaris.utils.testing.model_comparison.compare_databases import compare_databases
# Let's copy the model we have available for testing
model_path1 = Path("/tmp/Grid")
model_path2 = Path("/tmp/Grid_model_comparison")
if model_path2.exists():
shutil.rmtree(model_path2)
shutil.copytree("/tmp/Grid", "/tmp/Grid_model_comparison")
project1 = Polaris.from_dir(model_path1)
project2 = Polaris.from_dir(model_path2)
We can compare two identical supply files We must provide the path to the supply databases
report = compare_databases(project1.supply_file, project2.supply_file)
for record in report:
print(record)
**No dropped tables**
**No new tables**
**Tables with no changes**:
about_model, area_type, connection, county_skims, editing_table, electricity_grid_transmission, electricity_provider, electricity_provider_pricing, ev_charging_station_plug_types, ev_charging_station_plugs, ev_charging_station_pricing, ev_charging_station_service_bays, ev_charging_stations, land_use, link, link_overrides, link_type, location, location_links, location_parking, micromobility_agencies, micromobility_docks, micromobility_operators, migrations, node, parking, phasing, phasing_nested_records, pocket, road_connectors, roadsideunit, sanity_check, settings, sign, signal, signal_nested_records, timing, timing_nested_records, toll_pricing, traffic_incident, transit_agencies, transit_bike, transit_fare_attributes, transit_fare_rules, transit_links, transit_modes, transit_pattern_links, transit_pattern_mapping, transit_patterns, transit_routes, transit_stops, transit_trips, transit_trips_schedule, transit_walk, transit_zones, turn_overrides, use_code, zone
Or we can do something drastic like remove all transit data and then compare them
project2.network.transit.purge()
report = compare_databases(project1.supply_file, project2.supply_file)
for record in report:
print(record)
project1.close()
project2.close()
**No dropped tables**
**No new tables**
**Tables with no changes**:
about_model, area_type, connection, county_skims, electricity_grid_transmission, electricity_provider, electricity_provider_pricing, ev_charging_station_plug_types, ev_charging_station_plugs, ev_charging_station_pricing, ev_charging_station_service_bays, ev_charging_stations, land_use, link, link_overrides, link_type, location, location_links, location_parking, micromobility_agencies, micromobility_docks, micromobility_operators, migrations, node, parking, phasing, phasing_nested_records, pocket, road_connectors, roadsideunit, sanity_check, settings, sign, signal, signal_nested_records, timing, timing_nested_records, toll_pricing, traffic_incident, transit_modes, transit_pattern_mapping, turn_overrides, use_code, zone
**Tables with changes**:
editing_table:
* 998 records added to table
transit_agencies:
* 7 records deleted from table
transit_bike:
* 499 records deleted from table
transit_fare_attributes:
* 6 records deleted from table
transit_fare_rules:
* 18 records deleted from table
transit_links:
* 46 records deleted from table
transit_pattern_links:
* 46 records deleted from table
transit_patterns:
* 15 records deleted from table
transit_routes:
* 6 records deleted from table
transit_stops:
* 56 records deleted from table
transit_trips:
* 3,923 records deleted from table
transit_trips_schedule:
* 16,743 records deleted from table
transit_walk:
* 499 records deleted from table
transit_zones:
* 6 records deleted from table
Total running time of the script: (0 minutes 4.136 seconds)