vivarium-public-health 4.0.2__tar.gz → 4.1.1__tar.gz

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 (158) hide show
  1. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/CHANGELOG.rst +8 -0
  2. vivarium_public_health-4.1.1/Jenkinsfile +6 -0
  3. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/PKG-INFO +2 -2
  4. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/setup.py +1 -1
  5. vivarium_public_health-4.1.1/src/vivarium_public_health/_version.py +1 -0
  6. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/disease/model.py +15 -1
  7. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/disease/transition.py +8 -1
  8. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/results/disability.py +1 -15
  9. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/results/disease.py +2 -26
  10. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/results/mortality.py +0 -14
  11. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/results/risk.py +2 -26
  12. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health.egg-info/PKG-INFO +2 -2
  13. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health.egg-info/requires.txt +1 -1
  14. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/tests/disease/test_disease.py +101 -0
  15. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/tests/results/test_disability_observer.py +0 -1
  16. vivarium_public_health-4.0.2/Jenkinsfile +0 -4
  17. vivarium_public_health-4.0.2/src/vivarium_public_health/_version.py +0 -1
  18. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/.bandit +0 -0
  19. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/.flake8 +0 -0
  20. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/.gitattributes +0 -0
  21. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/.github/CODEOWNERS +0 -0
  22. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/.github/pull_request_template.md +0 -0
  23. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/.github/workflows/deploy.yml +0 -0
  24. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/.gitignore +0 -0
  25. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/.pylintrc +0 -0
  26. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/.readthedocs.yml +0 -0
  27. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/.zenodo.json +0 -0
  28. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/CODE_OF_CONDUCT.rst +0 -0
  29. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/CONTRIBUTING.rst +0 -0
  30. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/LICENSE.txt +0 -0
  31. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/MANIFEST.in +0 -0
  32. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/Makefile +0 -0
  33. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/README.rst +0 -0
  34. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/Makefile +0 -0
  35. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/nitpick-exceptions +0 -0
  36. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/_static/style.css +0 -0
  37. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/_templates/layout.html +0 -0
  38. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/api_reference/disease/index.rst +0 -0
  39. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/api_reference/disease/model.rst +0 -0
  40. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/api_reference/disease/models.rst +0 -0
  41. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/api_reference/disease/special_disease.rst +0 -0
  42. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/api_reference/disease/state.rst +0 -0
  43. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/api_reference/disease/transition.rst +0 -0
  44. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/api_reference/index.rst +0 -0
  45. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/api_reference/mslt/delay.rst +0 -0
  46. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/api_reference/mslt/disease.rst +0 -0
  47. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/api_reference/mslt/index.rst +0 -0
  48. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/api_reference/mslt/intervention.rst +0 -0
  49. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/api_reference/mslt/magic_wand_components.rst +0 -0
  50. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/api_reference/mslt/observer.rst +0 -0
  51. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/api_reference/mslt/population.rst +0 -0
  52. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/api_reference/plugins/index.rst +0 -0
  53. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/api_reference/plugins/parser.rst +0 -0
  54. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/api_reference/population/add_new_birth_cohorts.rst +0 -0
  55. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/api_reference/population/base_population.rst +0 -0
  56. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/api_reference/population/data_transformations.rst +0 -0
  57. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/api_reference/population/index.rst +0 -0
  58. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/api_reference/population/mortality.rst +0 -0
  59. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/api_reference/results/disability.rst +0 -0
  60. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/api_reference/results/disease.rst +0 -0
  61. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/api_reference/results/index.rst +0 -0
  62. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/api_reference/results/mortality.rst +0 -0
  63. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/api_reference/results/observer.rst +0 -0
  64. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/api_reference/results/risk.rst +0 -0
  65. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/api_reference/results/simple_cause.rst +0 -0
  66. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/api_reference/results/stratification.rst +0 -0
  67. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/api_reference/risks/base_risk.rst +0 -0
  68. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/api_reference/risks/data_transformations.rst +0 -0
  69. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/api_reference/risks/distributions.rst +0 -0
  70. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/api_reference/risks/effect.rst +0 -0
  71. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/api_reference/risks/implementations/index.rst +0 -0
  72. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/api_reference/risks/implementations/low_birth_weight_and_short_gestation.rst +0 -0
  73. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/api_reference/risks/index.rst +0 -0
  74. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/api_reference/treatment/index.rst +0 -0
  75. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/api_reference/treatment/magic_wand.rst +0 -0
  76. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/api_reference/treatment/scale_up.rst +0 -0
  77. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/api_reference/treatment/therapeutic_inertia.rst +0 -0
  78. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/api_reference/utilities.rst +0 -0
  79. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/conf.py +0 -0
  80. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/index.rst +0 -0
  81. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/tutorials/index.rst +0 -0
  82. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/docs/source/tutorials/risk_exposure.rst +0 -0
  83. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/pyproject.toml +0 -0
  84. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/python_versions.json +0 -0
  85. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/setup.cfg +0 -0
  86. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/__about__.py +0 -0
  87. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/__init__.py +0 -0
  88. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/disease/__init__.py +0 -0
  89. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/disease/exceptions.py +0 -0
  90. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/disease/models.py +0 -0
  91. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/disease/special_disease.py +0 -0
  92. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/disease/state.py +0 -0
  93. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/mslt/__init__.py +0 -0
  94. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/mslt/delay.py +0 -0
  95. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/mslt/disease.py +0 -0
  96. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/mslt/intervention.py +0 -0
  97. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/mslt/magic_wand_components.py +0 -0
  98. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/mslt/observer.py +0 -0
  99. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/mslt/population.py +0 -0
  100. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/plugins/__init__.py +0 -0
  101. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/plugins/parser.py +0 -0
  102. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/population/__init__.py +0 -0
  103. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/population/add_new_birth_cohorts.py +0 -0
  104. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/population/base_population.py +0 -0
  105. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/population/data_transformations.py +0 -0
  106. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/population/mortality.py +0 -0
  107. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/results/__init__.py +0 -0
  108. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/results/columns.py +0 -0
  109. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/results/observer.py +0 -0
  110. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/results/simple_cause.py +0 -0
  111. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/results/stratification.py +0 -0
  112. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/risks/__init__.py +0 -0
  113. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/risks/base_risk.py +0 -0
  114. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/risks/data_transformations.py +0 -0
  115. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/risks/distributions.py +0 -0
  116. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/risks/effect.py +0 -0
  117. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/risks/implementations/__init__.py +0 -0
  118. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/risks/implementations/low_birth_weight_and_short_gestation.py +0 -0
  119. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/treatment/__init__.py +0 -0
  120. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/treatment/magic_wand.py +0 -0
  121. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/treatment/scale_up.py +0 -0
  122. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/treatment/therapeutic_inertia.py +0 -0
  123. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health/utilities.py +0 -0
  124. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health.egg-info/SOURCES.txt +0 -0
  125. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health.egg-info/dependency_links.txt +0 -0
  126. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health.egg-info/not-zip-safe +0 -0
  127. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/src/vivarium_public_health.egg-info/top_level.txt +0 -0
  128. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/tests/__init__.py +0 -0
  129. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/tests/conftest.py +0 -0
  130. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/tests/data/rr_interpolator.csv +0 -0
  131. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/tests/disease/__init__.py +0 -0
  132. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/tests/disease/test_special_disease.py +0 -0
  133. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/tests/mock_artifact.py +0 -0
  134. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/tests/plugins/__init__.py +0 -0
  135. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/tests/plugins/test_parser.py +0 -0
  136. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/tests/population/__init__.py +0 -0
  137. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/tests/population/conftest.py +0 -0
  138. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/tests/population/test_add_new_birth_cohort.py +0 -0
  139. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/tests/population/test_base_population.py +0 -0
  140. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/tests/population/test_data_transformations.py +0 -0
  141. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/tests/population/test_mortality.py +0 -0
  142. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/tests/results/__init__.py +0 -0
  143. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/tests/results/test_categorical_risk_observer.py +0 -0
  144. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/tests/results/test_disability.py +0 -0
  145. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/tests/results/test_disease_observer.py +0 -0
  146. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/tests/results/test_mortality_observer.py +0 -0
  147. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/tests/results/test_stratification.py +0 -0
  148. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/tests/risks/__init__.py +0 -0
  149. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/tests/risks/conftest.py +0 -0
  150. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/tests/risks/test_base_risk.py +0 -0
  151. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/tests/risks/test_data_transformations.py +0 -0
  152. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/tests/risks/test_distributions.py +0 -0
  153. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/tests/risks/test_effect.py +0 -0
  154. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/tests/risks/test_low_birth_weight_and_short_gestation.py +0 -0
  155. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/tests/test_utilities.py +0 -0
  156. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/tests/treatment/__init__.py +0 -0
  157. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/tests/treatment/test_scale_up.py +0 -0
  158. {vivarium_public_health-4.0.2 → vivarium_public_health-4.1.1}/tox.ini +0 -0
@@ -1,3 +1,11 @@
1
+ **4.1.1 - 05/23/25**
2
+
3
+ - Feature: Update Observer to use super class get_configuration method
4
+
5
+ **4.1.0 - 05/20/25**
6
+
7
+ - Feature: Update RateTransition to have configuration key for rate conversion type
8
+
1
9
  **4.0.2 - 05/01/25**
2
10
 
3
11
  - Bugfix: Fix configuration key for untracking age in FertilityCrudeBirthRate
@@ -0,0 +1,6 @@
1
+ @Library("vivarium_build_utils") _
2
+ reusable_pipeline(
3
+ scheduled_branches: ["main"],
4
+ upstream_repos: ["vivarium", "layered_config_tree", "risk_distributions"],
5
+ run_mypy: false,
6
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vivarium_public_health
3
- Version: 4.0.2
3
+ Version: 4.1.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
@@ -26,7 +26,7 @@ Classifier: Topic :: Scientific/Engineering :: Medical Science Apps.
26
26
  Classifier: Topic :: Scientific/Engineering :: Physics
27
27
  Classifier: Topic :: Software Development :: Libraries
28
28
  License-File: LICENSE.txt
29
- Requires-Dist: vivarium>=3.2.3
29
+ Requires-Dist: vivarium>=3.4.3
30
30
  Requires-Dist: layered_config_tree>=1.0.1
31
31
  Requires-Dist: loguru
32
32
  Requires-Dist: numpy<2.0.0
@@ -42,7 +42,7 @@ if __name__ == "__main__":
42
42
  long_description = f.read()
43
43
 
44
44
  install_requirements = [
45
- "vivarium>=3.2.3",
45
+ "vivarium>=3.4.3",
46
46
  "layered_config_tree>=1.0.1",
47
47
  "loguru",
48
48
  "numpy<2.0.0",
@@ -0,0 +1 @@
1
+ __version__ = "4.1.1"
@@ -14,14 +14,16 @@ from functools import partial
14
14
  from typing import Any
15
15
 
16
16
  import pandas as pd
17
+ from layered_config_tree import ConfigurationError
17
18
  from vivarium.framework.engine import Builder
19
+ from vivarium.framework.event import Event
18
20
  from vivarium.framework.population import SimulantData
19
21
  from vivarium.framework.state_machine import Machine
20
22
  from vivarium.types import DataInput, LookupTableData
21
23
 
22
24
  from vivarium_public_health.disease.exceptions import DiseaseModelError
23
25
  from vivarium_public_health.disease.state import BaseDiseaseState, SusceptibleState
24
- from vivarium_public_health.disease.transition import TransitionString
26
+ from vivarium_public_health.disease.transition import RateTransition, TransitionString
25
27
 
26
28
 
27
29
  class DiseaseModel(Machine):
@@ -118,6 +120,18 @@ class DiseaseModel(Machine):
118
120
  required_resources=["age", "sex"],
119
121
  )
120
122
 
123
+ def on_post_setup(self, event: Event) -> None:
124
+ conversion_types = set()
125
+ for state in self.states:
126
+ for transition in state.transition_set.transitions:
127
+ if isinstance(transition, RateTransition):
128
+ conversion_types.add(transition.rate_conversion_type)
129
+ if len(conversion_types) > 1:
130
+ raise ConfigurationError(
131
+ "All transitions in a disease model must have the same rate conversion type."
132
+ f" Found: {conversion_types}."
133
+ )
134
+
121
135
  def on_initialize_simulants(self, pop_data: SimulantData) -> None:
122
136
  """Initialize the simulants in the population.
123
137
 
@@ -48,6 +48,7 @@ class RateTransition(Transition):
48
48
  "data_sources": {
49
49
  "transition_rate": self._rate_source,
50
50
  },
51
+ "rate_conversion_type": "linear",
51
52
  },
52
53
  }
53
54
 
@@ -143,6 +144,7 @@ class RateTransition(Transition):
143
144
  component=self,
144
145
  required_resources=lookup_columns + ["alive", self.joint_paf],
145
146
  )
147
+ self.rate_conversion_type = self.configuration["rate_conversion_type"]
146
148
 
147
149
  #################
148
150
  # Setup methods #
@@ -184,7 +186,12 @@ class RateTransition(Transition):
184
186
  ##################
185
187
 
186
188
  def _probability(self, index: pd.Index) -> pd.Series:
187
- return pd.Series(rate_to_probability(self.transition_rate(index)))
189
+ return pd.Series(
190
+ rate_to_probability(
191
+ self.transition_rate(index),
192
+ rate_conversion_type=self.rate_conversion_type,
193
+ )
194
+ )
188
195
 
189
196
 
190
197
  class ProportionTransition(Transition):
@@ -34,7 +34,7 @@ class DisabilityObserver(PublicHealthObserver):
34
34
  .. code-block:: yaml
35
35
 
36
36
  configuration:
37
- observers:
37
+ stratification:
38
38
  disability:
39
39
  exclude:
40
40
  - "sex"
@@ -128,20 +128,6 @@ class DisabilityObserver(PublicHealthObserver):
128
128
  cause for cause in causes_of_disability if cause.state_id not in excluded_causes
129
129
  ]
130
130
 
131
- def get_configuration(self, builder: Builder) -> LayeredConfigTree:
132
- """Get the stratification configuration for this observer.
133
-
134
- Parameters
135
- ----------
136
- builder
137
- The builder object for the simulation.
138
-
139
- Returns
140
- -------
141
- The stratification configuration for this observer.
142
- """
143
- return builder.configuration.stratification.disability
144
-
145
131
  def register_observations(self, builder: Builder) -> None:
146
132
  """Register an observation for years lived with disability."""
147
133
  cause_pipelines = [
@@ -66,19 +66,6 @@ class DiseaseObserver(PublicHealthObserver):
66
66
  # Properties #
67
67
  ##############
68
68
 
69
- @property
70
- def configuration_defaults(self) -> dict[str, Any]:
71
- """A dictionary containing the defaults for any configurations managed by
72
- this component.
73
- """
74
- return {
75
- "stratification": {
76
- self.disease: super().configuration_defaults["stratification"][
77
- self.get_configuration_name()
78
- ]
79
- }
80
- }
81
-
82
69
  @property
83
70
  def columns_created(self) -> list[str]:
84
71
  """Columns created by this observer."""
@@ -122,19 +109,8 @@ class DiseaseObserver(PublicHealthObserver):
122
109
  self.entity = self.disease_model.cause
123
110
  self.transition_stratification_name = f"transition_{self.disease}"
124
111
 
125
- def get_configuration(self, builder: Builder) -> LayeredConfigTree:
126
- """Get the stratification configuration for this observer.
127
-
128
- Parameters
129
- ----------
130
- builder
131
- The builder object for the simulation.
132
-
133
- Returns
134
- -------
135
- The stratification configuration for this observer.
136
- """
137
- return builder.configuration.stratification[self.disease]
112
+ def get_configuration_name(self) -> str:
113
+ return self.disease
138
114
 
139
115
  def register_observations(self, builder: Builder) -> None:
140
116
  """Register stratifications and observations.
@@ -136,20 +136,6 @@ class MortalityObserver(PublicHealthObserver):
136
136
  SimpleCause("other_causes", "other_causes", "cause"),
137
137
  ]
138
138
 
139
- def get_configuration(self, builder: Builder) -> LayeredConfigTree:
140
- """Get the stratification configuration for this observer.
141
-
142
- Parameters
143
- ----------
144
- builder
145
- The builder object for the simulation.
146
-
147
- Returns
148
- -------
149
- The stratification configuration for this observer.
150
- """
151
- return builder.configuration.stratification[self.get_configuration_name()]
152
-
153
139
  def register_observations(self, builder: Builder) -> None:
154
140
  """Register stratifications and observations.
155
141
 
@@ -58,19 +58,6 @@ class CategoricalRiskObserver(PublicHealthObserver):
58
58
  # Properties #
59
59
  ##############
60
60
 
61
- @property
62
- def configuration_defaults(self) -> dict[str, Any]:
63
- """A dictionary containing the defaults for any configurations managed by
64
- this component.
65
- """
66
- return {
67
- "stratification": {
68
- f"{self.risk}": super().configuration_defaults["stratification"][
69
- self.get_configuration_name()
70
- ]
71
- }
72
- }
73
-
74
61
  @property
75
62
  def columns_required(self) -> list[str] | None:
76
63
  """The columns required by this observer."""
@@ -101,19 +88,8 @@ class CategoricalRiskObserver(PublicHealthObserver):
101
88
  self.step_size = builder.time.step_size()
102
89
  self.categories = builder.data.load(f"risk_factor.{self.risk}.categories")
103
90
 
104
- def get_configuration(self, builder: Builder) -> LayeredConfigTree:
105
- """Get the stratification configuration for this observer.
106
-
107
- Parameters
108
- ----------
109
- builder
110
- The builder object for the simulation.
111
-
112
- Returns
113
- -------
114
- The stratification configuration for this observer.
115
- """
116
- return builder.configuration.stratification[self.risk]
91
+ def get_configuration_name(self) -> str:
92
+ return self.risk
117
93
 
118
94
  def register_observations(self, builder: Builder) -> None:
119
95
  """Register a stratification and observation.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vivarium_public_health
3
- Version: 4.0.2
3
+ Version: 4.1.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
@@ -26,7 +26,7 @@ Classifier: Topic :: Scientific/Engineering :: Medical Science Apps.
26
26
  Classifier: Topic :: Scientific/Engineering :: Physics
27
27
  Classifier: Topic :: Software Development :: Libraries
28
28
  License-File: LICENSE.txt
29
- Requires-Dist: vivarium>=3.2.3
29
+ Requires-Dist: vivarium>=3.4.3
30
30
  Requires-Dist: layered_config_tree>=1.0.1
31
31
  Requires-Dist: loguru
32
32
  Requires-Dist: numpy<2.0.0
@@ -1,4 +1,4 @@
1
- vivarium>=3.2.3
1
+ vivarium>=3.4.3
2
2
  layered_config_tree>=1.0.1
3
3
  loguru
4
4
  numpy<2.0.0
@@ -1,6 +1,9 @@
1
+ from unittest.mock import patch
2
+
1
3
  import numpy as np
2
4
  import pandas as pd
3
5
  import pytest
6
+ from layered_config_tree import ConfigurationError, LayeredConfigTree
4
7
  from vivarium import Component, InteractiveContext
5
8
  from vivarium.framework.state_machine import Transition
6
9
  from vivarium.framework.utilities import from_yearly
@@ -554,3 +557,101 @@ def test_artifact_transition_keys(mocker, disease):
554
557
  # check remission rate
555
558
  remissive_transition = with_condition.add_rate_transition(healthy)
556
559
  assert remissive_transition._rate_source == f"cause.{cause}.remission_rate"
560
+
561
+
562
+ @pytest.mark.parametrize("rate_conversion_type", ["linear", "exponential"])
563
+ def test_transition_rate_to_probability_configuration(
564
+ base_config: LayeredConfigTree,
565
+ base_plugins: LayeredConfigTree,
566
+ disease: str,
567
+ rate_conversion_type: str,
568
+ ):
569
+ """
570
+ Test that the transition rate to probability configuration is set correctly.
571
+ """
572
+ healthy = BaseDiseaseState("healthy")
573
+ sick = DiseaseState("sick")
574
+ key = "sequela.acute_myocardial_infarction_first_2_days.incidence_rate"
575
+ transition = RateTransition(
576
+ input_state=healthy,
577
+ output_state=sick,
578
+ get_data_functions={"incidence_rate": lambda builder, _: builder.data.load(key)},
579
+ )
580
+ healthy.transition_set.append(transition)
581
+ model = DiseaseModel(disease, initial_state=healthy, states=[healthy, sick])
582
+
583
+ base_config.update(
584
+ {
585
+ f"{transition.name}": {
586
+ "rate_conversion_type": rate_conversion_type,
587
+ }
588
+ }
589
+ )
590
+
591
+ # Sets the configuration
592
+ sim = InteractiveContext(
593
+ components=[TestPopulation(), model],
594
+ configuration=base_config,
595
+ plugin_configuration=base_plugins,
596
+ setup=True,
597
+ )
598
+
599
+ assert transition.rate_conversion_type == rate_conversion_type
600
+ with patch(
601
+ "vivarium_public_health.disease.transition.rate_to_probability", return_value=1.0
602
+ ) as mock_rate_to_probability:
603
+ idx = pd.Index(list(range(10)))
604
+ transition._probability(idx)
605
+
606
+ mock_rate_to_probability.assert_called_once()
607
+ args, kwargs = mock_rate_to_probability.call_args
608
+ assert len(args) == 1
609
+ assert len(kwargs) == 1
610
+ assert args[0].index.equals(idx)
611
+ assert kwargs["rate_conversion_type"] == rate_conversion_type
612
+
613
+
614
+ def test_disease_model_rate_conversion_config_error(
615
+ base_config: LayeredConfigTree,
616
+ base_plugins: LayeredConfigTree,
617
+ disease: str,
618
+ ):
619
+ """
620
+ Test that the transition rate to probability configuration is set correctly.
621
+ """
622
+ healthy = BaseDiseaseState("healthy")
623
+ sick = DiseaseState("sick")
624
+ key = "sequela.acute_myocardial_infarction_first_2_days.incidence_rate"
625
+ transition = RateTransition(
626
+ input_state=healthy,
627
+ output_state=sick,
628
+ get_data_functions={"incidence_rate": lambda builder, _: builder.data.load(key)},
629
+ )
630
+ another_transition = RateTransition(
631
+ input_state=sick,
632
+ output_state=healthy,
633
+ get_data_functions={"incidence_rate": lambda builder, _: builder.data.load(key)},
634
+ )
635
+ healthy.transition_set.append(transition)
636
+ sick.transition_set.append(another_transition)
637
+ model = DiseaseModel(disease, initial_state=healthy, states=[healthy, sick])
638
+
639
+ base_config.update(
640
+ {
641
+ f"{transition.name}": {
642
+ "rate_conversion_type": "linear",
643
+ },
644
+ f"{another_transition.name}": {
645
+ "rate_conversion_type": "exponential",
646
+ },
647
+ }
648
+ )
649
+
650
+ # Sets the configuration
651
+ with pytest.raises(ConfigurationError):
652
+ InteractiveContext(
653
+ components=[TestPopulation(), model],
654
+ configuration=base_config,
655
+ plugin_configuration=base_plugins,
656
+ setup=True,
657
+ )
@@ -39,7 +39,6 @@ def test_disability_observer_setup(mocker):
39
39
  observer = DisabilityObserver_()
40
40
  builder = mocker.Mock()
41
41
  mocker.patch("vivarium.component.Component.build_all_lookup_tables")
42
- mocker.patch("vivarium.component.Component.get_configuration")
43
42
  builder.results.register_adding_observation = mocker.Mock()
44
43
  builder.configuration.time.step_size = 28
45
44
  builder.configuration.output_data.results_directory = "some/results/directory"
@@ -1,4 +0,0 @@
1
- @Library("vivarium_build_utils") _
2
- reusable_pipeline(scheduled_branches: ["main"],
3
- upstream_repos: ["vivarium", "layered_config_tree", "risk_distributions"],
4
- )
@@ -1 +0,0 @@
1
- __version__ = "4.0.2"