policyengine 5.0.2__tar.gz → 5.0.4__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.

Potentially problematic release.


This version of policyengine might be problematic. Click here for more details.

Files changed (279) hide show
  1. {policyengine-5.0.2 → policyengine-5.0.4}/CHANGELOG.md +21 -0
  2. {policyengine-5.0.2 → policyengine-5.0.4}/PKG-INFO +8 -8
  3. {policyengine-5.0.2 → policyengine-5.0.4}/docs/countries.md +1 -1
  4. {policyengine-5.0.2 → policyengine-5.0.4}/docs/engineering/skills/data-certification.md +1 -1
  5. {policyengine-5.0.2 → policyengine-5.0.4}/docs/reference/index.md +8 -0
  6. {policyengine-5.0.2 → policyengine-5.0.4}/docs/release-bundles.md +1 -1
  7. {policyengine-5.0.2 → policyengine-5.0.4}/pyproject.toml +8 -8
  8. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/core/parameter.py +27 -12
  9. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/data/bundle/manifest.json +96 -62
  10. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/data/bundle/uk.trace.tro.jsonld +22 -20
  11. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/data/bundle/us.trace.tro.jsonld +5 -5
  12. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/provenance/certification.py +4 -1
  13. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine.egg-info/PKG-INFO +8 -8
  14. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine.egg-info/SOURCES.txt +1 -0
  15. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine.egg-info/requires.txt +7 -7
  16. {policyengine-5.0.2 → policyengine-5.0.4}/tests/fixtures/household_calculator_snapshots/uk_model_surface.json +2 -2
  17. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_bundle.py +12 -6
  18. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_bundle_metadata.py +6 -6
  19. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_certify_data_release.py +1 -1
  20. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_models.py +33 -5
  21. policyengine-5.0.4/tests/test_parameter_values.py +138 -0
  22. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_parametric_reforms.py +25 -0
  23. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_release_manifests.py +35 -19
  24. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_uk_regions.py +2 -2
  25. {policyengine-5.0.2 → policyengine-5.0.4}/uv.lock +14 -14
  26. {policyengine-5.0.2 → policyengine-5.0.4}/.claude/policyengine-guide.md +0 -0
  27. {policyengine-5.0.2 → policyengine-5.0.4}/.claude/quick-reference.md +0 -0
  28. {policyengine-5.0.2 → policyengine-5.0.4}/.github/CONTRIBUTING.md +0 -0
  29. {policyengine-5.0.2 → policyengine-5.0.4}/.github/bump_version.py +0 -0
  30. {policyengine-5.0.2 → policyengine-5.0.4}/.github/capture-version.sh +0 -0
  31. {policyengine-5.0.2 → policyengine-5.0.4}/.github/changelog_template.md +0 -0
  32. {policyengine-5.0.2 → policyengine-5.0.4}/.github/check-changelog.sh +0 -0
  33. {policyengine-5.0.2 → policyengine-5.0.4}/.github/copilot-instructions.md +0 -0
  34. {policyengine-5.0.2 → policyengine-5.0.4}/.github/dispatch-policyengine-release.sh +0 -0
  35. {policyengine-5.0.2 → policyengine-5.0.4}/.github/fetch_version.py +0 -0
  36. {policyengine-5.0.2 → policyengine-5.0.4}/.github/get-changelog-diff.sh +0 -0
  37. {policyengine-5.0.2 → policyengine-5.0.4}/.github/has-functional-changes.sh +0 -0
  38. {policyengine-5.0.2 → policyengine-5.0.4}/.github/is-version-number-acceptable.sh +0 -0
  39. {policyengine-5.0.2 → policyengine-5.0.4}/.github/publish-git-tag.sh +0 -0
  40. {policyengine-5.0.2 → policyengine-5.0.4}/.github/wait-for-pypi.sh +0 -0
  41. {policyengine-5.0.2 → policyengine-5.0.4}/.github/workflows/draft-pdf.yml +0 -0
  42. {policyengine-5.0.2 → policyengine-5.0.4}/.github/workflows/pr_code_changes.yaml +0 -0
  43. {policyengine-5.0.2 → policyengine-5.0.4}/.github/workflows/pr_docs_changes.yaml +0 -0
  44. {policyengine-5.0.2 → policyengine-5.0.4}/.github/workflows/push.yaml +0 -0
  45. {policyengine-5.0.2 → policyengine-5.0.4}/.gitignore +0 -0
  46. {policyengine-5.0.2 → policyengine-5.0.4}/.python-version +0 -0
  47. {policyengine-5.0.2 → policyengine-5.0.4}/AGENTS.md +0 -0
  48. {policyengine-5.0.2 → policyengine-5.0.4}/CITATION.cff +0 -0
  49. {policyengine-5.0.2 → policyengine-5.0.4}/CLAUDE.md +0 -0
  50. {policyengine-5.0.2 → policyengine-5.0.4}/CODE_OF_CONDUCT.md +0 -0
  51. {policyengine-5.0.2 → policyengine-5.0.4}/CONTRIBUTING.md +0 -0
  52. {policyengine-5.0.2 → policyengine-5.0.4}/LICENSE +0 -0
  53. {policyengine-5.0.2 → policyengine-5.0.4}/Makefile +0 -0
  54. {policyengine-5.0.2 → policyengine-5.0.4}/README.md +0 -0
  55. {policyengine-5.0.2 → policyengine-5.0.4}/architecture.png +0 -0
  56. {policyengine-5.0.2 → policyengine-5.0.4}/architecture.svg +0 -0
  57. {policyengine-5.0.2 → policyengine-5.0.4}/changelog.d/.gitkeep +0 -0
  58. {policyengine-5.0.2 → policyengine-5.0.4}/docs/.gitignore +0 -0
  59. {policyengine-5.0.2 → policyengine-5.0.4}/docs/_generator/README.md +0 -0
  60. {policyengine-5.0.2 → policyengine-5.0.4}/docs/_generator/build_reference.py +0 -0
  61. {policyengine-5.0.2 → policyengine-5.0.4}/docs/_quarto.yml +0 -0
  62. {policyengine-5.0.2 → policyengine-5.0.4}/docs/bundles.md +0 -0
  63. {policyengine-5.0.2 → policyengine-5.0.4}/docs/data-publishing-design.md +0 -0
  64. {policyengine-5.0.2 → policyengine-5.0.4}/docs/decile-impact-spec.md +0 -0
  65. {policyengine-5.0.2 → policyengine-5.0.4}/docs/dev.md +0 -0
  66. {policyengine-5.0.2 → policyengine-5.0.4}/docs/engineering/runbooks/build-m-us-populace-certification.md +0 -0
  67. {policyengine-5.0.2 → policyengine-5.0.4}/docs/engineering/skills/README.md +0 -0
  68. {policyengine-5.0.2 → policyengine-5.0.4}/docs/engineering/skills/github-prs.md +0 -0
  69. {policyengine-5.0.2 → policyengine-5.0.4}/docs/engineering/skills/repository-guidance.md +0 -0
  70. {policyengine-5.0.2 → policyengine-5.0.4}/docs/examples.md +0 -0
  71. {policyengine-5.0.2 → policyengine-5.0.4}/docs/getting-started.md +0 -0
  72. {policyengine-5.0.2 → policyengine-5.0.4}/docs/households.md +0 -0
  73. {policyengine-5.0.2 → policyengine-5.0.4}/docs/impact-analysis.md +0 -0
  74. {policyengine-5.0.2 → policyengine-5.0.4}/docs/index.md +0 -0
  75. {policyengine-5.0.2 → policyengine-5.0.4}/docs/methodology/index.md +0 -0
  76. {policyengine-5.0.2 → policyengine-5.0.4}/docs/methodology/model-architecture.md +0 -0
  77. {policyengine-5.0.2 → policyengine-5.0.4}/docs/methodology/us-health-costs.md +0 -0
  78. {policyengine-5.0.2 → policyengine-5.0.4}/docs/microsim.md +0 -0
  79. {policyengine-5.0.2 → policyengine-5.0.4}/docs/outputs.md +0 -0
  80. {policyengine-5.0.2 → policyengine-5.0.4}/docs/programs/index.md +0 -0
  81. {policyengine-5.0.2 → policyengine-5.0.4}/docs/programs/us-chip.md +0 -0
  82. {policyengine-5.0.2 → policyengine-5.0.4}/docs/reforms.md +0 -0
  83. {policyengine-5.0.2 → policyengine-5.0.4}/docs/regions.md +0 -0
  84. {policyengine-5.0.2 → policyengine-5.0.4}/docs/run-records.md +0 -0
  85. {policyengine-5.0.2 → policyengine-5.0.4}/docs/trace-case-study.md +0 -0
  86. {policyengine-5.0.2 → policyengine-5.0.4}/docs/visualisation.md +0 -0
  87. {policyengine-5.0.2 → policyengine-5.0.4}/examples/employment_income_variation_uk.py +0 -0
  88. {policyengine-5.0.2 → policyengine-5.0.4}/examples/employment_income_variation_us.py +0 -0
  89. {policyengine-5.0.2 → policyengine-5.0.4}/examples/household_impact_example.py +0 -0
  90. {policyengine-5.0.2 → policyengine-5.0.4}/examples/income_bands_uk.py +0 -0
  91. {policyengine-5.0.2 → policyengine-5.0.4}/examples/income_distribution_us.py +0 -0
  92. {policyengine-5.0.2 → policyengine-5.0.4}/examples/paper_repro_uk.py +0 -0
  93. {policyengine-5.0.2 → policyengine-5.0.4}/examples/policy_change_uk.py +0 -0
  94. {policyengine-5.0.2 → policyengine-5.0.4}/examples/speedtest_us_simulation.py +0 -0
  95. {policyengine-5.0.2 → policyengine-5.0.4}/examples/us_budgetary_impact.py +0 -0
  96. {policyengine-5.0.2 → policyengine-5.0.4}/paper-preview.html +0 -0
  97. {policyengine-5.0.2 → policyengine-5.0.4}/paper.bib +0 -0
  98. {policyengine-5.0.2 → policyengine-5.0.4}/paper.md +0 -0
  99. {policyengine-5.0.2 → policyengine-5.0.4}/scripts/bundle.py +0 -0
  100. {policyengine-5.0.2 → policyengine-5.0.4}/scripts/certify_data_release.py +0 -0
  101. {policyengine-5.0.2 → policyengine-5.0.4}/scripts/check_data_staleness.py +0 -0
  102. {policyengine-5.0.2 → policyengine-5.0.4}/scripts/export_bundle_release_assets.py +0 -0
  103. {policyengine-5.0.2 → policyengine-5.0.4}/scripts/generate_bundle_artifacts.py +0 -0
  104. {policyengine-5.0.2 → policyengine-5.0.4}/scripts/generate_trace_tros.py +0 -0
  105. {policyengine-5.0.2 → policyengine-5.0.4}/scripts/prepare_package_bundle_update.py +0 -0
  106. {policyengine-5.0.2 → policyengine-5.0.4}/setup.cfg +0 -0
  107. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/__init__.py +0 -0
  108. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/bundle.py +0 -0
  109. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/cli.py +0 -0
  110. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/core/__init__.py +0 -0
  111. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/core/cache.py +0 -0
  112. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/core/dataset.py +0 -0
  113. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/core/dynamic.py +0 -0
  114. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/core/output.py +0 -0
  115. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/core/parameter_node.py +0 -0
  116. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/core/parameter_value.py +0 -0
  117. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/core/policy.py +0 -0
  118. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/core/region.py +0 -0
  119. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/core/run_record.py +0 -0
  120. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/core/scoping_strategy.py +0 -0
  121. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/core/simulation.py +0 -0
  122. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/core/tax_benefit_model.py +0 -0
  123. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/core/tax_benefit_model_version.py +0 -0
  124. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/core/variable.py +0 -0
  125. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/countries/__init__.py +0 -0
  126. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/countries/uk/__init__.py +0 -0
  127. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/countries/uk/regions.py +0 -0
  128. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/countries/us/__init__.py +0 -0
  129. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/countries/us/data/__init__.py +0 -0
  130. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/countries/us/data/districts.py +0 -0
  131. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/countries/us/data/places.py +0 -0
  132. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/countries/us/data/states.py +0 -0
  133. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/countries/us/regions.py +0 -0
  134. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/data/__init__.py +0 -0
  135. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/data/schemas/trace_tro.schema.json +0 -0
  136. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/data/uk_geography_assets.py +0 -0
  137. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/derivations/__init__.py +0 -0
  138. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/derivations/narrate.py +0 -0
  139. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/derivations/trace.py +0 -0
  140. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/graph/__init__.py +0 -0
  141. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/graph/extractor.py +0 -0
  142. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/graph/graph.py +0 -0
  143. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/outputs/__init__.py +0 -0
  144. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/outputs/aggregate.py +0 -0
  145. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/outputs/change_aggregate.py +0 -0
  146. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/outputs/cliff_impact.py +0 -0
  147. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/outputs/congressional_district_impact.py +0 -0
  148. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/outputs/constituency_impact.py +0 -0
  149. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/outputs/decile_analysis.py +0 -0
  150. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/outputs/decile_grouping.py +0 -0
  151. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/outputs/decile_impact.py +0 -0
  152. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/outputs/extra_variables.py +0 -0
  153. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/outputs/inequality.py +0 -0
  154. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/outputs/intra_decile_impact.py +0 -0
  155. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/outputs/labor_supply_response.py +0 -0
  156. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/outputs/local_authority_impact.py +0 -0
  157. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/outputs/poverty.py +0 -0
  158. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/outputs/program_statistics.py +0 -0
  159. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/outputs/uk_geography_assets.py +0 -0
  160. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/outputs/uk_geography_impact.py +0 -0
  161. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/provenance/__init__.py +0 -0
  162. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/provenance/dataset_sources.py +0 -0
  163. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/provenance/manifest.py +0 -0
  164. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/provenance/pyproject_pins.py +0 -0
  165. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/provenance/trace.py +0 -0
  166. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/provenance/verify.py +0 -0
  167. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/provenance/zenodo.py +0 -0
  168. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/results/__init__.py +0 -0
  169. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/results/schema.py +0 -0
  170. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/results/trace_tro.py +0 -0
  171. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/results/tracking.py +0 -0
  172. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/tax_benefit_models/common/__init__.py +0 -0
  173. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/tax_benefit_models/common/axes.py +0 -0
  174. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/tax_benefit_models/common/extra_variables.py +0 -0
  175. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/tax_benefit_models/common/household.py +0 -0
  176. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/tax_benefit_models/common/model_version.py +0 -0
  177. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/tax_benefit_models/common/reform.py +0 -0
  178. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/tax_benefit_models/common/result.py +0 -0
  179. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/tax_benefit_models/uk/__init__.py +0 -0
  180. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/tax_benefit_models/uk/analysis.py +0 -0
  181. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/tax_benefit_models/uk/datasets.py +0 -0
  182. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/tax_benefit_models/uk/household.py +0 -0
  183. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/tax_benefit_models/uk/model.py +0 -0
  184. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/tax_benefit_models/us/__init__.py +0 -0
  185. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/tax_benefit_models/us/analysis.py +0 -0
  186. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/tax_benefit_models/us/datasets.py +0 -0
  187. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/tax_benefit_models/us/household.py +0 -0
  188. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/tax_benefit_models/us/model.py +0 -0
  189. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/utils/__init__.py +0 -0
  190. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/utils/data/__init__.py +0 -0
  191. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/utils/data/caching_google_storage_client.py +0 -0
  192. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/utils/data/version_aware_storage_client.py +0 -0
  193. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/utils/dates.py +0 -0
  194. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/utils/design.py +0 -0
  195. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/utils/entity_utils.py +0 -0
  196. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/utils/errors.py +0 -0
  197. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/utils/google_cloud_bucket.py +0 -0
  198. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/utils/household_validation.py +0 -0
  199. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/utils/parameter_labels.py +0 -0
  200. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/utils/parametric_reforms.py +0 -0
  201. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine/utils/plotting.py +0 -0
  202. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine.egg-info/dependency_links.txt +0 -0
  203. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine.egg-info/entry_points.txt +0 -0
  204. {policyengine-5.0.2 → policyengine-5.0.4}/src/policyengine.egg-info/top_level.txt +0 -0
  205. {policyengine-5.0.2 → policyengine-5.0.4}/tests/__init__.py +0 -0
  206. {policyengine-5.0.2 → policyengine-5.0.4}/tests/conftest.py +0 -0
  207. {policyengine-5.0.2 → policyengine-5.0.4}/tests/fixtures/__init__.py +0 -0
  208. {policyengine-5.0.2 → policyengine-5.0.4}/tests/fixtures/filtering_fixtures.py +0 -0
  209. {policyengine-5.0.2 → policyengine-5.0.4}/tests/fixtures/household_calculator_snapshots/uk_couple_two_kids.json +0 -0
  210. {policyengine-5.0.2 → policyengine-5.0.4}/tests/fixtures/household_calculator_snapshots/uk_single_adult_employment_income.json +0 -0
  211. {policyengine-5.0.2 → policyengine-5.0.4}/tests/fixtures/household_calculator_snapshots/uk_single_adult_no_income.json +0 -0
  212. {policyengine-5.0.2 → policyengine-5.0.4}/tests/fixtures/household_calculator_snapshots/uk_single_parent_one_child.json +0 -0
  213. {policyengine-5.0.2 → policyengine-5.0.4}/tests/fixtures/household_calculator_snapshots/us_married_two_kids_high_income.json +0 -0
  214. {policyengine-5.0.2 → policyengine-5.0.4}/tests/fixtures/household_calculator_snapshots/us_model_surface.json +0 -0
  215. {policyengine-5.0.2 → policyengine-5.0.4}/tests/fixtures/household_calculator_snapshots/us_single_adult_employment_income.json +0 -0
  216. {policyengine-5.0.2 → policyengine-5.0.4}/tests/fixtures/household_calculator_snapshots/us_single_adult_no_income.json +0 -0
  217. {policyengine-5.0.2 → policyengine-5.0.4}/tests/fixtures/household_calculator_snapshots/us_single_parent_one_child.json +0 -0
  218. {policyengine-5.0.2 → policyengine-5.0.4}/tests/fixtures/parameter_labels_fixtures.py +0 -0
  219. {policyengine-5.0.2 → policyengine-5.0.4}/tests/fixtures/parametric_reforms_fixtures.py +0 -0
  220. {policyengine-5.0.2 → policyengine-5.0.4}/tests/fixtures/poverty_by_demographics_fixtures.py +0 -0
  221. {policyengine-5.0.2 → policyengine-5.0.4}/tests/fixtures/region_fixtures.py +0 -0
  222. {policyengine-5.0.2 → policyengine-5.0.4}/tests/fixtures/us_reform_fixtures.py +0 -0
  223. {policyengine-5.0.2 → policyengine-5.0.4}/tests/fixtures/variable_label_fixtures.py +0 -0
  224. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_aggregate.py +0 -0
  225. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_budgetary_impact.py +0 -0
  226. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_bump_version.py +0 -0
  227. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_cache.py +0 -0
  228. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_change_aggregate.py +0 -0
  229. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_cliff_impact.py +0 -0
  230. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_cliff_impact_analysis.py +0 -0
  231. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_congressional_district_impact.py +0 -0
  232. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_constituency_impact.py +0 -0
  233. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_dataset_persistence.py +0 -0
  234. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_dataset_sources.py +0 -0
  235. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_decile_grouping.py +0 -0
  236. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_derivations.py +0 -0
  237. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_dict_reforms_on_simulation.py +0 -0
  238. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_entity_mapping.py +0 -0
  239. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_entity_utils.py +0 -0
  240. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_entity_utils_characterization.py +0 -0
  241. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_errors.py +0 -0
  242. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_extra_variables.py +0 -0
  243. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_filtering.py +0 -0
  244. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_graph/__init__.py +0 -0
  245. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_graph/conftest.py +0 -0
  246. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_graph/test_extractor.py +0 -0
  247. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_household_calculator_snapshot.py +0 -0
  248. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_household_impact.py +0 -0
  249. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_inequality.py +0 -0
  250. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_intra_decile_impact.py +0 -0
  251. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_labor_supply_response.py +0 -0
  252. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_local_authority_impact.py +0 -0
  253. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_manifest_version_mismatch.py +0 -0
  254. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_pandas3_compatibility.py +0 -0
  255. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_parameter_labels.py +0 -0
  256. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_poverty.py +0 -0
  257. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_poverty_by_demographics.py +0 -0
  258. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_poverty_run.py +0 -0
  259. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_preservation_mirror.py +0 -0
  260. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_program_statistics.py +0 -0
  261. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_pyproject_pins.py +0 -0
  262. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_region.py +0 -0
  263. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_region_group_strategy.py +0 -0
  264. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_results.py +0 -0
  265. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_run_record.py +0 -0
  266. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_scoping_strategy.py +0 -0
  267. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_small_follow_ups.py +0 -0
  268. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_trace_tro.py +0 -0
  269. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_trace_tro_verify.py +0 -0
  270. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_uk_analysis.py +0 -0
  271. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_uk_geography_assets.py +0 -0
  272. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_uk_program_statistics.py +0 -0
  273. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_us_long_term_datasets.py +0 -0
  274. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_us_microsim_structural_reforms.py +0 -0
  275. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_us_program_statistics.py +0 -0
  276. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_us_reform_application.py +0 -0
  277. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_us_regions.py +0 -0
  278. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_variable_labels.py +0 -0
  279. {policyengine-5.0.2 → policyengine-5.0.4}/tests/test_zenodo_mirror.py +0 -0
@@ -1,3 +1,24 @@
1
+ ## [5.0.4] - 2026-08-27
2
+
3
+ ### Fixed
4
+
5
+ - Fixed `Parameter.parameter_values` to return oldest-first, non-overlapping
6
+ histories with inclusive end dates instead of reversed intervals derived from
7
+ PolicyEngine Core's newest-first storage.
8
+
9
+
10
+ ## [5.0.3] - 2026-08-21
11
+
12
+ ### Changed
13
+
14
+ - Certify the UK populace data release `policyengine-uk-data-1.56.16` (enhanced_frs_2024_25, policyengine-uk 2.90.2) into the PolicyEngine bundle manifest.
15
+
16
+ ### Fixed
17
+
18
+ - Update the certified bundle to policyengine-uk 2.90.2 (Universal Credit deductions: Fair Repayment Rate cap, protected floor and abolition reform levers) and policyengine-core 3.30.1.
19
+ - Update the certified PolicyEngine bundle pins.
20
+
21
+
1
22
  ## [5.0.2] - 2026-08-14
2
23
 
3
24
  ### Fixed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: policyengine
3
- Version: 5.0.2
3
+ Version: 5.0.4
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
@@ -689,14 +689,14 @@ Requires-Dist: plotly>=5.0.0; extra == "plotting"
689
689
  Provides-Extra: graph
690
690
  Requires-Dist: networkx>=3.0; extra == "graph"
691
691
  Provides-Extra: models
692
- Requires-Dist: policyengine-core==3.30.0; extra == "models"
692
+ Requires-Dist: policyengine-core==3.30.1; extra == "models"
693
693
  Requires-Dist: policyengine-us==1.764.6; extra == "models"
694
- Requires-Dist: policyengine-uk==2.89.2; extra == "models"
694
+ Requires-Dist: policyengine-uk==2.90.2; extra == "models"
695
695
  Provides-Extra: uk
696
- Requires-Dist: policyengine-core==3.30.0; extra == "uk"
697
- Requires-Dist: policyengine-uk==2.89.2; extra == "uk"
696
+ Requires-Dist: policyengine-core==3.30.1; extra == "uk"
697
+ Requires-Dist: policyengine-uk==2.90.2; extra == "uk"
698
698
  Provides-Extra: us
699
- Requires-Dist: policyengine-core==3.30.0; extra == "us"
699
+ Requires-Dist: policyengine-core==3.30.1; extra == "us"
700
700
  Requires-Dist: policyengine-us==1.764.6; extra == "us"
701
701
  Provides-Extra: dev
702
702
  Requires-Dist: pytest; extra == "dev"
@@ -712,9 +712,9 @@ Requires-Dist: ruff>=0.9.0; extra == "dev"
712
712
  Requires-Dist: towncrier>=24.8.0; extra == "dev"
713
713
  Requires-Dist: mypy>=1.11.0; extra == "dev"
714
714
  Requires-Dist: pytest-cov>=5.0.0; extra == "dev"
715
- Requires-Dist: policyengine-core==3.30.0; extra == "dev"
715
+ Requires-Dist: policyengine-core==3.30.1; extra == "dev"
716
716
  Requires-Dist: policyengine-us==1.764.6; extra == "dev"
717
- Requires-Dist: policyengine-uk==2.89.2; extra == "dev"
717
+ Requires-Dist: policyengine-uk==2.90.2; extra == "dev"
718
718
  Dynamic: license-file
719
719
 
720
720
  # PolicyEngine.py
@@ -33,7 +33,7 @@ Override in any output with `income_variable=`.
33
33
  | | Dataset |
34
34
  |---|---|
35
35
  | US | Populace US 2024 (`populace_us_2024.h5`) |
36
- | UK | Populace UK 2023 (`populace_uk_2023.h5`) |
36
+ | UK | Enhanced FRS 2024-25 (`enhanced_frs_2024_25.h5`, policyengine-uk-data) |
37
37
 
38
38
  ## State / regional breakdown
39
39
 
@@ -80,7 +80,7 @@ state overlay artifacts when `--regional-manifest-uri` is used, unknown country.
80
80
  Certification gate: the model version must either exactly match the
81
81
  build-time model (`compatibility_basis: built_with_model_package`) or be
82
82
  covered by the publisher's `compatible_model_packages` claim
83
- (`compatibility_basis: compatible_model_packages`, recorded with a
83
+ (`compatibility_basis: legacy_compatible_model_package`, recorded with a
84
84
  warning — the publisher's claim is made good only by this repo's test
85
85
  suite passing on the pinned pair). Neither basis means certification is
86
86
  refused: a new data build or a published compatibility claim is required.
@@ -4,6 +4,14 @@ title: "Reference"
4
4
 
5
5
  Reference pages are generated from the installed country-model packages. Authored methodology pages explain why the model is structured the way it is; generated reference pages expose the exact release contents.
6
6
 
7
+ ## Parameter history contract
8
+
9
+ `model.get_parameter(name).parameter_values` exposes effective values from
10
+ oldest to newest. Each bounded value has an inclusive `end_date` equal to the
11
+ day before the next value starts, while the newest value has `end_date=None`.
12
+ If the underlying Core history contains duplicate effective starts, the public
13
+ history contains the first value Core would select for that date.
14
+
7
15
  ## What generated reference should include
8
16
 
9
17
  The variable reference generator already reads the installed country model and can emit:
@@ -544,7 +544,7 @@ Things that should usually not affect the fingerprint:
544
544
  1. the model version exactly matches the `built_with_model_package.version`
545
545
  (`compatibility_basis: built_with_model_package`)
546
546
  2. the data publisher's `compatible_model_packages` covers the model version
547
- (`compatibility_basis: compatible_model_packages` — the publisher's claim,
547
+ (`compatibility_basis: legacy_compatible_model_package` — the publisher's claim,
548
548
  recorded with a warning and made good by the test suite passing on the
549
549
  pinned pair)
550
550
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "policyengine"
7
- version = "5.0.2"
7
+ version = "5.0.4"
8
8
  description = "A package to conduct policy analysis using PolicyEngine tax-benefit models."
9
9
  readme = "README.md"
10
10
  authors = [
@@ -44,16 +44,16 @@ graph = [
44
44
  "networkx>=3.0",
45
45
  ]
46
46
  models = [
47
- "policyengine-core==3.30.0",
47
+ "policyengine-core==3.30.1",
48
48
  "policyengine-us==1.764.6",
49
- "policyengine-uk==2.89.2",
49
+ "policyengine-uk==2.90.2",
50
50
  ]
51
51
  uk = [
52
- "policyengine-core==3.30.0",
53
- "policyengine-uk==2.89.2",
52
+ "policyengine-core==3.30.1",
53
+ "policyengine-uk==2.90.2",
54
54
  ]
55
55
  us = [
56
- "policyengine-core==3.30.0",
56
+ "policyengine-core==3.30.1",
57
57
  "policyengine-us==1.764.6",
58
58
  ]
59
59
  dev = [
@@ -70,9 +70,9 @@ dev = [
70
70
  "towncrier>=24.8.0",
71
71
  "mypy>=1.11.0",
72
72
  "pytest-cov>=5.0.0",
73
- "policyengine-core==3.30.0",
73
+ "policyengine-core==3.30.1",
74
74
  "policyengine-us==1.764.6",
75
- "policyengine-uk==2.89.2",
75
+ "policyengine-uk==2.90.2",
76
76
  ]
77
77
 
78
78
  [tool.setuptools]
@@ -1,3 +1,4 @@
1
+ from datetime import datetime, timedelta
1
2
  from typing import TYPE_CHECKING, Any, Optional
2
3
  from uuid import uuid4
3
4
 
@@ -32,25 +33,39 @@ class Parameter(BaseModel):
32
33
 
33
34
  @property
34
35
  def parameter_values(self) -> list["ParameterValue"]:
35
- """Lazily build parameter values on first access."""
36
+ """Lazily build the effective parameter history on first access.
37
+
38
+ Values are ordered from oldest to newest. ``end_date`` is inclusive,
39
+ so each bounded value ends one day before the next value starts and the
40
+ newest value remains open-ended. When Core exposes duplicate effective
41
+ starts, retain the first entry because Core's lookup uses the first
42
+ matching entry as the effective value.
43
+ """
36
44
  if self._parameter_values is None:
37
45
  self._parameter_values = []
38
46
  if self._core_param is not None:
39
47
  from policyengine.utils import parse_safe_date
40
48
 
41
- for i in range(len(self._core_param.values_list)):
42
- param_at_instant = self._core_param.values_list[i]
43
- if i + 1 < len(self._core_param.values_list):
44
- next_instant = self._core_param.values_list[i + 1]
45
- else:
46
- next_instant = None
49
+ effective_values: dict[datetime, Any] = {}
50
+ for value_at_instant in self._core_param.values_list:
51
+ start_date = parse_safe_date(value_at_instant.instant_str)
52
+ effective_values.setdefault(start_date, value_at_instant)
53
+
54
+ chronological_values = sorted(effective_values.items())
55
+ for index, (start_date, value_at_instant) in enumerate(
56
+ chronological_values
57
+ ):
58
+ next_index = index + 1
59
+ end_date = (
60
+ chronological_values[next_index][0] - timedelta(days=1)
61
+ if next_index < len(chronological_values)
62
+ else None
63
+ )
47
64
  pv = ParameterValue(
48
65
  parameter=self,
49
- start_date=parse_safe_date(param_at_instant.instant_str),
50
- end_date=parse_safe_date(next_instant.instant_str)
51
- if next_instant
52
- else None,
53
- value=param_at_instant.value,
66
+ start_date=start_date,
67
+ end_date=end_date,
68
+ value=value_at_instant.value,
54
69
  )
55
70
  self._parameter_values.append(pv)
56
71
  return self._parameter_values
@@ -1,10 +1,10 @@
1
1
  {
2
- "bundle_version": "5.0.2",
2
+ "bundle_version": "5.0.4",
3
3
  "citation": {
4
4
  "publisher": "PolicyEngine",
5
- "title": "PolicyEngine bundle 5.0.2",
5
+ "title": "PolicyEngine bundle 5.0.4",
6
6
  "type": "software-bundle",
7
- "version": "5.0.2"
7
+ "version": "5.0.4"
8
8
  },
9
9
  "countries": {
10
10
  "uk": {
@@ -16,89 +16,103 @@
16
16
  },
17
17
  "data_releases": {
18
18
  "uk": {
19
- "build_id": "populace-uk-2023-dd68c73-4aa4b14-20260619T023711Z",
20
- "bundle_id": "uk-5.0.2",
19
+ "build_id": "policyengine-uk-data-1.56.16",
20
+ "bundle_id": "uk-5.0.4",
21
21
  "certification": {
22
+ "built_with_model_git_sha": "12a1e028afeef08d8b2d74ee03fd9de3a78b2dd3",
22
23
  "built_with_model_version": "2.89.2",
23
24
  "certified_by": "policyengine.py bundle certification",
24
- "certified_for_model_version": "2.89.2",
25
- "compatibility_basis": "built_with_model_package",
26
- "data_build_id": "populace-uk-2023-dd68c73-4aa4b14-20260619T023711Z"
25
+ "certified_for_model_version": "2.90.2",
26
+ "compatibility_basis": "legacy_compatible_model_package",
27
+ "data_build_fingerprint": "sha256:6bfff835b504094c05342d2b4d770d2d94c8c1adcb15c4468931f53b21a89ea9",
28
+ "data_build_id": "policyengine-uk-data-1.56.16"
27
29
  },
28
30
  "certified_data_artifact": {
29
- "build_id": "populace-uk-2023-dd68c73-4aa4b14-20260619T023711Z",
31
+ "build_id": "policyengine-uk-data-1.56.16",
30
32
  "data_package": {
31
- "name": "populace-data",
32
- "version": "0.1.0"
33
+ "name": "policyengine-uk-data",
34
+ "version": "1.56.16"
33
35
  },
34
- "dataset": "populace_uk_2023",
35
- "sha256": "f17306ccb2aad7ff0130be3589b560afb2e2a12a943570911cd0c77f07934833",
36
- "uri": "hf://policyengine/populace-uk-private/populace_uk_2023.h5@populace-uk-2023-dd68c73-4aa4b14-20260619T023711Z"
36
+ "dataset": "enhanced_frs_2024_25",
37
+ "sha256": "e433e532b17bd8ce76030156285816e33d44e93edabd2204adbef71d19a68712",
38
+ "uri": "hf://policyengine/policyengine-uk-data-private/enhanced_frs_2024_25.h5@1.56.16"
37
39
  },
38
40
  "country_id": "uk",
39
41
  "data_package": {
40
- "name": "populace-data",
41
- "release_manifest_path": "releases/populace-uk-2023-dd68c73-4aa4b14-20260619T023711Z/release_manifest.json",
42
- "release_manifest_revision": "populace-uk-2023-dd68c73-4aa4b14-20260619T023711Z",
43
- "repo_id": "policyengine/populace-uk-private",
44
- "repo_type": "dataset",
45
- "version": "0.1.0"
42
+ "name": "policyengine-uk-data",
43
+ "release_manifest_path": "releases/1.56.16/release_manifest.json",
44
+ "release_manifest_revision": "2966541fca275ab5ccb6cfb659b010b1db37ad49",
45
+ "repo_id": "policyengine/policyengine-uk-data-private",
46
+ "repo_type": "model",
47
+ "version": "1.56.16"
46
48
  },
47
49
  "data_producer": "populace",
48
50
  "datasets": {
49
- "calibration_diagnostics": {
50
- "path": "releases/populace-uk-2023-dd68c73-4aa4b14-20260619T023711Z/calibration_diagnostics.json",
51
- "repo_id": "policyengine/populace-uk-private",
52
- "revision": "populace-uk-2023-dd68c73-4aa4b14-20260619T023711Z",
53
- "sha256": "80b98127020aafb049846e0877a3818476aaf7adf13539d62d512fdd6727745d"
51
+ "enhanced_frs_2024_25": {
52
+ "path": "enhanced_frs_2024_25.h5",
53
+ "repo_id": "policyengine/policyengine-uk-data-private",
54
+ "revision": "1.56.16",
55
+ "sha256": "e433e532b17bd8ce76030156285816e33d44e93edabd2204adbef71d19a68712"
54
56
  },
55
- "enhanced_frs_2023_24": {
56
- "path": "enhanced_frs_2023_24.h5",
57
+ "enhanced_frs_2024_25_tiny": {
58
+ "path": "enhanced_frs_2024_25_tiny.h5",
57
59
  "repo_id": "policyengine/policyengine-uk-data-private",
58
- "revision": "655dd07e4bb9c777b00dac044949611f1feb824f",
59
- "sha256": "584ae33d80ca0431254610a3f8254d132da73477d31966d6446282861ecae50d"
60
+ "revision": "1.56.16",
61
+ "sha256": "6cbbda7eef1b0b16d62e24a3099dc7959906287d659868d31aa7fc82af598871"
60
62
  },
61
- "frs_2023_24": {
62
- "path": "frs_2023_24.h5",
63
+ "frs_2024_25": {
64
+ "path": "frs_2024_25.h5",
63
65
  "repo_id": "policyengine/policyengine-uk-data-private",
64
- "revision": "655dd07e4bb9c777b00dac044949611f1feb824f",
65
- "sha256": "df26d4d7af9d164aa2d064181b39290292d2f62bb26fee6126fc095fc06da292"
66
+ "revision": "1.56.16",
67
+ "sha256": "d4d29901d7ea0c1f636060d4177a411a39c1977fa9fd23a61af3bb0f030769bd"
66
68
  },
67
- "populace_uk_2023": {
68
- "path": "populace_uk_2023.h5",
69
- "repo_id": "policyengine/populace-uk-private",
70
- "revision": "populace-uk-2023-dd68c73-4aa4b14-20260619T023711Z",
71
- "sha256": "f17306ccb2aad7ff0130be3589b560afb2e2a12a943570911cd0c77f07934833"
69
+ "frs_2024_25_tiny": {
70
+ "path": "frs_2024_25_tiny.h5",
71
+ "repo_id": "policyengine/policyengine-uk-data-private",
72
+ "revision": "1.56.16",
73
+ "sha256": "74ca086be959b2942ecbf7755034d94dc6a817f4d9d54f2585a1c6df849d9588"
72
74
  },
73
- "populace_uk_2023_calibration": {
74
- "path": "populace_uk_2023_calibration.npz",
75
- "repo_id": "policyengine/populace-uk-private",
76
- "revision": "populace-uk-2023-dd68c73-4aa4b14-20260619T023711Z",
77
- "sha256": "fb2fc115fbae53a501b8acbc1529f319b9e07b74478c7bd02d00c674d4c10022"
75
+ "local_authority_weights": {
76
+ "path": "local_authority_weights.h5",
77
+ "repo_id": "policyengine/policyengine-uk-data-private",
78
+ "revision": "1.56.16",
79
+ "sha256": "6d634d69fb472b80cc17ffe696e028c54d7b739166bb7d9a57860f9d73537aa5"
80
+ },
81
+ "local_geography_weights": {
82
+ "path": "local_geography_weights.csv.gz",
83
+ "repo_id": "policyengine/policyengine-uk-data-private",
84
+ "revision": "1.56.16",
85
+ "sha256": "6f623e277089d06c2c50ec3d8ab766635f695c8579d360410e3dcb4214ea9709"
86
+ },
87
+ "parliamentary_constituency_weights": {
88
+ "path": "parliamentary_constituency_weights.h5",
89
+ "repo_id": "policyengine/policyengine-uk-data-private",
90
+ "revision": "1.56.16",
91
+ "sha256": "6870c36072a0c34d2e6ce3ebf58664b7932ca46a9e3808d387988773e63b66d5"
78
92
  }
79
93
  },
80
- "default_dataset": "populace_uk_2023",
81
- "default_dataset_uri": "hf://policyengine/populace-uk-private/populace_uk_2023.h5@populace-uk-2023-dd68c73-4aa4b14-20260619T023711Z",
94
+ "default_dataset": "enhanced_frs_2024_25",
95
+ "default_dataset_uri": "hf://policyengine/policyengine-uk-data-private/enhanced_frs_2024_25.h5@1.56.16",
82
96
  "model_package": {
83
97
  "name": "policyengine-uk",
84
- "sha256": "80965d3dd7dc767db9b083820d40262ce543020d5a8880a0cf88da10ae641b24",
85
- "version": "2.89.2",
86
- "wheel_url": "https://files.pythonhosted.org/packages/83/db/ce3154ba69b6fcd1e9e922ceee705ef4ddb1f81553da1e63b9296e74a4dc/policyengine_uk-2.89.2-py3-none-any.whl"
98
+ "sha256": "f100ef97e20b29b84138078f1dbc5b83f8857e6bc74b745fc6abef7ea1eeadf2",
99
+ "version": "2.90.2",
100
+ "wheel_url": "https://files.pythonhosted.org/packages/ec/da/658bff2df6094bd7bf2b0f561ff60fd41508adbd0a3af29b4553c83bc678/policyengine_uk-2.90.2-py3-none-any.whl"
87
101
  },
88
- "policyengine_version": "5.0.2",
102
+ "policyengine_version": "5.0.4",
89
103
  "region_datasets": {
90
104
  "national": {
91
- "path_template": "populace_uk_2023.h5"
105
+ "path_template": "enhanced_frs_2024_25.h5"
92
106
  }
93
107
  },
94
- "release_manifest_uri": "https://huggingface.co/datasets/policyengine/populace-uk-private/resolve/populace-uk-2023-dd68c73-4aa4b14-20260619T023711Z/releases/populace-uk-2023-dd68c73-4aa4b14-20260619T023711Z/release_manifest.json",
108
+ "release_manifest_uri": "https://huggingface.co/policyengine/policyengine-uk-data-private/resolve/2966541fca275ab5ccb6cfb659b010b1db37ad49/releases/1.56.16/release_manifest.json",
95
109
  "schema_version": 1,
96
- "source_manifest_uri": "hf://dataset/policyengine/populace-uk-private@populace-uk-2023-dd68c73-4aa4b14-20260619T023711Z/releases/populace-uk-2023-dd68c73-4aa4b14-20260619T023711Z/release_manifest.json",
97
- "version": "populace-uk-2023-dd68c73-4aa4b14-20260619T023711Z"
110
+ "source_manifest_uri": "hf://model/policyengine/policyengine-uk-data-private@2966541fca275ab5ccb6cfb659b010b1db37ad49/releases/1.56.16/release_manifest.json",
111
+ "version": "policyengine-uk-data-1.56.16"
98
112
  },
99
113
  "us": {
100
114
  "build_id": "populace-us-2024-buildp-sparse-rmloss100-cae8640-20260728T011454Z",
101
- "bundle_id": "us-5.0.2",
115
+ "bundle_id": "us-5.0.4",
102
116
  "certification": {
103
117
  "built_with_model_version": "1.764.6",
104
118
  "certified_by": "policyengine.py bundle certification",
@@ -172,7 +186,7 @@
172
186
  "version": "1.764.6",
173
187
  "wheel_url": "https://files.pythonhosted.org/packages/e2/5a/0566666f30ad06e416f0cf25b24bdee73acd71897fb2de3c0ac43b59e3e3/policyengine_us-1.764.6-py3-none-any.whl"
174
188
  },
175
- "policyengine_version": "5.0.2",
189
+ "policyengine_version": "5.0.4",
176
190
  "region_datasets": {
177
191
  "national": {
178
192
  "path_template": "populace_us_2024.h5"
@@ -185,6 +199,26 @@
185
199
  }
186
200
  },
187
201
  "dataset_overlays": {
202
+ "uk": {
203
+ "enhanced_frs_2023_24": {
204
+ "path": "enhanced_frs_2023_24.h5",
205
+ "repo_id": "policyengine/policyengine-uk-data-private",
206
+ "revision": "655dd07e4bb9c777b00dac044949611f1feb824f",
207
+ "sha256": "584ae33d80ca0431254610a3f8254d132da73477d31966d6446282861ecae50d"
208
+ },
209
+ "frs_2023_24": {
210
+ "path": "frs_2023_24.h5",
211
+ "repo_id": "policyengine/policyengine-uk-data-private",
212
+ "revision": "655dd07e4bb9c777b00dac044949611f1feb824f",
213
+ "sha256": "df26d4d7af9d164aa2d064181b39290292d2f62bb26fee6126fc095fc06da292"
214
+ },
215
+ "populace_uk_2023": {
216
+ "path": "populace_uk_2023.h5",
217
+ "repo_id": "policyengine/populace-uk-private",
218
+ "revision": "populace-uk-2023-dd68c73-4aa4b14-20260619T023711Z",
219
+ "sha256": "f17306ccb2aad7ff0130be3589b560afb2e2a12a943570911cd0c77f07934833"
220
+ }
221
+ },
188
222
  "us": {
189
223
  "populace_us_2024_acs_local": {
190
224
  "path": "populace_us_2024_acs_local.h5",
@@ -212,25 +246,25 @@
212
246
  "packages": {
213
247
  "policyengine": {
214
248
  "import_name": "policyengine",
215
- "install_requirement": "policyengine==5.0.2",
249
+ "install_requirement": "policyengine==5.0.4",
216
250
  "name": "policyengine",
217
251
  "role": "bundle_carrier",
218
- "version": "5.0.2"
252
+ "version": "5.0.4"
219
253
  },
220
254
  "policyengine-core": {
221
255
  "import_name": "policyengine_core",
222
- "install_requirement": "policyengine-core==3.30.0",
256
+ "install_requirement": "policyengine-core==3.30.1",
223
257
  "name": "policyengine-core",
224
258
  "role": "runtime_dependency",
225
- "version": "3.30.0"
259
+ "version": "3.30.1"
226
260
  },
227
261
  "policyengine-uk": {
228
262
  "country": "uk",
229
263
  "import_name": "policyengine_uk",
230
- "install_requirement": "policyengine-uk==2.89.2",
264
+ "install_requirement": "policyengine-uk==2.90.2",
231
265
  "name": "policyengine-uk",
232
266
  "role": "country_model",
233
- "version": "2.89.2"
267
+ "version": "2.90.2"
234
268
  },
235
269
  "policyengine-us": {
236
270
  "country": "us",
@@ -241,6 +275,6 @@
241
275
  "version": "1.764.6"
242
276
  }
243
277
  },
244
- "policyengine_version": "5.0.2",
278
+ "policyengine_version": "5.0.4",
245
279
  "schema_version": 2
246
280
  }
@@ -17,19 +17,19 @@
17
17
  "schema:name": "PolicyEngine",
18
18
  "schema:url": "https://policyengine.org"
19
19
  },
20
- "schema:dateCreated": "2026-06-19T02:38:00Z",
21
- "schema:description": "TRACE TRO for certified runtime bundle uk-5.0.2 covering the bundle manifest, the certified dataset artifact, the country model wheel, and the country data release manifest when it is available.",
20
+ "schema:dateCreated": "2026-08-18T14:20:32.100961Z",
21
+ "schema:description": "TRACE TRO for certified runtime bundle uk-5.0.4 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.0.2"
26
+ "schema:softwareVersion": "5.0.4"
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.0.2.",
32
+ "rdfs:comment": "Certified arrangement for bundle uk-5.0.4.",
33
33
  "trov:hasArtifactLocation": [
34
34
  {
35
35
  "@id": "arrangement/1/location/bundle_manifest",
@@ -45,7 +45,7 @@
45
45
  "trov:hasArtifact": {
46
46
  "@id": "composition/1/artifact/data_release_manifest"
47
47
  },
48
- "trov:hasLocation": "https://huggingface.co/datasets/policyengine/populace-uk-private/resolve/populace-uk-2023-dd68c73-4aa4b14-20260619T023711Z/releases/populace-uk-2023-dd68c73-4aa4b14-20260619T023711Z/release_manifest.json"
48
+ "trov:hasLocation": "https://huggingface.co/policyengine/policyengine-uk-data-private/resolve/2966541fca275ab5ccb6cfb659b010b1db37ad49/releases/1.56.16/release_manifest.json"
49
49
  },
50
50
  {
51
51
  "@id": "arrangement/1/location/dataset",
@@ -53,7 +53,7 @@
53
53
  "trov:hasArtifact": {
54
54
  "@id": "composition/1/artifact/dataset"
55
55
  },
56
- "trov:hasLocation": "https://huggingface.co/datasets/policyengine/populace-uk-private/resolve/populace-uk-2023-dd68c73-4aa4b14-20260619T023711Z/populace_uk_2023.h5"
56
+ "trov:hasLocation": "https://huggingface.co/policyengine/policyengine-uk-data-private/resolve/1.56.16/enhanced_frs_2024_25.h5"
57
57
  },
58
58
  {
59
59
  "@id": "arrangement/1/location/model_wheel",
@@ -61,7 +61,7 @@
61
61
  "trov:hasArtifact": {
62
62
  "@id": "composition/1/artifact/model_wheel"
63
63
  },
64
- "trov:hasLocation": "https://files.pythonhosted.org/packages/83/db/ce3154ba69b6fcd1e9e922ceee705ef4ddb1f81553da1e63b9296e74a4dc/policyengine_uk-2.89.2-py3-none-any.whl"
64
+ "trov:hasLocation": "https://files.pythonhosted.org/packages/ec/da/658bff2df6094bd7bf2b0f561ff60fd41508adbd0a3af29b4553c83bc678/policyengine_uk-2.90.2-py3-none-any.whl"
65
65
  }
66
66
  ]
67
67
  }
@@ -75,50 +75,52 @@
75
75
  "@type": "trov:ResearchArtifact",
76
76
  "schema:name": "policyengine.py bundle manifest for uk",
77
77
  "trov:mimeType": "application/json",
78
- "trov:sha256": "255dbb893f455d078a6bcece87399f0a22478f56bc4c6e526b758c4fd5b4db24"
78
+ "trov:sha256": "7906f50dcef3adb586ef4a6e3011caf0d3b4096c53c8843c41551e96f929537a"
79
79
  },
80
80
  {
81
81
  "@id": "composition/1/artifact/data_release_manifest",
82
82
  "@type": "trov:ResearchArtifact",
83
- "schema:name": "populace-data release manifest 0.1.0",
83
+ "schema:name": "policyengine-uk-data release manifest 1.56.16",
84
84
  "trov:mimeType": "application/json",
85
- "trov:sha256": "687c5c19ee75aa7959d4eaedf310b10a00036dd8f9c46af4cb712c3f30f02921"
85
+ "trov:sha256": "9bfccac472d74b044596205ee153b0c81fcd8d93e84f5820c7081e30f2cab0c5"
86
86
  },
87
87
  {
88
88
  "@id": "composition/1/artifact/dataset",
89
89
  "@type": "trov:ResearchArtifact",
90
- "schema:name": "populace_uk_2023",
90
+ "schema:name": "enhanced_frs_2024_25",
91
91
  "trov:mimeType": "application/x-hdf5",
92
- "trov:sha256": "f17306ccb2aad7ff0130be3589b560afb2e2a12a943570911cd0c77f07934833"
92
+ "trov:sha256": "e433e532b17bd8ce76030156285816e33d44e93edabd2204adbef71d19a68712"
93
93
  },
94
94
  {
95
95
  "@id": "composition/1/artifact/model_wheel",
96
96
  "@type": "trov:ResearchArtifact",
97
- "schema:name": "policyengine-uk==2.89.2 wheel",
97
+ "schema:name": "policyengine-uk==2.90.2 wheel",
98
98
  "trov:mimeType": "application/zip",
99
- "trov:sha256": "80965d3dd7dc767db9b083820d40262ce543020d5a8880a0cf88da10ae641b24"
99
+ "trov:sha256": "f100ef97e20b29b84138078f1dbc5b83f8857e6bc74b745fc6abef7ea1eeadf2"
100
100
  }
101
101
  ],
102
102
  "trov:hasFingerprint": {
103
103
  "@id": "composition/1/fingerprint",
104
104
  "@type": "trov:CompositionFingerprint",
105
- "trov:sha256": "2a63c2cdee7352bab2a46e4cc9c818f2d64c3bc120c3edfe9646c5bc6ab8f91c"
105
+ "trov:sha256": "a7da1e779a5933e4be99c8b1f6a1b72972faa6f904d11059f64ef343807b2c38"
106
106
  }
107
107
  },
108
108
  "trov:hasPerformance": {
109
109
  "@id": "trp/1",
110
110
  "@type": "trov:TransparentResearchPerformance",
111
+ "pe:builtWithModelGitSha": "12a1e028afeef08d8b2d74ee03fd9de3a78b2dd3",
111
112
  "pe:builtWithModelVersion": "2.89.2",
112
113
  "pe:certifiedBy": "policyengine.py bundle certification",
113
- "pe:certifiedForModelVersion": "2.89.2",
114
- "pe:compatibilityBasis": "built_with_model_package",
115
- "pe:dataBuildId": "populace-uk-2023-dd68c73-4aa4b14-20260619T023711Z",
114
+ "pe:certifiedForModelVersion": "2.90.2",
115
+ "pe:compatibilityBasis": "legacy_compatible_model_package",
116
+ "pe:dataBuildFingerprint": "sha256:6bfff835b504094c05342d2b4d770d2d94c8c1adcb15c4468931f53b21a89ea9",
117
+ "pe:dataBuildId": "policyengine-uk-data-1.56.16",
116
118
  "pe:emittedIn": "repository-bundle",
117
- "rdfs:comment": "Certification of build populace-uk-2023-dd68c73-4aa4b14-20260619T023711Z for policyengine-uk 2.89.2.",
119
+ "rdfs:comment": "Certification of build policyengine-uk-data-1.56.16 for policyengine-uk 2.90.2.",
118
120
  "trov:accessedArrangement": {
119
121
  "@id": "arrangement/1"
120
122
  },
121
- "trov:startedAtTime": "2026-06-19T02:38:00Z",
123
+ "trov:startedAtTime": "2026-08-18T14:20:32.100961Z",
122
124
  "trov:wasConductedBy": {
123
125
  "@id": "trs"
124
126
  }
@@ -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.0.2 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.0.4 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.0.2"
26
+ "schema:softwareVersion": "5.0.4"
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.0.2.",
32
+ "rdfs:comment": "Certified arrangement for bundle us-5.0.4.",
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": "255dbb893f455d078a6bcece87399f0a22478f56bc4c6e526b758c4fd5b4db24"
78
+ "trov:sha256": "7906f50dcef3adb586ef4a6e3011caf0d3b4096c53c8843c41551e96f929537a"
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": "9ad77a116d728a4f15d703a70d053c4838f31f9117a07831caa65a4b25d1004a"
105
+ "trov:sha256": "1cdd1b5d66894fdbafbbc270cc2056859ad02c944673c6476318087bf0be61dc"
106
106
  }
107
107
  },
108
108
  "trov:hasPerformance": {
@@ -65,7 +65,10 @@ COUNTRY_MODEL_PACKAGES = {
65
65
 
66
66
  CERTIFIED_BY = "policyengine.py bundle certification"
67
67
  BASIS_BUILT_WITH = "built_with_model_package"
68
- BASIS_PUBLISHER_CLAIM = "compatible_model_packages"
68
+ # Must match the runtime claims basis in provenance/manifest.py: the offline
69
+ # fallback there exempts exactly this string from the fingerprint identity
70
+ # check, so a claims-certified bundle stays importable without network access.
71
+ BASIS_PUBLISHER_CLAIM = "legacy_compatible_model_package"
69
72
  POPULACE_US_SOURCE_COVERAGE_FILE = "us_source_coverage.json"
70
73
  US_STATE_CODES = (
71
74
  "AL",