vivarium-public-health 3.2.2__py3-none-any.whl → 4.0.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. vivarium_public_health/_version.py +1 -1
  2. vivarium_public_health/disease/model.py +2 -1
  3. vivarium_public_health/disease/special_disease.py +19 -15
  4. vivarium_public_health/disease/state.py +23 -14
  5. vivarium_public_health/disease/transition.py +7 -6
  6. vivarium_public_health/mslt/delay.py +13 -11
  7. vivarium_public_health/mslt/disease.py +24 -19
  8. vivarium_public_health/mslt/intervention.py +17 -9
  9. vivarium_public_health/mslt/magic_wand_components.py +15 -5
  10. vivarium_public_health/mslt/population.py +4 -1
  11. vivarium_public_health/population/add_new_birth_cohorts.py +8 -8
  12. vivarium_public_health/population/base_population.py +7 -6
  13. vivarium_public_health/population/mortality.py +8 -4
  14. vivarium_public_health/results/disability.py +1 -0
  15. vivarium_public_health/results/disease.py +3 -4
  16. vivarium_public_health/risks/base_risk.py +11 -12
  17. vivarium_public_health/risks/distributions.py +12 -11
  18. vivarium_public_health/risks/implementations/low_birth_weight_and_short_gestation.py +9 -9
  19. vivarium_public_health/treatment/magic_wand.py +2 -1
  20. vivarium_public_health/treatment/scale_up.py +1 -0
  21. vivarium_public_health/treatment/therapeutic_inertia.py +1 -1
  22. {vivarium_public_health-3.2.2.dist-info → vivarium_public_health-4.0.1.dist-info}/METADATA +3 -2
  23. {vivarium_public_health-3.2.2.dist-info → vivarium_public_health-4.0.1.dist-info}/RECORD +26 -26
  24. {vivarium_public_health-3.2.2.dist-info → vivarium_public_health-4.0.1.dist-info}/WHEEL +1 -1
  25. {vivarium_public_health-3.2.2.dist-info → vivarium_public_health-4.0.1.dist-info/licenses}/LICENSE.txt +0 -0
  26. {vivarium_public_health-3.2.2.dist-info → vivarium_public_health-4.0.1.dist-info}/top_level.txt +0 -0
@@ -1 +1 @@
1
- __version__ = "3.2.2"
1
+ __version__ = "4.0.1"
@@ -114,7 +114,8 @@ class DiseaseModel(Machine):
114
114
  builder.value.register_value_modifier(
115
115
  "cause_specific_mortality_rate",
116
116
  self.adjust_cause_specific_mortality_rate,
117
- requires_columns=["age", "sex"],
117
+ component=self,
118
+ required_resources=["age", "sex"],
118
119
  )
119
120
 
120
121
  def on_initialize_simulants(self, pop_data: SimulantData) -> None:
@@ -16,6 +16,7 @@ import pandas as pd
16
16
  from vivarium import Component
17
17
  from vivarium.framework.event import Event
18
18
  from vivarium.framework.population import SimulantData
19
+ from vivarium.framework.resource import Resource
19
20
  from vivarium.framework.values import list_combiner, union_post_processor
20
21
 
21
22
  from vivarium_public_health.disease.transition import TransitionString
@@ -123,12 +124,8 @@ class RiskAttributableDisease(Component):
123
124
  return ["alive"]
124
125
 
125
126
  @property
126
- def initialization_requirements(self) -> dict[str, list[str]]:
127
- return {
128
- "requires_columns": [],
129
- "requires_values": [f"{self.risk.name}.exposure"],
130
- "requires_streams": [],
131
- }
127
+ def initialization_requirements(self) -> list[str | Resource]:
128
+ return [self.exposure_pipeline]
132
129
 
133
130
  @property
134
131
  def state_names(self):
@@ -171,17 +168,21 @@ class RiskAttributableDisease(Component):
171
168
  self.disability_weight = builder.value.register_value_producer(
172
169
  f"{self.cause.name}.disability_weight",
173
170
  source=self.compute_disability_weight,
174
- requires_columns=get_lookup_columns(
171
+ component=self,
172
+ required_resources=get_lookup_columns(
175
173
  [self.lookup_tables["raw_disability_weight"]]
176
174
  ),
177
175
  )
178
176
  builder.value.register_value_modifier(
179
- "all_causes.disability_weight", modifier=self.disability_weight
177
+ "all_causes.disability_weight",
178
+ modifier=self.disability_weight,
179
+ component=self,
180
180
  )
181
181
  builder.value.register_value_modifier(
182
182
  "cause_specific_mortality_rate",
183
183
  self.adjust_cause_specific_mortality_rate,
184
- requires_columns=get_lookup_columns(
184
+ component=self,
185
+ required_resources=get_lookup_columns(
185
186
  [self.lookup_tables["cause_specific_mortality_rate"]]
186
187
  ),
187
188
  )
@@ -190,29 +191,32 @@ class RiskAttributableDisease(Component):
190
191
  self.excess_mortality_rate = builder.value.register_value_producer(
191
192
  self.excess_mortality_rate_pipeline_name,
192
193
  source=self.compute_excess_mortality_rate,
193
- requires_columns=get_lookup_columns(
194
+ component=self,
195
+ required_resources=get_lookup_columns(
194
196
  [self.lookup_tables["excess_mortality_rate"]]
195
- ),
196
- requires_values=[self.excess_mortality_rate_paf_pipeline_name],
197
+ )
198
+ + [self.joint_paf],
197
199
  )
198
200
  self.joint_paf = builder.value.register_value_producer(
199
201
  self.excess_mortality_rate_paf_pipeline_name,
200
202
  source=lambda idx: [self.lookup_tables["population_attributable_fraction"](idx)],
203
+ component=self,
201
204
  preferred_combiner=list_combiner,
202
205
  preferred_post_processor=union_post_processor,
203
206
  )
204
207
  builder.value.register_value_modifier(
205
208
  "mortality_rate",
206
209
  modifier=self.adjust_mortality_rate,
207
- requires_values=[self.excess_mortality_rate_pipeline_name],
210
+ component=self,
211
+ required_resources=[self.excess_mortality_rate],
208
212
  )
209
213
 
210
214
  distribution = builder.data.load(f"{self.risk}.distribution")
211
- exposure_pipeline = builder.value.get_value(f"{self.risk.name}.exposure")
215
+ self.exposure_pipeline = builder.value.get_value(f"{self.risk.name}.exposure")
212
216
  threshold = builder.configuration[self.name].threshold
213
217
 
214
218
  self.filter_by_exposure = self.get_exposure_filter(
215
- distribution, exposure_pipeline, threshold
219
+ distribution, self.exposure_pipeline, threshold
216
220
  )
217
221
 
218
222
  #################
@@ -15,6 +15,7 @@ import pandas as pd
15
15
  from vivarium.framework.engine import Builder
16
16
  from vivarium.framework.population import PopulationView, SimulantData
17
17
  from vivarium.framework.randomness import RandomnessStream
18
+ from vivarium.framework.resource import Resource
18
19
  from vivarium.framework.state_machine import State, Transient, Transition, Trigger
19
20
  from vivarium.framework.values import Pipeline, list_combiner, union_post_processor
20
21
  from vivarium.types import DataInput, LookupTableData
@@ -57,12 +58,8 @@ class BaseDiseaseState(State):
57
58
  return [self.model, "alive"]
58
59
 
59
60
  @property
60
- def initialization_requirements(self) -> dict[str, list[str]]:
61
- return {
62
- "requires_columns": [self.model],
63
- "requires_values": [],
64
- "requires_streams": [],
65
- }
61
+ def initialization_requirements(self) -> list[str | Resource]:
62
+ return [self.model]
66
63
 
67
64
  #####################
68
65
  # Lifecycle methods #
@@ -327,6 +324,10 @@ class DiseaseState(BaseDiseaseState):
327
324
  # Properties #
328
325
  ##############
329
326
 
327
+ @property
328
+ def initialization_requirements(self) -> list[str | Resource]:
329
+ return super().initialization_requirements + [self.randomness_prevalence]
330
+
330
331
  @property
331
332
  def configuration_defaults(self) -> dict[str, Any]:
332
333
  configuration_defaults = super().configuration_defaults
@@ -465,19 +466,22 @@ class DiseaseState(BaseDiseaseState):
465
466
  self.disability_weight = self.get_disability_weight_pipeline(builder)
466
467
 
467
468
  builder.value.register_value_modifier(
468
- "all_causes.disability_weight", modifier=self.disability_weight
469
+ "all_causes.disability_weight",
470
+ modifier=self.disability_weight,
471
+ component=self,
469
472
  )
470
473
 
471
474
  self.has_excess_mortality = is_non_zero(
472
475
  self.lookup_tables["excess_mortality_rate"].data
473
476
  )
474
- self.excess_mortality_rate = self.get_excess_mortality_rate_pipeline(builder)
475
477
  self.joint_paf = self.get_joint_paf(builder)
478
+ self.excess_mortality_rate = self.get_excess_mortality_rate_pipeline(builder)
476
479
 
477
480
  builder.value.register_value_modifier(
478
481
  "mortality_rate",
479
482
  modifier=self.adjust_mortality_rate,
480
- requires_values=[self.excess_mortality_rate_pipeline_name],
483
+ component=self,
484
+ required_resources=[self.excess_mortality_rate],
481
485
  )
482
486
 
483
487
  self.randomness_prevalence = self.get_randomness_prevalence(builder)
@@ -531,7 +535,8 @@ class DiseaseState(BaseDiseaseState):
531
535
  return builder.value.register_value_producer(
532
536
  f"{self.state_id}.dwell_time",
533
537
  source=self.lookup_tables["dwell_time"],
534
- requires_columns=required_columns,
538
+ component=self,
539
+ required_resources=required_columns,
535
540
  )
536
541
 
537
542
  def get_disability_weight_source(self, disability_weight: DataInput | None) -> DataInput:
@@ -556,7 +561,8 @@ class DiseaseState(BaseDiseaseState):
556
561
  return builder.value.register_value_producer(
557
562
  f"{self.state_id}.disability_weight",
558
563
  source=self.compute_disability_weight,
559
- requires_columns=lookup_columns + ["alive", self.model],
564
+ component=self,
565
+ required_resources=lookup_columns + ["alive", self.model],
560
566
  )
561
567
 
562
568
  def get_excess_mortality_rate_source(
@@ -583,8 +589,8 @@ class DiseaseState(BaseDiseaseState):
583
589
  return builder.value.register_rate_producer(
584
590
  self.excess_mortality_rate_pipeline_name,
585
591
  source=self.compute_excess_mortality_rate,
586
- requires_columns=lookup_columns + ["alive", self.model],
587
- requires_values=[self.excess_mortality_rate_paf_pipeline_name],
592
+ component=self,
593
+ required_resources=lookup_columns + ["alive", self.model, self.joint_paf],
588
594
  )
589
595
 
590
596
  def get_joint_paf(self, builder: Builder) -> Pipeline:
@@ -592,12 +598,15 @@ class DiseaseState(BaseDiseaseState):
592
598
  return builder.value.register_value_producer(
593
599
  self.excess_mortality_rate_paf_pipeline_name,
594
600
  source=lambda idx: [paf(idx)],
601
+ component=self,
595
602
  preferred_combiner=list_combiner,
596
603
  preferred_post_processor=union_post_processor,
597
604
  )
598
605
 
599
606
  def get_randomness_prevalence(self, builder: Builder) -> RandomnessStream:
600
- return builder.randomness.get_stream(f"{self.state_id}_prevalent_cases")
607
+ return builder.randomness.get_stream(
608
+ f"{self.state_id}_prevalent_cases", component=self
609
+ )
601
610
 
602
611
  ##################
603
612
  # Public methods #
@@ -129,19 +129,20 @@ class RateTransition(Transition):
129
129
  # noinspection PyAttributeOutsideInit
130
130
  def setup(self, builder: Builder) -> None:
131
131
  lookup_columns = get_lookup_columns([self.lookup_tables["transition_rate"]])
132
- self.transition_rate = builder.value.register_rate_producer(
133
- self.transition_rate_pipeline_name,
134
- source=self.compute_transition_rate,
135
- requires_columns=lookup_columns + ["alive"],
136
- requires_values=[f"{self.transition_rate_pipeline_name}.paf"],
137
- )
138
132
  paf = builder.lookup.build_table(0)
139
133
  self.joint_paf = builder.value.register_value_producer(
140
134
  f"{self.transition_rate_pipeline_name}.paf",
141
135
  source=lambda index: [paf(index)],
136
+ component=self,
142
137
  preferred_combiner=list_combiner,
143
138
  preferred_post_processor=union_post_processor,
144
139
  )
140
+ self.transition_rate = builder.value.register_rate_producer(
141
+ self.transition_rate_pipeline_name,
142
+ source=self.compute_transition_rate,
143
+ component=self,
144
+ required_resources=lookup_columns + ["alive", self.joint_paf],
145
+ )
145
146
 
146
147
  #################
147
148
  # Setup methods #
@@ -16,6 +16,7 @@ from vivarium import Component
16
16
  from vivarium.framework.engine import Builder
17
17
  from vivarium.framework.event import Event
18
18
  from vivarium.framework.population import SimulantData
19
+ from vivarium.framework.resource import Resource
19
20
 
20
21
 
21
22
  class DelayedRisk(Component):
@@ -111,12 +112,8 @@ class DelayedRisk(Component):
111
112
  return ["age", "sex", "population"]
112
113
 
113
114
  @property
114
- def initialization_requirements(self) -> dict[str, list[str]]:
115
- return {
116
- "requires_columns": ["age", "sex", "population"],
117
- "requires_values": [],
118
- "requires_streams": [],
119
- }
115
+ def initialization_requirements(self) -> list[str | Resource]:
116
+ return ["age", "sex", "population"]
120
117
 
121
118
  #####################
122
119
  # Lifecycle methods #
@@ -168,9 +165,11 @@ class DelayedRisk(Component):
168
165
  )
169
166
  inc_name = "{}.incidence".format(self.risk)
170
167
  inc_int_name = "{}_intervention.incidence".format(self.risk)
171
- self.incidence = builder.value.register_rate_producer(inc_name, source=inc_data)
168
+ self.incidence = builder.value.register_rate_producer(
169
+ inc_name, source=inc_data, component=self
170
+ )
172
171
  self.int_incidence = builder.value.register_rate_producer(
173
- inc_int_name, source=inc_data
172
+ inc_int_name, source=inc_data, component=self
174
173
  )
175
174
 
176
175
  # Load the remission rates for the BAU and intervention scenarios.
@@ -183,9 +182,11 @@ class DelayedRisk(Component):
183
182
  )
184
183
  rem_name = "{}.remission".format(self.risk)
185
184
  rem_int_name = "{}_intervention.remission".format(self.risk)
186
- self.remission = builder.value.register_rate_producer(rem_name, source=rem_data)
185
+ self.remission = builder.value.register_rate_producer(
186
+ rem_name, source=rem_data, component=self
187
+ )
187
188
  self.int_remission = builder.value.register_rate_producer(
188
- rem_int_name, source=rem_data
189
+ rem_int_name, source=rem_data, component=self
189
190
  )
190
191
 
191
192
  # We apply separate mortality rates to the different exposure bins.
@@ -255,6 +256,7 @@ class DelayedRisk(Component):
255
256
  source=builder.lookup.build_table(
256
257
  mortality_data, key_columns=["sex"], parameter_columns=["age", "year"]
257
258
  ),
259
+ component=self,
258
260
  )
259
261
 
260
262
  #################
@@ -312,7 +314,7 @@ class DelayedRisk(Component):
312
314
  for template in rate_templates:
313
315
  rate_name = template.format(disease)
314
316
  modifier = lambda ix, rate: self.incidence_adjustment(disease, ix, rate)
315
- builder.value.register_value_modifier(rate_name, modifier)
317
+ builder.value.register_value_modifier(rate_name, modifier, component=self)
316
318
 
317
319
  ########################
318
320
  # Event-driven methods #
@@ -16,6 +16,7 @@ from vivarium import Component
16
16
  from vivarium.framework.engine import Builder
17
17
  from vivarium.framework.event import Event
18
18
  from vivarium.framework.population import SimulantData
19
+ from vivarium.framework.resource import Resource
19
20
 
20
21
 
21
22
  class AcuteDisease(Component):
@@ -67,19 +68,23 @@ class AcuteDisease(Component):
67
68
  yld_data, key_columns=["sex"], parameter_columns=["age", "year"]
68
69
  )
69
70
  self.excess_mortality = builder.value.register_rate_producer(
70
- f"{self.disease}.excess_mortality", source=mty_rate
71
+ f"{self.disease}.excess_mortality", source=mty_rate, component=self
71
72
  )
72
73
  self.int_excess_mortality = builder.value.register_rate_producer(
73
- f"{self.disease}_intervention.excess_mortality", source=mty_rate
74
+ f"{self.disease}_intervention.excess_mortality", source=mty_rate, component=self
74
75
  )
75
76
  self.disability_rate = builder.value.register_rate_producer(
76
- f"{self.disease}.yld_rate", source=yld_rate
77
+ f"{self.disease}.yld_rate", source=yld_rate, component=self
77
78
  )
78
79
  self.int_disability_rate = builder.value.register_rate_producer(
79
- f"{self.disease}_intervention.yld_rate", source=yld_rate
80
+ f"{self.disease}_intervention.yld_rate", source=yld_rate, component=self
81
+ )
82
+ builder.value.register_value_modifier(
83
+ "mortality_rate", self.mortality_adjustment, component=self
84
+ )
85
+ builder.value.register_value_modifier(
86
+ "yld_rate", self.disability_adjustment, component=self
80
87
  )
81
- builder.value.register_value_modifier("mortality_rate", self.mortality_adjustment)
82
- builder.value.register_value_modifier("yld_rate", self.disability_adjustment)
83
88
 
84
89
  ##################################
85
90
  # Pipeline sources and modifiers #
@@ -164,12 +169,8 @@ class Disease(Component):
164
169
  return ["age", "sex"]
165
170
 
166
171
  @property
167
- def initialization_requirements(self) -> dict[str, list[str]]:
168
- return {
169
- "requires_columns": ["age", "sex"],
170
- "requires_values": [],
171
- "requires_streams": [],
172
- }
172
+ def initialization_requirements(self) -> list[str | Resource]:
173
+ return ["age", "sex"]
173
174
 
174
175
  def __init__(self, disease: str):
175
176
  super().__init__()
@@ -192,10 +193,10 @@ class Disease(Component):
192
193
  inc_data, key_columns=["sex"], parameter_columns=["age", "year"]
193
194
  )
194
195
  self.incidence = builder.value.register_rate_producer(
195
- bau_prefix + "incidence", source=i
196
+ bau_prefix + "incidence", source=i, component=self
196
197
  )
197
198
  self.incidence_intervention = builder.value.register_rate_producer(
198
- int_prefix + "incidence", source=i
199
+ int_prefix + "incidence", source=i, component=self
199
200
  )
200
201
 
201
202
  rem_data = builder.data.load(data_prefix + "remission")
@@ -203,7 +204,7 @@ class Disease(Component):
203
204
  rem_data, key_columns=["sex"], parameter_columns=["age", "year"]
204
205
  )
205
206
  self.remission = builder.value.register_rate_producer(
206
- bau_prefix + "remission", source=r
207
+ bau_prefix + "remission", source=r, component=self
207
208
  )
208
209
 
209
210
  mty_data = builder.data.load(data_prefix + "mortality")
@@ -211,7 +212,7 @@ class Disease(Component):
211
212
  mty_data, key_columns=["sex"], parameter_columns=["age", "year"]
212
213
  )
213
214
  self.excess_mortality = builder.value.register_rate_producer(
214
- bau_prefix + "excess_mortality", source=f
215
+ bau_prefix + "excess_mortality", source=f, component=self
215
216
  )
216
217
 
217
218
  yld_data = builder.data.load(data_prefix + "morbidity")
@@ -219,7 +220,7 @@ class Disease(Component):
219
220
  yld_data, key_columns=["sex"], parameter_columns=["age", "year"]
220
221
  )
221
222
  self.disability_rate = builder.value.register_rate_producer(
222
- bau_prefix + "yld_rate", source=yld_rate
223
+ bau_prefix + "yld_rate", source=yld_rate, component=self
223
224
  )
224
225
 
225
226
  prev_data = builder.data.load(data_prefix + "prevalence")
@@ -227,8 +228,12 @@ class Disease(Component):
227
228
  prev_data, key_columns=["sex"], parameter_columns=["age", "year"]
228
229
  )
229
230
 
230
- builder.value.register_value_modifier("mortality_rate", self.mortality_adjustment)
231
- builder.value.register_value_modifier("yld_rate", self.disability_adjustment)
231
+ builder.value.register_value_modifier(
232
+ "mortality_rate", self.mortality_adjustment, component=self
233
+ )
234
+ builder.value.register_value_modifier(
235
+ "yld_rate", self.disability_adjustment, component=self
236
+ )
232
237
 
233
238
  ########################
234
239
  # Event-driven methods #
@@ -44,7 +44,9 @@ class ModifyAllCauseMortality(Component):
44
44
  self.scale = self.config.intervention[self.intervention]["scale"]
45
45
  if self.scale < 0:
46
46
  raise ValueError("Invalid scale: {}".format(self.scale))
47
- builder.value.register_value_modifier("mortality_rate", self.mortality_adjustment)
47
+ builder.value.register_value_modifier(
48
+ "mortality_rate", self.mortality_adjustment, component=self
49
+ )
48
50
 
49
51
  ##################################
50
52
  # Pipeline sources and modifiers #
@@ -89,7 +91,7 @@ class ModifyDiseaseRate(Component):
89
91
  if self.scale < 0:
90
92
  raise ValueError("Invalid scale: {}".format(self.scale))
91
93
  rate_name = "{}_intervention.{}".format(self.disease, self.rate)
92
- builder.value.register_value_modifier(rate_name, self.adjust_rate)
94
+ builder.value.register_value_modifier(rate_name, self.adjust_rate, component=self)
93
95
 
94
96
  ##################################
95
97
  # Pipeline sources and modifiers #
@@ -167,9 +169,9 @@ class ModifyAcuteDiseaseIncidence(Component):
167
169
  if self.scale < 0:
168
170
  raise ValueError("Invalid incidence scale: {}".format(self.scale))
169
171
  yld_rate = "{}_intervention.yld_rate".format(self.intervention)
170
- builder.value.register_value_modifier(yld_rate, self.rate_adjustment)
172
+ builder.value.register_value_modifier(yld_rate, self.rate_adjustment, component=self)
171
173
  mort_rate = "{}_intervention.excess_mortality".format(self.intervention)
172
- builder.value.register_value_modifier(mort_rate, self.rate_adjustment)
174
+ builder.value.register_value_modifier(mort_rate, self.rate_adjustment, component=self)
173
175
 
174
176
  ##################################
175
177
  # Pipeline sources and modifiers #
@@ -210,7 +212,9 @@ class ModifyAcuteDiseaseMorbidity(Component):
210
212
  if self.scale < 0:
211
213
  raise ValueError("Invalid YLD scale: {}".format(self.scale))
212
214
  rate = "{}_intervention.yld_rate".format(self.intervention)
213
- builder.value.register_value_modifier(rate, self.disability_adjustment)
215
+ builder.value.register_value_modifier(
216
+ rate, self.disability_adjustment, component=self
217
+ )
214
218
 
215
219
  ##################################
216
220
  # Pipeline sources and modifiers #
@@ -251,7 +255,7 @@ class ModifyAcuteDiseaseMortality(Component):
251
255
  if self.scale < 0:
252
256
  raise ValueError("Invalid mortality scale: {}".format(self.scale))
253
257
  rate = "{}_intervention.excess_mortality".format(self.intervention)
254
- builder.value.register_value_modifier(rate, self.mortality_adjustment)
258
+ builder.value.register_value_modifier(rate, self.mortality_adjustment, component=self)
255
259
 
256
260
  ##################################
257
261
  # Pipeline sources and modifiers #
@@ -288,7 +292,7 @@ class TobaccoFreeGeneration(Component):
288
292
  self.year = builder.configuration["tobacco_free_generation"].year
289
293
  self.clock = builder.time.clock()
290
294
  rate_name = "{}_intervention.incidence".format(self.exposure)
291
- builder.value.register_value_modifier(rate_name, self.adjust_rate)
295
+ builder.value.register_value_modifier(rate_name, self.adjust_rate, component=self)
292
296
 
293
297
  ##################################
294
298
  # Pipeline sources and modifiers #
@@ -329,9 +333,13 @@ class TobaccoEradication(Component):
329
333
  self.year = builder.configuration["tobacco_eradication"].year
330
334
  self.clock = builder.time.clock()
331
335
  inc_rate_name = "{}_intervention.incidence".format(self.exposure)
332
- builder.value.register_value_modifier(inc_rate_name, self.adjust_inc_rate)
336
+ builder.value.register_value_modifier(
337
+ inc_rate_name, self.adjust_inc_rate, component=self
338
+ )
333
339
  rem_rate_name = "{}_intervention.remission".format(self.exposure)
334
- builder.value.register_value_modifier(rem_rate_name, self.adjust_rem_rate)
340
+ builder.value.register_value_modifier(
341
+ rem_rate_name, self.adjust_rem_rate, component=self
342
+ )
335
343
 
336
344
  ##################################
337
345
  # Pipeline sources and modifiers #
@@ -20,7 +20,9 @@ class MortalityShift(Component):
20
20
  #####################
21
21
 
22
22
  def setup(self, builder: Builder) -> None:
23
- builder.value.register_value_modifier("mortality_rate", self.mortality_adjustment)
23
+ builder.value.register_value_modifier(
24
+ "mortality_rate", self.mortality_adjustment, component=self
25
+ )
24
26
 
25
27
  ##################################
26
28
  # Pipeline sources and modifiers #
@@ -36,7 +38,9 @@ class YLDShift(Component):
36
38
  #####################
37
39
 
38
40
  def setup(self, builder: Builder) -> None:
39
- builder.value.register_value_modifier("yld_rate", self.disability_adjustment)
41
+ builder.value.register_value_modifier(
42
+ "yld_rate", self.disability_adjustment, component=self
43
+ )
40
44
 
41
45
  ##################################
42
46
  # Pipeline sources and modifiers #
@@ -56,7 +60,9 @@ class IncidenceShift(Component):
56
60
 
57
61
  def setup(self, builder: Builder) -> None:
58
62
  builder.value.register_value_modifier(
59
- f"{self.disease}_intervention.incidence", self.incidence_adjustment
63
+ f"{self.disease}_intervention.incidence",
64
+ self.incidence_adjustment,
65
+ component=self,
60
66
  )
61
67
 
62
68
  ##################################
@@ -95,7 +101,9 @@ class ModifyAcuteDiseaseYLD(Component):
95
101
  if self.scale < 0:
96
102
  raise ValueError(f"Invalid YLD scale: {self.scale}")
97
103
  builder.value.register_value_modifier(
98
- f"{self.disease}_intervention.yld_rate", self.disability_adjustment
104
+ f"{self.disease}_intervention.yld_rate",
105
+ self.disability_adjustment,
106
+ component=self,
99
107
  )
100
108
 
101
109
  ##################################
@@ -134,7 +142,9 @@ class ModifyAcuteDiseaseMortality(Component):
134
142
  if self.scale < 0:
135
143
  raise ValueError(f"Invalid mortality scale: {self.scale}")
136
144
  builder.value.register_value_modifier(
137
- f"{self.disease}_intervention.excess_mortality", self.mortality_adjustment
145
+ f"{self.disease}_intervention.excess_mortality",
146
+ self.mortality_adjustment,
147
+ component=self,
138
148
  )
139
149
 
140
150
  ##################################
@@ -146,6 +146,7 @@ class Mortality(Component):
146
146
  source=builder.lookup.build_table(
147
147
  mortality_data, key_columns=["sex"], parameter_columns=["age", "year"]
148
148
  ),
149
+ component=self,
149
150
  )
150
151
 
151
152
  ########################
@@ -208,7 +209,9 @@ class Disability(Component):
208
209
  yld_rate = builder.lookup.build_table(
209
210
  yld_data, key_columns=["sex"], parameter_columns=["age", "year"]
210
211
  )
211
- self.yld_rate = builder.value.register_rate_producer("yld_rate", source=yld_rate)
212
+ self.yld_rate = builder.value.register_rate_producer(
213
+ "yld_rate", source=yld_rate, component=self
214
+ )
212
215
 
213
216
  ########################
214
217
  # Event-driven methods #
@@ -13,6 +13,7 @@ from vivarium import Component
13
13
  from vivarium.framework.engine import Builder
14
14
  from vivarium.framework.event import Event
15
15
  from vivarium.framework.population import SimulantData
16
+ from vivarium.framework.resource import Resource
16
17
 
17
18
  from vivarium_public_health import utilities
18
19
  from vivarium_public_health.population.data_transformations import get_live_births_per_year
@@ -164,12 +165,8 @@ class FertilityAgeSpecificRates(Component):
164
165
  return ["sex"]
165
166
 
166
167
  @property
167
- def initialization_requirements(self) -> dict[str, list[str]]:
168
- return {
169
- "requires_columns": ["sex"],
170
- "requires_values": [],
171
- "requires_streams": [],
172
- }
168
+ def initialization_requirements(self) -> list[str | Resource]:
169
+ return ["sex"]
173
170
 
174
171
  #####################
175
172
  # Lifecycle methods #
@@ -188,10 +185,13 @@ class FertilityAgeSpecificRates(Component):
188
185
  age_specific_fertility_rate, parameter_columns=["age", "year"]
189
186
  )
190
187
  self.fertility_rate = builder.value.register_rate_producer(
191
- "fertility rate", source=fertility_rate, requires_columns=["age"]
188
+ "fertility rate",
189
+ source=fertility_rate,
190
+ component=self,
191
+ required_resources=["age"],
192
192
  )
193
193
 
194
- self.randomness = builder.randomness.get_stream("fertility")
194
+ self.randomness = builder.randomness.get_stream("fertility", component=self)
195
195
  self.simulant_creator = builder.population.get_simulant_creator()
196
196
 
197
197
  #################
@@ -88,18 +88,19 @@ class BasePopulation(Component):
88
88
  # Setup methods #
89
89
  #################
90
90
 
91
- @staticmethod
92
- def get_randomness_streams(builder: Builder) -> dict[str, RandomnessStream]:
91
+ def get_randomness_streams(self, builder: Builder) -> dict[str, RandomnessStream]:
93
92
  return {
94
- "general_purpose": builder.randomness.get_stream("population_generation"),
93
+ "general_purpose": builder.randomness.get_stream(
94
+ "population_generation", component=self
95
+ ),
95
96
  "bin_selection": builder.randomness.get_stream(
96
- "bin_selection", initializes_crn_attributes=True
97
+ "bin_selection", component=self, initializes_crn_attributes=True
97
98
  ),
98
99
  "age_smoothing": builder.randomness.get_stream(
99
- "age_smoothing", initializes_crn_attributes=True
100
+ "age_smoothing", component=self, initializes_crn_attributes=True
100
101
  ),
101
102
  "age_smoothing_age_bounds": builder.randomness.get_stream(
102
- "age_smoothing_age_bounds", initializes_crn_attributes=True
103
+ "age_smoothing_age_bounds", component=self, initializes_crn_attributes=True
103
104
  ),
104
105
  }
105
106
 
@@ -162,13 +162,14 @@ class Mortality(Component):
162
162
  # Setup methods #
163
163
  #################
164
164
 
165
- def get_randomness_stream(self, builder) -> RandomnessStream:
166
- return builder.randomness.get_stream(self._randomness_stream_name)
165
+ def get_randomness_stream(self, builder: Builder) -> RandomnessStream:
166
+ return builder.randomness.get_stream(self._randomness_stream_name, component=self)
167
167
 
168
168
  def get_cause_specific_mortality_rate(self, builder: Builder) -> Pipeline:
169
169
  return builder.value.register_value_producer(
170
170
  self.cause_specific_mortality_rate_pipeline_name,
171
171
  source=builder.lookup.build_table(0),
172
+ component=self,
172
173
  )
173
174
 
174
175
  def get_mortality_rate(self, builder: Builder) -> Pipeline:
@@ -181,7 +182,8 @@ class Mortality(Component):
181
182
  return builder.value.register_rate_producer(
182
183
  self.mortality_rate_pipeline_name,
183
184
  source=self.calculate_mortality_rate,
184
- requires_columns=required_columns,
185
+ component=self,
186
+ required_resources=required_columns,
185
187
  )
186
188
 
187
189
  def load_unmodeled_csmr(self, builder: Builder) -> float | pd.DataFrame:
@@ -202,7 +204,8 @@ class Mortality(Component):
202
204
  return builder.value.register_value_producer(
203
205
  self.unmodeled_csmr_pipeline_name,
204
206
  source=self.get_unmodeled_csmr_source,
205
- requires_columns=required_columns,
207
+ component=self,
208
+ required_resources=required_columns,
206
209
  )
207
210
 
208
211
  def get_unmodeled_csmr_paf(self, builder: Builder) -> Pipeline:
@@ -210,6 +213,7 @@ class Mortality(Component):
210
213
  return builder.value.register_value_producer(
211
214
  self.unmodeled_csmr_paf_pipeline_name,
212
215
  source=lambda index: [unmodeled_csmr_paf(index)],
216
+ component=self,
213
217
  preferred_combiner=list_combiner,
214
218
  preferred_post_processor=union_post_processor,
215
219
  )
@@ -175,6 +175,7 @@ class DisabilityObserver(PublicHealthObserver):
175
175
  return builder.value.register_value_producer(
176
176
  self.disability_weight_pipeline_name,
177
177
  source=lambda index: [pd.Series(0.0, index=index)],
178
+ component=self,
178
179
  preferred_combiner=list_combiner,
179
180
  preferred_post_processor=union_post_processor,
180
181
  )
@@ -15,6 +15,7 @@ from layered_config_tree import LayeredConfigTree
15
15
  from vivarium.framework.engine import Builder
16
16
  from vivarium.framework.event import Event
17
17
  from vivarium.framework.population import SimulantData
18
+ from vivarium.framework.resource import Resource
18
19
 
19
20
  from vivarium_public_health.results.columns import COLUMNS
20
21
  from vivarium_public_health.results.observer import PublicHealthObserver
@@ -89,11 +90,9 @@ class DiseaseObserver(PublicHealthObserver):
89
90
  return [self.disease]
90
91
 
91
92
  @property
92
- def initialization_requirements(self) -> dict[str, list[str]]:
93
+ def initialization_requirements(self) -> list[str | Resource]:
93
94
  """Requirements for observer initialization."""
94
- return {
95
- "requires_columns": [self.disease],
96
- }
95
+ return [self.disease]
97
96
 
98
97
  #####################
99
98
  # Lifecycle methods #
@@ -16,6 +16,7 @@ from vivarium.framework.engine import Builder
16
16
  from vivarium.framework.event import Event
17
17
  from vivarium.framework.population import SimulantData
18
18
  from vivarium.framework.randomness import RandomnessStream
19
+ from vivarium.framework.resource import Resource
19
20
  from vivarium.framework.values import Pipeline
20
21
 
21
22
  from vivarium_public_health.risks.data_transformations import get_exposure_post_processor
@@ -129,12 +130,8 @@ class Risk(Component):
129
130
  return columns_to_create
130
131
 
131
132
  @property
132
- def initialization_requirements(self) -> dict[str, list[str]]:
133
- return {
134
- "requires_columns": [],
135
- "requires_values": [],
136
- "requires_streams": [self.randomness_stream_name],
137
- }
133
+ def initialization_requirements(self) -> list[str | Resource]:
134
+ return [self.randomness]
138
135
 
139
136
  #####################
140
137
  # Lifecycle methods #
@@ -250,7 +247,7 @@ class Risk(Component):
250
247
  return exposure_distribution
251
248
 
252
249
  def get_randomness_stream(self, builder: Builder) -> RandomnessStream:
253
- return builder.randomness.get_stream(self.randomness_stream_name)
250
+ return builder.randomness.get_stream(self.randomness_stream_name, component=self)
254
251
 
255
252
  def get_propensity_pipeline(self, builder: Builder) -> Pipeline:
256
253
  return builder.value.register_value_producer(
@@ -260,7 +257,8 @@ class Risk(Component):
260
257
  .get(index)
261
258
  .squeeze(axis=1)
262
259
  ),
263
- requires_columns=[self.propensity_column_name],
260
+ component=self,
261
+ required_resources=[self.propensity_column_name],
264
262
  )
265
263
 
266
264
  def get_exposure_pipeline(self, builder: Builder) -> Pipeline:
@@ -270,10 +268,11 @@ class Risk(Component):
270
268
  return builder.value.register_value_producer(
271
269
  self.exposure_pipeline_name,
272
270
  source=self.get_current_exposure,
273
- requires_columns=required_columns,
274
- requires_values=[
275
- self.propensity_pipeline_name,
276
- self.exposure_distribution.parameters_pipeline_name,
271
+ component=self,
272
+ required_resources=required_columns
273
+ + [
274
+ self.propensity,
275
+ self.exposure_distribution.exposure_parameters,
277
276
  ],
278
277
  preferred_post_processor=get_exposure_post_processor(builder, self.name),
279
278
  )
@@ -18,6 +18,7 @@ from layered_config_tree import LayeredConfigTree
18
18
  from vivarium import Component
19
19
  from vivarium.framework.engine import Builder
20
20
  from vivarium.framework.population import SimulantData
21
+ from vivarium.framework.resource import Resource
21
22
  from vivarium.framework.values import Pipeline, list_combiner, union_post_processor
22
23
 
23
24
  from vivarium_public_health.risks.data_transformations import pivot_categorical
@@ -96,12 +97,8 @@ class EnsembleDistribution(RiskExposureDistribution):
96
97
  return [self._propensity]
97
98
 
98
99
  @property
99
- def initialization_requirements(self) -> dict[str, list[str]]:
100
- return {
101
- "requires_columns": [],
102
- "requires_values": [],
103
- "requires_streams": [self._propensity],
104
- }
100
+ def initialization_requirements(self) -> list[str | Resource]:
101
+ return [self.randomness]
105
102
 
106
103
  #####################
107
104
  # Lifecycle methods #
@@ -159,7 +156,7 @@ class EnsembleDistribution(RiskExposureDistribution):
159
156
 
160
157
  def setup(self, builder: Builder) -> None:
161
158
  super().setup(builder)
162
- self.randomness = builder.randomness.get_stream(self._propensity)
159
+ self.randomness = builder.randomness.get_stream(self._propensity, component=self)
163
160
 
164
161
  def get_exposure_parameter_pipeline(self, builder: Builder) -> Pipeline:
165
162
  # This pipeline is not needed for ensemble distributions, so just
@@ -170,7 +167,7 @@ class EnsembleDistribution(RiskExposureDistribution):
170
167
  )
171
168
 
172
169
  return builder.value.register_value_producer(
173
- self.parameters_pipeline_name, lambda *_: raise_not_implemented()
170
+ self.parameters_pipeline_name, lambda *_: raise_not_implemented(), component=self
174
171
  )
175
172
 
176
173
  ########################
@@ -245,7 +242,8 @@ class ContinuousDistribution(RiskExposureDistribution):
245
242
  return builder.value.register_value_producer(
246
243
  self.parameters_pipeline_name,
247
244
  source=self.lookup_tables["parameters"],
248
- requires_columns=get_lookup_columns([self.lookup_tables["parameters"]]),
245
+ component=self,
246
+ required_resources=get_lookup_columns([self.lookup_tables["parameters"]]),
249
247
  )
250
248
 
251
249
  ##################
@@ -296,7 +294,8 @@ class PolytomousDistribution(RiskExposureDistribution):
296
294
  return builder.value.register_value_producer(
297
295
  self.parameters_pipeline_name,
298
296
  source=self.lookup_tables["exposure"],
299
- requires_columns=get_lookup_columns([self.lookup_tables["exposure"]]),
297
+ component=self,
298
+ required_resources=get_lookup_columns([self.lookup_tables["exposure"]]),
300
299
  )
301
300
 
302
301
  ##################
@@ -385,6 +384,7 @@ class DichotomousDistribution(RiskExposureDistribution):
385
384
  self.joint_paf = builder.value.register_value_producer(
386
385
  f"{self.risk}.exposure_parameters.paf",
387
386
  source=lambda index: [self.lookup_tables["paf"](index)],
387
+ component=self,
388
388
  preferred_combiner=list_combiner,
389
389
  preferred_post_processor=union_post_processor,
390
390
  )
@@ -393,7 +393,8 @@ class DichotomousDistribution(RiskExposureDistribution):
393
393
  return builder.value.register_value_producer(
394
394
  f"{self.risk}.exposure_parameters",
395
395
  source=self.exposure_parameter_source,
396
- requires_columns=get_lookup_columns([self.lookup_tables["exposure"]]),
396
+ component=self,
397
+ required_resources=get_lookup_columns([self.lookup_tables["exposure"]]),
397
398
  )
398
399
 
399
400
  ##############
@@ -17,6 +17,7 @@ import pandas as pd
17
17
  from vivarium.framework.engine import Builder
18
18
  from vivarium.framework.lifecycle import LifeCycleError
19
19
  from vivarium.framework.population import SimulantData
20
+ from vivarium.framework.resource import Resource
20
21
  from vivarium.framework.values import Pipeline
21
22
 
22
23
  from vivarium_public_health.risks import Risk, RiskEffect
@@ -202,6 +203,9 @@ class LBWSGRisk(Risk):
202
203
  @property
203
204
  def configuration_defaults(self) -> dict[str, Any]:
204
205
  configuration_defaults = super().configuration_defaults
206
+ configuration_defaults[self.name]["data_sources"][
207
+ "exposure"
208
+ ] = f"{self.risk}.birth_exposure"
205
209
  configuration_defaults[self.name]["distribution_type"] = "lbwsg"
206
210
  return configuration_defaults
207
211
 
@@ -242,8 +246,8 @@ class LBWSGRisk(Risk):
242
246
  return builder.value.register_value_producer(
243
247
  self.birth_exposure_pipeline_name(axis_),
244
248
  source=lambda index: self.get_birth_exposure(axis_, index),
245
- requires_columns=required_columns,
246
- requires_streams=[self.randomness_stream_name],
249
+ component=self,
250
+ required_resources=required_columns + [self.randomness],
247
251
  preferred_post_processor=get_exposure_post_processor(builder, self.name),
248
252
  )
249
253
 
@@ -300,12 +304,8 @@ class LBWSGRiskEffect(RiskEffect):
300
304
  return ["age", "sex"] + self.lbwsg_exposure_column_names
301
305
 
302
306
  @property
303
- def initialization_requirements(self) -> dict[str, list[str]]:
304
- return {
305
- "requires_columns": ["sex"] + self.lbwsg_exposure_column_names,
306
- "requires_values": [],
307
- "requires_streams": [],
308
- }
307
+ def initialization_requirements(self) -> list[str | Resource]:
308
+ return ["sex"] + self.lbwsg_exposure_column_names
309
309
 
310
310
  @property
311
311
  def rr_column_names(self) -> list[str]:
@@ -366,7 +366,7 @@ class LBWSGRiskEffect(RiskEffect):
366
366
  self.target_pipeline_name,
367
367
  modifier=self.adjust_target,
368
368
  component=self,
369
- requires_values=[self.relative_risk_pipeline_name],
369
+ required_resources=[self.relative_risk],
370
370
  )
371
371
 
372
372
  def get_age_intervals(self, builder: Builder) -> dict[str, pd.Interval]:
@@ -52,7 +52,8 @@ class AbsoluteShift(Component):
52
52
  builder.value.register_value_modifier(
53
53
  f"{self.target.name}.{self.target.measure}",
54
54
  modifier=self.intervention_effect,
55
- requires_columns=["age"],
55
+ component=self,
56
+ required_resources=["age"],
56
57
  )
57
58
 
58
59
  ##################################
@@ -145,6 +145,7 @@ class LinearScaleUp(Component):
145
145
  builder.value.register_value_modifier(
146
146
  f"{self.treatment}.exposure_parameters",
147
147
  modifier=self.coverage_effect,
148
+ component=self,
148
149
  )
149
150
 
150
151
  ##################################
@@ -46,7 +46,7 @@ class TherapeuticInertia(Component):
46
46
  self._therapeutic_inertia = self.initialize_therapeutic_inertia(builder)
47
47
  ti_source = lambda index: pd.Series(self._therapeutic_inertia, index=index)
48
48
  self.therapeutic_inertia = builder.value.register_value_producer(
49
- "therapeutic_inertia", source=ti_source
49
+ "therapeutic_inertia", source=ti_source, component=self
50
50
  )
51
51
 
52
52
  #################
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: vivarium_public_health
3
- Version: 3.2.2
3
+ Version: 4.0.1
4
4
  Summary: Components for modelling diseases, risks, and interventions with ``vivarium``
5
5
  Home-page: https://github.com/ihmeuw/vivarium_public_health
6
6
  Author: The vivarium developers
@@ -70,6 +70,7 @@ Dynamic: classifier
70
70
  Dynamic: description
71
71
  Dynamic: home-page
72
72
  Dynamic: license
73
+ Dynamic: license-file
73
74
  Dynamic: provides-extra
74
75
  Dynamic: requires-dist
75
76
  Dynamic: summary
@@ -1,50 +1,50 @@
1
1
  vivarium_public_health/__about__.py,sha256=RgWycPypKZS80TpSX7o41cREnG8PfguNHDHLuLyl820,487
2
2
  vivarium_public_health/__init__.py,sha256=GDeeP-7OlCBwPuv_xQoB1wNmvCaFsqfTB7qnnYApm0w,1343
3
- vivarium_public_health/_version.py,sha256=OJQIBNbQHrD-7P_K3hC3uL5U-npkRV8MuTvtRrG4OZw,22
3
+ vivarium_public_health/_version.py,sha256=v4mcX8QEz7plObRyvTdDblE04TUjya-nJkDSAikxv9Y,22
4
4
  vivarium_public_health/utilities.py,sha256=QNXQ6fhAr1HcV-GwKw7wQLz6QyuNxqNvMA-XujKjTgs,3035
5
5
  vivarium_public_health/disease/__init__.py,sha256=VUJHDLlE6ngo2qHNQUtZ8OWH5H_T7_ao-xsYKDkRmHw,443
6
6
  vivarium_public_health/disease/exceptions.py,sha256=vb30IIV82OiDf2cNZCs_E2rF6mdDDHbnZSND60no5CU,97
7
- vivarium_public_health/disease/model.py,sha256=qA0mhbIL0rfPtJ1Csmvxvf757vUdrjcbpxYmL_dsniI,9175
7
+ vivarium_public_health/disease/model.py,sha256=RyvQ2I4dF6IMUcCL7IEsGccc3qu9V6o30gcYrb38GoU,9205
8
8
  vivarium_public_health/disease/models.py,sha256=01UK7yB2zGPFzmlIpvhd-XnGe6vSCMDza3QTidgY7Nc,3479
9
- vivarium_public_health/disease/special_disease.py,sha256=kTVuE5rQjUK62ysComG8nB2f61aCKdca9trRB1zsDCQ,14537
10
- vivarium_public_health/disease/state.py,sha256=l1iBZl8IpNOegQjZIY2xq09SBhsn5jSoYD89CymJAUs,28309
11
- vivarium_public_health/disease/transition.py,sha256=qRpHzq29S_I_KzyDncAahg27bnHNdrA5tsUWuJ4Zty4,8964
9
+ vivarium_public_health/disease/special_disease.py,sha256=4tGfnXSVuNYsA7izX9y81ByJe46c4h293szVt7AyPMA,14605
10
+ vivarium_public_health/disease/state.py,sha256=ptcNETOo8a0NRXOdUhZMgCJa2h3Pt5ZElhMOKonkD4c,28560
11
+ vivarium_public_health/disease/transition.py,sha256=jwtg0m03zoFiuwFE-WQFXR1F_E-ridsZ7Og_i-J2Q4E,8963
12
12
  vivarium_public_health/mslt/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
- vivarium_public_health/mslt/delay.py,sha256=TrFp9nmv-PSu6xdQXfyeM4X8RrXTLUnQMxOuhdvD-Wk,22787
14
- vivarium_public_health/mslt/disease.py,sha256=DONSItBiOUk1qBE6Msw0vrV0XLW4BPzWVxwVK90GK1I,16638
15
- vivarium_public_health/mslt/intervention.py,sha256=jgzyDYEypsJDlKeLHDDqcgiwiCTA31VIz7_keS-Jww4,10325
16
- vivarium_public_health/mslt/magic_wand_components.py,sha256=TUh0fJ6FLZz0qiknOQAD3T7pZN9GWjGDmtNC6Fnhd9E,3975
13
+ vivarium_public_health/mslt/delay.py,sha256=_neQ8oL2IhCqH0hiM4Od4Eb8NfYjyjSoniq02PFieTw,22872
14
+ vivarium_public_health/mslt/disease.py,sha256=Kwy7cDqiE9yYCsLV_7pAP7ZOe7GWVHUBe39a-GOInVU,16867
15
+ vivarium_public_health/mslt/intervention.py,sha256=8saXJ1yP8nUFQDZH7T2hrIlw9aR-a_RimwIoaCA93GA,10557
16
+ vivarium_public_health/mslt/magic_wand_components.py,sha256=p3o0BFG6cILJ1gqmZ5NPJ1cbC19trVMwGPsy1eUazKg,4174
17
17
  vivarium_public_health/mslt/observer.py,sha256=r0XqDIGrSO0BjlU1uCeFenuz-NRfpLMtug24LLg60g4,15178
18
- vivarium_public_health/mslt/population.py,sha256=LnN9ch_FoPGNbKeIT5BaEFfeAn5itZgZ0q_ZEaZTJEI,7211
18
+ vivarium_public_health/mslt/population.py,sha256=wU7uSFmRkV4spLMy-j4IOBHwxAr9rM7AUgWgxA1YRKQ,7277
19
19
  vivarium_public_health/plugins/__init__.py,sha256=oBW_zfgG_LbwfgTDjUe0btfy9FaDvAbtXho1zQFnz0Y,76
20
20
  vivarium_public_health/plugins/parser.py,sha256=WoUisq0d-PfJtSzKYZ6C-s-fYdQpNiRBE14vKaYE27Y,32921
21
21
  vivarium_public_health/population/__init__.py,sha256=x_9rB93q64Krw-kbBDI1-_U_JsPO1_QrL03AwiFlwXI,243
22
- vivarium_public_health/population/add_new_birth_cohorts.py,sha256=Xc3NukpbZQpXCtGJsaaN4_arSjOMZ1YJHGyAVTUhGjU,9034
23
- vivarium_public_health/population/base_population.py,sha256=f7eDqqP0Nxj2W0Q9fwSh_GcN1wzoaQPr--iX8QIV-sE,18827
22
+ vivarium_public_health/population/add_new_birth_cohorts.py,sha256=x6A60GE_F3I8AgLABNJ-2ziiUj52lAd66uX5yc2vIDI,9038
23
+ vivarium_public_health/population/base_population.py,sha256=kBE0WVSV0aElTJNBmOBqowZlsjhDfnFn2IzNxb3X8CA,18909
24
24
  vivarium_public_health/population/data_transformations.py,sha256=yxuZuKZt-s8X6XPULbKWXn2w3kAmNLHYvGQ4sWBKlpc,22216
25
- vivarium_public_health/population/mortality.py,sha256=komiAsM4ONm6emChAbkiMTYey-5jbnUKjq4B4Q1DOnM,10223
25
+ vivarium_public_health/population/mortality.py,sha256=Mtv45FENNY0GlPIoVd3d3pRq01aEh4cjzNXIgEe6hMo,10364
26
26
  vivarium_public_health/results/__init__.py,sha256=rKUZGlRXJgEyFY4a_WJeg3XnC0l34S5guYZ0N9JJS4E,319
27
27
  vivarium_public_health/results/columns.py,sha256=V-L3JgTcsk51Zx9PcUwSgaE1iZjuGyfZ8aShPjynadU,495
28
- vivarium_public_health/results/disability.py,sha256=27lXk68KRTxGIhDJ2BXT1IE2XWSVl7ktoXYUCCBJFOM,9844
29
- vivarium_public_health/results/disease.py,sha256=NwKDtHNEjPJUB-DqhE-gVCC1TNRbX5qbQBDL06XT3Pg,12517
28
+ vivarium_public_health/results/disability.py,sha256=sjZpHXfRRWVFI_OjQpYGfDGQ3hQuoLit6XTsBJXNXvY,9872
29
+ vivarium_public_health/results/disease.py,sha256=grhRK329fFLhIq18Ls_AK9hFu9ptXpefI30kynSMU4o,12521
30
30
  vivarium_public_health/results/mortality.py,sha256=-gxA9t1nSuKe1CiBje6Kkl985yAUkRWj3Cl9PFYLcQc,9644
31
31
  vivarium_public_health/results/observer.py,sha256=ADikaV6TvHVaysWoeux_DcvmzAFT7kpD6KtRSl16SaY,7277
32
32
  vivarium_public_health/results/risk.py,sha256=VArTuuW-xoeuE-EkgAIMVb5la_YGRulIPMLoOmsMnik,6597
33
33
  vivarium_public_health/results/simple_cause.py,sha256=ibdE6KwhDfQWntCVkOEooBcmUydEoupmd3_poHSHyu8,1007
34
34
  vivarium_public_health/results/stratification.py,sha256=4I3YGHVabNAZENE7YboOtWsWU4X-8LUBJ9iwYMbpl6E,5387
35
35
  vivarium_public_health/risks/__init__.py,sha256=z8DcnZGxqNVAyFZm2WAV-IVNGvrSS4izju_0DNe2Ghw,212
36
- vivarium_public_health/risks/base_risk.py,sha256=XQ_7rYJS5gh0coEKDqcc_zYdjPDBZlj6-THsIQxL3zs,10888
36
+ vivarium_public_health/risks/base_risk.py,sha256=XrZ5iytFabPS2_9-jI0dZQKK206yy_ZvCbReUoAVrAQ,10851
37
37
  vivarium_public_health/risks/data_transformations.py,sha256=SgdPKc95BBqgMNUdlAQM8k6iaXcpxnjk5B2ySTES1Yg,9269
38
- vivarium_public_health/risks/distributions.py,sha256=a63-ihg2itxqgowDZbUix8soErxs_y8TRwsdtTCIUU4,18121
38
+ vivarium_public_health/risks/distributions.py,sha256=5gkurGTPqZczIKum5NgJ-DbJ2bxA1tRbLe7jKgCqkQg,18203
39
39
  vivarium_public_health/risks/effect.py,sha256=Cw-V1rMPaAPZsirbUElPzksvNuXLQc8TIIk0hgaFzvA,21259
40
40
  vivarium_public_health/risks/implementations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
- vivarium_public_health/risks/implementations/low_birth_weight_and_short_gestation.py,sha256=2w4l5V6LQsHLGN43mFS0xzwZkbWKd-siib8dWS4lJdE,17744
41
+ vivarium_public_health/risks/implementations/low_birth_weight_and_short_gestation.py,sha256=gNQGmw-J_wZJm2r3P-4ix4Lj2BM0_YVzY9CC7hezmY8,17780
42
42
  vivarium_public_health/treatment/__init__.py,sha256=wONElu9aJbBYwpYIovYPYaN_GYfVhPXtTeFWSdQMgA0,222
43
- vivarium_public_health/treatment/magic_wand.py,sha256=zGIhrNgB9q6JD7fHlvbDQb3H5e_N_QsROO4Y0kl_JQM,1955
44
- vivarium_public_health/treatment/scale_up.py,sha256=hVz0ELXDqlpcExI31rKdepxqcW_hy2hZSa6qCzv6udU,7020
45
- vivarium_public_health/treatment/therapeutic_inertia.py,sha256=8Z97s7GfcpfLu1U1ESJSqeEk4L__a3M0GbBV21MFg2s,2346
46
- vivarium_public_health-3.2.2.dist-info/LICENSE.txt,sha256=mN4bNLUQNcN9njYRc_3jCZkfPySVpmM6MRps104FxA4,1548
47
- vivarium_public_health-3.2.2.dist-info/METADATA,sha256=V493DDz3FMYl01yPFVDajXHKPC_ixo6c_6iQXHrw6X8,4215
48
- vivarium_public_health-3.2.2.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
49
- vivarium_public_health-3.2.2.dist-info/top_level.txt,sha256=VVInlpzCFD0UNNhjOq_j-a29odzjwUwYFTGfvqbi4dY,23
50
- vivarium_public_health-3.2.2.dist-info/RECORD,,
43
+ vivarium_public_health/treatment/magic_wand.py,sha256=zg4I48G-l9fC6-qjvApbM1zNACJimZlX9ZZ9fdHKwvc,1985
44
+ vivarium_public_health/treatment/scale_up.py,sha256=_bsf9c_yVc7-q_-yBcXimISTUfYzPps1auH0uEf7sfQ,7048
45
+ vivarium_public_health/treatment/therapeutic_inertia.py,sha256=ZIHnpuszZwA_BkS53JbSLvpcnX_bqG2knwCUyUgkA9M,2362
46
+ vivarium_public_health-4.0.1.dist-info/licenses/LICENSE.txt,sha256=mN4bNLUQNcN9njYRc_3jCZkfPySVpmM6MRps104FxA4,1548
47
+ vivarium_public_health-4.0.1.dist-info/METADATA,sha256=ae5FCmlmfFavN9AVHCL8oZnd8ofEG1wf8puuHDvNUbc,4237
48
+ vivarium_public_health-4.0.1.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
49
+ vivarium_public_health-4.0.1.dist-info/top_level.txt,sha256=VVInlpzCFD0UNNhjOq_j-a29odzjwUwYFTGfvqbi4dY,23
50
+ vivarium_public_health-4.0.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.8.0)
2
+ Generator: setuptools (77.0.3)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5