Skip to content

Commit

Permalink
artifact updates
Browse files Browse the repository at this point in the history
  • Loading branch information
Hussain Jafari committed Sep 13, 2024
1 parent f807452 commit 968f141
Show file tree
Hide file tree
Showing 10 changed files with 236 additions and 404 deletions.
8 changes: 4 additions & 4 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,8 @@
long_description = f.read()

install_requirements = [
"gbd_mapping==4.0.0",
"vivarium==3.0.0",
"gbd_mapping>=4.0.0",
"vivarium>=3.0.0",
"vivarium_public_health>=3.0.0,<4.0.0",
"click",
"jinja2",
Expand All @@ -58,8 +58,8 @@

setup_requires = ["setuptools_scm"]

data_requirements = ["vivarium_inputs[data]==5.0.2"]
cluster_requirements = ["vivarium_cluster_tools==1.6.1"]
data_requirements = ["vivarium_inputs[data]>=5.0.2"]
cluster_requirements = ["vivarium_cluster_tools>=1.6.1"]
test_requirements = ["pytest"]
lint_requirements = ["black", "isort"]

Expand Down
195 changes: 174 additions & 21 deletions src/vivarium_sodium_reduction/constants/data_keys.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,41 +29,194 @@ def log_name(self):
POPULATION = __Population()


# TODO - sample key group used to identify keys in model
# For more information see the tutorial:
# https://vivarium-inputs.readthedocs.io/en/latest/tutorials/pulling_data.html#entity-measure-data
class __SomeDisease(NamedTuple):
class __IschemicHeartDisease(NamedTuple):
# Keys that will be loaded into the artifact. must have a colon type declaration
PREVALENCE: TargetString = TargetString("cause.ischemic_heart_disease.prevalence")
INCIDENCE_RATE: TargetString = TargetString("cause.ischemic_heart_disease.incidence_rate")
DISABILITY_WEIGHT: TargetString = TargetString("cause.ischemic_heart_disease.disability_weight")
EMR: TargetString = TargetString("cause.ischemic_heart_disease.excess_mortality_rate")
CSMR: TargetString = TargetString("cause.ischemic_heart_disease.cause_specific_mortality_rate")
RESTRICTIONS: TargetString = TargetString("cause.ischemic_heart_disease.restrictions")

# Useful keys not for the artifact - distinguished by not using the colon type declaration

@property
def name(self):
return "ischemic_heart_disease"

@property
def log_name(self):
return "ischemic_heart_disease"


IHD = __IschemicHeartDisease()


class __IschemicStroke(NamedTuple):
# Keys that will be loaded into the artifact. must have a colon type declaration
PREVALENCE: TargetString = TargetString("cause.ischemic_stroke.prevalence")
INCIDENCE_RATE: TargetString = TargetString("cause.ischemic_stroke.incidence_rate")
DISABILITY_WEIGHT: TargetString = TargetString("cause.ischemic_stroke.disability_weight")
EMR: TargetString = TargetString("cause.ischemic_stroke.excess_mortality_rate")
CSMR: TargetString = TargetString("cause.ischemic_stroke.cause_specific_mortality_rate")
RESTRICTIONS: TargetString = TargetString("cause.ischemic_stroke.restrictions")

# Useful keys not for the artifact - distinguished by not using the colon type declaration

@property
def name(self):
return "ischemic_stroke"

@property
def log_name(self):
return "ischemic_stroke"


ISCHEMIC_STROKE = __IschemicStroke()


class __StomachCancer(NamedTuple):
# Keys that will be loaded into the artifact. must have a colon type declaration
PREVALENCE: TargetString = TargetString("cause.stomach_cancer.prevalence")
INCIDENCE_RATE: TargetString = TargetString("cause.stomach_cancer.incidence_rate")
DISABILITY_WEIGHT: TargetString = TargetString("cause.stomach_cancer.disability_weight")
EMR: TargetString = TargetString("cause.stomach_cancer.excess_mortality_rate")
CSMR: TargetString = TargetString("cause.stomach_cancer.cause_specific_mortality_rate")
RESTRICTIONS: TargetString = TargetString("cause.stomach_cancer.restrictions")

# Useful keys not for the artifact - distinguished by not using the colon type declaration

@property
def name(self):
return "stomach_cancer"

@property
def log_name(self):
return "stomach_cancer"


STOMACH_CANCER = __StomachCancer()


class __IntracerebralHemorrhage(NamedTuple):
# Keys that will be loaded into the artifact. must have a colon type declaration
PREVALENCE: TargetString = TargetString("cause.intracerebral_hemorrhage.prevalence")
INCIDENCE_RATE: TargetString = TargetString("cause.intracerebral_hemorrhage.incidence_rate")
DISABILITY_WEIGHT: TargetString = TargetString("cause.intracerebral_hemorrhage.disability_weight")
EMR: TargetString = TargetString("cause.intracerebral_hemorrhage.excess_mortality_rate")
CSMR: TargetString = TargetString("cause.intracerebral_hemorrhage.cause_specific_mortality_rate")
RESTRICTIONS: TargetString = TargetString("cause.intracerebral_hemorrhage.restrictions")

# Useful keys not for the artifact - distinguished by not using the colon type declaration

@property
def name(self):
return "intracerebral_hemorrhage"

@property
def log_name(self):
return "intracerebral_hemorrhage"


INTRACEREBRAL_HEMORRHAGE = __IntracerebralHemorrhage()


class __SubarachnoidHemorrhage(NamedTuple):
# Keys that will be loaded into the artifact. must have a colon type declaration
SOME_DISEASE_PREVALENCE: TargetString = TargetString("cause.some_disease.prevalence")
SOME_DISEASE_INCIDENCE_RATE: TargetString = TargetString(
"cause.some_disease.incidence_rate"
PREVALENCE: TargetString = TargetString("cause.subarachnoid_hemorrhage.prevalence")
INCIDENCE_RATE: TargetString = TargetString("cause.subarachnoid_hemorrhage.incidence_rate")
DISABILITY_WEIGHT: TargetString = TargetString("cause.subarachnoid_hemorrhage.disability_weight")
EMR: TargetString = TargetString("cause.subarachnoid_hemorrhage.excess_mortality_rate")
CSMR: TargetString = TargetString("cause.subarachnoid_hemorrhage.cause_specific_mortality_rate")
RESTRICTIONS: TargetString = TargetString("cause.subarachnoid_hemorrhage.restrictions")

# Useful keys not for the artifact - distinguished by not using the colon type declaration

@property
def name(self):
return "subarachnoid_hemorrhage"

@property
def log_name(self):
return "subarachnoid_hemorrhage"


SUBARACHNOID_HEMORRHAGE = __SubarachnoidHemorrhage()


class __HighSBP(NamedTuple):
DISTRIBUTION: TargetString = TargetString(
"risk_factor.high_systolic_blood_pressure.distribution"
)
SOME_DISEASE_REMISSION_RATE: TargetString = TargetString(
"cause.some_disease.remission_rate"
EXPOSURE_MEAN: TargetString = TargetString(
"risk_factor.high_systolic_blood_pressure.exposure"
)
DISABILITY_WEIGHT: TargetString = TargetString("cause.some_disease.disability_weight")
EMR: TargetString = TargetString("cause.some_disease.excess_mortality_rate")
CSMR: TargetString = TargetString("cause.some_disease.cause_specific_mortality_rate")
RESTRICTIONS: TargetString = TargetString("cause.some_disease.restrictions")
EXPOSURE_SD: TargetString = TargetString(
"risk_factor.high_systolic_blood_pressure.exposure_standard_deviation"
)
EXPOSURE_WEIGHTS: TargetString = TargetString(
"risk_factor.high_systolic_blood_pressure.exposure_distribution_weights"
)
RELATIVE_RISK: TargetString = TargetString(
"risk_factor.high_systolic_blood_pressure.relative_risk"
)
PAF: TargetString = TargetString(
"risk_factor.high_systolic_blood_pressure.population_attributable_fraction"
)
TMRED: TargetString = TargetString("risk_factor.high_systolic_blood_pressure.tmred")

# Useful keys not for the artifact - distinguished by not using the colon type declaration
RAW_DISEASE_PREVALENCE = TargetString("sequela.raw_disease.prevalence")
RAW_DISEASE_INCIDENCE_RATE = TargetString("sequela.raw_disease.incidence_rate")
@property
def name(self):
return "high_sbp"

@property
def log_name(self):
return self.name.replace("_", " ")


SBP = __HighSBP()


class __HighSodium(NamedTuple):
DISTRIBUTION: TargetString = TargetString(
"risk_factor.diet_high_in_sodium.distribution"
)
EXPOSURE_MEAN: TargetString = TargetString(
"risk_factor.diet_high_in_sodium.exposure"
)
EXPOSURE_SD: TargetString = TargetString(
"risk_factor.diet_high_in_sodium.exposure_standard_deviation"
)
EXPOSURE_WEIGHTS: TargetString = TargetString(
"risk_factor.diet_high_in_sodium.exposure_distribution_weights"
)
RELATIVE_RISK: TargetString = TargetString(
"risk_factor.diet_high_in_sodium.relative_risk"
)
PAF: TargetString = TargetString(
"risk_factor.diet_high_in_sodium.population_attributable_fraction"
)
TMRED: TargetString = TargetString("risk_factor.diet_high_in_sodium.tmred")

@property
def name(self):
return "some_disease"
return "high_sodium"

@property
def log_name(self):
return "some disease"
return self.name.replace("_", " ")


SODIUM = __HighSodium()

SOME_DISEASE = __SomeDisease()

MAKE_ARTIFACT_KEY_GROUPS = [
POPULATION,
# TODO: list all key groups here
# SOME_DISEASE
IHD,
ISCHEMIC_STROKE,
STOMACH_CANCER,
INTRACEREBRAL_HEMORRHAGE,
SUBARACHNOID_HEMORRHAGE,
SBP,
SODIUM,
]
2 changes: 1 addition & 1 deletion src/vivarium_sodium_reduction/constants/metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
MAKE_ARTIFACT_SLEEP = 10

LOCATIONS = [
# TODO - project locations here
"United States of America",
]

ARTIFACT_INDEX_COLUMNS = [
Expand Down
37 changes: 5 additions & 32 deletions src/vivarium_sodium_reduction/constants/models.py
Original file line number Diff line number Diff line change
@@ -1,39 +1,12 @@
from vivarium_sodium_reduction.constants import data_keys


class TransitionString(str):
def __new__(cls, value):
# noinspection PyArgumentList
obj = str.__new__(cls, value.lower())
obj.from_state, obj.to_state = value.split("_TO_")
return obj


###########################
# Disease Model variables #
###########################

# TODO input details of model states and transitions
SOME_MODEL_NAME = data_keys.SOME_DISEASE.name
SUSCEPTIBLE_STATE_NAME = f"susceptible_to_{SOME_MODEL_NAME}"
FIRST_STATE_NAME = "first_state"
SECOND_STATE_NAME = "second_state"
SOME_DISEASE_MODEL_STATES = (SUSCEPTIBLE_STATE_NAME, FIRST_STATE_NAME, SECOND_STATE_NAME)
SOME_DISEASE_MODEL_TRANSITIONS = (
TransitionString(f"{SUSCEPTIBLE_STATE_NAME}_TO_{FIRST_STATE_NAME}"),
TransitionString(f"{FIRST_STATE_NAME}_TO_{SECOND_STATE_NAME}"),
TransitionString(f"{SECOND_STATE_NAME}_TO_{FIRST_STATE_NAME}"),
)

STATE_MACHINE_MAP = {
SOME_MODEL_NAME: {
"states": SOME_DISEASE_MODEL_STATES,
"transitions": SOME_DISEASE_MODEL_TRANSITIONS,
},
}


STATES = tuple(state for model in STATE_MACHINE_MAP.values() for state in model["states"])
TRANSITIONS = tuple(
state for model in STATE_MACHINE_MAP.values() for state in model["transitions"]
)
# TODO input details of model states
#SOME_MODEL_NAME = data_keys.SOME_DISEASE.name
#SUSCEPTIBLE_STATE_NAME = f"susceptible_to_{SOME_MODEL_NAME}"
#FIRST_STATE_NAME = "first_state"
#SECOND_STATE_NAME = "second_state"
Loading

0 comments on commit 968f141

Please sign in to comment.