Source code for vivarium_public_health.mslt.magic_wand_components

"""
=================
Magic Wand Models
=================

This module contains tools for making crude adjustments to rates in
multi-state lifetable simulations.

"""
from typing import Any, Dict

from vivarium import Component
from vivarium.framework.engine import Builder


[docs]class MortalityShift(Component): ##################### # Lifecycle methods # #####################
[docs] def setup(self, builder: Builder) -> None: builder.value.register_value_modifier("mortality_rate", self.mortality_adjustment)
################################## # Pipeline sources and modifiers # ##################################
[docs] def mortality_adjustment(self, index, rates): return rates * 0.5
[docs]class YLDShift(Component): ##################### # Lifecycle methods # #####################
[docs] def setup(self, builder: Builder) -> None: builder.value.register_value_modifier("yld_rate", self.disability_adjustment)
################################## # Pipeline sources and modifiers # ##################################
[docs] def disability_adjustment(self, index, rates): return rates * 0.5
[docs]class IncidenceShift(Component): ##################### # Lifecycle methods # ##################### def __init__(self, disease: str): super().__init__() self.disease = disease
[docs] def setup(self, builder: Builder) -> None: builder.value.register_value_modifier( f"{self.disease}_intervention.incidence", self.incidence_adjustment )
################################## # Pipeline sources and modifiers # ##################################
[docs] def incidence_adjustment(self, index, rates): return rates * 0.5
[docs]class ModifyAcuteDiseaseYLD(Component): ############## # Properties # ############## @property def configuration_defaults(self) -> Dict[str, Any]: return { "intervention": { self.disease: { "yld_scale": 1.0, }, } } ##################### # Lifecycle methods # ##################### def __init__(self, disease: str): super().__init__() self.disease = disease
[docs] def setup(self, builder: Builder) -> None: self.config = builder.configuration self.scale = self.config.intervention[self.disease].yld_scale if self.scale < 0: raise ValueError(f"Invalid YLD scale: {self.scale}") builder.value.register_value_modifier( f"{self.disease}_intervention.yld_rate", self.disability_adjustment )
################################## # Pipeline sources and modifiers # ##################################
[docs] def disability_adjustment(self, index, rates): return rates * self.scale
[docs]class ModifyAcuteDiseaseMortality(Component): ############## # Properties # ############## @property def configuration_defaults(self) -> Dict[str, Any]: return { "intervention": { self.disease: { "mortality_scale": 1.0, }, } } ##################### # Lifecycle methods # ##################### def __init__(self, disease: str): super().__init__() self.disease = disease
[docs] def setup(self, builder: Builder) -> None: self.config = builder.configuration self.scale = self.config.intervention[self.disease].mortality_scale if self.scale < 0: raise ValueError(f"Invalid mortality scale: {self.scale}") builder.value.register_value_modifier( f"{self.disease}_intervention.excess_mortality", self.mortality_adjustment )
################################## # Pipeline sources and modifiers # ##################################
[docs] def mortality_adjustment(self, index, rates): return rates * self.scale