policyengine 6.2.3__tar.gz → 6.2.5__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 (320) hide show
  1. {policyengine-6.2.3 → policyengine-6.2.5}/CHANGELOG.md +14 -0
  2. {policyengine-6.2.3/src/policyengine.egg-info → policyengine-6.2.5}/PKG-INFO +1 -1
  3. policyengine-6.2.5/docs/engineering/runbooks/acs-local-wic-replacement.md +56 -0
  4. {policyengine-6.2.3 → policyengine-6.2.5}/docs/microsim.md +39 -0
  5. {policyengine-6.2.3 → policyengine-6.2.5}/pyproject.toml +1 -1
  6. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/data/bundle/manifest.json +10 -10
  7. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/data/bundle/uk.trace.tro.jsonld +5 -5
  8. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/data/bundle/us.trace.tro.jsonld +5 -5
  9. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/tax_benefit_models/common/model_version.py +15 -0
  10. policyengine-6.2.5/src/policyengine/tax_benefit_models/uk/datasets.py +404 -0
  11. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/tax_benefit_models/uk/model.py +138 -8
  12. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/tax_benefit_models/us/legacy_inputs.py +49 -3
  13. {policyengine-6.2.3 → policyengine-6.2.5/src/policyengine.egg-info}/PKG-INFO +1 -1
  14. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine.egg-info/SOURCES.txt +2 -0
  15. policyengine-6.2.5/tests/test_uk_year_file_data_year.py +624 -0
  16. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_us_legacy_inputs.py +185 -0
  17. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_us_legacy_inputs_integration.py +22 -0
  18. {policyengine-6.2.3 → policyengine-6.2.5}/uv.lock +1 -1
  19. policyengine-6.2.3/src/policyengine/tax_benefit_models/uk/datasets.py +0 -270
  20. {policyengine-6.2.3 → policyengine-6.2.5}/.claude/policyengine-guide.md +0 -0
  21. {policyengine-6.2.3 → policyengine-6.2.5}/.claude/quick-reference.md +0 -0
  22. {policyengine-6.2.3 → policyengine-6.2.5}/.github/CONTRIBUTING.md +0 -0
  23. {policyengine-6.2.3 → policyengine-6.2.5}/.github/bump_version.py +0 -0
  24. {policyengine-6.2.3 → policyengine-6.2.5}/.github/capture-version.sh +0 -0
  25. {policyengine-6.2.3 → policyengine-6.2.5}/.github/changelog_template.md +0 -0
  26. {policyengine-6.2.3 → policyengine-6.2.5}/.github/check-changelog.sh +0 -0
  27. {policyengine-6.2.3 → policyengine-6.2.5}/.github/copilot-instructions.md +0 -0
  28. {policyengine-6.2.3 → policyengine-6.2.5}/.github/dispatch-policyengine-release.sh +0 -0
  29. {policyengine-6.2.3 → policyengine-6.2.5}/.github/fetch_version.py +0 -0
  30. {policyengine-6.2.3 → policyengine-6.2.5}/.github/get-changelog-diff.sh +0 -0
  31. {policyengine-6.2.3 → policyengine-6.2.5}/.github/has-functional-changes.sh +0 -0
  32. {policyengine-6.2.3 → policyengine-6.2.5}/.github/is-version-number-acceptable.sh +0 -0
  33. {policyengine-6.2.3 → policyengine-6.2.5}/.github/publish-git-tag.sh +0 -0
  34. {policyengine-6.2.3 → policyengine-6.2.5}/.github/wait-for-pypi.sh +0 -0
  35. {policyengine-6.2.3 → policyengine-6.2.5}/.github/workflows/draft-pdf.yml +0 -0
  36. {policyengine-6.2.3 → policyengine-6.2.5}/.github/workflows/pr_code_changes.yaml +0 -0
  37. {policyengine-6.2.3 → policyengine-6.2.5}/.github/workflows/pr_docs_changes.yaml +0 -0
  38. {policyengine-6.2.3 → policyengine-6.2.5}/.github/workflows/push.yaml +0 -0
  39. {policyengine-6.2.3 → policyengine-6.2.5}/.gitignore +0 -0
  40. {policyengine-6.2.3 → policyengine-6.2.5}/.python-version +0 -0
  41. {policyengine-6.2.3 → policyengine-6.2.5}/AGENTS.md +0 -0
  42. {policyengine-6.2.3 → policyengine-6.2.5}/CITATION.cff +0 -0
  43. {policyengine-6.2.3 → policyengine-6.2.5}/CLAUDE.md +0 -0
  44. {policyengine-6.2.3 → policyengine-6.2.5}/CODE_OF_CONDUCT.md +0 -0
  45. {policyengine-6.2.3 → policyengine-6.2.5}/CONTRIBUTING.md +0 -0
  46. {policyengine-6.2.3 → policyengine-6.2.5}/LICENSE +0 -0
  47. {policyengine-6.2.3 → policyengine-6.2.5}/Makefile +0 -0
  48. {policyengine-6.2.3 → policyengine-6.2.5}/README.md +0 -0
  49. {policyengine-6.2.3 → policyengine-6.2.5}/architecture.png +0 -0
  50. {policyengine-6.2.3 → policyengine-6.2.5}/architecture.svg +0 -0
  51. {policyengine-6.2.3 → policyengine-6.2.5}/changelog.d/.gitkeep +0 -0
  52. {policyengine-6.2.3 → policyengine-6.2.5}/docs/.gitignore +0 -0
  53. {policyengine-6.2.3 → policyengine-6.2.5}/docs/_generator/README.md +0 -0
  54. {policyengine-6.2.3 → policyengine-6.2.5}/docs/_generator/build_reference.py +0 -0
  55. {policyengine-6.2.3 → policyengine-6.2.5}/docs/_quarto.yml +0 -0
  56. {policyengine-6.2.3 → policyengine-6.2.5}/docs/bundles.md +0 -0
  57. {policyengine-6.2.3 → policyengine-6.2.5}/docs/countries.md +0 -0
  58. {policyengine-6.2.3 → policyengine-6.2.5}/docs/data-publishing-design.md +0 -0
  59. {policyengine-6.2.3 → policyengine-6.2.5}/docs/decile-impact-spec.md +0 -0
  60. {policyengine-6.2.3 → policyengine-6.2.5}/docs/dev.md +0 -0
  61. {policyengine-6.2.3 → policyengine-6.2.5}/docs/engineering/runbooks/build-m-us-populace-certification.md +0 -0
  62. {policyengine-6.2.3 → policyengine-6.2.5}/docs/engineering/runbooks/canonical-spm-development.md +0 -0
  63. {policyengine-6.2.3 → policyengine-6.2.5}/docs/engineering/skills/README.md +0 -0
  64. {policyengine-6.2.3 → policyengine-6.2.5}/docs/engineering/skills/data-certification.md +0 -0
  65. {policyengine-6.2.3 → policyengine-6.2.5}/docs/engineering/skills/github-prs.md +0 -0
  66. {policyengine-6.2.3 → policyengine-6.2.5}/docs/engineering/skills/repository-guidance.md +0 -0
  67. {policyengine-6.2.3 → policyengine-6.2.5}/docs/examples.md +0 -0
  68. {policyengine-6.2.3 → policyengine-6.2.5}/docs/getting-started.md +0 -0
  69. {policyengine-6.2.3 → policyengine-6.2.5}/docs/households.md +0 -0
  70. {policyengine-6.2.3 → policyengine-6.2.5}/docs/impact-analysis.md +0 -0
  71. {policyengine-6.2.3 → policyengine-6.2.5}/docs/index.md +0 -0
  72. {policyengine-6.2.3 → policyengine-6.2.5}/docs/methodology/index.md +0 -0
  73. {policyengine-6.2.3 → policyengine-6.2.5}/docs/methodology/model-architecture.md +0 -0
  74. {policyengine-6.2.3 → policyengine-6.2.5}/docs/methodology/us-health-costs.md +0 -0
  75. {policyengine-6.2.3 → policyengine-6.2.5}/docs/outputs.md +0 -0
  76. {policyengine-6.2.3 → policyengine-6.2.5}/docs/programs/index.md +0 -0
  77. {policyengine-6.2.3 → policyengine-6.2.5}/docs/programs/us-chip.md +0 -0
  78. {policyengine-6.2.3 → policyengine-6.2.5}/docs/reference/index.md +0 -0
  79. {policyengine-6.2.3 → policyengine-6.2.5}/docs/reforms.md +0 -0
  80. {policyengine-6.2.3 → policyengine-6.2.5}/docs/regions.md +0 -0
  81. {policyengine-6.2.3 → policyengine-6.2.5}/docs/release-bundles.md +0 -0
  82. {policyengine-6.2.3 → policyengine-6.2.5}/docs/run-records.md +0 -0
  83. {policyengine-6.2.3 → policyengine-6.2.5}/docs/trace-case-study.md +0 -0
  84. {policyengine-6.2.3 → policyengine-6.2.5}/docs/visualisation.md +0 -0
  85. {policyengine-6.2.3 → policyengine-6.2.5}/examples/belgium_axiom_pilot.py +0 -0
  86. {policyengine-6.2.3 → policyengine-6.2.5}/examples/employment_income_variation_uk.py +0 -0
  87. {policyengine-6.2.3 → policyengine-6.2.5}/examples/employment_income_variation_us.py +0 -0
  88. {policyengine-6.2.3 → policyengine-6.2.5}/examples/household_impact_example.py +0 -0
  89. {policyengine-6.2.3 → policyengine-6.2.5}/examples/income_bands_uk.py +0 -0
  90. {policyengine-6.2.3 → policyengine-6.2.5}/examples/income_distribution_us.py +0 -0
  91. {policyengine-6.2.3 → policyengine-6.2.5}/examples/paper_repro_uk.py +0 -0
  92. {policyengine-6.2.3 → policyengine-6.2.5}/examples/policy_change_uk.py +0 -0
  93. {policyengine-6.2.3 → policyengine-6.2.5}/examples/speedtest_us_simulation.py +0 -0
  94. {policyengine-6.2.3 → policyengine-6.2.5}/examples/us_budgetary_impact.py +0 -0
  95. {policyengine-6.2.3 → policyengine-6.2.5}/paper-preview.html +0 -0
  96. {policyengine-6.2.3 → policyengine-6.2.5}/paper.bib +0 -0
  97. {policyengine-6.2.3 → policyengine-6.2.5}/paper.md +0 -0
  98. {policyengine-6.2.3 → policyengine-6.2.5}/scripts/bundle.py +0 -0
  99. {policyengine-6.2.3 → policyengine-6.2.5}/scripts/certify_data_release.py +0 -0
  100. {policyengine-6.2.3 → policyengine-6.2.5}/scripts/check_data_staleness.py +0 -0
  101. {policyengine-6.2.3 → policyengine-6.2.5}/scripts/check_native_spm_loading.py +0 -0
  102. {policyengine-6.2.3 → policyengine-6.2.5}/scripts/check_release_credentials.py +0 -0
  103. {policyengine-6.2.3 → policyengine-6.2.5}/scripts/export_bundle_release_assets.py +0 -0
  104. {policyengine-6.2.3 → policyengine-6.2.5}/scripts/generate_bundle_artifacts.py +0 -0
  105. {policyengine-6.2.3 → policyengine-6.2.5}/scripts/generate_trace_tros.py +0 -0
  106. {policyengine-6.2.3 → policyengine-6.2.5}/scripts/prepare_package_bundle_update.py +0 -0
  107. {policyengine-6.2.3 → policyengine-6.2.5}/scripts/release_lock.py +0 -0
  108. {policyengine-6.2.3 → policyengine-6.2.5}/scripts/spm_bundle.py +0 -0
  109. {policyengine-6.2.3 → policyengine-6.2.5}/setup.cfg +0 -0
  110. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/__init__.py +0 -0
  111. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/bundle.py +0 -0
  112. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/cli.py +0 -0
  113. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/core/__init__.py +0 -0
  114. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/core/cache.py +0 -0
  115. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/core/dataset.py +0 -0
  116. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/core/dynamic.py +0 -0
  117. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/core/output.py +0 -0
  118. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/core/parameter.py +0 -0
  119. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/core/parameter_node.py +0 -0
  120. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/core/parameter_value.py +0 -0
  121. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/core/policy.py +0 -0
  122. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/core/region.py +0 -0
  123. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/core/run_record.py +0 -0
  124. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/core/scoping_strategy.py +0 -0
  125. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/core/simulation.py +0 -0
  126. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/core/spm.py +0 -0
  127. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/core/tax_benefit_model.py +0 -0
  128. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/core/tax_benefit_model_version.py +0 -0
  129. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/core/variable.py +0 -0
  130. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/countries/__init__.py +0 -0
  131. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/countries/uk/__init__.py +0 -0
  132. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/countries/uk/regions.py +0 -0
  133. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/countries/us/__init__.py +0 -0
  134. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/countries/us/data/__init__.py +0 -0
  135. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/countries/us/data/districts.py +0 -0
  136. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/countries/us/data/places.py +0 -0
  137. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/countries/us/data/states.py +0 -0
  138. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/countries/us/regions.py +0 -0
  139. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/data/__init__.py +0 -0
  140. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/data/schemas/trace_tro.schema.json +0 -0
  141. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/data/uk_geography_assets.py +0 -0
  142. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/derivations/__init__.py +0 -0
  143. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/derivations/narrate.py +0 -0
  144. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/derivations/trace.py +0 -0
  145. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/graph/__init__.py +0 -0
  146. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/graph/extractor.py +0 -0
  147. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/graph/graph.py +0 -0
  148. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/outputs/__init__.py +0 -0
  149. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/outputs/aggregate.py +0 -0
  150. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/outputs/change_aggregate.py +0 -0
  151. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/outputs/cliff_impact.py +0 -0
  152. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/outputs/congressional_district_impact.py +0 -0
  153. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/outputs/constituency_impact.py +0 -0
  154. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/outputs/decile_analysis.py +0 -0
  155. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/outputs/decile_grouping.py +0 -0
  156. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/outputs/decile_impact.py +0 -0
  157. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/outputs/extra_variables.py +0 -0
  158. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/outputs/inequality.py +0 -0
  159. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/outputs/intra_decile_impact.py +0 -0
  160. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/outputs/labor_supply_response.py +0 -0
  161. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/outputs/local_authority_impact.py +0 -0
  162. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/outputs/poverty.py +0 -0
  163. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/outputs/program_statistics.py +0 -0
  164. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/outputs/uk_geography_assets.py +0 -0
  165. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/outputs/uk_geography_impact.py +0 -0
  166. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/provenance/__init__.py +0 -0
  167. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/provenance/bundle_validation.py +0 -0
  168. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/provenance/certification.py +0 -0
  169. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/provenance/dataset_materialization.py +0 -0
  170. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/provenance/manifest.py +0 -0
  171. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/provenance/pyproject_pins.py +0 -0
  172. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/provenance/spm_configuration.py +0 -0
  173. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/provenance/trace.py +0 -0
  174. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/provenance/verify.py +0 -0
  175. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/provenance/zenodo.py +0 -0
  176. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/results/__init__.py +0 -0
  177. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/results/schema.py +0 -0
  178. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/results/trace_tro.py +0 -0
  179. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/results/tracking.py +0 -0
  180. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/tax_benefit_models/be/__init__.py +0 -0
  181. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/tax_benefit_models/be/datasets.py +0 -0
  182. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/tax_benefit_models/be/model.py +0 -0
  183. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/tax_benefit_models/common/__init__.py +0 -0
  184. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/tax_benefit_models/common/axes.py +0 -0
  185. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/tax_benefit_models/common/extra_variables.py +0 -0
  186. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/tax_benefit_models/common/household.py +0 -0
  187. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/tax_benefit_models/common/reform.py +0 -0
  188. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/tax_benefit_models/common/result.py +0 -0
  189. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/tax_benefit_models/uk/__init__.py +0 -0
  190. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/tax_benefit_models/uk/analysis.py +0 -0
  191. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/tax_benefit_models/uk/household.py +0 -0
  192. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/tax_benefit_models/us/__init__.py +0 -0
  193. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/tax_benefit_models/us/analysis.py +0 -0
  194. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/tax_benefit_models/us/datasets.py +0 -0
  195. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/tax_benefit_models/us/household.py +0 -0
  196. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/tax_benefit_models/us/model.py +0 -0
  197. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/tax_benefit_models/us/spm.py +0 -0
  198. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/utils/__init__.py +0 -0
  199. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/utils/dates.py +0 -0
  200. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/utils/design.py +0 -0
  201. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/utils/entity_utils.py +0 -0
  202. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/utils/errors.py +0 -0
  203. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/utils/hashing.py +0 -0
  204. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/utils/household_validation.py +0 -0
  205. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/utils/parameter_labels.py +0 -0
  206. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/utils/parametric_reforms.py +0 -0
  207. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine/utils/plotting.py +0 -0
  208. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine.egg-info/dependency_links.txt +0 -0
  209. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine.egg-info/entry_points.txt +0 -0
  210. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine.egg-info/requires.txt +0 -0
  211. {policyengine-6.2.3 → policyengine-6.2.5}/src/policyengine.egg-info/top_level.txt +0 -0
  212. {policyengine-6.2.3 → policyengine-6.2.5}/tests/__init__.py +0 -0
  213. {policyengine-6.2.3 → policyengine-6.2.5}/tests/conftest.py +0 -0
  214. {policyengine-6.2.3 → policyengine-6.2.5}/tests/fixtures/__init__.py +0 -0
  215. {policyengine-6.2.3 → policyengine-6.2.5}/tests/fixtures/filtering_fixtures.py +0 -0
  216. {policyengine-6.2.3 → policyengine-6.2.5}/tests/fixtures/household_calculator_snapshots/uk_couple_two_kids.json +0 -0
  217. {policyengine-6.2.3 → policyengine-6.2.5}/tests/fixtures/household_calculator_snapshots/uk_model_surface.json +0 -0
  218. {policyengine-6.2.3 → policyengine-6.2.5}/tests/fixtures/household_calculator_snapshots/uk_single_adult_employment_income.json +0 -0
  219. {policyengine-6.2.3 → policyengine-6.2.5}/tests/fixtures/household_calculator_snapshots/uk_single_adult_no_income.json +0 -0
  220. {policyengine-6.2.3 → policyengine-6.2.5}/tests/fixtures/household_calculator_snapshots/uk_single_parent_one_child.json +0 -0
  221. {policyengine-6.2.3 → policyengine-6.2.5}/tests/fixtures/household_calculator_snapshots/us_married_two_kids_high_income.json +0 -0
  222. {policyengine-6.2.3 → policyengine-6.2.5}/tests/fixtures/household_calculator_snapshots/us_model_surface.json +0 -0
  223. {policyengine-6.2.3 → policyengine-6.2.5}/tests/fixtures/household_calculator_snapshots/us_single_adult_employment_income.json +0 -0
  224. {policyengine-6.2.3 → policyengine-6.2.5}/tests/fixtures/household_calculator_snapshots/us_single_adult_no_income.json +0 -0
  225. {policyengine-6.2.3 → policyengine-6.2.5}/tests/fixtures/household_calculator_snapshots/us_single_parent_one_child.json +0 -0
  226. {policyengine-6.2.3 → policyengine-6.2.5}/tests/fixtures/parameter_labels_fixtures.py +0 -0
  227. {policyengine-6.2.3 → policyengine-6.2.5}/tests/fixtures/parametric_reforms_fixtures.py +0 -0
  228. {policyengine-6.2.3 → policyengine-6.2.5}/tests/fixtures/poverty_by_demographics_fixtures.py +0 -0
  229. {policyengine-6.2.3 → policyengine-6.2.5}/tests/fixtures/region_fixtures.py +0 -0
  230. {policyengine-6.2.3 → policyengine-6.2.5}/tests/fixtures/release_tros/README.md +0 -0
  231. {policyengine-6.2.3 → policyengine-6.2.5}/tests/fixtures/release_tros/country-models.lock.toml +0 -0
  232. {policyengine-6.2.3 → policyengine-6.2.5}/tests/fixtures/release_tros/manifest.json +0 -0
  233. {policyengine-6.2.3 → policyengine-6.2.5}/tests/fixtures/release_tros/us-release_manifest.json +0 -0
  234. {policyengine-6.2.3 → policyengine-6.2.5}/tests/fixtures/release_tros/us.trace.tro.jsonld +0 -0
  235. {policyengine-6.2.3 → policyengine-6.2.5}/tests/fixtures/spm_development.py +0 -0
  236. {policyengine-6.2.3 → policyengine-6.2.5}/tests/fixtures/us_reform_fixtures.py +0 -0
  237. {policyengine-6.2.3 → policyengine-6.2.5}/tests/fixtures/variable_label_fixtures.py +0 -0
  238. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_aggregate.py +0 -0
  239. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_be_axiom_pilot.py +0 -0
  240. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_budgetary_impact.py +0 -0
  241. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_bump_version.py +0 -0
  242. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_bundle.py +0 -0
  243. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_bundle_metadata.py +0 -0
  244. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_cache.py +0 -0
  245. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_certify_data_release.py +0 -0
  246. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_change_aggregate.py +0 -0
  247. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_cliff_impact.py +0 -0
  248. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_cliff_impact_analysis.py +0 -0
  249. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_congressional_district_impact.py +0 -0
  250. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_constituency_impact.py +0 -0
  251. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_dataset_materialization.py +0 -0
  252. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_dataset_persistence.py +0 -0
  253. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_dataset_runtime.py +0 -0
  254. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_dataset_source.py +0 -0
  255. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_decile_grouping.py +0 -0
  256. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_derivations.py +0 -0
  257. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_dict_reforms_on_simulation.py +0 -0
  258. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_entity_mapping.py +0 -0
  259. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_entity_utils.py +0 -0
  260. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_entity_utils_characterization.py +0 -0
  261. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_errors.py +0 -0
  262. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_extra_variables.py +0 -0
  263. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_filtering.py +0 -0
  264. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_generate_trace_tros.py +0 -0
  265. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_graph/__init__.py +0 -0
  266. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_graph/conftest.py +0 -0
  267. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_graph/test_extractor.py +0 -0
  268. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_household_calculator_snapshot.py +0 -0
  269. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_household_impact.py +0 -0
  270. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_inequality.py +0 -0
  271. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_intra_decile_impact.py +0 -0
  272. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_labor_supply_response.py +0 -0
  273. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_local_authority_impact.py +0 -0
  274. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_manifest_version_mismatch.py +0 -0
  275. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_models.py +0 -0
  276. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_pandas3_compatibility.py +0 -0
  277. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_parameter_labels.py +0 -0
  278. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_parameter_nodes.py +0 -0
  279. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_parameter_values.py +0 -0
  280. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_parametric_reforms.py +0 -0
  281. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_poverty.py +0 -0
  282. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_poverty_by_demographics.py +0 -0
  283. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_poverty_run.py +0 -0
  284. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_preservation_mirror.py +0 -0
  285. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_program_statistics.py +0 -0
  286. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_pyproject_pins.py +0 -0
  287. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_region.py +0 -0
  288. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_region_group_strategy.py +0 -0
  289. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_release_credentials.py +0 -0
  290. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_release_lock.py +0 -0
  291. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_release_manifests.py +0 -0
  292. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_release_tro_generation.py +0 -0
  293. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_results.py +0 -0
  294. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_run_record.py +0 -0
  295. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_scoping_strategy.py +0 -0
  296. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_small_follow_ups.py +0 -0
  297. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_spm_bundle_bootstrap.py +0 -0
  298. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_spm_bundle_tooling.py +0 -0
  299. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_spm_decile.py +0 -0
  300. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_spm_development_authentication.py +0 -0
  301. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_spm_household.py +0 -0
  302. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_spm_model.py +0 -0
  303. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_spm_selection.py +0 -0
  304. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_spm_selection_schema.py +0 -0
  305. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_trace_tro.py +0 -0
  306. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_trace_tro_verify.py +0 -0
  307. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_uk_analysis.py +0 -0
  308. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_uk_geography_assets.py +0 -0
  309. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_uk_program_statistics.py +0 -0
  310. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_uk_regions.py +0 -0
  311. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_us_long_term_datasets.py +0 -0
  312. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_us_microsim_structural_reforms.py +0 -0
  313. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_us_native_alignment.py +0 -0
  314. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_us_native_hdf_weights.py +0 -0
  315. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_us_program_statistics.py +0 -0
  316. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_us_reform_application.py +0 -0
  317. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_us_regions.py +0 -0
  318. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_variable_labels.py +0 -0
  319. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_variable_metadata.py +0 -0
  320. {policyengine-6.2.3 → policyengine-6.2.5}/tests/test_zenodo_mirror.py +0 -0
@@ -1,3 +1,17 @@
1
+ ## [6.2.5] - 2026-10-09
2
+
3
+ ### Fixed
4
+
5
+ - Add opt-in verified US state/year preparation and temporarily assume WIC claiming only for missing participation decisions on identified ACS people, preserving donor decisions and country-model eligibility.
6
+
7
+
8
+ ## [6.2.4] - 2026-10-09
9
+
10
+ ### Fixed
11
+
12
+ - UK population runs now anchor the State Pension on the survey year their data was projected from, as policyengine-uk does, so a run of a UK year file matches policyengine-uk on the certified dataset, with or without a reform. Before, it took the projected year as the survey year: the State Pension was uprated by CPI rather than the triple lock, and State Pension rate reforms had no effect on it under policyengine-uk 2.102.3 and were understated under 2.123. Projected year files now also store the survey year's tables, which doubles their size. `ensure_datasets` regenerates year files from earlier releases and `load_datasets` refuses them; `Simulation.load()` refuses UK outputs saved by earlier releases, and `Simulation.ensure()` runs them again.
13
+
14
+
1
15
  ## [6.2.3] - 2026-10-09
2
16
 
3
17
  ### Changed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: policyengine
3
- Version: 6.2.3
3
+ Version: 6.2.5
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
@@ -0,0 +1,56 @@
1
+ # Replace the temporary ACS WIC assumption
2
+
3
+ ## Temporary compatibility fix
4
+
5
+ The certified local-area release
6
+ `populace-us-2024-buildo-acs-local-767312d60-20260923T074941Z` stores donor
7
+ participation decisions as `would_claim_wic`, with missing decisions on ACS
8
+ people. The current model consumes the monthly person input
9
+ `takes_up_wic_if_eligible`.
10
+
11
+ The wrapper preserves all valid existing decisions and sets only missing
12
+ decisions on people whose `person_support_channel` is `acs_2024_1yr` to `True`.
13
+ This explicitly assumes that every eligible affected ACS person claims WIC;
14
+ it does not change eligibility. Missing donor decisions, missing identifying
15
+ provenance, and malformed values remain errors. Source H5 files are unchanged.
16
+
17
+ The existing loader applies this before calculation and year preparation,
18
+ including baseline and reform branches. The fix does not add partitioning,
19
+ state/year preparation APIs, new dataset defaults, or deployment behavior.
20
+
21
+ ## Replacement ownership
22
+
23
+ [Microcosm #1154](https://github.com/PolicyEngine/microcosm/issues/1154) tracks
24
+ the code repair, a dataset rebuild and publication by a separate dataset owner,
25
+ certification in this repository, and removal of the exception. Merging the
26
+ [code repair](https://github.com/PolicyEngine/microcosm/pull/1156) does not
27
+ publish a replacement population or complete that issue.
28
+
29
+ The repair generates ACS participation after completing demographic inputs and
30
+ before combining ACS records with donors. It reuses the existing WIC generator,
31
+ preserves donor decisions, writes complete boolean participation inputs, and
32
+ rejects missing decisions. The dataset owner must rebuild the affected outputs
33
+ and satisfy the existing release checks.
34
+
35
+ ## Remove the exception
36
+
37
+ The separate stacked [removal PR #563](https://github.com/PolicyEngine/policyengine.py/pull/563)
38
+ must remain a draft until the replacement dataset has been published and
39
+ certified. Do not invent its revision or hash or relax its failing check.
40
+
41
+ Once the replacement is available:
42
+
43
+ 1. Follow the [US certification runbook](build-m-us-populace-certification.md)
44
+ with its actual immutable regional manifest. Keep national defaults and
45
+ model pins unchanged unless separately approved.
46
+ 2. Verify complete current-name participation on the replacement and record
47
+ its revision and hashes.
48
+ 3. Add the real certification changes to the removal PR and rebase it onto
49
+ `main` after the temporary compatibility fix merges.
50
+ 4. Delete only the ACS missing-value exception. Keep ordinary legacy-name
51
+ mapping while other certified datasets require it.
52
+ 5. Run the focused mapping and country-model integration tests and validate
53
+ preparation against the actual replacement dataset.
54
+
55
+ This fix does not rebuild or publish data, deploy services, or introduce
56
+ environment variables or database changes.
@@ -231,6 +231,45 @@ not need repository-specific download logic. Authentication or authorization
231
231
  failures are reported directly and do not cause a retry against another
232
232
  repository type.
233
233
 
234
+ ### UK year files and the data year
235
+
236
+ `ensure_datasets` and `create_datasets` cut one file per requested year from
237
+ the projection policyengine-uk makes of the certified dataset. policyengine-uk
238
+ takes the first year of a dataset as observed data. Its State Pension formulas
239
+ split each person's reported State Pension against that year's legislated
240
+ rates, and scale the share to the simulated year's rates, which follow the
241
+ triple lock. The projection uprates the reported amount by CPI, so handing a
242
+ projected year's tables to policyengine-uk as observed data would make the
243
+ State Pension follow CPI instead.
244
+
245
+ Each projected year file therefore keeps its data year, `dataset.data_year`
246
+ (2024 for Enhanced FRS 2024–25), and that year's tables,
247
+ `dataset.data_year_data`. `Simulation.run()` projects the data year's tables
248
+ forward as policyengine-uk does, and uses the file's own tables for the
249
+ simulated year. A run of a year file then gives the same result, record by
250
+ record, as `policyengine_uk.Microsimulation` on the certified file, with or
251
+ without a reform. Keeping the data year's tables doubles a projected file: the
252
+ Enhanced FRS 2026 file is 226 MB, against 113 MB for its own tables. A dataset
253
+ built in memory without a data year is observed data for its own year, which
254
+ is how policyengine-uk treats a single-year dataset.
255
+
256
+ Row filtering applies to both sets of tables, matched by entity ID. Weight
257
+ replacement changes the simulated year's weights only; the data year and the
258
+ years between keep national weights. A row-filtered run is a simulation of the
259
+ region's households alone, so
260
+ variables that policyengine-uk calculates over every household in the
261
+ simulation are calculated over the region: income deciles, the relative
262
+ poverty median, and `shareholding`, which spreads corporate taxes across
263
+ households (PolicyEngine/policyengine.py#567). Variables of a person or
264
+ benefit unit that do not depend on those match the national run.
265
+
266
+ Year files written by earlier releases have no recorded data year.
267
+ `ensure_datasets` writes them again and `load_datasets` refuses them. A year
268
+ file opened directly, as `PolicyEngineUKDataset(filepath=...)`, is not
269
+ checked. A saved UK simulation output records the data year its run anchored
270
+ on; `Simulation.load()` refuses an output saved without one, and
271
+ `Simulation.ensure()` runs it again.
272
+
234
273
  ## Simulations
235
274
 
236
275
  A `Simulation` needs a dataset, a tax-benefit model version, and optionally a policy (reform):
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "policyengine"
7
- version = "6.2.3"
7
+ version = "6.2.5"
8
8
  description = "A package to conduct policy analysis using PolicyEngine tax-benefit models."
9
9
  readme = "README.md"
10
10
  authors = [
@@ -1,10 +1,10 @@
1
1
  {
2
- "bundle_version": "6.2.3",
2
+ "bundle_version": "6.2.5",
3
3
  "citation": {
4
4
  "publisher": "PolicyEngine",
5
- "title": "PolicyEngine bundle 6.2.3",
5
+ "title": "PolicyEngine bundle 6.2.5",
6
6
  "type": "software-bundle",
7
- "version": "6.2.3"
7
+ "version": "6.2.5"
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-6.2.3",
20
+ "bundle_id": "uk-6.2.5",
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.102.3",
100
100
  "wheel_url": "https://files.pythonhosted.org/packages/37/e6/e8d9069d498f1510a1380f24a78e957902d01f00b10248c146d6710d5b37/policyengine_uk-2.102.3-py3-none-any.whl"
101
101
  },
102
- "policyengine_version": "6.2.3",
102
+ "policyengine_version": "6.2.5",
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-spm-20260915",
115
- "bundle_id": "us-6.2.3",
115
+ "bundle_id": "us-6.2.5",
116
116
  "certification": {
117
117
  "built_with_model_version": "2.2.1",
118
118
  "certified_by": "policyengine.py bundle certification",
@@ -217,7 +217,7 @@
217
217
  "version": "2.2.1",
218
218
  "wheel_url": "https://files.pythonhosted.org/packages/5e/09/86ac3968d2a18e28fce3ba1186fc21728e9f299b96a806d6f204f1e0aaed/policyengine_us-2.2.1-py3-none-any.whl"
219
219
  },
220
- "policyengine_version": "6.2.3",
220
+ "policyengine_version": "6.2.5",
221
221
  "region_datasets": {
222
222
  "congressional_district": {
223
223
  "path_template": "populace_us_2024_acs_local.h5"
@@ -295,10 +295,10 @@
295
295
  "packages": {
296
296
  "policyengine": {
297
297
  "import_name": "policyengine",
298
- "install_requirement": "policyengine==6.2.3",
298
+ "install_requirement": "policyengine==6.2.5",
299
299
  "name": "policyengine",
300
300
  "role": "bundle_carrier",
301
- "version": "6.2.3"
301
+ "version": "6.2.5"
302
302
  },
303
303
  "policyengine-core": {
304
304
  "import_name": "policyengine_core",
@@ -334,6 +334,6 @@
334
334
  "wheel_url": "https://files.pythonhosted.org/packages/19/a0/c484f69a0ebf88a9b9fd0ac28176f8df66550f46714f1b0c5ec0b360824e/spm_calculator-1.0.0-py3-none-any.whl"
335
335
  }
336
336
  },
337
- "policyengine_version": "6.2.3",
337
+ "policyengine_version": "6.2.5",
338
338
  "schema_version": 2
339
339
  }
@@ -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-6.2.3 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-6.2.5 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": "6.2.3"
26
+ "schema:softwareVersion": "6.2.5"
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-6.2.3.",
32
+ "rdfs:comment": "Certified arrangement for bundle uk-6.2.5.",
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": "4f4d1c5802ff917e555ce9f5520150fa4e7e1584853782afc38c03818101c9c6"
78
+ "trov:sha256": "41db4dcd0a64e37901493ffb2235e159892b4e2cb45224d5f83b696dee9d56ea"
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": "23c38fee2f5fe5e6dd89137ba46b18b0add70f1a906cccbd28025f13c9061f64"
105
+ "trov:sha256": "2014602b75a33b7be85717d3ee86056dea50d0b7d37f802b89b0372fb7a80546"
106
106
  }
107
107
  },
108
108
  "trov:hasPerformance": {
@@ -17,18 +17,18 @@
17
17
  "schema:name": "PolicyEngine",
18
18
  "schema:url": "https://policyengine.org"
19
19
  },
20
- "schema:description": "TRACE TRO for certified runtime bundle us-6.2.3 covering the bundle manifest, the certified dataset artifact, the country model wheel, and the country data release manifest when it is available.",
20
+ "schema:description": "TRACE TRO for certified runtime bundle us-6.2.5 covering the bundle manifest, the certified dataset artifact, the country model wheel, and the country data release manifest when it is available.",
21
21
  "schema:name": "policyengine us certified bundle TRO",
22
22
  "trov:createdWith": {
23
23
  "@type": "schema:SoftwareApplication",
24
24
  "schema:name": "policyengine",
25
- "schema:softwareVersion": "6.2.3"
25
+ "schema:softwareVersion": "6.2.5"
26
26
  },
27
27
  "trov:hasArrangement": [
28
28
  {
29
29
  "@id": "arrangement/1",
30
30
  "@type": "trov:ArtifactArrangement",
31
- "rdfs:comment": "Certified arrangement for bundle us-6.2.3.",
31
+ "rdfs:comment": "Certified arrangement for bundle us-6.2.5.",
32
32
  "trov:hasArtifactLocation": [
33
33
  {
34
34
  "@id": "arrangement/1/location/bundle_manifest",
@@ -74,7 +74,7 @@
74
74
  "@type": "trov:ResearchArtifact",
75
75
  "schema:name": "policyengine.py bundle manifest for us",
76
76
  "trov:mimeType": "application/json",
77
- "trov:sha256": "4f4d1c5802ff917e555ce9f5520150fa4e7e1584853782afc38c03818101c9c6"
77
+ "trov:sha256": "41db4dcd0a64e37901493ffb2235e159892b4e2cb45224d5f83b696dee9d56ea"
78
78
  },
79
79
  {
80
80
  "@id": "composition/1/artifact/data_release_manifest",
@@ -101,7 +101,7 @@
101
101
  "trov:hasFingerprint": {
102
102
  "@id": "composition/1/fingerprint",
103
103
  "@type": "trov:CompositionFingerprint",
104
- "trov:sha256": "f601acd275cdd7a90632c491593474090dac2c4478f372fe65472e23352e1194"
104
+ "trov:sha256": "a6b92e608e8ae897ad3e3f3e2fbbf14eefb50b9a21a2e0fa458b8693c00710cf"
105
105
  }
106
106
  },
107
107
  "trov:hasPerformance": {
@@ -443,6 +443,21 @@ class MicrosimulationModelVersion(TaxBenefitModelVersion):
443
443
  "stored inputs (it has no record of them); run it again"
444
444
  )
445
445
 
446
+ if self.country_code == "uk":
447
+ from policyengine.tax_benefit_models.uk.datasets import (
448
+ _year_file_records_data_year,
449
+ )
450
+
451
+ # UK outputs saved before runs anchored on the observed data year
452
+ # (PolicyEngine/policyengine.py#556) took a projected year as
453
+ # observed and uprated the State Pension by CPI, so they are not
454
+ # reused. ``Simulation.ensure()`` runs such a simulation again.
455
+ if not _year_file_records_data_year(Path(filepath)):
456
+ raise ValueError(
457
+ "Saved UK simulation predates anchoring on the observed "
458
+ "data year (it records none); run it again"
459
+ )
460
+
446
461
  simulation.output_dataset = self._dataset_class(
447
462
  id=simulation.id,
448
463
  name=simulation.dataset.name,