BenjaminIsaac0111 / daedalus

Daedalus is a novel dynamic spatial microsimulation prototype being developed at the Leeds Institute for Institute Data Analytics. Currently, the main goal is to a create a proof of concept component as part of the SPENSER (Synthetic Population Estimation and Scenario Projection Model) project. In this we hope to demonstrate a potential for a highly integrated system that allows users to produce (custom) population projections for policy intervention analysis.
MIT License
4 stars 2 forks source link

Key Error when running the run.py script. #15

Closed BenjaminIsaac0111 closed 3 years ago

BenjaminIsaac0111 commented 4 years ago

To reproduce, just run the run.py script. This will take a long time to debug so it may be worth trying to write a quick test?

I don't think it will be a hard issue to solve but I think I am just missing something - it seems to be something to do with the mortality rate table lookup. I think that some individuals can not be assigned a rate value based on their lookup key.

C:\Users\benja\miniconda3\envs\daedalus\python.exe C:/Users/benja/PycharmProjects/daedalus/scripts/run.py -c config\default_config.yaml
Start Population Size: 523115
Fetching rate table from catch persistent_data/mortality_rate_table.csv
Fetching rate table from catch persistent_data/fertility_rate_table.csv
Fetching rate table from catch persistent_data/emigration_rate_table.csv
Fetching rate table from catch persistent_data/immigration_rate_table.csv
2020-09-02 13:31:03.152 | DEBUG    | vivarium.framework.values:register_value_modifier:373 - Registering metrics.1.population_manager.metrics as modifier to metrics
2020-09-02 13:35:16.676 | DEBUG    | vivarium.framework.values:_register_value_producer:323 - Registering value pipeline fertility rate
2020-09-02 13:55:47.382 | DEBUG    | vivarium.framework.values:_register_value_producer:323 - Registering value pipeline mortality_rate
2020-09-02 14:45:08.042 | DEBUG    | vivarium.framework.values:_register_value_producer:323 - Registering value pipeline emigration_rate
2020-09-02 14:45:08.043 | DEBUG    | vivarium.framework.values:_register_value_producer:323 - Registering value pipeline metrics
2020-09-02 14:45:11.085 | DEBUG    | vivarium.framework.engine:step:140 - 2011-01-01 00:00:00
Traceback (most recent call last):
  File "C:/Users/benja/PycharmProjects/daedalus/scripts/run.py", line 95, in <module>
    main(configuration=utils.get_config())
  File "C:/Users/benja/PycharmProjects/daedalus/scripts/run.py", line 90, in main
    simulation.run_for(duration=pd.Timedelta(days=num_days))
  File "C:\Users\benja\miniconda3\envs\daedalus\lib\site-packages\vivarium\interface\interactive.py", line 94, in run_for
    return self.run_until(self._clock.time + duration, with_logging=with_logging)
  File "C:\Users\benja\miniconda3\envs\daedalus\lib\site-packages\vivarium\interface\interactive.py", line 116, in run_until
    self.take_steps(number_of_steps=iterations, with_logging=with_logging)
  File "C:\Users\benja\miniconda3\envs\daedalus\lib\site-packages\vivarium\interface\interactive.py", line 142, in take_steps
    self.step(step_size)
  File "C:\Users\benja\miniconda3\envs\daedalus\lib\site-packages\vivarium\interface\interactive.py", line 59, in step
    super().step()
  File "C:\Users\benja\miniconda3\envs\daedalus\lib\site-packages\vivarium\framework\engine.py", line 143, in step
    self.time_step_emitters[event](self._population.get_population(True).index)
  File "C:\Users\benja\miniconda3\envs\daedalus\lib\site-packages\vivarium\framework\lifecycle.py", line 360, in _wrapped
    return method.__func__(*args, **kwargs)
  File "C:\Users\benja\miniconda3\envs\daedalus\lib\site-packages\vivarium\framework\event.py", line 121, in emit
    listener(e)
  File "C:\Users\benja\PycharmProjects\vivarium_public_health_spenser\src\vivarium_public_health\population\mortality.py", line 53, in on_time_step
    prob_df = rate_to_probability(pd.DataFrame(self.mortality_rate(pop.index)))
  File "C:\Users\benja\miniconda3\envs\daedalus\lib\site-packages\vivarium\framework\values.py", line 225, in __call__
    return self._call(*args, skip_post_processor=skip_post_processor, **kwargs)
  File "C:\Users\benja\miniconda3\envs\daedalus\lib\site-packages\vivarium\framework\lifecycle.py", line 360, in _wrapped
    return method.__func__(*args, **kwargs)
  File "C:\Users\benja\miniconda3\envs\daedalus\lib\site-packages\vivarium\framework\values.py", line 232, in _call
    value = self.source(*args, **kwargs)
  File "C:\Users\benja\PycharmProjects\vivarium_public_health_spenser\src\vivarium_public_health\population\mortality.py", line 65, in calculate_mortality_rate
    mortality_rate = self.all_cause_mortality_rate(index)
  File "C:\Users\benja\miniconda3\envs\daedalus\lib\site-packages\vivarium\framework\lookup.py", line 211, in __call__
    return self._call(index)
  File "C:\Users\benja\miniconda3\envs\daedalus\lib\site-packages\vivarium\framework\lifecycle.py", line 360, in _wrapped
    return method.__func__(*args, **kwargs)
  File "C:\Users\benja\miniconda3\envs\daedalus\lib\site-packages\vivarium\framework\lookup.py", line 215, in _call
    table_view = self._table(index)
  File "C:\Users\benja\miniconda3\envs\daedalus\lib\site-packages\vivarium\framework\lookup.py", line 101, in __call__
    return self.interpolation(pop)
  File "C:\Users\benja\miniconda3\envs\daedalus\lib\site-packages\vivarium\interpolation.py", line 98, in __call__
    df = self.interpolations[key](sub_table)
KeyError: (1, 'E02002183', 2)

Process finished with exit code 1
kasra-hosseini commented 3 years ago

This should be solved now. Please reopen if the issue persists. The new repo:

https://github.com/alan-turing-institute/daedalus