Static Traffic Assignment

Static Traffic Assignment#

We can also run the Polaris Activity-Based model with static assignment, including for model calibration exercises.

Even when the intention is to use Polaris powerful dynamic traffic assignment, this mode may be useful in speeding up the calibration process or obtaining a more realistic starting for the equilibration of skim matrices.

For this integration we have used [AequilibraE](https://www.aequilibrae.com/), which is an open source modelling package with incredibly fast static assignment capabilities, but similar integrations are possible with other packages.

Exporting matrices#

sphinx_gallery_thumbnail_path = ‘../../examples/modelling_like_the_old_days/pol_aeq.png’

from pathlib import Path

from polaris.runs.static_assignment.static_assignment_inputs import STAInputs
from polaris.runs.static_assignment.static_run import static_run
from polaris.utils.testing.temp_model import TempModel

Matrix#

We get the demand matrices for the AM peak for one iteration

project_dir = TempModel("Grid")

sta_param = STAInputs()
sta_param.max_iterations = 5
sta_param.rgap = 0.1

static_run(project_dir, sta_param=sta_param, save_assignment_results=True)
                                                  :   0%|          | 0/9 [00:00<?, ?it/s]
combined                                          :   0%|          | 0/9 [00:00<?, ?it/s]
Equilibrium Assignment                            :   0%|          | 0/5 [00:00<?, ?it/s]
combined                                          :   0%|          | 0/9 [00:00<?, ?it/s]
Equilibrium Assignment                            :   0%|          | 0/5 [00:00<?, ?it/s]
combined                                          :   0%|          | 0/9 [00:00<?, ?it/s]
Equilibrium Assignment                            :   0%|          | 0/5 [00:00<?, ?it/s]
combined                                          :   0%|          | 0/9 [00:00<?, ?it/s]
Equilibrium Assignment                            :   0%|          | 0/5 [00:00<?, ?it/s]
combined                                          :   0%|          | 0/9 [00:00<?, ?it/s]
Equilibrium Assignment                            :   0%|          | 0/5 [00:00<?, ?it/s]
combined                                          :   0%|          | 0/9 [00:00<?, ?it/s]
Equilibrium Assignment                            :   0%|          | 0/5 [00:00<?, ?it/s]
combined                                          :   0%|          | 0/9 [00:00<?, ?it/s]
Equilibrium Assignment                            :   0%|          | 0/5 [00:00<?, ?it/s]
combined                                          :   0%|          | 0/9 [00:00<?, ?it/s]
Equilibrium Assignment                            :   0%|          | 0/5 [00:00<?, ?it/s]
combined                                          :   0%|          | 0/9 [00:00<?, ?it/s]
Equilibrium Assignment                            :   0%|          | 0/5 [00:00<?, ?it/s]
combined                                          :   0%|          | 0/9 [00:00<?, ?it/s]
Equilibrium Assignment                            :   0%|          | 0/5 [00:00<?, ?it/s]
combined                                          :   0%|          | 0/9 [00:00<?, ?it/s]
Equilibrium Assignment                            :   0%|          | 0/5 [00:00<?, ?it/s]
combined                                          :   0%|          | 0/9 [00:00<?, ?it/s]
Equilibrium Assignment                            :   0%|          | 0/5 [00:00<?, ?it/s]
combined                                          :   0%|          | 0/9 [00:00<?, ?it/s]
Equilibrium Assignment                            :   0%|          | 0/5 [00:00<?, ?it/s]
combined                                          :   0%|          | 0/9 [00:00<?, ?it/s]
Equilibrium Assignment                            :   0%|          | 0/5 [00:00<?, ?it/s]
combined                                          :   0%|          | 0/9 [00:00<?, ?it/s]
Equilibrium Assignment                            :   0%|          | 0/5 [00:00<?, ?it/s]
combined                                          :   0%|          | 0/9 [00:00<?, ?it/s]
Equilibrium Assignment                            :   0%|          | 0/5 [00:00<?, ?it/s]
Failed running sql: CREATE TABLE IF NOT EXISTS work_straight_line_dist_Average As
SELECT avg(sqrt(pow(work_loc.x - home_loc.x, 2.0) + pow(work_loc.y - home_loc.y, 2.0))) / 1000 as dist_avg,
       1.0*count(*) as count
FROM person, household, a.location as home_loc, a.location as work_loc
WHERE person.household = household.household
and household.location = home_loc.location
and person.work_location_id = work_loc.location
and home_loc.location <> work_loc.location
Traceback (most recent call last):
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 168, in cache_all_available_metrics
    self.get_cached_kpi_value(m, skip_cache=skip_cache)
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 212, in get_cached_kpi_value
    generate()
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 205, in generate
    self.cache.set(kpi_name, self.get_kpi_value(kpi_name))
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 195, in get_kpi_value
    return self.__getattribute__(attr_name)()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/kpi_utils.py", line 73, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 756, in metric_rmse_vs_observed
    simulated, target = self._get_simulated_and_target_dict("destination_choice")
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 725, in _get_simulated_and_target_dict
    simulated = destination_choice.load_simulated(
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/runs/calibrate/destination_choice.py", line 84, in load_simulated
    run_sql(render_wtf_file(sql_dir / "travel_time.template.sql", 1.0), conn, attach={"a": supply_database})
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/utils/database/db_utils.py", line 156, in run_sql
    raise e
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/utils/database/db_utils.py", line 150, in run_sql
    duration = time_function(lambda: conn.execute(cmd))  # noqa: B023
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/utils/time_utils.py", line 23, in time_function
    fn()
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/utils/database/db_utils.py", line 150, in <lambda>
    duration = time_function(lambda: conn.execute(cmd))  # noqa: B023
                                     ^^^^^^^^^^^^^^^^^
sqlite3.OperationalError: no such table: a.location

Traceback (most recent call last):
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 168, in cache_all_available_metrics
    self.get_cached_kpi_value(m, skip_cache=skip_cache)
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 212, in get_cached_kpi_value
    generate()
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 205, in generate
    self.cache.set(kpi_name, self.get_kpi_value(kpi_name))
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 195, in get_kpi_value
    return self.__getattribute__(attr_name)()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/kpi_utils.py", line 73, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 1027, in metric_county_to_county_demand
    return self._slow_fast(sql, "county_to_county_trips", attach_db_type=DatabaseType.Supply)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 539, in _slow_fast
    conn.execute(f"CREATE TABLE {table_name} AS {render_sql(slow_sql, self.population_scale_factor)}")
sqlite3.OperationalError: no such table: a.location

Failed running sql: CREATE TABLE boardings_by_agency_mode as
SELECT
    ta.agency as agency,
    CASE WHEN tr."type" = 0  THEN 'TRAM'
                WHEN tr."type" = 1  THEN 'METRO'
                WHEN tr."type" = 2  THEN 'COMM'
                WHEN tr."type" = 3  THEN 'BUS'
                WHEN tr."type" = 4  THEN 'FERRY'
                WHEN tr."type" = 5  THEN 'CABLE'
                WHEN tr."type" = 6  THEN 'LIFT'
                WHEN tr."type" = 7  THEN 'FUNICULAR'
                WHEN tr."type" = 11 THEN 'TROLLEY'
                WHEN tr."type" = 12 THEN 'MONO'
               END as "mode",
    4.0*sum(tvl.value_boardings) as boardings,
    4.0*sum(tvl.value_alightings) as alightings
FROM
    "Transit_Vehicle_links" tvl,
    transit_vehicle tv,
    a.transit_trips tt,
    a.transit_patterns tp,
    a.transit_routes tr,
    a.transit_agencies ta
where
    tvl.value_transit_vehicle_trip = tv.transit_vehicle_trip and
    tvl.value_transit_vehicle_trip = tt.trip_id and
    tp.pattern_id = tt.pattern_id and
    tr.route_id = tp.route_id AND
    tr.agency_id = ta.agency_id
group by 1,2
order by 1,2
Traceback (most recent call last):
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 168, in cache_all_available_metrics
    self.get_cached_kpi_value(m, skip_cache=skip_cache)
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 212, in get_cached_kpi_value
    generate()
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 205, in generate
    self.cache.set(kpi_name, self.get_kpi_value(kpi_name))
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 195, in get_kpi_value
    return self.__getattribute__(attr_name)()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/kpi_utils.py", line 73, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 935, in metric_calibration_boardings
    simulated, target = self._get_simulated_and_target_dict("mode_choice_boardings")
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 733, in _get_simulated_and_target_dict
    simulated = mode_choice.load_simulated_boardings(self.inputs, self.population_scale_factor)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/runs/calibrate/mode_choice.py", line 220, in load_simulated_boardings
    run_sql(render_wtf_file(sql_dir / "transit.template.sql", population_sample_rate), conn, attach=attach)
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/utils/database/db_utils.py", line 156, in run_sql
    raise e
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/utils/database/db_utils.py", line 150, in run_sql
    duration = time_function(lambda: conn.execute(cmd))  # noqa: B023
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/utils/time_utils.py", line 23, in time_function
    fn()
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/utils/database/db_utils.py", line 150, in <lambda>
    duration = time_function(lambda: conn.execute(cmd))  # noqa: B023
                                     ^^^^^^^^^^^^^^^^^
sqlite3.OperationalError: no such table: a.transit_trips

Failed running sql: CREATE TABLE IF NOT EXISTS work_straight_line_dist_Average As
SELECT avg(sqrt(pow(work_loc.x - home_loc.x, 2.0) + pow(work_loc.y - home_loc.y, 2.0))) / 1000 as dist_avg,
       1.0*count(*) as count
FROM person, household, a.location as home_loc, a.location as work_loc
WHERE person.household = household.household
and household.location = home_loc.location
and person.work_location_id = work_loc.location
and home_loc.location <> work_loc.location
Traceback (most recent call last):
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 168, in cache_all_available_metrics
    self.get_cached_kpi_value(m, skip_cache=skip_cache)
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 212, in get_cached_kpi_value
    generate()
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 205, in generate
    self.cache.set(kpi_name, self.get_kpi_value(kpi_name))
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 195, in get_kpi_value
    return self.__getattribute__(attr_name)()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/kpi_utils.py", line 73, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 906, in metric_calibration_destination
    simulated, target = self._get_simulated_and_target_dict("destination_choice")
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 725, in _get_simulated_and_target_dict
    simulated = destination_choice.load_simulated(
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/runs/calibrate/destination_choice.py", line 84, in load_simulated
    run_sql(render_wtf_file(sql_dir / "travel_time.template.sql", 1.0), conn, attach={"a": supply_database})
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/utils/database/db_utils.py", line 156, in run_sql
    raise e
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/utils/database/db_utils.py", line 150, in run_sql
    duration = time_function(lambda: conn.execute(cmd))  # noqa: B023
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/utils/time_utils.py", line 23, in time_function
    fn()
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/utils/database/db_utils.py", line 150, in <lambda>
    duration = time_function(lambda: conn.execute(cmd))  # noqa: B023
                                     ^^^^^^^^^^^^^^^^^
sqlite3.OperationalError: no such table: a.location

/home/gitlab-runner/builds/polaris/code/polarislib/polaris/runs/calibrate/mode_choice.py:146: DeprecationWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
  return df.groupby("person").apply(set_home_based).reset_index(drop=True)
/home/gitlab-runner/builds/polaris/code/polarislib/polaris/runs/calibrate/mode_choice.py:161: DeprecationWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
  return df.groupby("mode").apply(f).reset_index()
/home/gitlab-runner/builds/polaris/code/polarislib/polaris/runs/calibrate/mode_choice.py:146: DeprecationWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
  return df.groupby("person").apply(set_home_based).reset_index(drop=True)
/home/gitlab-runner/builds/polaris/code/polarislib/polaris/runs/calibrate/mode_choice.py:161: DeprecationWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
  return df.groupby("mode").apply(f).reset_index()
Traceback (most recent call last):
  File "/venv-py312/lib/python3.12/site-packages/pandas/io/sql.py", line 2674, in execute
    cur.execute(sql, *args)
sqlite3.OperationalError: no such table: link

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 168, in cache_all_available_metrics
    self.get_cached_kpi_value(m, skip_cache=skip_cache)
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 212, in get_cached_kpi_value
    generate()
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 205, in generate
    self.cache.set(kpi_name, self.get_kpi_value(kpi_name))
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 195, in get_kpi_value
    return self.__getattribute__(attr_name)()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/kpi_utils.py", line 73, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 950, in metric_validation_speed
    simulated, target = self._get_simulated_and_target_dict("speed_by_funcl")
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 739, in _get_simulated_and_target_dict
    simulated = speed_by_funcl.load_simulated(self.inputs, self.population_scale_factor)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/runs/calibrate/speed_by_funcl.py", line 42, in load_simulated
    vmt_vht_link = pd.concat([load_link_types(input_files.supply_db), vmt_vht], axis=1)
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/utils/database/db_utils.py", line 314, in load_link_types
    return pd.read_sql(
           ^^^^^^^^^^^^
  File "/venv-py312/lib/python3.12/site-packages/pandas/io/sql.py", line 706, in read_sql
    return pandas_sql.read_query(
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/venv-py312/lib/python3.12/site-packages/pandas/io/sql.py", line 2738, in read_query
    cursor = self.execute(sql, params)
             ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/venv-py312/lib/python3.12/site-packages/pandas/io/sql.py", line 2686, in execute
    raise ex from exc
pandas.errors.DatabaseError: Execution failed on sql '
                SELECT 2*link     as linknr,type,z.zone
                FROM link l, node n, zone z
                WHERE lanes_ab>0
                AND l.node_a = n.node AND n.zone = z.zone and l.type not in ('LIGHTRAIL', 'HEAVYRAIL', 'WALKWAY')
                 UNION
                SELECT (2*link+1) as linknr,type,z.zone
                FROM link l, node n, zone z
                WHERE lanes_ba>0
                AND l.node_a = n.node AND n.zone = z.zone and l.type not in ('LIGHTRAIL', 'HEAVYRAIL', 'WALKWAY')
                 ORDER BY linknr': no such table: link

Traceback (most recent call last):
  File "/venv-py312/lib/python3.12/site-packages/pandas/io/sql.py", line 2674, in execute
    cur.execute(sql, *args)
sqlite3.OperationalError: no such table: link

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 168, in cache_all_available_metrics
    self.get_cached_kpi_value(m, skip_cache=skip_cache)
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 212, in get_cached_kpi_value
    generate()
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 205, in generate
    self.cache.set(kpi_name, self.get_kpi_value(kpi_name))
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 195, in get_kpi_value
    return self.__getattribute__(attr_name)()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/kpi_utils.py", line 73, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 703, in metric_count_validation
    link_attrs = read_table("link", ScenarioCompression.maybe_extract(self.inputs.supply_db))
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/utils/database/db_utils.py", line 102, in read_table
    return pd.read_sql(f"SELECT * FROM {tablename};", conn, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/venv-py312/lib/python3.12/site-packages/pandas/io/sql.py", line 706, in read_sql
    return pandas_sql.read_query(
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/venv-py312/lib/python3.12/site-packages/pandas/io/sql.py", line 2738, in read_query
    cursor = self.execute(sql, params)
             ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/venv-py312/lib/python3.12/site-packages/pandas/io/sql.py", line 2686, in execute
    raise ex from exc
pandas.errors.DatabaseError: Execution failed on sql 'SELECT * FROM link;': no such table: link

Exception in thread Thread-2858 (static_async_fn):
Traceback (most recent call last):
  File "/usr/lib/python3.12/threading.py", line 1073, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.12/threading.py", line 1010, in run
    self._target(*self._args, **self._kwargs)
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/utils/logging_utils.py", line 35, in wrapper
    formatted_msg = msg.format(**args_dict)
                    ^^^^^^^^^^^^^^^^^^^^^^^
KeyError: 'current_iteration'
                                                  :   0%|          | 0/9 [00:00<?, ?it/s]
combined                                          :   0%|          | 0/9 [00:00<?, ?it/s]
Equilibrium Assignment                            :   0%|          | 0/5 [00:00<?, ?it/s]
combined                                          :   0%|          | 0/9 [00:00<?, ?it/s]
Equilibrium Assignment                            :   0%|          | 0/5 [00:00<?, ?it/s]
combined                                          :   0%|          | 0/9 [00:00<?, ?it/s]
Equilibrium Assignment                            :   0%|          | 0/5 [00:00<?, ?it/s]
combined                                          :   0%|          | 0/9 [00:00<?, ?it/s]
Equilibrium Assignment                            :   0%|          | 0/5 [00:00<?, ?it/s]
combined                                          :   0%|          | 0/9 [00:00<?, ?it/s]
Equilibrium Assignment                            :   0%|          | 0/5 [00:00<?, ?it/s]
combined                                          :   0%|          | 0/9 [00:00<?, ?it/s]
Equilibrium Assignment                            :   0%|          | 0/5 [00:00<?, ?it/s]
combined                                          :   0%|          | 0/9 [00:00<?, ?it/s]
Equilibrium Assignment                            :   0%|          | 0/5 [00:00<?, ?it/s]
combined                                          :   0%|          | 0/9 [00:00<?, ?it/s]
Equilibrium Assignment                            :   0%|          | 0/5 [00:00<?, ?it/s]
combined                                          :   0%|          | 0/9 [00:00<?, ?it/s]
Equilibrium Assignment                            :   0%|          | 0/5 [00:00<?, ?it/s]
combined                                          :   0%|          | 0/9 [00:00<?, ?it/s]
Equilibrium Assignment                            :   0%|          | 0/5 [00:00<?, ?it/s]
combined                                          :   0%|          | 0/9 [00:00<?, ?it/s]
Equilibrium Assignment                            :   0%|          | 0/5 [00:00<?, ?it/s]
combined                                          :   0%|          | 0/9 [00:00<?, ?it/s]
Equilibrium Assignment                            :   0%|          | 0/5 [00:00<?, ?it/s]
combined                                          :   0%|          | 0/9 [00:00<?, ?it/s]
Equilibrium Assignment                            :   0%|          | 0/5 [00:00<?, ?it/s]
combined                                          :   0%|          | 0/9 [00:00<?, ?it/s]
Equilibrium Assignment                            :   0%|          | 0/5 [00:00<?, ?it/s]
combined                                          :   0%|          | 0/9 [00:00<?, ?it/s]
Equilibrium Assignment                            :   0%|          | 0/5 [00:00<?, ?it/s]
combined                                          :   0%|          | 0/9 [00:00<?, ?it/s]
Equilibrium Assignment                            :   0%|          | 0/5 [00:00<?, ?it/s]
Failed running sql: CREATE TABLE IF NOT EXISTS work_straight_line_dist_Average As
SELECT avg(sqrt(pow(work_loc.x - home_loc.x, 2.0) + pow(work_loc.y - home_loc.y, 2.0))) / 1000 as dist_avg,
       1.0*count(*) as count
FROM person, household, a.location as home_loc, a.location as work_loc
WHERE person.household = household.household
and household.location = home_loc.location
and person.work_location_id = work_loc.location
and home_loc.location <> work_loc.location
Traceback (most recent call last):
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 168, in cache_all_available_metrics
    self.get_cached_kpi_value(m, skip_cache=skip_cache)
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 212, in get_cached_kpi_value
    generate()
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 205, in generate
    self.cache.set(kpi_name, self.get_kpi_value(kpi_name))
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 195, in get_kpi_value
    return self.__getattribute__(attr_name)()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/kpi_utils.py", line 73, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 756, in metric_rmse_vs_observed
    simulated, target = self._get_simulated_and_target_dict("destination_choice")
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 725, in _get_simulated_and_target_dict
    simulated = destination_choice.load_simulated(
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/runs/calibrate/destination_choice.py", line 84, in load_simulated
    run_sql(render_wtf_file(sql_dir / "travel_time.template.sql", 1.0), conn, attach={"a": supply_database})
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/utils/database/db_utils.py", line 156, in run_sql
    raise e
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/utils/database/db_utils.py", line 150, in run_sql
    duration = time_function(lambda: conn.execute(cmd))  # noqa: B023
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/utils/time_utils.py", line 23, in time_function
    fn()
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/utils/database/db_utils.py", line 150, in <lambda>
    duration = time_function(lambda: conn.execute(cmd))  # noqa: B023
                                     ^^^^^^^^^^^^^^^^^
sqlite3.OperationalError: no such table: a.location

Traceback (most recent call last):
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 168, in cache_all_available_metrics
    self.get_cached_kpi_value(m, skip_cache=skip_cache)
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 212, in get_cached_kpi_value
    generate()
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 205, in generate
    self.cache.set(kpi_name, self.get_kpi_value(kpi_name))
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 195, in get_kpi_value
    return self.__getattribute__(attr_name)()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/kpi_utils.py", line 73, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 1027, in metric_county_to_county_demand
    return self._slow_fast(sql, "county_to_county_trips", attach_db_type=DatabaseType.Supply)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 539, in _slow_fast
    conn.execute(f"CREATE TABLE {table_name} AS {render_sql(slow_sql, self.population_scale_factor)}")
sqlite3.OperationalError: no such table: a.location

Failed running sql: CREATE TABLE boardings_by_agency_mode as
SELECT
    ta.agency as agency,
    CASE WHEN tr."type" = 0  THEN 'TRAM'
                WHEN tr."type" = 1  THEN 'METRO'
                WHEN tr."type" = 2  THEN 'COMM'
                WHEN tr."type" = 3  THEN 'BUS'
                WHEN tr."type" = 4  THEN 'FERRY'
                WHEN tr."type" = 5  THEN 'CABLE'
                WHEN tr."type" = 6  THEN 'LIFT'
                WHEN tr."type" = 7  THEN 'FUNICULAR'
                WHEN tr."type" = 11 THEN 'TROLLEY'
                WHEN tr."type" = 12 THEN 'MONO'
               END as "mode",
    4.0*sum(tvl.value_boardings) as boardings,
    4.0*sum(tvl.value_alightings) as alightings
FROM
    "Transit_Vehicle_links" tvl,
    transit_vehicle tv,
    a.transit_trips tt,
    a.transit_patterns tp,
    a.transit_routes tr,
    a.transit_agencies ta
where
    tvl.value_transit_vehicle_trip = tv.transit_vehicle_trip and
    tvl.value_transit_vehicle_trip = tt.trip_id and
    tp.pattern_id = tt.pattern_id and
    tr.route_id = tp.route_id AND
    tr.agency_id = ta.agency_id
group by 1,2
order by 1,2
Traceback (most recent call last):
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 168, in cache_all_available_metrics
    self.get_cached_kpi_value(m, skip_cache=skip_cache)
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 212, in get_cached_kpi_value
    generate()
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 205, in generate
    self.cache.set(kpi_name, self.get_kpi_value(kpi_name))
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 195, in get_kpi_value
    return self.__getattribute__(attr_name)()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/kpi_utils.py", line 73, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 935, in metric_calibration_boardings
    simulated, target = self._get_simulated_and_target_dict("mode_choice_boardings")
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 733, in _get_simulated_and_target_dict
    simulated = mode_choice.load_simulated_boardings(self.inputs, self.population_scale_factor)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/runs/calibrate/mode_choice.py", line 220, in load_simulated_boardings
    run_sql(render_wtf_file(sql_dir / "transit.template.sql", population_sample_rate), conn, attach=attach)
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/utils/database/db_utils.py", line 156, in run_sql
    raise e
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/utils/database/db_utils.py", line 150, in run_sql
    duration = time_function(lambda: conn.execute(cmd))  # noqa: B023
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/utils/time_utils.py", line 23, in time_function
    fn()
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/utils/database/db_utils.py", line 150, in <lambda>
    duration = time_function(lambda: conn.execute(cmd))  # noqa: B023
                                     ^^^^^^^^^^^^^^^^^
sqlite3.OperationalError: no such table: a.transit_trips

Failed running sql: CREATE TABLE IF NOT EXISTS work_straight_line_dist_Average As
SELECT avg(sqrt(pow(work_loc.x - home_loc.x, 2.0) + pow(work_loc.y - home_loc.y, 2.0))) / 1000 as dist_avg,
       1.0*count(*) as count
FROM person, household, a.location as home_loc, a.location as work_loc
WHERE person.household = household.household
and household.location = home_loc.location
and person.work_location_id = work_loc.location
and home_loc.location <> work_loc.location
Traceback (most recent call last):
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 168, in cache_all_available_metrics
    self.get_cached_kpi_value(m, skip_cache=skip_cache)
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 212, in get_cached_kpi_value
    generate()
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 205, in generate
    self.cache.set(kpi_name, self.get_kpi_value(kpi_name))
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 195, in get_kpi_value
    return self.__getattribute__(attr_name)()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/kpi_utils.py", line 73, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 906, in metric_calibration_destination
    simulated, target = self._get_simulated_and_target_dict("destination_choice")
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 725, in _get_simulated_and_target_dict
    simulated = destination_choice.load_simulated(
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/runs/calibrate/destination_choice.py", line 84, in load_simulated
    run_sql(render_wtf_file(sql_dir / "travel_time.template.sql", 1.0), conn, attach={"a": supply_database})
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/utils/database/db_utils.py", line 156, in run_sql
    raise e
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/utils/database/db_utils.py", line 150, in run_sql
    duration = time_function(lambda: conn.execute(cmd))  # noqa: B023
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/utils/time_utils.py", line 23, in time_function
    fn()
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/utils/database/db_utils.py", line 150, in <lambda>
    duration = time_function(lambda: conn.execute(cmd))  # noqa: B023
                                     ^^^^^^^^^^^^^^^^^
sqlite3.OperationalError: no such table: a.location

/home/gitlab-runner/builds/polaris/code/polarislib/polaris/runs/calibrate/mode_choice.py:146: DeprecationWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
  return df.groupby("person").apply(set_home_based).reset_index(drop=True)
/home/gitlab-runner/builds/polaris/code/polarislib/polaris/runs/calibrate/mode_choice.py:161: DeprecationWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
  return df.groupby("mode").apply(f).reset_index()
/home/gitlab-runner/builds/polaris/code/polarislib/polaris/runs/calibrate/mode_choice.py:146: DeprecationWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
  return df.groupby("person").apply(set_home_based).reset_index(drop=True)
/home/gitlab-runner/builds/polaris/code/polarislib/polaris/runs/calibrate/mode_choice.py:161: DeprecationWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
  return df.groupby("mode").apply(f).reset_index()
Traceback (most recent call last):
  File "/venv-py312/lib/python3.12/site-packages/pandas/io/sql.py", line 2674, in execute
    cur.execute(sql, *args)
sqlite3.OperationalError: no such table: link

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 168, in cache_all_available_metrics
    self.get_cached_kpi_value(m, skip_cache=skip_cache)
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 212, in get_cached_kpi_value
    generate()
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 205, in generate
    self.cache.set(kpi_name, self.get_kpi_value(kpi_name))
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 195, in get_kpi_value
    return self.__getattribute__(attr_name)()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/kpi_utils.py", line 73, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 950, in metric_validation_speed
    simulated, target = self._get_simulated_and_target_dict("speed_by_funcl")
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 739, in _get_simulated_and_target_dict
    simulated = speed_by_funcl.load_simulated(self.inputs, self.population_scale_factor)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/runs/calibrate/speed_by_funcl.py", line 42, in load_simulated
    vmt_vht_link = pd.concat([load_link_types(input_files.supply_db), vmt_vht], axis=1)
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/utils/database/db_utils.py", line 314, in load_link_types
    return pd.read_sql(
           ^^^^^^^^^^^^
  File "/venv-py312/lib/python3.12/site-packages/pandas/io/sql.py", line 706, in read_sql
    return pandas_sql.read_query(
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/venv-py312/lib/python3.12/site-packages/pandas/io/sql.py", line 2738, in read_query
    cursor = self.execute(sql, params)
             ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/venv-py312/lib/python3.12/site-packages/pandas/io/sql.py", line 2686, in execute
    raise ex from exc
pandas.errors.DatabaseError: Execution failed on sql '
                SELECT 2*link     as linknr,type,z.zone
                FROM link l, node n, zone z
                WHERE lanes_ab>0
                AND l.node_a = n.node AND n.zone = z.zone and l.type not in ('LIGHTRAIL', 'HEAVYRAIL', 'WALKWAY')
                 UNION
                SELECT (2*link+1) as linknr,type,z.zone
                FROM link l, node n, zone z
                WHERE lanes_ba>0
                AND l.node_a = n.node AND n.zone = z.zone and l.type not in ('LIGHTRAIL', 'HEAVYRAIL', 'WALKWAY')
                 ORDER BY linknr': no such table: link

Traceback (most recent call last):
  File "/venv-py312/lib/python3.12/site-packages/pandas/io/sql.py", line 2674, in execute
    cur.execute(sql, *args)
sqlite3.OperationalError: no such table: link

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 168, in cache_all_available_metrics
    self.get_cached_kpi_value(m, skip_cache=skip_cache)
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 212, in get_cached_kpi_value
    generate()
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 205, in generate
    self.cache.set(kpi_name, self.get_kpi_value(kpi_name))
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 195, in get_kpi_value
    return self.__getattribute__(attr_name)()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/kpi_utils.py", line 73, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/analyze/result_kpis.py", line 703, in metric_count_validation
    link_attrs = read_table("link", ScenarioCompression.maybe_extract(self.inputs.supply_db))
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/utils/database/db_utils.py", line 102, in read_table
    return pd.read_sql(f"SELECT * FROM {tablename};", conn, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/venv-py312/lib/python3.12/site-packages/pandas/io/sql.py", line 706, in read_sql
    return pandas_sql.read_query(
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/venv-py312/lib/python3.12/site-packages/pandas/io/sql.py", line 2738, in read_query
    cursor = self.execute(sql, params)
             ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/venv-py312/lib/python3.12/site-packages/pandas/io/sql.py", line 2686, in execute
    raise ex from exc
pandas.errors.DatabaseError: Execution failed on sql 'SELECT * FROM link;': no such table: link

Exception in thread Thread-5154 (static_async_fn):
Traceback (most recent call last):
  File "/usr/lib/python3.12/threading.py", line 1073, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.12/threading.py", line 1010, in run
    self._target(*self._args, **self._kwargs)
  File "/home/gitlab-runner/builds/polaris/code/polarislib/polaris/utils/logging_utils.py", line 35, in wrapper
    formatted_msg = msg.format(**args_dict)
                    ^^^^^^^^^^^^^^^^^^^^^^^
KeyError: 'current_iteration'

Total running time of the script: (0 minutes 52.676 seconds)

Gallery generated by Sphinx-Gallery