policyengine 5.3.0__tar.gz → 5.3.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 (285) hide show
  1. {policyengine-5.3.0 → policyengine-5.3.1}/CHANGELOG.md +7 -0
  2. {policyengine-5.3.0 → policyengine-5.3.1}/PKG-INFO +4 -1
  3. {policyengine-5.3.0 → policyengine-5.3.1}/docs/bundles.md +13 -0
  4. {policyengine-5.3.0 → policyengine-5.3.1}/pyproject.toml +4 -1
  5. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/data/bundle/manifest.json +22 -12
  6. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/data/bundle/uk.trace.tro.jsonld +5 -5
  7. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/data/bundle/us.trace.tro.jsonld +5 -5
  8. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine.egg-info/PKG-INFO +4 -1
  9. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine.egg-info/requires.txt +3 -0
  10. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_bundle.py +1 -0
  11. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_bundle_metadata.py +24 -0
  12. {policyengine-5.3.0 → policyengine-5.3.1}/uv.lock +79 -73
  13. {policyengine-5.3.0 → policyengine-5.3.1}/.claude/policyengine-guide.md +0 -0
  14. {policyengine-5.3.0 → policyengine-5.3.1}/.claude/quick-reference.md +0 -0
  15. {policyengine-5.3.0 → policyengine-5.3.1}/.github/CONTRIBUTING.md +0 -0
  16. {policyengine-5.3.0 → policyengine-5.3.1}/.github/bump_version.py +0 -0
  17. {policyengine-5.3.0 → policyengine-5.3.1}/.github/capture-version.sh +0 -0
  18. {policyengine-5.3.0 → policyengine-5.3.1}/.github/changelog_template.md +0 -0
  19. {policyengine-5.3.0 → policyengine-5.3.1}/.github/check-changelog.sh +0 -0
  20. {policyengine-5.3.0 → policyengine-5.3.1}/.github/copilot-instructions.md +0 -0
  21. {policyengine-5.3.0 → policyengine-5.3.1}/.github/dispatch-policyengine-release.sh +0 -0
  22. {policyengine-5.3.0 → policyengine-5.3.1}/.github/fetch_version.py +0 -0
  23. {policyengine-5.3.0 → policyengine-5.3.1}/.github/get-changelog-diff.sh +0 -0
  24. {policyengine-5.3.0 → policyengine-5.3.1}/.github/has-functional-changes.sh +0 -0
  25. {policyengine-5.3.0 → policyengine-5.3.1}/.github/is-version-number-acceptable.sh +0 -0
  26. {policyengine-5.3.0 → policyengine-5.3.1}/.github/publish-git-tag.sh +0 -0
  27. {policyengine-5.3.0 → policyengine-5.3.1}/.github/wait-for-pypi.sh +0 -0
  28. {policyengine-5.3.0 → policyengine-5.3.1}/.github/workflows/draft-pdf.yml +0 -0
  29. {policyengine-5.3.0 → policyengine-5.3.1}/.github/workflows/pr_code_changes.yaml +0 -0
  30. {policyengine-5.3.0 → policyengine-5.3.1}/.github/workflows/pr_docs_changes.yaml +0 -0
  31. {policyengine-5.3.0 → policyengine-5.3.1}/.github/workflows/push.yaml +0 -0
  32. {policyengine-5.3.0 → policyengine-5.3.1}/.gitignore +0 -0
  33. {policyengine-5.3.0 → policyengine-5.3.1}/.python-version +0 -0
  34. {policyengine-5.3.0 → policyengine-5.3.1}/AGENTS.md +0 -0
  35. {policyengine-5.3.0 → policyengine-5.3.1}/CITATION.cff +0 -0
  36. {policyengine-5.3.0 → policyengine-5.3.1}/CLAUDE.md +0 -0
  37. {policyengine-5.3.0 → policyengine-5.3.1}/CODE_OF_CONDUCT.md +0 -0
  38. {policyengine-5.3.0 → policyengine-5.3.1}/CONTRIBUTING.md +0 -0
  39. {policyengine-5.3.0 → policyengine-5.3.1}/LICENSE +0 -0
  40. {policyengine-5.3.0 → policyengine-5.3.1}/Makefile +0 -0
  41. {policyengine-5.3.0 → policyengine-5.3.1}/README.md +0 -0
  42. {policyengine-5.3.0 → policyengine-5.3.1}/architecture.png +0 -0
  43. {policyengine-5.3.0 → policyengine-5.3.1}/architecture.svg +0 -0
  44. {policyengine-5.3.0 → policyengine-5.3.1}/changelog.d/.gitkeep +0 -0
  45. {policyengine-5.3.0 → policyengine-5.3.1}/docs/.gitignore +0 -0
  46. {policyengine-5.3.0 → policyengine-5.3.1}/docs/_generator/README.md +0 -0
  47. {policyengine-5.3.0 → policyengine-5.3.1}/docs/_generator/build_reference.py +0 -0
  48. {policyengine-5.3.0 → policyengine-5.3.1}/docs/_quarto.yml +0 -0
  49. {policyengine-5.3.0 → policyengine-5.3.1}/docs/countries.md +0 -0
  50. {policyengine-5.3.0 → policyengine-5.3.1}/docs/data-publishing-design.md +0 -0
  51. {policyengine-5.3.0 → policyengine-5.3.1}/docs/decile-impact-spec.md +0 -0
  52. {policyengine-5.3.0 → policyengine-5.3.1}/docs/dev.md +0 -0
  53. {policyengine-5.3.0 → policyengine-5.3.1}/docs/engineering/runbooks/build-m-us-populace-certification.md +0 -0
  54. {policyengine-5.3.0 → policyengine-5.3.1}/docs/engineering/skills/README.md +0 -0
  55. {policyengine-5.3.0 → policyengine-5.3.1}/docs/engineering/skills/data-certification.md +0 -0
  56. {policyengine-5.3.0 → policyengine-5.3.1}/docs/engineering/skills/github-prs.md +0 -0
  57. {policyengine-5.3.0 → policyengine-5.3.1}/docs/engineering/skills/repository-guidance.md +0 -0
  58. {policyengine-5.3.0 → policyengine-5.3.1}/docs/examples.md +0 -0
  59. {policyengine-5.3.0 → policyengine-5.3.1}/docs/getting-started.md +0 -0
  60. {policyengine-5.3.0 → policyengine-5.3.1}/docs/households.md +0 -0
  61. {policyengine-5.3.0 → policyengine-5.3.1}/docs/impact-analysis.md +0 -0
  62. {policyengine-5.3.0 → policyengine-5.3.1}/docs/index.md +0 -0
  63. {policyengine-5.3.0 → policyengine-5.3.1}/docs/methodology/index.md +0 -0
  64. {policyengine-5.3.0 → policyengine-5.3.1}/docs/methodology/model-architecture.md +0 -0
  65. {policyengine-5.3.0 → policyengine-5.3.1}/docs/methodology/us-health-costs.md +0 -0
  66. {policyengine-5.3.0 → policyengine-5.3.1}/docs/microsim.md +0 -0
  67. {policyengine-5.3.0 → policyengine-5.3.1}/docs/outputs.md +0 -0
  68. {policyengine-5.3.0 → policyengine-5.3.1}/docs/programs/index.md +0 -0
  69. {policyengine-5.3.0 → policyengine-5.3.1}/docs/programs/us-chip.md +0 -0
  70. {policyengine-5.3.0 → policyengine-5.3.1}/docs/reference/index.md +0 -0
  71. {policyengine-5.3.0 → policyengine-5.3.1}/docs/reforms.md +0 -0
  72. {policyengine-5.3.0 → policyengine-5.3.1}/docs/regions.md +0 -0
  73. {policyengine-5.3.0 → policyengine-5.3.1}/docs/release-bundles.md +0 -0
  74. {policyengine-5.3.0 → policyengine-5.3.1}/docs/run-records.md +0 -0
  75. {policyengine-5.3.0 → policyengine-5.3.1}/docs/trace-case-study.md +0 -0
  76. {policyengine-5.3.0 → policyengine-5.3.1}/docs/visualisation.md +0 -0
  77. {policyengine-5.3.0 → policyengine-5.3.1}/examples/belgium_axiom_pilot.py +0 -0
  78. {policyengine-5.3.0 → policyengine-5.3.1}/examples/employment_income_variation_uk.py +0 -0
  79. {policyengine-5.3.0 → policyengine-5.3.1}/examples/employment_income_variation_us.py +0 -0
  80. {policyengine-5.3.0 → policyengine-5.3.1}/examples/household_impact_example.py +0 -0
  81. {policyengine-5.3.0 → policyengine-5.3.1}/examples/income_bands_uk.py +0 -0
  82. {policyengine-5.3.0 → policyengine-5.3.1}/examples/income_distribution_us.py +0 -0
  83. {policyengine-5.3.0 → policyengine-5.3.1}/examples/paper_repro_uk.py +0 -0
  84. {policyengine-5.3.0 → policyengine-5.3.1}/examples/policy_change_uk.py +0 -0
  85. {policyengine-5.3.0 → policyengine-5.3.1}/examples/speedtest_us_simulation.py +0 -0
  86. {policyengine-5.3.0 → policyengine-5.3.1}/examples/us_budgetary_impact.py +0 -0
  87. {policyengine-5.3.0 → policyengine-5.3.1}/paper-preview.html +0 -0
  88. {policyengine-5.3.0 → policyengine-5.3.1}/paper.bib +0 -0
  89. {policyengine-5.3.0 → policyengine-5.3.1}/paper.md +0 -0
  90. {policyengine-5.3.0 → policyengine-5.3.1}/scripts/bundle.py +0 -0
  91. {policyengine-5.3.0 → policyengine-5.3.1}/scripts/certify_data_release.py +0 -0
  92. {policyengine-5.3.0 → policyengine-5.3.1}/scripts/check_data_staleness.py +0 -0
  93. {policyengine-5.3.0 → policyengine-5.3.1}/scripts/export_bundle_release_assets.py +0 -0
  94. {policyengine-5.3.0 → policyengine-5.3.1}/scripts/generate_bundle_artifacts.py +0 -0
  95. {policyengine-5.3.0 → policyengine-5.3.1}/scripts/generate_trace_tros.py +0 -0
  96. {policyengine-5.3.0 → policyengine-5.3.1}/scripts/prepare_package_bundle_update.py +0 -0
  97. {policyengine-5.3.0 → policyengine-5.3.1}/setup.cfg +0 -0
  98. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/__init__.py +0 -0
  99. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/bundle.py +0 -0
  100. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/cli.py +0 -0
  101. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/core/__init__.py +0 -0
  102. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/core/cache.py +0 -0
  103. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/core/dataset.py +0 -0
  104. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/core/dynamic.py +0 -0
  105. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/core/output.py +0 -0
  106. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/core/parameter.py +0 -0
  107. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/core/parameter_node.py +0 -0
  108. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/core/parameter_value.py +0 -0
  109. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/core/policy.py +0 -0
  110. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/core/region.py +0 -0
  111. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/core/run_record.py +0 -0
  112. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/core/scoping_strategy.py +0 -0
  113. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/core/simulation.py +0 -0
  114. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/core/tax_benefit_model.py +0 -0
  115. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/core/tax_benefit_model_version.py +0 -0
  116. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/core/variable.py +0 -0
  117. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/countries/__init__.py +0 -0
  118. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/countries/uk/__init__.py +0 -0
  119. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/countries/uk/regions.py +0 -0
  120. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/countries/us/__init__.py +0 -0
  121. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/countries/us/data/__init__.py +0 -0
  122. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/countries/us/data/districts.py +0 -0
  123. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/countries/us/data/places.py +0 -0
  124. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/countries/us/data/states.py +0 -0
  125. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/countries/us/regions.py +0 -0
  126. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/data/__init__.py +0 -0
  127. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/data/schemas/trace_tro.schema.json +0 -0
  128. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/data/uk_geography_assets.py +0 -0
  129. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/derivations/__init__.py +0 -0
  130. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/derivations/narrate.py +0 -0
  131. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/derivations/trace.py +0 -0
  132. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/graph/__init__.py +0 -0
  133. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/graph/extractor.py +0 -0
  134. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/graph/graph.py +0 -0
  135. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/outputs/__init__.py +0 -0
  136. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/outputs/aggregate.py +0 -0
  137. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/outputs/change_aggregate.py +0 -0
  138. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/outputs/cliff_impact.py +0 -0
  139. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/outputs/congressional_district_impact.py +0 -0
  140. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/outputs/constituency_impact.py +0 -0
  141. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/outputs/decile_analysis.py +0 -0
  142. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/outputs/decile_grouping.py +0 -0
  143. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/outputs/decile_impact.py +0 -0
  144. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/outputs/extra_variables.py +0 -0
  145. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/outputs/inequality.py +0 -0
  146. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/outputs/intra_decile_impact.py +0 -0
  147. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/outputs/labor_supply_response.py +0 -0
  148. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/outputs/local_authority_impact.py +0 -0
  149. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/outputs/poverty.py +0 -0
  150. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/outputs/program_statistics.py +0 -0
  151. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/outputs/uk_geography_assets.py +0 -0
  152. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/outputs/uk_geography_impact.py +0 -0
  153. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/provenance/__init__.py +0 -0
  154. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/provenance/certification.py +0 -0
  155. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/provenance/dataset_materialization.py +0 -0
  156. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/provenance/manifest.py +0 -0
  157. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/provenance/pyproject_pins.py +0 -0
  158. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/provenance/trace.py +0 -0
  159. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/provenance/verify.py +0 -0
  160. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/provenance/zenodo.py +0 -0
  161. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/results/__init__.py +0 -0
  162. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/results/schema.py +0 -0
  163. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/results/trace_tro.py +0 -0
  164. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/results/tracking.py +0 -0
  165. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/tax_benefit_models/be/__init__.py +0 -0
  166. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/tax_benefit_models/be/datasets.py +0 -0
  167. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/tax_benefit_models/be/model.py +0 -0
  168. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/tax_benefit_models/common/__init__.py +0 -0
  169. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/tax_benefit_models/common/axes.py +0 -0
  170. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/tax_benefit_models/common/extra_variables.py +0 -0
  171. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/tax_benefit_models/common/household.py +0 -0
  172. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/tax_benefit_models/common/model_version.py +0 -0
  173. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/tax_benefit_models/common/reform.py +0 -0
  174. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/tax_benefit_models/common/result.py +0 -0
  175. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/tax_benefit_models/uk/__init__.py +0 -0
  176. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/tax_benefit_models/uk/analysis.py +0 -0
  177. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/tax_benefit_models/uk/datasets.py +0 -0
  178. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/tax_benefit_models/uk/household.py +0 -0
  179. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/tax_benefit_models/uk/model.py +0 -0
  180. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/tax_benefit_models/us/__init__.py +0 -0
  181. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/tax_benefit_models/us/analysis.py +0 -0
  182. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/tax_benefit_models/us/datasets.py +0 -0
  183. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/tax_benefit_models/us/household.py +0 -0
  184. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/tax_benefit_models/us/model.py +0 -0
  185. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/utils/__init__.py +0 -0
  186. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/utils/dates.py +0 -0
  187. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/utils/design.py +0 -0
  188. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/utils/entity_utils.py +0 -0
  189. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/utils/errors.py +0 -0
  190. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/utils/hashing.py +0 -0
  191. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/utils/household_validation.py +0 -0
  192. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/utils/parameter_labels.py +0 -0
  193. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/utils/parametric_reforms.py +0 -0
  194. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine/utils/plotting.py +0 -0
  195. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine.egg-info/SOURCES.txt +0 -0
  196. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine.egg-info/dependency_links.txt +0 -0
  197. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine.egg-info/entry_points.txt +0 -0
  198. {policyengine-5.3.0 → policyengine-5.3.1}/src/policyengine.egg-info/top_level.txt +0 -0
  199. {policyengine-5.3.0 → policyengine-5.3.1}/tests/__init__.py +0 -0
  200. {policyengine-5.3.0 → policyengine-5.3.1}/tests/conftest.py +0 -0
  201. {policyengine-5.3.0 → policyengine-5.3.1}/tests/fixtures/__init__.py +0 -0
  202. {policyengine-5.3.0 → policyengine-5.3.1}/tests/fixtures/filtering_fixtures.py +0 -0
  203. {policyengine-5.3.0 → policyengine-5.3.1}/tests/fixtures/household_calculator_snapshots/uk_couple_two_kids.json +0 -0
  204. {policyengine-5.3.0 → policyengine-5.3.1}/tests/fixtures/household_calculator_snapshots/uk_model_surface.json +0 -0
  205. {policyengine-5.3.0 → policyengine-5.3.1}/tests/fixtures/household_calculator_snapshots/uk_single_adult_employment_income.json +0 -0
  206. {policyengine-5.3.0 → policyengine-5.3.1}/tests/fixtures/household_calculator_snapshots/uk_single_adult_no_income.json +0 -0
  207. {policyengine-5.3.0 → policyengine-5.3.1}/tests/fixtures/household_calculator_snapshots/uk_single_parent_one_child.json +0 -0
  208. {policyengine-5.3.0 → policyengine-5.3.1}/tests/fixtures/household_calculator_snapshots/us_married_two_kids_high_income.json +0 -0
  209. {policyengine-5.3.0 → policyengine-5.3.1}/tests/fixtures/household_calculator_snapshots/us_model_surface.json +0 -0
  210. {policyengine-5.3.0 → policyengine-5.3.1}/tests/fixtures/household_calculator_snapshots/us_single_adult_employment_income.json +0 -0
  211. {policyengine-5.3.0 → policyengine-5.3.1}/tests/fixtures/household_calculator_snapshots/us_single_adult_no_income.json +0 -0
  212. {policyengine-5.3.0 → policyengine-5.3.1}/tests/fixtures/household_calculator_snapshots/us_single_parent_one_child.json +0 -0
  213. {policyengine-5.3.0 → policyengine-5.3.1}/tests/fixtures/parameter_labels_fixtures.py +0 -0
  214. {policyengine-5.3.0 → policyengine-5.3.1}/tests/fixtures/parametric_reforms_fixtures.py +0 -0
  215. {policyengine-5.3.0 → policyengine-5.3.1}/tests/fixtures/poverty_by_demographics_fixtures.py +0 -0
  216. {policyengine-5.3.0 → policyengine-5.3.1}/tests/fixtures/region_fixtures.py +0 -0
  217. {policyengine-5.3.0 → policyengine-5.3.1}/tests/fixtures/us_reform_fixtures.py +0 -0
  218. {policyengine-5.3.0 → policyengine-5.3.1}/tests/fixtures/variable_label_fixtures.py +0 -0
  219. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_aggregate.py +0 -0
  220. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_be_axiom_pilot.py +0 -0
  221. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_budgetary_impact.py +0 -0
  222. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_bump_version.py +0 -0
  223. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_cache.py +0 -0
  224. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_certify_data_release.py +0 -0
  225. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_change_aggregate.py +0 -0
  226. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_cliff_impact.py +0 -0
  227. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_cliff_impact_analysis.py +0 -0
  228. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_congressional_district_impact.py +0 -0
  229. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_constituency_impact.py +0 -0
  230. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_dataset_materialization.py +0 -0
  231. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_dataset_persistence.py +0 -0
  232. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_dataset_runtime.py +0 -0
  233. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_dataset_source.py +0 -0
  234. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_decile_grouping.py +0 -0
  235. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_derivations.py +0 -0
  236. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_dict_reforms_on_simulation.py +0 -0
  237. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_entity_mapping.py +0 -0
  238. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_entity_utils.py +0 -0
  239. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_entity_utils_characterization.py +0 -0
  240. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_errors.py +0 -0
  241. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_extra_variables.py +0 -0
  242. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_filtering.py +0 -0
  243. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_graph/__init__.py +0 -0
  244. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_graph/conftest.py +0 -0
  245. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_graph/test_extractor.py +0 -0
  246. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_household_calculator_snapshot.py +0 -0
  247. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_household_impact.py +0 -0
  248. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_inequality.py +0 -0
  249. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_intra_decile_impact.py +0 -0
  250. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_labor_supply_response.py +0 -0
  251. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_local_authority_impact.py +0 -0
  252. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_manifest_version_mismatch.py +0 -0
  253. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_models.py +0 -0
  254. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_pandas3_compatibility.py +0 -0
  255. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_parameter_labels.py +0 -0
  256. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_parameter_nodes.py +0 -0
  257. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_parameter_values.py +0 -0
  258. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_parametric_reforms.py +0 -0
  259. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_poverty.py +0 -0
  260. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_poverty_by_demographics.py +0 -0
  261. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_poverty_run.py +0 -0
  262. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_preservation_mirror.py +0 -0
  263. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_program_statistics.py +0 -0
  264. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_pyproject_pins.py +0 -0
  265. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_region.py +0 -0
  266. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_region_group_strategy.py +0 -0
  267. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_release_manifests.py +0 -0
  268. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_results.py +0 -0
  269. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_run_record.py +0 -0
  270. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_scoping_strategy.py +0 -0
  271. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_small_follow_ups.py +0 -0
  272. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_trace_tro.py +0 -0
  273. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_trace_tro_verify.py +0 -0
  274. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_uk_analysis.py +0 -0
  275. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_uk_geography_assets.py +0 -0
  276. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_uk_program_statistics.py +0 -0
  277. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_uk_regions.py +0 -0
  278. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_us_long_term_datasets.py +0 -0
  279. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_us_microsim_structural_reforms.py +0 -0
  280. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_us_program_statistics.py +0 -0
  281. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_us_reform_application.py +0 -0
  282. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_us_regions.py +0 -0
  283. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_variable_labels.py +0 -0
  284. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_variable_metadata.py +0 -0
  285. {policyengine-5.3.0 → policyengine-5.3.1}/tests/test_zenodo_mirror.py +0 -0
@@ -1,3 +1,10 @@
1
+ ## [5.3.1] - 2026-09-10
2
+
3
+ ### Fixed
4
+
5
+ - Pin the compatible SPM calculator in US model extras and bundle installation requirements while preserving the certified model and dataset versions.
6
+
7
+
1
8
  ## [5.3.0] - 2026-08-30
2
9
 
3
10
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: policyengine
3
- Version: 5.3.0
3
+ Version: 5.3.1
4
4
  Summary: A package to conduct policy analysis using PolicyEngine tax-benefit models.
5
5
  Author-email: PolicyEngine <hello@policyengine.org>
6
6
  License: GNU AFFERO GENERAL PUBLIC LICENSE
@@ -690,12 +690,14 @@ Provides-Extra: models
690
690
  Requires-Dist: policyengine-core==3.30.1; extra == "models"
691
691
  Requires-Dist: policyengine-us==1.764.6; extra == "models"
692
692
  Requires-Dist: policyengine-uk==2.90.2; extra == "models"
693
+ Requires-Dist: spm-calculator==0.3.1; extra == "models"
693
694
  Provides-Extra: uk
694
695
  Requires-Dist: policyengine-core==3.30.1; extra == "uk"
695
696
  Requires-Dist: policyengine-uk==2.90.2; extra == "uk"
696
697
  Provides-Extra: us
697
698
  Requires-Dist: policyengine-core==3.30.1; extra == "us"
698
699
  Requires-Dist: policyengine-us==1.764.6; extra == "us"
700
+ Requires-Dist: spm-calculator==0.3.1; extra == "us"
699
701
  Provides-Extra: dev
700
702
  Requires-Dist: pytest; extra == "dev"
701
703
  Requires-Dist: furo; extra == "dev"
@@ -713,6 +715,7 @@ Requires-Dist: pytest-cov>=5.0.0; extra == "dev"
713
715
  Requires-Dist: policyengine-core==3.30.1; extra == "dev"
714
716
  Requires-Dist: policyengine-us==1.764.6; extra == "dev"
715
717
  Requires-Dist: policyengine-uk==2.90.2; extra == "dev"
718
+ Requires-Dist: spm-calculator==0.3.1; extra == "dev"
716
719
  Dynamic: license-file
717
720
 
718
721
  # PolicyEngine.py
@@ -84,6 +84,19 @@ Derived artifacts are:
84
84
  - `src/policyengine/data/bundle/{country}.trace.tro.jsonld`
85
85
  - GitHub release assets exported from the bundle manifest
86
86
 
87
+ The US model in this bundle uses the SPM calculator 0.3.1 API. The manifest pins
88
+ `spm-calculator==0.3.1` in the US package scaffold and the generated `us`,
89
+ `models`, and `dev` extras. The model formulas and certified dataset artifacts
90
+ remain unchanged.
91
+
92
+ Previously published versions cannot acquire a new dependency constraint. To
93
+ reproduce the historical 5.3.0 US package set, include the compatible calculator
94
+ explicitly:
95
+
96
+ ```bash
97
+ uv pip install "policyengine[us]==5.3.0" "spm-calculator==0.3.1"
98
+ ```
99
+
87
100
  Inspect or verify a local setup with:
88
101
 
89
102
  ```bash
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "policyengine"
7
- version = "5.3.0"
7
+ version = "5.3.1"
8
8
  description = "A package to conduct policy analysis using PolicyEngine tax-benefit models."
9
9
  readme = "README.md"
10
10
  authors = [
@@ -45,6 +45,7 @@ models = [
45
45
  "policyengine-core==3.30.1",
46
46
  "policyengine-us==1.764.6",
47
47
  "policyengine-uk==2.90.2",
48
+ "spm-calculator==0.3.1",
48
49
  ]
49
50
  uk = [
50
51
  "policyengine-core==3.30.1",
@@ -53,6 +54,7 @@ uk = [
53
54
  us = [
54
55
  "policyengine-core==3.30.1",
55
56
  "policyengine-us==1.764.6",
57
+ "spm-calculator==0.3.1",
56
58
  ]
57
59
  dev = [
58
60
  "pytest",
@@ -71,6 +73,7 @@ dev = [
71
73
  "policyengine-core==3.30.1",
72
74
  "policyengine-us==1.764.6",
73
75
  "policyengine-uk==2.90.2",
76
+ "spm-calculator==0.3.1",
74
77
  ]
75
78
 
76
79
  [tool.setuptools]
@@ -1,10 +1,10 @@
1
1
  {
2
- "bundle_version": "5.3.0",
2
+ "bundle_version": "5.3.1",
3
3
  "citation": {
4
4
  "publisher": "PolicyEngine",
5
- "title": "PolicyEngine bundle 5.3.0",
5
+ "title": "PolicyEngine bundle 5.3.1",
6
6
  "type": "software-bundle",
7
- "version": "5.3.0"
7
+ "version": "5.3.1"
8
8
  },
9
9
  "countries": {
10
10
  "uk": {
@@ -17,7 +17,7 @@
17
17
  "data_releases": {
18
18
  "uk": {
19
19
  "build_id": "policyengine-uk-data-1.56.16",
20
- "bundle_id": "uk-5.3.0",
20
+ "bundle_id": "uk-5.3.1",
21
21
  "certification": {
22
22
  "built_with_model_git_sha": "12a1e028afeef08d8b2d74ee03fd9de3a78b2dd3",
23
23
  "built_with_model_version": "2.89.2",
@@ -99,7 +99,7 @@
99
99
  "version": "2.90.2",
100
100
  "wheel_url": "https://files.pythonhosted.org/packages/ec/da/658bff2df6094bd7bf2b0f561ff60fd41508adbd0a3af29b4553c83bc678/policyengine_uk-2.90.2-py3-none-any.whl"
101
101
  },
102
- "policyengine_version": "5.3.0",
102
+ "policyengine_version": "5.3.1",
103
103
  "region_datasets": {
104
104
  "national": {
105
105
  "path_template": "enhanced_frs_2024_25.h5"
@@ -112,7 +112,7 @@
112
112
  },
113
113
  "us": {
114
114
  "build_id": "populace-us-2024-buildp-sparse-rmloss100-cae8640-20260728T011454Z",
115
- "bundle_id": "us-5.3.0",
115
+ "bundle_id": "us-5.3.1",
116
116
  "certification": {
117
117
  "built_with_model_version": "1.764.6",
118
118
  "certified_by": "policyengine.py bundle certification",
@@ -186,7 +186,7 @@
186
186
  "version": "1.764.6",
187
187
  "wheel_url": "https://files.pythonhosted.org/packages/e2/5a/0566666f30ad06e416f0cf25b24bdee73acd71897fb2de3c0ac43b59e3e3/policyengine_us-1.764.6-py3-none-any.whl"
188
188
  },
189
- "policyengine_version": "5.3.0",
189
+ "policyengine_version": "5.3.1",
190
190
  "region_datasets": {
191
191
  "national": {
192
192
  "path_template": "populace_us_2024.h5"
@@ -240,7 +240,8 @@
240
240
  "models": [
241
241
  "policyengine-core",
242
242
  "policyengine-us",
243
- "policyengine-uk"
243
+ "policyengine-uk",
244
+ "spm-calculator"
244
245
  ],
245
246
  "uk": [
246
247
  "policyengine-core",
@@ -248,16 +249,17 @@
248
249
  ],
249
250
  "us": [
250
251
  "policyengine-core",
251
- "policyengine-us"
252
+ "policyengine-us",
253
+ "spm-calculator"
252
254
  ]
253
255
  },
254
256
  "packages": {
255
257
  "policyengine": {
256
258
  "import_name": "policyengine",
257
- "install_requirement": "policyengine==5.3.0",
259
+ "install_requirement": "policyengine==5.3.1",
258
260
  "name": "policyengine",
259
261
  "role": "bundle_carrier",
260
- "version": "5.3.0"
262
+ "version": "5.3.1"
261
263
  },
262
264
  "policyengine-core": {
263
265
  "import_name": "policyengine_core",
@@ -281,8 +283,16 @@
281
283
  "name": "policyengine-us",
282
284
  "role": "country_model",
283
285
  "version": "1.764.6"
286
+ },
287
+ "spm-calculator": {
288
+ "country": "us",
289
+ "import_name": "spm_calculator",
290
+ "install_requirement": "spm-calculator==0.3.1",
291
+ "name": "spm-calculator",
292
+ "role": "country_dependency",
293
+ "version": "0.3.1"
284
294
  }
285
295
  },
286
- "policyengine_version": "5.3.0",
296
+ "policyengine_version": "5.3.1",
287
297
  "schema_version": 2
288
298
  }
@@ -18,18 +18,18 @@
18
18
  "schema:url": "https://policyengine.org"
19
19
  },
20
20
  "schema:dateCreated": "2026-08-18T14:20:32.100961Z",
21
- "schema:description": "TRACE TRO for certified runtime bundle uk-5.3.0 covering the bundle manifest, the certified dataset artifact, the country model wheel, and the country data release manifest when it is available.",
21
+ "schema:description": "TRACE TRO for certified runtime bundle uk-5.3.1 covering the bundle manifest, the certified dataset artifact, the country model wheel, and the country data release manifest when it is available.",
22
22
  "schema:name": "policyengine uk certified bundle TRO",
23
23
  "trov:createdWith": {
24
24
  "@type": "schema:SoftwareApplication",
25
25
  "schema:name": "policyengine",
26
- "schema:softwareVersion": "5.3.0"
26
+ "schema:softwareVersion": "5.3.1"
27
27
  },
28
28
  "trov:hasArrangement": [
29
29
  {
30
30
  "@id": "arrangement/1",
31
31
  "@type": "trov:ArtifactArrangement",
32
- "rdfs:comment": "Certified arrangement for bundle uk-5.3.0.",
32
+ "rdfs:comment": "Certified arrangement for bundle uk-5.3.1.",
33
33
  "trov:hasArtifactLocation": [
34
34
  {
35
35
  "@id": "arrangement/1/location/bundle_manifest",
@@ -75,7 +75,7 @@
75
75
  "@type": "trov:ResearchArtifact",
76
76
  "schema:name": "policyengine.py bundle manifest for uk",
77
77
  "trov:mimeType": "application/json",
78
- "trov:sha256": "57c6fe9c5c370ea2b9460120656004b1a583db06cabb6c774551effc3c125695"
78
+ "trov:sha256": "75a9dab38c12dd00051f363532f2f45315557fecaf41d5827615bac4180de358"
79
79
  },
80
80
  {
81
81
  "@id": "composition/1/artifact/data_release_manifest",
@@ -102,7 +102,7 @@
102
102
  "trov:hasFingerprint": {
103
103
  "@id": "composition/1/fingerprint",
104
104
  "@type": "trov:CompositionFingerprint",
105
- "trov:sha256": "90a113dd7e642af4c137af233b512fa7ff68b5ba0aa9b4102b7dd02bd8fe5cbf"
105
+ "trov:sha256": "0f664a8f0d9a4adaff2b7a04cac2dcb9d813770e395b6d77170a8078360e3733"
106
106
  }
107
107
  },
108
108
  "trov:hasPerformance": {
@@ -18,18 +18,18 @@
18
18
  "schema:url": "https://policyengine.org"
19
19
  },
20
20
  "schema:dateCreated": "2026-07-28T03:56:03.415544+00:00",
21
- "schema:description": "TRACE TRO for certified runtime bundle us-5.3.0 covering the bundle manifest, the certified dataset artifact, the country model wheel, and the country data release manifest when it is available.",
21
+ "schema:description": "TRACE TRO for certified runtime bundle us-5.3.1 covering the bundle manifest, the certified dataset artifact, the country model wheel, and the country data release manifest when it is available.",
22
22
  "schema:name": "policyengine us certified bundle TRO",
23
23
  "trov:createdWith": {
24
24
  "@type": "schema:SoftwareApplication",
25
25
  "schema:name": "policyengine",
26
- "schema:softwareVersion": "5.3.0"
26
+ "schema:softwareVersion": "5.3.1"
27
27
  },
28
28
  "trov:hasArrangement": [
29
29
  {
30
30
  "@id": "arrangement/1",
31
31
  "@type": "trov:ArtifactArrangement",
32
- "rdfs:comment": "Certified arrangement for bundle us-5.3.0.",
32
+ "rdfs:comment": "Certified arrangement for bundle us-5.3.1.",
33
33
  "trov:hasArtifactLocation": [
34
34
  {
35
35
  "@id": "arrangement/1/location/bundle_manifest",
@@ -75,7 +75,7 @@
75
75
  "@type": "trov:ResearchArtifact",
76
76
  "schema:name": "policyengine.py bundle manifest for us",
77
77
  "trov:mimeType": "application/json",
78
- "trov:sha256": "57c6fe9c5c370ea2b9460120656004b1a583db06cabb6c774551effc3c125695"
78
+ "trov:sha256": "75a9dab38c12dd00051f363532f2f45315557fecaf41d5827615bac4180de358"
79
79
  },
80
80
  {
81
81
  "@id": "composition/1/artifact/data_release_manifest",
@@ -102,7 +102,7 @@
102
102
  "trov:hasFingerprint": {
103
103
  "@id": "composition/1/fingerprint",
104
104
  "@type": "trov:CompositionFingerprint",
105
- "trov:sha256": "c9806c4dbc8cb664ca2ed431af72f8540c08171fea5ce02d6e579f2d6866cf21"
105
+ "trov:sha256": "1a3131f53ec77aa7eebf243f01bff2969848e8979dc40d23d94f28dff03aa5de"
106
106
  }
107
107
  },
108
108
  "trov:hasPerformance": {
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: policyengine
3
- Version: 5.3.0
3
+ Version: 5.3.1
4
4
  Summary: A package to conduct policy analysis using PolicyEngine tax-benefit models.
5
5
  Author-email: PolicyEngine <hello@policyengine.org>
6
6
  License: GNU AFFERO GENERAL PUBLIC LICENSE
@@ -690,12 +690,14 @@ Provides-Extra: models
690
690
  Requires-Dist: policyengine-core==3.30.1; extra == "models"
691
691
  Requires-Dist: policyengine-us==1.764.6; extra == "models"
692
692
  Requires-Dist: policyengine-uk==2.90.2; extra == "models"
693
+ Requires-Dist: spm-calculator==0.3.1; extra == "models"
693
694
  Provides-Extra: uk
694
695
  Requires-Dist: policyengine-core==3.30.1; extra == "uk"
695
696
  Requires-Dist: policyengine-uk==2.90.2; extra == "uk"
696
697
  Provides-Extra: us
697
698
  Requires-Dist: policyengine-core==3.30.1; extra == "us"
698
699
  Requires-Dist: policyengine-us==1.764.6; extra == "us"
700
+ Requires-Dist: spm-calculator==0.3.1; extra == "us"
699
701
  Provides-Extra: dev
700
702
  Requires-Dist: pytest; extra == "dev"
701
703
  Requires-Dist: furo; extra == "dev"
@@ -713,6 +715,7 @@ Requires-Dist: pytest-cov>=5.0.0; extra == "dev"
713
715
  Requires-Dist: policyengine-core==3.30.1; extra == "dev"
714
716
  Requires-Dist: policyengine-us==1.764.6; extra == "dev"
715
717
  Requires-Dist: policyengine-uk==2.90.2; extra == "dev"
718
+ Requires-Dist: spm-calculator==0.3.1; extra == "dev"
716
719
  Dynamic: license-file
717
720
 
718
721
  # PolicyEngine.py
@@ -24,6 +24,7 @@ pytest-cov>=5.0.0
24
24
  policyengine-core==3.30.1
25
25
  policyengine-us==1.764.6
26
26
  policyengine-uk==2.90.2
27
+ spm-calculator==0.3.1
27
28
 
28
29
  [graph]
29
30
  networkx>=3.0
@@ -32,6 +33,7 @@ networkx>=3.0
32
33
  policyengine-core==3.30.1
33
34
  policyengine-us==1.764.6
34
35
  policyengine-uk==2.90.2
36
+ spm-calculator==0.3.1
35
37
 
36
38
  [plotting]
37
39
  plotly>=5.0.0
@@ -43,3 +45,4 @@ policyengine-uk==2.90.2
43
45
  [us]
44
46
  policyengine-core==3.30.1
45
47
  policyengine-us==1.764.6
48
+ spm-calculator==0.3.1
@@ -64,6 +64,7 @@ def test_bundle_install_requirements_are_country_scoped():
64
64
  f"policyengine=={manifest['policyengine_version']}",
65
65
  manifest["packages"]["policyengine-core"]["install_requirement"],
66
66
  manifest["packages"]["policyengine-us"]["install_requirement"],
67
+ "spm-calculator==0.3.1",
67
68
  ]
68
69
  assert not any("policyengine-us-data" in req for req in us_requirements)
69
70
 
@@ -29,10 +29,12 @@ def test_bundle_manifest_exposes_model_and_country_extras():
29
29
  "policyengine-core",
30
30
  "policyengine-us",
31
31
  "policyengine-uk",
32
+ "spm-calculator",
32
33
  ]
33
34
  assert manifest["extras"]["us"] == [
34
35
  "policyengine-core",
35
36
  "policyengine-us",
37
+ "spm-calculator",
36
38
  ]
37
39
  assert manifest["extras"]["uk"] == [
38
40
  "policyengine-core",
@@ -42,6 +44,24 @@ def test_bundle_manifest_exposes_model_and_country_extras():
42
44
  assert "policyengine-us-data" not in manifest["packages"]
43
45
 
44
46
 
47
+ def test_generated_us_extras_preserve_legacy_spm_compatibility(monkeypatch):
48
+ scripts_dir = Path(__file__).resolve().parents[1] / "scripts"
49
+ monkeypatch.syspath_prepend(str(scripts_dir))
50
+ from generate_bundle_artifacts import update_pyproject_text
51
+
52
+ pyproject_path = scripts_dir.parent / "pyproject.toml"
53
+ original = pyproject_path.read_text()
54
+ generated = update_pyproject_text(original, bundle.get_current_bundle())
55
+ # Regeneration and a later release must retain the constraint in every US
56
+ # installation surface, including dev; the UK-only extra does not need it.
57
+ assert generated == original
58
+ for extra in ("us", "models", "dev"):
59
+ section = generated.split(f"\n{extra} = [\n", 1)[1].split("\n]", 1)[0]
60
+ assert '"spm-calculator==0.3.1"' in section
61
+ uk_section = generated.split("\nuk = [\n", 1)[1].split("\n]", 1)[0]
62
+ assert "spm-calculator" not in uk_section
63
+
64
+
45
65
  def test_bundle_manifest_carries_uk_data_release():
46
66
  release = bundle.get_current_bundle()["data_releases"]["uk"]
47
67
 
@@ -115,6 +135,10 @@ def test_export_release_assets_writes_bundle_assets(monkeypatch, tmp_path):
115
135
  f"policyengine=={manifest['policyengine_version']}"
116
136
  in (tmp_path / f"policyengine-bundle-{version}.constraints.txt").read_text()
117
137
  )
138
+ assert (
139
+ "spm-calculator==0.3.1"
140
+ in (tmp_path / f"policyengine-bundle-{version}.constraints.txt").read_text()
141
+ )
118
142
  assert (
119
143
  "PolicyEngine bundle"
120
144
  in (tmp_path / f"policyengine-bundle-{version}.citation.txt").read_text()