policyengine-core 3.26.0__tar.gz → 3.26.2__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 (385) hide show
  1. policyengine_core-3.26.2/AGENTS.md +33 -0
  2. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/CHANGELOG.md +18 -0
  3. policyengine_core-3.26.2/CLAUDE.md +24 -0
  4. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/PKG-INFO +1 -1
  5. policyengine_core-3.26.2/docs/engineering/skills/README.md +17 -0
  6. policyengine_core-3.26.2/docs/engineering/skills/documentation_review.md +51 -0
  7. policyengine_core-3.26.2/docs/engineering/skills/github-prs.md +71 -0
  8. policyengine_core-3.26.2/docs/engineering/skills/testing.md +38 -0
  9. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/enums/enum.py +5 -2
  10. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/simulations/simulation.py +1 -2
  11. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/pyproject.toml +1 -1
  12. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/enums/test_enum.py +24 -0
  13. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/test_simulations.py +22 -0
  14. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/.github/ISSUE_TEMPLATE.md +0 -0
  15. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  16. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/.github/bump_version.py +0 -0
  17. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/.github/changelog_template.md +0 -0
  18. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/.github/get-changelog-diff.sh +0 -0
  19. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/.github/has-functional-changes.sh +0 -0
  20. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/.github/is-version-number-acceptable.sh +0 -0
  21. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/.github/publish-git-tag.sh +0 -0
  22. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/.github/workflows/pr.yaml +0 -0
  23. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/.github/workflows/push.yaml +0 -0
  24. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/.gitignore +0 -0
  25. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/.python-version +0 -0
  26. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/CONTRIBUTING.md +0 -0
  27. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/LICENSE +0 -0
  28. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/MANIFEST.in +0 -0
  29. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/Makefile +0 -0
  30. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/README.md +0 -0
  31. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/_build/logs/myst.build.json +0 -0
  32. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/changelog.d/.gitkeep +0 -0
  33. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/docs/_config.yml +0 -0
  34. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/docs/_static/style.css +0 -0
  35. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/docs/_toc.yml +0 -0
  36. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/docs/add_plotly_to_book.py +0 -0
  37. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/docs/contributing/intro.md +0 -0
  38. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/docs/intro.md +0 -0
  39. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/docs/logo.png +0 -0
  40. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/docs/python_api/commons.md +0 -0
  41. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/docs/python_api/country_template.md +0 -0
  42. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/docs/python_api/data.md +0 -0
  43. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/docs/python_api/data_storage.md +0 -0
  44. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/docs/python_api/entities.md +0 -0
  45. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/docs/python_api/enums.md +0 -0
  46. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/docs/python_api/errors.md +0 -0
  47. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/docs/python_api/experimental.md +0 -0
  48. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/docs/python_api/extension_template.md +0 -0
  49. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/docs/python_api/holders.md +0 -0
  50. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/docs/python_api/parameters.md +0 -0
  51. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/docs/python_api/periods.md +0 -0
  52. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/docs/python_api/populations.md +0 -0
  53. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/docs/python_api/projectors.md +0 -0
  54. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/docs/python_api/reforms.md +0 -0
  55. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/docs/python_api/scripts.md +0 -0
  56. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/docs/python_api/simulations.md +0 -0
  57. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/docs/python_api/taxbenefitsystems.md +0 -0
  58. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/docs/python_api/taxscales.md +0 -0
  59. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/docs/python_api/tools.md +0 -0
  60. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/docs/python_api/tracers.md +0 -0
  61. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/docs/python_api/types.md +0 -0
  62. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/docs/python_api/variables.md +0 -0
  63. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/docs/python_api/warnings.md +0 -0
  64. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/docs/usage/country.ipynb +0 -0
  65. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/docs/usage/datasets.ipynb +0 -0
  66. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/docs/usage/parameters.md +0 -0
  67. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/docs/usage/reforms.ipynb +0 -0
  68. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/docs/usage/simulation.ipynb +0 -0
  69. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/mypy.ini +0 -0
  70. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/__init__.py +0 -0
  71. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/build_metadata.py +0 -0
  72. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/charts/__init__.py +0 -0
  73. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/charts/api.py +0 -0
  74. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/charts/bar.py +0 -0
  75. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/charts/formatting.py +0 -0
  76. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/commons/__init__.py +0 -0
  77. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/commons/formulas.py +0 -0
  78. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/commons/misc.py +0 -0
  79. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/commons/rates.py +0 -0
  80. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/__init__.py +0 -0
  81. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/constants.py +0 -0
  82. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/data/__init__.py +0 -0
  83. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/data/datasets/__init__.py +0 -0
  84. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/data/datasets/country_template_dataset.py +0 -0
  85. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/entities.py +0 -0
  86. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/modelled_policies.yaml +0 -0
  87. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/parameters/benefits/basic_income.yaml +0 -0
  88. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/parameters/benefits/housing_allowance.yaml +0 -0
  89. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/parameters/benefits/index.yaml +0 -0
  90. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/parameters/benefits/parenting_allowance/amount.yaml +0 -0
  91. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/parameters/benefits/parenting_allowance/income_threshold.yaml +0 -0
  92. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/parameters/general/age_of_majority.yaml +0 -0
  93. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/parameters/general/age_of_retirement.yaml +0 -0
  94. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/parameters/taxes/housing_tax.yaml +0 -0
  95. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/parameters/taxes/income_tax_rate.yaml +0 -0
  96. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/parameters/taxes/social_security_contribution.yaml +0 -0
  97. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/reforms/__init__.py +0 -0
  98. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/reforms/add_dynamic_variable.py +0 -0
  99. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/reforms/add_new_tax.py +0 -0
  100. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/reforms/flat_social_security_contribution.py +0 -0
  101. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/reforms/modify_social_security_taxation.py +0 -0
  102. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/reforms/removal_basic_income.py +0 -0
  103. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/situation_examples/__init__.py +0 -0
  104. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/situation_examples/couple.json +0 -0
  105. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/situation_examples/housing.json +0 -0
  106. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/situation_examples/single.json +0 -0
  107. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/tests/age.yaml +0 -0
  108. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/tests/basic_income.yaml +0 -0
  109. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/tests/disposable_income.yaml +0 -0
  110. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/tests/housing_allowance.yaml +0 -0
  111. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/tests/housing_tax.yaml +0 -0
  112. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/tests/income_tax.yaml +0 -0
  113. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/tests/reforms/add_dynamic_variable.yaml +0 -0
  114. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/tests/reforms/add_new_tax.yaml +0 -0
  115. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/tests/reforms/modify_social_security_taxation.yaml +0 -0
  116. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/tests/situations/income_tax.yaml +0 -0
  117. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/tests/situations/parenting_allowance.yaml +0 -0
  118. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/tests/social_security_contribution.yaml +0 -0
  119. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/tests/test_microsimulation.py +0 -0
  120. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/variables/__init__.py +0 -0
  121. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/variables/benefits.py +0 -0
  122. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/variables/demographics.py +0 -0
  123. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/variables/housing.py +0 -0
  124. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/variables/ids.py +0 -0
  125. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/variables/income.py +0 -0
  126. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/variables/stats.py +0 -0
  127. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/country_template/variables/taxes.py +0 -0
  128. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/data/__init__.py +0 -0
  129. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/data/dataset.py +0 -0
  130. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/data_storage/__init__.py +0 -0
  131. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/data_storage/in_memory_storage.py +0 -0
  132. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/data_storage/on_disk_storage.py +0 -0
  133. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/data_structures/__init__.py +0 -0
  134. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/data_structures/parameter_metadata.py +0 -0
  135. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/data_structures/parameter_node_metadata.py +0 -0
  136. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/data_structures/reference.py +0 -0
  137. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/data_structures/unit.py +0 -0
  138. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/entities/__init__.py +0 -0
  139. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/entities/entity.py +0 -0
  140. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/entities/group_entity.py +0 -0
  141. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/entities/helpers.py +0 -0
  142. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/entities/role.py +0 -0
  143. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/enums/__init__.py +0 -0
  144. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/enums/config.py +0 -0
  145. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/enums/enum_array.py +0 -0
  146. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/errors/__init__.py +0 -0
  147. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/errors/cycle_error.py +0 -0
  148. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/errors/empty_argument_error.py +0 -0
  149. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/errors/nan_creation_error.py +0 -0
  150. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/errors/parameter_not_found_error.py +0 -0
  151. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/errors/parameter_parsing_error.py +0 -0
  152. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/errors/period_mismatch_error.py +0 -0
  153. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/errors/situation_parsing_error.py +0 -0
  154. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/errors/spiral_error.py +0 -0
  155. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/errors/variable_name_conflict_error.py +0 -0
  156. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/errors/variable_not_found_error.py +0 -0
  157. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/experimental/__init__.py +0 -0
  158. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/experimental/memory_config.py +0 -0
  159. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/extension_template/__init__.py +0 -0
  160. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/extension_template/local_benefit.py +0 -0
  161. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/extension_template/parameters/local_town/child_allowance/amount.yaml +0 -0
  162. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/extension_template/parameters/local_town/child_allowance/index.yaml +0 -0
  163. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/extension_template/parameters/local_town/index.yaml +0 -0
  164. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/extension_template/tests/local_benefit.yaml +0 -0
  165. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/holders/__init__.py +0 -0
  166. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/holders/helpers.py +0 -0
  167. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/holders/holder.py +0 -0
  168. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/model_api.py +0 -0
  169. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/parameters/__init__.py +0 -0
  170. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/parameters/at_instant_like.py +0 -0
  171. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/parameters/config.py +0 -0
  172. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/parameters/helpers.py +0 -0
  173. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/parameters/operations/__init__.py +0 -0
  174. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/parameters/operations/get_parameter.py +0 -0
  175. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/parameters/operations/homogenize_parameters.py +0 -0
  176. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/parameters/operations/interpolate_parameters.py +0 -0
  177. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/parameters/operations/propagate_parameter_metadata.py +0 -0
  178. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/parameters/operations/uprate_parameters.py +0 -0
  179. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/parameters/parameter.py +0 -0
  180. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/parameters/parameter_at_instant.py +0 -0
  181. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/parameters/parameter_node.py +0 -0
  182. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/parameters/parameter_node_at_instant.py +0 -0
  183. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/parameters/parameter_scale.py +0 -0
  184. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/parameters/parameter_scale_bracket.py +0 -0
  185. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/parameters/vectorial_parameter_node_at_instant.py +0 -0
  186. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/periods/__init__.py +0 -0
  187. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/periods/config.py +0 -0
  188. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/periods/helpers.py +0 -0
  189. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/periods/instant_.py +0 -0
  190. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/periods/period_.py +0 -0
  191. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/populations/__init__.py +0 -0
  192. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/populations/config.py +0 -0
  193. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/populations/group_population.py +0 -0
  194. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/populations/population.py +0 -0
  195. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/projectors/__init__.py +0 -0
  196. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/projectors/entity_to_person_projector.py +0 -0
  197. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/projectors/first_person_to_entity_projector.py +0 -0
  198. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/projectors/helpers.py +0 -0
  199. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/projectors/projector.py +0 -0
  200. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/projectors/unique_role_to_entity_projector.py +0 -0
  201. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/reforms/__init__.py +0 -0
  202. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/reforms/reform.py +0 -0
  203. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/scripts/__init__.py +0 -0
  204. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/scripts/assets/__init__.py +0 -0
  205. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/scripts/assets/index.html +0 -0
  206. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/scripts/policyengine_command.py +0 -0
  207. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/scripts/run_data.py +0 -0
  208. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/scripts/run_test.py +0 -0
  209. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/scripts/simulation_generator.py +0 -0
  210. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/simulations/__init__.py +0 -0
  211. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/simulations/helpers.py +0 -0
  212. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/simulations/individual_sim.py +0 -0
  213. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/simulations/microsimulation.py +0 -0
  214. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/simulations/simulation_builder.py +0 -0
  215. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/simulations/simulation_macro_cache.py +0 -0
  216. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/taxbenefitsystems/__init__.py +0 -0
  217. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/taxbenefitsystems/tax_benefit_system.py +0 -0
  218. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/taxscales/__init__.py +0 -0
  219. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/taxscales/abstract_rate_tax_scale.py +0 -0
  220. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/taxscales/abstract_tax_scale.py +0 -0
  221. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/taxscales/amount_tax_scale_like.py +0 -0
  222. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/taxscales/helpers.py +0 -0
  223. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/taxscales/linear_average_rate_tax_scale.py +0 -0
  224. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/taxscales/marginal_amount_tax_scale.py +0 -0
  225. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/taxscales/marginal_rate_tax_scale.py +0 -0
  226. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/taxscales/rate_tax_scale_like.py +0 -0
  227. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/taxscales/single_amount_tax_scale.py +0 -0
  228. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/taxscales/tax_scale_like.py +0 -0
  229. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/tools/__init__.py +0 -0
  230. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/tools/google_cloud.py +0 -0
  231. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/tools/hugging_face.py +0 -0
  232. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/tools/simulation_dumper.py +0 -0
  233. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/tools/test_from_situation.py +0 -0
  234. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/tools/test_runner.py +0 -0
  235. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/tools/win_file_manager.py +0 -0
  236. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/tracers/__init__.py +0 -0
  237. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/tracers/computation_log.py +0 -0
  238. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/tracers/flat_trace.py +0 -0
  239. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/tracers/full_tracer.py +0 -0
  240. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/tracers/performance_log.py +0 -0
  241. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/tracers/simple_tracer.py +0 -0
  242. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/tracers/trace_node.py +0 -0
  243. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/tracers/tracing_parameter_node_at_instant.py +0 -0
  244. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/tracers/variable_graph.py +0 -0
  245. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/types/__init__.py +0 -0
  246. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/types/data_types/__init__.py +0 -0
  247. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/types/data_types/arrays.py +0 -0
  248. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/variables/__init__.py +0 -0
  249. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/variables/config.py +0 -0
  250. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/variables/defined_for.py +0 -0
  251. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/variables/helpers.py +0 -0
  252. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/variables/typing.py +0 -0
  253. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/variables/variable.py +0 -0
  254. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/warnings/__init__.py +0 -0
  255. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/warnings/libyaml_warning.py +0 -0
  256. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/warnings/memory_config_warning.py +0 -0
  257. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/policyengine_core/warnings/tempfile_warning.py +0 -0
  258. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/pytest.ini +0 -0
  259. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/test.ipynb +0 -0
  260. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/__init__.py +0 -0
  261. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/conftest.py +0 -0
  262. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/__init__.py +0 -0
  263. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/commons/__init__.py +0 -0
  264. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/commons/test_between_function.py +0 -0
  265. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/commons/test_formulas.py +0 -0
  266. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/commons/test_is_in_function.py +0 -0
  267. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/commons/test_random_seed.py +0 -0
  268. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/commons/test_rates.py +0 -0
  269. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/data/test_dataset.py +0 -0
  270. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/model_api/test_index_.py +0 -0
  271. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/parameter_validation/__init__.py +0 -0
  272. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/parameter_validation/array_type.yaml +0 -0
  273. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/parameter_validation/duplicate_key.yaml +0 -0
  274. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/parameter_validation/filesystem_hierarchy/empty_index_file/index.yaml +0 -0
  275. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/parameter_validation/filesystem_hierarchy/node1/param.yaml +0 -0
  276. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/parameter_validation/indentation.yaml +0 -0
  277. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/parameter_validation/missing_value.yaml +0 -0
  278. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/parameter_validation/parameter_for_unit_propagation.yaml +0 -0
  279. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/parameter_validation/test_parameter_clone.py +0 -0
  280. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/parameter_validation/test_parameter_validation.py +0 -0
  281. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/parameter_validation/test_propagate_units.py +0 -0
  282. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/parameter_validation/unexpected_key_in_parameter.yaml +0 -0
  283. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/parameter_validation/unexpected_key_in_scale.yaml +0 -0
  284. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/parameter_validation/unexpected_key_in_value_at_instant.yaml +0 -0
  285. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/parameter_validation/unexpected_key_in_value_history.yaml +0 -0
  286. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/parameter_validation/wrong_date.yaml +0 -0
  287. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/parameter_validation/wrong_scale.yaml +0 -0
  288. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/parameter_validation/wrong_type_in_bracket.yaml +0 -0
  289. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/parameter_validation/wrong_type_in_brackets.yaml +0 -0
  290. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/parameter_validation/wrong_type_in_parameter.yaml +0 -0
  291. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/parameter_validation/wrong_type_in_scale.yaml +0 -0
  292. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/parameter_validation/wrong_type_in_value_history.yaml +0 -0
  293. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/parameter_validation/wrong_value.yaml +0 -0
  294. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/parameter_validation/yaml_hierarchy/node1.yaml +0 -0
  295. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/parameters/operations/test_interpolation.py +0 -0
  296. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/parameters/operations/test_nesting.py +0 -0
  297. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/parameters/operations/test_propagation.py +0 -0
  298. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/parameters/operations/test_uprating.py +0 -0
  299. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/parameters/test_numpy2_structured_arrays.py +0 -0
  300. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/parameters_fancy_indexing/__init__.py +0 -0
  301. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/parameters_fancy_indexing/bareme.yaml +0 -0
  302. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/parameters_fancy_indexing/local_tax.yaml +0 -0
  303. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/parameters_fancy_indexing/rate.yaml +0 -0
  304. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/parameters_fancy_indexing/test_fancy_indexing.py +0 -0
  305. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/tax_scales/__init__.py +0 -0
  306. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/tax_scales/test_abstract_rate_tax_scale.py +0 -0
  307. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/tax_scales/test_abstract_tax_scale.py +0 -0
  308. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/tax_scales/test_linear_average_rate_tax_scale.py +0 -0
  309. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/tax_scales/test_marginal_amount_tax_scale.py +0 -0
  310. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/tax_scales/test_marginal_rate_tax_scale.py +0 -0
  311. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/tax_scales/test_rate_tax_scale_like.py +0 -0
  312. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/tax_scales/test_single_amount_tax_scale.py +0 -0
  313. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/tax_scales/test_tax_scales_commons.py +0 -0
  314. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/test_apply_reform_invalidates_cache.py +0 -0
  315. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/test_apply_reform_preserves_user_inputs.py +0 -0
  316. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/test_assert_near_precision.py +0 -0
  317. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/test_axes.py +0 -0
  318. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/test_bincount_minlength.py +0 -0
  319. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/test_build_metadata.py +0 -0
  320. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/test_calculate_output.py +0 -0
  321. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/test_countries.py +0 -0
  322. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/test_cycles.py +0 -0
  323. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/test_dataset_getattr.py +0 -0
  324. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/test_dump_restore.py +0 -0
  325. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/test_entities.py +0 -0
  326. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/test_eternity_subperiods.py +0 -0
  327. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/test_extensions.py +0 -0
  328. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/test_fast_cache.py +0 -0
  329. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/test_fast_cache_guards.py +0 -0
  330. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/test_formulas.py +0 -0
  331. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/test_holder_branch_fallback.py +0 -0
  332. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/test_holders.py +0 -0
  333. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/test_macro_cache_not_singleton.py +0 -0
  334. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/test_medium_fixes.py +0 -0
  335. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/test_microsimulation_person_accessor.py +0 -0
  336. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/test_opt_out_cache.py +0 -0
  337. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/test_pandas3_compatibility.py +0 -0
  338. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/test_parameters.py +0 -0
  339. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/test_periods.py +0 -0
  340. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/test_projectors.py +0 -0
  341. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/test_reform_parameter_isolation.py +0 -0
  342. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/test_reforms.py +0 -0
  343. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/test_simulation_builder.py +0 -0
  344. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/test_stable_hash_seed.py +0 -0
  345. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/test_storage_delete_branch.py +0 -0
  346. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/test_subsample_invalidates_cache.py +0 -0
  347. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/test_tax_benefit_system_cache_identity.py +0 -0
  348. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/test_tracers.py +0 -0
  349. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/test_yaml.py +0 -0
  350. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/tools/__init__.py +0 -0
  351. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/tools/test_assert_near.py +0 -0
  352. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/tools/test_google_cloud.py +0 -0
  353. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/tools/test_hugging_face.py +0 -0
  354. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/tools/test_runner/test_yaml_runner.py +0 -0
  355. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/variables/test_adds.py +0 -0
  356. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/variables/test_annualize.py +0 -0
  357. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/variables/test_bounds.py +0 -0
  358. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/variables/test_defined_for.py +0 -0
  359. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/variables/test_subtracts.py +0 -0
  360. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/variables/test_subtracts_sign.py +0 -0
  361. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/core/variables/test_variables.py +0 -0
  362. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/fixtures/__init__.py +0 -0
  363. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/fixtures/appclient.py +0 -0
  364. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/fixtures/entities.py +0 -0
  365. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/fixtures/simulations.py +0 -0
  366. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/fixtures/taxbenefitsystems.py +0 -0
  367. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/fixtures/variables.py +0 -0
  368. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/fixtures/yaml_tests/__init__.py +0 -0
  369. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/fixtures/yaml_tests/directory/subdirectory/test_4.yaml +0 -0
  370. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/fixtures/yaml_tests/directory/test_1.yaml +0 -0
  371. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/fixtures/yaml_tests/directory/test_2.yaml +0 -0
  372. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/fixtures/yaml_tests/failing_test_absolute_error_margin.yaml +0 -0
  373. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/fixtures/yaml_tests/failing_test_relative_error_margin.yaml +0 -0
  374. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/fixtures/yaml_tests/test_absolute_error_margin.yaml +0 -0
  375. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/fixtures/yaml_tests/test_failure.yaml +0 -0
  376. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/fixtures/yaml_tests/test_name_filter.yaml +0 -0
  377. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/fixtures/yaml_tests/test_relative_error_margin.yaml +0 -0
  378. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/fixtures/yaml_tests/test_success.yml +0 -0
  379. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/fixtures/yaml_tests/test_with_anchors.yaml +0 -0
  380. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/fixtures/yaml_tests/test_with_extension.yaml +0 -0
  381. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/fixtures/yaml_tests/test_with_reform.yaml +0 -0
  382. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/fixtures/yaml_tests/test_with_reform_2.yaml +0 -0
  383. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/smoke/test_country_init.py +0 -0
  384. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/tests/smoke/test_us.py +0 -0
  385. {policyengine_core-3.26.0 → policyengine_core-3.26.2}/uv.lock +0 -0
@@ -0,0 +1,33 @@
1
+ # Agent Instructions
2
+
3
+ These instructions apply repository-wide.
4
+
5
+ ## Skills system
6
+
7
+ Canonical AI-facing engineering skills live under `docs/engineering/skills/`.
8
+ Use those files as the source of truth across Codex, Claude, Copilot, and other
9
+ AI tools.
10
+
11
+ When adding, moving, or reviewing tests, read
12
+ `docs/engineering/skills/testing.md`.
13
+
14
+ When reviewing changes to public APIs, architecture, documentation, or generated
15
+ artifacts, read `docs/engineering/skills/documentation_review.md`.
16
+
17
+ ## GitHub PRs
18
+
19
+ Read `docs/engineering/skills/github-prs.md` before opening, replacing, or
20
+ sharing any pull request.
21
+
22
+ Before creating or sharing any PR, all developers and agents must:
23
+
24
+ 1. Confirm the target remote is the canonical repository:
25
+ `gh repo view PolicyEngine/policyengine-core --json nameWithOwner`.
26
+ 2. Add a towncrier changelog fragment in `changelog.d/` using the format
27
+ documented in `docs/engineering/skills/github-prs.md`.
28
+ 3. Push the branch to `PolicyEngine/policyengine-core`.
29
+ 4. Create the PR against `master`.
30
+ 5. Verify the PR head repository before reporting it.
31
+
32
+ If you cannot push to the canonical repository, stop and ask for access. Do not
33
+ open a fork PR as a fallback unless the user explicitly asks for one.
@@ -1,3 +1,21 @@
1
+ ## [3.26.2] - 2026-05-14
2
+
3
+ ### Fixed
4
+
5
+ - Avoid constructing macro-cache metadata during calculations when macro-cache reads are disabled.
6
+
7
+
8
+ ## [3.26.1] - 2026-05-07
9
+
10
+ ### Changed
11
+
12
+ - Added provider-neutral AI engineering guidance for tests, documentation review, pull requests, and changelog fragments.
13
+
14
+ ### Fixed
15
+
16
+ - Fixed enum encoding for HDF5-style UTF-8 byte-string arrays containing non-ASCII enum member names.
17
+
18
+
1
19
  ## [3.26.0] - 2026-05-04
2
20
 
3
21
  ### Added
@@ -0,0 +1,24 @@
1
+ # Claude Instructions
2
+
3
+ These instructions apply repository-wide.
4
+
5
+ ## Canonical guidance
6
+
7
+ Repository-wide AI-facing engineering guidance lives in `AGENTS.md`.
8
+ Canonical skills live under `docs/engineering/skills/`.
9
+
10
+ Use those files as the source of truth. This file is a Claude adapter and should
11
+ stay thin; do not duplicate detailed testing, CI, formatting, or architecture
12
+ rules here.
13
+
14
+ ## Required skill lookup
15
+
16
+ Before opening, replacing, or sharing a PR, read
17
+ `docs/engineering/skills/github-prs.md`. Add the required towncrier changelog
18
+ fragment before creating the PR.
19
+
20
+ When adding, moving, or reviewing tests, read
21
+ `docs/engineering/skills/testing.md` before editing.
22
+
23
+ When reviewing changes to public APIs, architecture, documentation, or generated
24
+ artifacts, read `docs/engineering/skills/documentation_review.md`.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: policyengine-core
3
- Version: 3.26.0
3
+ Version: 3.26.2
4
4
  Summary: Core microsimulation engine enabling country-specific policy models.
5
5
  Project-URL: Homepage, https://github.com/policyengine/policyengine-core
6
6
  Author-email: PolicyEngine <hello@policyengine.org>
@@ -0,0 +1,17 @@
1
+ # Engineering Skills
2
+
3
+ This directory is the canonical source for AI-facing engineering rules.
4
+
5
+ Tool-specific instruction files such as `AGENTS.md`, `CLAUDE.md`, and
6
+ `.github/copilot-instructions.md` should point here instead of duplicating
7
+ implementation-specific guidance. When a rule changes, update the skill here
8
+ first, then keep adapters thin.
9
+
10
+ Current skills:
11
+
12
+ - `documentation_review.md`: model-neutral review checklist for public API,
13
+ architecture, documentation, and generated artifact changes.
14
+ - `github-prs.md`: canonical PR workflow, required changelog fragments, PR head
15
+ verification, and title conventions.
16
+ - `testing.md`: test placement, fixture scope, command, and environment
17
+ expectations.
@@ -0,0 +1,51 @@
1
+ # Documentation Review
2
+
3
+ Use this skill when reviewing a pull request that changes public APIs,
4
+ architecture, documentation, generated artifacts, or developer-facing workflows.
5
+
6
+ ## Review goal
7
+
8
+ Documentation review is a harness check, not copyediting. Confirm that durable
9
+ documentation still describes the code paths a maintainer or AI agent would use
10
+ to understand, validate, or modify the system.
11
+
12
+ Do not put PR-specific confidence, impact, or reviewer notes into durable API
13
+ docs. Keep durable facts in source documentation and keep review judgment in the
14
+ PR description or review comment.
15
+
16
+ ## Trigger files
17
+
18
+ Run documentation review when a PR changes any of these paths:
19
+
20
+ - `policyengine_core/`
21
+ - `docs/`
22
+ - `.github/`
23
+ - `README.md`
24
+ - `CONTRIBUTING.md`
25
+ - `pyproject.toml`
26
+ - generated documentation or package metadata
27
+
28
+ Also run it when a PR changes public import surfaces, command-line behavior,
29
+ test/development workflows, changelog tooling, or release behavior even if the
30
+ changed path is not listed above.
31
+
32
+ ## Checks
33
+
34
+ - Public API changes are reflected in relevant docs or API reference pages.
35
+ - Developer workflow changes are reflected in `README.md`, contributing docs, or
36
+ AI-facing skills when needed.
37
+ - Generated artifacts are not hand-edited unless the repo expects them to be
38
+ checked in.
39
+ - Changelog fragment guidance still matches the towncrier config in
40
+ `pyproject.toml`.
41
+ - Review notes distinguish facts proven by code or tests from assumptions.
42
+
43
+ ## Review output
44
+
45
+ Use a concise PR-facing note. Include:
46
+
47
+ - Documentation changes observed, or `not required` with a reason.
48
+ - Commands run, or commands not run with a reason.
49
+ - Impact: `low`, `medium`, or `high`.
50
+ - Confidence: `low`, `medium`, or `high`.
51
+ - Known gaps that should be handled in this PR or a follow-up.
@@ -0,0 +1,71 @@
1
+ # GitHub PRs
2
+
3
+ These rules apply to every developer and AI agent opening pull requests in this
4
+ repository.
5
+
6
+ ## Repository and branch
7
+
8
+ Open PRs against `master` in `PolicyEngine/policyengine-core`.
9
+
10
+ Before creating or sharing a PR:
11
+
12
+ 1. Confirm the canonical repository is reachable:
13
+ `gh repo view PolicyEngine/policyengine-core --json nameWithOwner`.
14
+ 2. Add the required towncrier changelog fragment under `changelog.d/`.
15
+ 3. Push the current branch to `PolicyEngine/policyengine-core`.
16
+ 4. Create the PR against `master`.
17
+ 5. Verify the PR head repository before reporting it:
18
+ `gh pr view <PR> --repo PolicyEngine/policyengine-core --json headRepositoryOwner,headRepository`.
19
+
20
+ If you cannot push to the canonical repository, stop and ask for access. Do not
21
+ open a fork PR as a fallback unless the user explicitly asks for one.
22
+
23
+ ## Changelog fragment
24
+
25
+ A changelog entry is required before opening, replacing, or sharing a PR. When a
26
+ user asks an AI agent to open a PR, the agent must check for an appropriate
27
+ fragment and add one if it is missing before running `gh pr create`.
28
+
29
+ Use towncrier fragments in this format:
30
+
31
+ ```text
32
+ changelog.d/<short-slug>.<type>.md
33
+ ```
34
+
35
+ Allowed `<type>` values are configured in `pyproject.toml`:
36
+
37
+ - `breaking`
38
+ - `added`
39
+ - `changed`
40
+ - `fixed`
41
+ - `removed`
42
+
43
+ Examples:
44
+
45
+ ```text
46
+ changelog.d/fix-enum-utf8-bytes.fixed.md
47
+ changelog.d/add-agent-pr-guidance.changed.md
48
+ ```
49
+
50
+ Write one concise Markdown sentence in the fragment. Use `fixed` for bug fixes,
51
+ `added` for new user-facing capabilities, `changed` for behavior, documentation,
52
+ tooling, or refactors, `removed` for removals, and `breaking` only for changes
53
+ that intentionally break compatibility. Prefer updating an existing branch
54
+ fragment over adding duplicate fragments for the same PR.
55
+
56
+ Do not run `make changelog` for a PR. The release workflow builds
57
+ `CHANGELOG.md` from fragments after merge.
58
+
59
+ ## PR title
60
+
61
+ Do not add `[codex]`, `[claude]`, `[copilot]`, or other agent labels to PR
62
+ titles. Use a plain descriptive title.
63
+
64
+ ## PR body
65
+
66
+ Keep the description concrete:
67
+
68
+ - Link the issue the PR fixes.
69
+ - Summarize the user-visible behavior change.
70
+ - List the tests or checks run.
71
+ - Call out any commands that were not run and why.
@@ -0,0 +1,38 @@
1
+ # Testing Skill
2
+
3
+ Use this skill whenever adding, moving, or reviewing tests.
4
+
5
+ ## Commands
6
+
7
+ Use `uv run` for Python commands so the repo environment is selected
8
+ consistently.
9
+
10
+ Common checks:
11
+
12
+ ```bash
13
+ uv run pytest tests/core/enums/test_enum.py -v
14
+ uv run pytest tests/core/test_file.py::test_name -v
15
+ make format
16
+ make test
17
+ make documentation
18
+ ```
19
+
20
+ Run the narrowest test that proves the change while working. Before handing off a
21
+ broader behavioral change, run the relevant focused tests and formatting check.
22
+
23
+ ## Placement
24
+
25
+ - Put core package tests under `tests/core/`.
26
+ - Put smoke tests under `tests/smoke/`.
27
+ - Keep fixtures under `tests/fixtures/` unless pytest fixture discovery requires
28
+ a local `conftest.py`.
29
+ - Do not add tests inside `policyengine_core/`.
30
+
31
+ ## Fixture and dependency boundaries
32
+
33
+ - Keep root `tests/conftest.py` lightweight.
34
+ - Avoid network access, cloud credentials, or country package imports in ordinary
35
+ unit tests unless the test is explicitly a smoke/integration check.
36
+ - Prefer small synthetic fixtures for regression tests.
37
+ - When fixing a bug, add a regression test that fails without the fix and passes
38
+ with it unless the change is documentation-only.
@@ -77,8 +77,11 @@ class Enum(enum.Enum):
77
77
  indices = np.array([item.index for item in array], dtype=ENUM_ARRAY_DTYPE)
78
78
  return EnumArray(indices, cls)
79
79
 
80
- # Convert byte-strings or object arrays to Unicode strings
81
- if array.dtype.kind == "S" or array.dtype == object:
80
+ # Convert fixed-width byte strings, as returned by h5py for string
81
+ # datasets, to Unicode before matching enum names.
82
+ if array.dtype.kind == "S":
83
+ array = np.char.decode(array, "utf-8")
84
+ elif array.dtype == object:
82
85
  array = array.astype(str)
83
86
 
84
87
  if isinstance(array, np.ndarray) and array.dtype.kind in {"U", "S"}:
@@ -707,11 +707,10 @@ class Simulation:
707
707
  if cached_array is not None:
708
708
  return cached_array
709
709
 
710
- smc = SimulationMacroCache(self.tax_benefit_system)
711
-
712
710
  # Check if cache can be used, if available, check if path exists
713
711
  is_cache_available = self.check_macro_cache(variable_name, str(period))
714
712
  if is_cache_available:
713
+ smc = SimulationMacroCache(self.tax_benefit_system)
715
714
  smc.set_cache_path(
716
715
  self.dataset.file_path.parent,
717
716
  self.dataset.name,
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "policyengine-core"
3
- version = "3.26.0"
3
+ version = "3.26.2"
4
4
  description = "Core microsimulation engine enabling country-specific policy models."
5
5
  readme = "README.md"
6
6
  authors = [
@@ -74,6 +74,30 @@ def test_enum_encode_all_invalid_raises_error():
74
74
  assert "FOO" in error_message or "BAR" in error_message or "BAZ" in error_message
75
75
 
76
76
 
77
+ def test_enum_encode_utf8_byte_string_array():
78
+ """
79
+ Test that HDF5-style UTF-8 byte strings encode as enum names.
80
+
81
+ The ñ mirrors values like DOÑA_ANA_COUNTY_NM. It is a non-ASCII
82
+ character, so NumPy's default byte-string conversion cannot decode it
83
+ as ASCII.
84
+ """
85
+
86
+ class Sample(Enum):
87
+ DOÑA_ANA = "Doña Ana"
88
+ DWORKIN = "dworkin"
89
+
90
+ byte_string_array = np.array(
91
+ ["DOÑA_ANA".encode("utf-8"), b"DWORKIN"],
92
+ dtype="S10",
93
+ )
94
+
95
+ encoded_array = Sample.encode(byte_string_array)
96
+
97
+ assert isinstance(encoded_array, EnumArray)
98
+ assert list(encoded_array) == [0, 1]
99
+
100
+
77
101
  def test_enum_encode_empty_string_raises_error():
78
102
  """Test that encoding empty strings raises ValueError."""
79
103
 
@@ -1,5 +1,6 @@
1
1
  from policyengine_core.country_template.situation_examples import single
2
2
  from policyengine_core.simulations import SimulationBuilder
3
+ import policyengine_core.simulations.simulation as simulation_module
3
4
  from policyengine_core.simulations.simulation_macro_cache import (
4
5
  SimulationMacroCache,
5
6
  )
@@ -90,3 +91,24 @@ def test_macro_cache(tax_benefit_system):
90
91
  )
91
92
  cache.clear_cache(cache.cache_folder_path)
92
93
  assert not cache.cache_folder_path.exists()
94
+
95
+
96
+ def test_calculate_without_macro_cache_does_not_build_macro_cache(
97
+ tax_benefit_system, monkeypatch
98
+ ):
99
+ class UnexpectedSimulationMacroCache:
100
+ def __init__(self, tax_benefit_system):
101
+ raise AssertionError(
102
+ "SimulationMacroCache should not be constructed when "
103
+ "macro cache reads are disabled"
104
+ )
105
+
106
+ monkeypatch.setattr(
107
+ simulation_module,
108
+ "SimulationMacroCache",
109
+ UnexpectedSimulationMacroCache,
110
+ )
111
+
112
+ simulation = SimulationBuilder().build_default_simulation(tax_benefit_system)
113
+
114
+ simulation.calculate("income_tax", "2017-01")