vivarium-public-health 4.3.6__tar.gz → 4.3.8__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 (157) hide show
  1. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/CHANGELOG.rst +8 -0
  2. {vivarium_public_health-4.3.6/src/vivarium_public_health.egg-info → vivarium_public_health-4.3.8}/PKG-INFO +2 -2
  3. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/setup.py +1 -1
  4. vivarium_public_health-4.3.8/src/vivarium_public_health/_version.py +1 -0
  5. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/population/base_population.py +38 -10
  6. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8/src/vivarium_public_health.egg-info}/PKG-INFO +2 -2
  7. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health.egg-info/requires.txt +1 -1
  8. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/tests/population/test_base_population.py +21 -2
  9. vivarium_public_health-4.3.6/src/vivarium_public_health/_version.py +0 -1
  10. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/.bandit +0 -0
  11. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/.flake8 +0 -0
  12. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/.gitattributes +0 -0
  13. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/.github/CODEOWNERS +0 -0
  14. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/.github/pull_request_template.md +0 -0
  15. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/.github/workflows/deploy.yml +0 -0
  16. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/.gitignore +0 -0
  17. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/.pylintrc +0 -0
  18. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/.readthedocs.yml +0 -0
  19. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/.zenodo.json +0 -0
  20. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/CODE_OF_CONDUCT.rst +0 -0
  21. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/CONTRIBUTING.rst +0 -0
  22. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/Jenkinsfile +0 -0
  23. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/LICENSE.txt +0 -0
  24. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/MANIFEST.in +0 -0
  25. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/Makefile +0 -0
  26. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/README.rst +0 -0
  27. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/Makefile +0 -0
  28. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/nitpick-exceptions +0 -0
  29. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/_static/style.css +0 -0
  30. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/_templates/layout.html +0 -0
  31. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/api_reference/disease/index.rst +0 -0
  32. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/api_reference/disease/model.rst +0 -0
  33. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/api_reference/disease/models.rst +0 -0
  34. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/api_reference/disease/special_disease.rst +0 -0
  35. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/api_reference/disease/state.rst +0 -0
  36. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/api_reference/disease/transition.rst +0 -0
  37. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/api_reference/index.rst +0 -0
  38. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/api_reference/mslt/delay.rst +0 -0
  39. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/api_reference/mslt/disease.rst +0 -0
  40. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/api_reference/mslt/index.rst +0 -0
  41. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/api_reference/mslt/intervention.rst +0 -0
  42. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/api_reference/mslt/magic_wand_components.rst +0 -0
  43. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/api_reference/mslt/observer.rst +0 -0
  44. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/api_reference/mslt/population.rst +0 -0
  45. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/api_reference/plugins/index.rst +0 -0
  46. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/api_reference/plugins/parser.rst +0 -0
  47. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/api_reference/population/add_new_birth_cohorts.rst +0 -0
  48. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/api_reference/population/base_population.rst +0 -0
  49. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/api_reference/population/data_transformations.rst +0 -0
  50. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/api_reference/population/index.rst +0 -0
  51. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/api_reference/population/mortality.rst +0 -0
  52. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/api_reference/results/disability.rst +0 -0
  53. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/api_reference/results/disease.rst +0 -0
  54. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/api_reference/results/index.rst +0 -0
  55. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/api_reference/results/mortality.rst +0 -0
  56. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/api_reference/results/observer.rst +0 -0
  57. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/api_reference/results/risk.rst +0 -0
  58. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/api_reference/results/simple_cause.rst +0 -0
  59. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/api_reference/results/stratification.rst +0 -0
  60. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/api_reference/risks/base_risk.rst +0 -0
  61. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/api_reference/risks/data_transformations.rst +0 -0
  62. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/api_reference/risks/distributions.rst +0 -0
  63. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/api_reference/risks/effect.rst +0 -0
  64. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/api_reference/risks/implementations/index.rst +0 -0
  65. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/api_reference/risks/implementations/low_birth_weight_and_short_gestation.rst +0 -0
  66. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/api_reference/risks/index.rst +0 -0
  67. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/api_reference/treatment/index.rst +0 -0
  68. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/api_reference/treatment/magic_wand.rst +0 -0
  69. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/api_reference/treatment/scale_up.rst +0 -0
  70. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/api_reference/treatment/therapeutic_inertia.rst +0 -0
  71. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/api_reference/utilities.rst +0 -0
  72. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/conf.py +0 -0
  73. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/index.rst +0 -0
  74. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/tutorials/index.rst +0 -0
  75. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/docs/source/tutorials/risk_exposure.rst +0 -0
  76. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/pyproject.toml +0 -0
  77. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/python_versions.json +0 -0
  78. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/setup.cfg +0 -0
  79. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/__about__.py +0 -0
  80. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/__init__.py +0 -0
  81. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/disease/__init__.py +0 -0
  82. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/disease/exceptions.py +0 -0
  83. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/disease/model.py +0 -0
  84. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/disease/models.py +0 -0
  85. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/disease/special_disease.py +0 -0
  86. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/disease/state.py +0 -0
  87. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/disease/transition.py +0 -0
  88. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/mslt/__init__.py +0 -0
  89. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/mslt/delay.py +0 -0
  90. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/mslt/disease.py +0 -0
  91. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/mslt/intervention.py +0 -0
  92. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/mslt/magic_wand_components.py +0 -0
  93. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/mslt/observer.py +0 -0
  94. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/mslt/population.py +0 -0
  95. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/plugins/__init__.py +0 -0
  96. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/plugins/parser.py +0 -0
  97. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/population/__init__.py +0 -0
  98. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/population/add_new_birth_cohorts.py +0 -0
  99. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/population/data_transformations.py +0 -0
  100. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/population/mortality.py +0 -0
  101. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/results/__init__.py +0 -0
  102. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/results/columns.py +0 -0
  103. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/results/disability.py +0 -0
  104. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/results/disease.py +0 -0
  105. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/results/mortality.py +0 -0
  106. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/results/observer.py +0 -0
  107. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/results/risk.py +0 -0
  108. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/results/simple_cause.py +0 -0
  109. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/results/stratification.py +0 -0
  110. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/risks/__init__.py +0 -0
  111. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/risks/base_risk.py +0 -0
  112. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/risks/data_transformations.py +0 -0
  113. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/risks/distributions.py +0 -0
  114. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/risks/effect.py +0 -0
  115. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/risks/implementations/__init__.py +0 -0
  116. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/risks/implementations/low_birth_weight_and_short_gestation.py +0 -0
  117. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/treatment/__init__.py +0 -0
  118. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/treatment/magic_wand.py +0 -0
  119. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/treatment/scale_up.py +0 -0
  120. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/treatment/therapeutic_inertia.py +0 -0
  121. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health/utilities.py +0 -0
  122. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health.egg-info/SOURCES.txt +0 -0
  123. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health.egg-info/dependency_links.txt +0 -0
  124. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health.egg-info/not-zip-safe +0 -0
  125. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/src/vivarium_public_health.egg-info/top_level.txt +0 -0
  126. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/tests/__init__.py +0 -0
  127. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/tests/conftest.py +0 -0
  128. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/tests/data/rr_interpolator.csv +0 -0
  129. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/tests/disease/__init__.py +0 -0
  130. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/tests/disease/test_disease.py +0 -0
  131. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/tests/disease/test_special_disease.py +0 -0
  132. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/tests/mock_artifact.py +0 -0
  133. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/tests/plugins/__init__.py +0 -0
  134. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/tests/plugins/test_parser.py +0 -0
  135. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/tests/population/__init__.py +0 -0
  136. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/tests/population/conftest.py +0 -0
  137. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/tests/population/test_add_new_birth_cohort.py +0 -0
  138. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/tests/population/test_data_transformations.py +0 -0
  139. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/tests/population/test_mortality.py +0 -0
  140. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/tests/results/__init__.py +0 -0
  141. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/tests/results/test_categorical_risk_observer.py +0 -0
  142. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/tests/results/test_disability.py +0 -0
  143. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/tests/results/test_disability_observer.py +0 -0
  144. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/tests/results/test_disease_observer.py +0 -0
  145. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/tests/results/test_mortality_observer.py +0 -0
  146. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/tests/results/test_stratification.py +0 -0
  147. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/tests/risks/__init__.py +0 -0
  148. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/tests/risks/conftest.py +0 -0
  149. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/tests/risks/test_base_risk.py +0 -0
  150. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/tests/risks/test_data_transformations.py +0 -0
  151. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/tests/risks/test_distributions.py +0 -0
  152. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/tests/risks/test_effect.py +0 -0
  153. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/tests/risks/test_low_birth_weight_and_short_gestation.py +0 -0
  154. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/tests/test_utilities.py +0 -0
  155. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/tests/treatment/__init__.py +0 -0
  156. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/tests/treatment/test_scale_up.py +0 -0
  157. {vivarium_public_health-4.3.6 → vivarium_public_health-4.3.8}/tox.ini +0 -0
@@ -1,3 +1,11 @@
1
+ **4.3.8 - 09/10/25**
2
+
3
+ - Pin vivarium<4.0.0
4
+
5
+ **4.3.7 - 09/10/25**
6
+
7
+ - Bugfix: raise an error if simulation start year is earlier than population data.
8
+
1
9
  **4.3.6 - 08/28/25**
2
10
 
3
11
  - Feature: ScaledPopulation can handle multiple year data inputs.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vivarium_public_health
3
- Version: 4.3.6
3
+ Version: 4.3.8
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
@@ -28,7 +28,7 @@ Classifier: Topic :: Software Development :: Libraries
28
28
  License-File: LICENSE.txt
29
29
  Requires-Dist: vivarium_dependencies[loguru,numpy_lt_2,pandas,pyarrow,scipy,tables]
30
30
  Requires-Dist: vivarium_build_utils<3.0.0,>=2.0.1
31
- Requires-Dist: vivarium>=3.4.3
31
+ Requires-Dist: vivarium<4.0.0,>=3.4.3
32
32
  Requires-Dist: layered_config_tree
33
33
  Requires-Dist: risk_distributions>=2.0.11
34
34
  Provides-Extra: docs
@@ -44,7 +44,7 @@ if __name__ == "__main__":
44
44
  install_requirements = [
45
45
  "vivarium_dependencies[pandas,numpy_lt_2,scipy,tables,loguru,pyarrow]",
46
46
  "vivarium_build_utils>=2.0.1,<3.0.0",
47
- "vivarium>=3.4.3",
47
+ "vivarium>=3.4.3,<4.0.0",
48
48
  "layered_config_tree",
49
49
  "risk_distributions>=2.0.11",
50
50
  ]
@@ -0,0 +1 @@
1
+ __version__ = "4.3.8"
@@ -166,7 +166,7 @@ class BasePopulation(Component):
166
166
  demographic_proportions, year: int
167
167
  ) -> pd.DataFrame:
168
168
  reference_years = sorted(set(demographic_proportions.year_start))
169
- ref_year_index = np.digitize(year, reference_years).item() - 1
169
+ ref_year_index = _find_bin_start_index(year, reference_years)
170
170
  return demographic_proportions[
171
171
  demographic_proportions.year_start == reference_years[ref_year_index]
172
172
  ]
@@ -257,22 +257,22 @@ class ScaledPopulation(BasePopulation):
257
257
  if "year_start" not in scaling_factor.index.names:
258
258
  return population_structure, scaling_factor
259
259
 
260
- # Subset to start year of simulation or closest year
260
+ # Subset the population structure and scaling factors to the simulation
261
+ # start year. If the data does not contain the exact simulation start
262
+ # year, subset to the closest year less than the simulation start year.
261
263
  pop_reference_years = sorted(
262
264
  set(population_structure.index.get_level_values("year_start"))
263
265
  )
264
- pop_year_index = np.digitize(year, pop_reference_years).item() - 1
265
- scale_reference_years = sorted(
266
- set(scaling_factor.index.get_level_values("year_start"))
267
- )
268
- scale_year_index = np.digitize(year, scale_reference_years).item() - 1
269
- # Subset to start year of simulation or earliest year. E.g. if start year = 2021 and pop
270
- # structure has 2021, we will subset to 2021. If pop structure minimum year is 2025, we
271
- # will subset to 2025.
266
+ pop_year_index = _find_bin_start_index(year, pop_reference_years)
272
267
  population_structure = population_structure.loc[
273
268
  population_structure.index.get_level_values("year_start")
274
269
  == pop_reference_years[pop_year_index]
275
270
  ]
271
+
272
+ scale_reference_years = sorted(
273
+ set(scaling_factor.index.get_level_values("year_start"))
274
+ )
275
+ scale_year_index = _find_bin_start_index(year, scale_reference_years)
276
276
  scaling_factor = scaling_factor.loc[
277
277
  scaling_factor.index.get_level_values("year_start")
278
278
  == scale_reference_years[scale_year_index]
@@ -527,3 +527,31 @@ def _assign_demography_with_age_bounds(
527
527
  )
528
528
  register_simulants(simulants[list(key_columns)])
529
529
  return simulants
530
+
531
+
532
+ def _find_bin_start_index(value: int, sorted_reference_values: list[int]) -> int:
533
+ """Finds the index of the closest reference value less than or equal to the provided value.
534
+
535
+ Parameters
536
+ ----------
537
+ value
538
+ The value for which to find the closest reference value.
539
+ sorted_reference_values
540
+ A sorted list of reference values.
541
+
542
+ Returns
543
+ -------
544
+ The index of the closest reference value less than or equal to the provided value.
545
+
546
+ Raises
547
+ ------
548
+ ValueError
549
+ If the provided value is less than the minimum reference value.
550
+ """
551
+ ref_value_index = np.digitize(value, sorted_reference_values).item() - 1
552
+ if ref_value_index < 0:
553
+ raise ValueError(
554
+ f"The provided value {value} is less than the minimum reference value "
555
+ f"{min(sorted_reference_values)}."
556
+ )
557
+ return ref_value_index
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vivarium_public_health
3
- Version: 4.3.6
3
+ Version: 4.3.8
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
@@ -28,7 +28,7 @@ Classifier: Topic :: Software Development :: Libraries
28
28
  License-File: LICENSE.txt
29
29
  Requires-Dist: vivarium_dependencies[loguru,numpy_lt_2,pandas,pyarrow,scipy,tables]
30
30
  Requires-Dist: vivarium_build_utils<3.0.0,>=2.0.1
31
- Requires-Dist: vivarium>=3.4.3
31
+ Requires-Dist: vivarium<4.0.0,>=3.4.3
32
32
  Requires-Dist: layered_config_tree
33
33
  Requires-Dist: risk_distributions>=2.0.11
34
34
  Provides-Extra: docs
@@ -1,6 +1,6 @@
1
1
  vivarium_dependencies[loguru,numpy_lt_2,pandas,pyarrow,scipy,tables]
2
2
  vivarium_build_utils<3.0.0,>=2.0.1
3
- vivarium>=3.4.3
3
+ vivarium<4.0.0,>=3.4.3
4
4
  layered_config_tree
5
5
  risk_distributions>=2.0.11
6
6
 
@@ -4,7 +4,6 @@ from itertools import product
4
4
  import numpy as np
5
5
  import pandas as pd
6
6
  import pytest
7
- from layered_config_tree import LayeredConfigTree
8
7
  from vivarium import InteractiveContext
9
8
  from vivarium.testing_utilities import get_randomness
10
9
  from vivarium_testing_utils import FuzzyChecker
@@ -296,7 +295,11 @@ def test_scaled_population(
296
295
  "population_size": 1_000_000,
297
296
  "include_sex": "Both",
298
297
  },
299
- "time": {"step_size": 1},
298
+ "time": {
299
+ "step_size": 1,
300
+ # Update the start year to fall within the population structure data.
301
+ "start": {"year": 2021},
302
+ },
300
303
  },
301
304
  layer="override",
302
305
  )
@@ -470,6 +473,22 @@ def test_scaled_population__format_data_inputs(
470
473
  pd.testing.assert_frame_equal(data, expected)
471
474
 
472
475
 
476
+ def test__find_bin_start_index():
477
+ sorted_values = [10, 20, 30]
478
+ assert bp._find_bin_start_index(10, sorted_values) == 0
479
+ assert bp._find_bin_start_index(19, sorted_values) == 0
480
+ assert bp._find_bin_start_index(20, sorted_values) == 1
481
+ assert bp._find_bin_start_index(29, sorted_values) == 1
482
+ assert bp._find_bin_start_index(30, sorted_values) == 2
483
+ assert bp._find_bin_start_index(99999, sorted_values) == 2
484
+
485
+ # Edge case
486
+ with pytest.raises(
487
+ ValueError, match="The provided value 9 is less than the minimum reference value 10."
488
+ ):
489
+ bp._find_bin_start_index(9, sorted_values)
490
+
491
+
473
492
  def _check_population(simulants, initial_age, step_size, include_sex):
474
493
  assert len(simulants) == len(simulants.age.unique())
475
494
  assert simulants.age.min() > initial_age
@@ -1 +0,0 @@
1
- __version__ = "4.3.6"