Source code for vivarium.gbd_mapping_generator.covariate_builder

from .base_template_builder import gbd_record_attrs, modelable_entity_attrs
from .data import get_covariate_data, get_covariate_list
from .globals import ID_TYPES, CovariateDataSeq
from .util import (
    DOUBLE_SPACING,
    SINGLE_SPACING,
    TAB,
    make_import,
    make_module_docstring,
    make_record,
)

IMPORTABLES_DEFINED = ("Covariate", "covariates")


[docs] def get_base_types(): cov_attrs = [ ("name", "str"), ("kind", "str"), ("gbd_id", f"{ID_TYPES.COV_ID} | None"), ("by_age", "bool"), ("by_sex", "bool"), ("dichotomous", "bool"), ] return { "Covariate": { "attrs": tuple(cov_attrs), "superclass": ("ModelableEntity", modelable_entity_attrs), "docstring": "Container for covariate GBD ids and metadata.", }, "Covariates": { "attrs": tuple([(name, "Covariate") for name in get_covariate_list()]), "superclass": ("GbdRecord", gbd_record_attrs), "docstring": "Container for GBD covariates.", }, }
[docs] def make_covariate( name: str, cov_id: float, by_age: bool, by_sex: bool, dichotomous: bool ) -> str: """Creates a single Covariate based on the supplied parameters. Parameters ---------- name Covariate name. cov_id The numeric id for the covariate. by_age Adjusted by age by_sex Adjusted by sex dichotomous Is dichotomous Returns ------- str Generated string for a single covariate. """ out = "" out += TAB + f"'{name}': Covariate(\n" out += TAB * 2 + f"name='{name}',\n" out += TAB * 2 + "kind='covariate',\n" out += TAB * 2 + f"gbd_id={ID_TYPES.COV_ID}({cov_id}),\n" out += TAB * 2 + f"by_age={bool(by_age)},\n" out += TAB * 2 + f"by_sex={bool(by_sex)},\n" out += TAB * 2 + f"dichotomous={bool(dichotomous)},\n" out += TAB + "),\n" return out
[docs] def make_covariates(covariate_list: CovariateDataSeq) -> str: """Generates the list of covariates. Parameters ---------- covariate_list Sequence of covariate data from which to generate the representation Returns ------- str Generated string all covariates. """ out = "covariates = Covariates(**{\n" for name, cov_id, by_age, by_sex, dichotomous in covariate_list: out += make_covariate(name, cov_id, by_age, by_sex, dichotomous) out += "})\n" return out
[docs] def build_mapping_template(): out = make_module_docstring("Mapping templates for GBD covariates.", __file__) out += make_import(".base_template", ("GbdRecord", "ModelableEntity")) out += make_import(".id", (ID_TYPES.COV_ID,)) for entity, info in get_base_types().items(): out += DOUBLE_SPACING out += make_record(entity, **info) return out
[docs] def build_mapping(): out = make_module_docstring("Mapping of GBD covariates.", __file__) out += make_import(".covariate_template", ("Covariate", "Covariates")) out += make_import(".id", (ID_TYPES.COV_ID,)) + SINGLE_SPACING out += make_covariates(get_covariate_data()) return out