policyengine 6.2.0__tar.gz → 6.2.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (317) hide show
  1. {policyengine-6.2.0 → policyengine-6.2.1}/.github/workflows/draft-pdf.yml +4 -0
  2. {policyengine-6.2.0 → policyengine-6.2.1}/.github/workflows/pr_code_changes.yaml +19 -11
  3. {policyengine-6.2.0 → policyengine-6.2.1}/.github/workflows/pr_docs_changes.yaml +4 -0
  4. {policyengine-6.2.0 → policyengine-6.2.1}/.github/workflows/push.yaml +1 -1
  5. {policyengine-6.2.0 → policyengine-6.2.1}/CHANGELOG.md +12 -0
  6. {policyengine-6.2.0/src/policyengine.egg-info → policyengine-6.2.1}/PKG-INFO +5 -5
  7. {policyengine-6.2.0 → policyengine-6.2.1}/docs/households.md +1 -1
  8. {policyengine-6.2.0 → policyengine-6.2.1}/pyproject.toml +5 -5
  9. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/data/bundle/manifest.json +12 -12
  10. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/data/bundle/uk.trace.tro.jsonld +5 -5
  11. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/data/bundle/us.trace.tro.jsonld +5 -5
  12. {policyengine-6.2.0 → policyengine-6.2.1/src/policyengine.egg-info}/PKG-INFO +5 -5
  13. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine.egg-info/requires.txt +4 -4
  14. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_release_tro_generation.py +30 -5
  15. {policyengine-6.2.0 → policyengine-6.2.1}/uv.lock +15 -14
  16. {policyengine-6.2.0 → policyengine-6.2.1}/.claude/policyengine-guide.md +0 -0
  17. {policyengine-6.2.0 → policyengine-6.2.1}/.claude/quick-reference.md +0 -0
  18. {policyengine-6.2.0 → policyengine-6.2.1}/.github/CONTRIBUTING.md +0 -0
  19. {policyengine-6.2.0 → policyengine-6.2.1}/.github/bump_version.py +0 -0
  20. {policyengine-6.2.0 → policyengine-6.2.1}/.github/capture-version.sh +0 -0
  21. {policyengine-6.2.0 → policyengine-6.2.1}/.github/changelog_template.md +0 -0
  22. {policyengine-6.2.0 → policyengine-6.2.1}/.github/check-changelog.sh +0 -0
  23. {policyengine-6.2.0 → policyengine-6.2.1}/.github/copilot-instructions.md +0 -0
  24. {policyengine-6.2.0 → policyengine-6.2.1}/.github/dispatch-policyengine-release.sh +0 -0
  25. {policyengine-6.2.0 → policyengine-6.2.1}/.github/fetch_version.py +0 -0
  26. {policyengine-6.2.0 → policyengine-6.2.1}/.github/get-changelog-diff.sh +0 -0
  27. {policyengine-6.2.0 → policyengine-6.2.1}/.github/has-functional-changes.sh +0 -0
  28. {policyengine-6.2.0 → policyengine-6.2.1}/.github/is-version-number-acceptable.sh +0 -0
  29. {policyengine-6.2.0 → policyengine-6.2.1}/.github/publish-git-tag.sh +0 -0
  30. {policyengine-6.2.0 → policyengine-6.2.1}/.github/wait-for-pypi.sh +0 -0
  31. {policyengine-6.2.0 → policyengine-6.2.1}/.gitignore +0 -0
  32. {policyengine-6.2.0 → policyengine-6.2.1}/.python-version +0 -0
  33. {policyengine-6.2.0 → policyengine-6.2.1}/AGENTS.md +0 -0
  34. {policyengine-6.2.0 → policyengine-6.2.1}/CITATION.cff +0 -0
  35. {policyengine-6.2.0 → policyengine-6.2.1}/CLAUDE.md +0 -0
  36. {policyengine-6.2.0 → policyengine-6.2.1}/CODE_OF_CONDUCT.md +0 -0
  37. {policyengine-6.2.0 → policyengine-6.2.1}/CONTRIBUTING.md +0 -0
  38. {policyengine-6.2.0 → policyengine-6.2.1}/LICENSE +0 -0
  39. {policyengine-6.2.0 → policyengine-6.2.1}/Makefile +0 -0
  40. {policyengine-6.2.0 → policyengine-6.2.1}/README.md +0 -0
  41. {policyengine-6.2.0 → policyengine-6.2.1}/architecture.png +0 -0
  42. {policyengine-6.2.0 → policyengine-6.2.1}/architecture.svg +0 -0
  43. {policyengine-6.2.0 → policyengine-6.2.1}/changelog.d/.gitkeep +0 -0
  44. {policyengine-6.2.0 → policyengine-6.2.1}/docs/.gitignore +0 -0
  45. {policyengine-6.2.0 → policyengine-6.2.1}/docs/_generator/README.md +0 -0
  46. {policyengine-6.2.0 → policyengine-6.2.1}/docs/_generator/build_reference.py +0 -0
  47. {policyengine-6.2.0 → policyengine-6.2.1}/docs/_quarto.yml +0 -0
  48. {policyengine-6.2.0 → policyengine-6.2.1}/docs/bundles.md +0 -0
  49. {policyengine-6.2.0 → policyengine-6.2.1}/docs/countries.md +0 -0
  50. {policyengine-6.2.0 → policyengine-6.2.1}/docs/data-publishing-design.md +0 -0
  51. {policyengine-6.2.0 → policyengine-6.2.1}/docs/decile-impact-spec.md +0 -0
  52. {policyengine-6.2.0 → policyengine-6.2.1}/docs/dev.md +0 -0
  53. {policyengine-6.2.0 → policyengine-6.2.1}/docs/engineering/runbooks/build-m-us-populace-certification.md +0 -0
  54. {policyengine-6.2.0 → policyengine-6.2.1}/docs/engineering/runbooks/canonical-spm-development.md +0 -0
  55. {policyengine-6.2.0 → policyengine-6.2.1}/docs/engineering/skills/README.md +0 -0
  56. {policyengine-6.2.0 → policyengine-6.2.1}/docs/engineering/skills/data-certification.md +0 -0
  57. {policyengine-6.2.0 → policyengine-6.2.1}/docs/engineering/skills/github-prs.md +0 -0
  58. {policyengine-6.2.0 → policyengine-6.2.1}/docs/engineering/skills/repository-guidance.md +0 -0
  59. {policyengine-6.2.0 → policyengine-6.2.1}/docs/examples.md +0 -0
  60. {policyengine-6.2.0 → policyengine-6.2.1}/docs/getting-started.md +0 -0
  61. {policyengine-6.2.0 → policyengine-6.2.1}/docs/impact-analysis.md +0 -0
  62. {policyengine-6.2.0 → policyengine-6.2.1}/docs/index.md +0 -0
  63. {policyengine-6.2.0 → policyengine-6.2.1}/docs/methodology/index.md +0 -0
  64. {policyengine-6.2.0 → policyengine-6.2.1}/docs/methodology/model-architecture.md +0 -0
  65. {policyengine-6.2.0 → policyengine-6.2.1}/docs/methodology/us-health-costs.md +0 -0
  66. {policyengine-6.2.0 → policyengine-6.2.1}/docs/microsim.md +0 -0
  67. {policyengine-6.2.0 → policyengine-6.2.1}/docs/outputs.md +0 -0
  68. {policyengine-6.2.0 → policyengine-6.2.1}/docs/programs/index.md +0 -0
  69. {policyengine-6.2.0 → policyengine-6.2.1}/docs/programs/us-chip.md +0 -0
  70. {policyengine-6.2.0 → policyengine-6.2.1}/docs/reference/index.md +0 -0
  71. {policyengine-6.2.0 → policyengine-6.2.1}/docs/reforms.md +0 -0
  72. {policyengine-6.2.0 → policyengine-6.2.1}/docs/regions.md +0 -0
  73. {policyengine-6.2.0 → policyengine-6.2.1}/docs/release-bundles.md +0 -0
  74. {policyengine-6.2.0 → policyengine-6.2.1}/docs/run-records.md +0 -0
  75. {policyengine-6.2.0 → policyengine-6.2.1}/docs/trace-case-study.md +0 -0
  76. {policyengine-6.2.0 → policyengine-6.2.1}/docs/visualisation.md +0 -0
  77. {policyengine-6.2.0 → policyengine-6.2.1}/examples/belgium_axiom_pilot.py +0 -0
  78. {policyengine-6.2.0 → policyengine-6.2.1}/examples/employment_income_variation_uk.py +0 -0
  79. {policyengine-6.2.0 → policyengine-6.2.1}/examples/employment_income_variation_us.py +0 -0
  80. {policyengine-6.2.0 → policyengine-6.2.1}/examples/household_impact_example.py +0 -0
  81. {policyengine-6.2.0 → policyengine-6.2.1}/examples/income_bands_uk.py +0 -0
  82. {policyengine-6.2.0 → policyengine-6.2.1}/examples/income_distribution_us.py +0 -0
  83. {policyengine-6.2.0 → policyengine-6.2.1}/examples/paper_repro_uk.py +0 -0
  84. {policyengine-6.2.0 → policyengine-6.2.1}/examples/policy_change_uk.py +0 -0
  85. {policyengine-6.2.0 → policyengine-6.2.1}/examples/speedtest_us_simulation.py +0 -0
  86. {policyengine-6.2.0 → policyengine-6.2.1}/examples/us_budgetary_impact.py +0 -0
  87. {policyengine-6.2.0 → policyengine-6.2.1}/paper-preview.html +0 -0
  88. {policyengine-6.2.0 → policyengine-6.2.1}/paper.bib +0 -0
  89. {policyengine-6.2.0 → policyengine-6.2.1}/paper.md +0 -0
  90. {policyengine-6.2.0 → policyengine-6.2.1}/scripts/bundle.py +0 -0
  91. {policyengine-6.2.0 → policyengine-6.2.1}/scripts/certify_data_release.py +0 -0
  92. {policyengine-6.2.0 → policyengine-6.2.1}/scripts/check_data_staleness.py +0 -0
  93. {policyengine-6.2.0 → policyengine-6.2.1}/scripts/check_native_spm_loading.py +0 -0
  94. {policyengine-6.2.0 → policyengine-6.2.1}/scripts/check_release_credentials.py +0 -0
  95. {policyengine-6.2.0 → policyengine-6.2.1}/scripts/export_bundle_release_assets.py +0 -0
  96. {policyengine-6.2.0 → policyengine-6.2.1}/scripts/generate_bundle_artifacts.py +0 -0
  97. {policyengine-6.2.0 → policyengine-6.2.1}/scripts/generate_trace_tros.py +0 -0
  98. {policyengine-6.2.0 → policyengine-6.2.1}/scripts/prepare_package_bundle_update.py +0 -0
  99. {policyengine-6.2.0 → policyengine-6.2.1}/scripts/release_lock.py +0 -0
  100. {policyengine-6.2.0 → policyengine-6.2.1}/scripts/spm_bundle.py +0 -0
  101. {policyengine-6.2.0 → policyengine-6.2.1}/setup.cfg +0 -0
  102. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/__init__.py +0 -0
  103. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/bundle.py +0 -0
  104. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/cli.py +0 -0
  105. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/core/__init__.py +0 -0
  106. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/core/cache.py +0 -0
  107. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/core/dataset.py +0 -0
  108. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/core/dynamic.py +0 -0
  109. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/core/output.py +0 -0
  110. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/core/parameter.py +0 -0
  111. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/core/parameter_node.py +0 -0
  112. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/core/parameter_value.py +0 -0
  113. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/core/policy.py +0 -0
  114. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/core/region.py +0 -0
  115. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/core/run_record.py +0 -0
  116. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/core/scoping_strategy.py +0 -0
  117. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/core/simulation.py +0 -0
  118. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/core/spm.py +0 -0
  119. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/core/tax_benefit_model.py +0 -0
  120. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/core/tax_benefit_model_version.py +0 -0
  121. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/core/variable.py +0 -0
  122. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/countries/__init__.py +0 -0
  123. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/countries/uk/__init__.py +0 -0
  124. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/countries/uk/regions.py +0 -0
  125. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/countries/us/__init__.py +0 -0
  126. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/countries/us/data/__init__.py +0 -0
  127. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/countries/us/data/districts.py +0 -0
  128. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/countries/us/data/places.py +0 -0
  129. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/countries/us/data/states.py +0 -0
  130. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/countries/us/regions.py +0 -0
  131. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/data/__init__.py +0 -0
  132. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/data/schemas/trace_tro.schema.json +0 -0
  133. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/data/uk_geography_assets.py +0 -0
  134. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/derivations/__init__.py +0 -0
  135. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/derivations/narrate.py +0 -0
  136. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/derivations/trace.py +0 -0
  137. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/graph/__init__.py +0 -0
  138. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/graph/extractor.py +0 -0
  139. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/graph/graph.py +0 -0
  140. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/outputs/__init__.py +0 -0
  141. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/outputs/aggregate.py +0 -0
  142. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/outputs/change_aggregate.py +0 -0
  143. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/outputs/cliff_impact.py +0 -0
  144. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/outputs/congressional_district_impact.py +0 -0
  145. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/outputs/constituency_impact.py +0 -0
  146. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/outputs/decile_analysis.py +0 -0
  147. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/outputs/decile_grouping.py +0 -0
  148. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/outputs/decile_impact.py +0 -0
  149. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/outputs/extra_variables.py +0 -0
  150. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/outputs/inequality.py +0 -0
  151. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/outputs/intra_decile_impact.py +0 -0
  152. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/outputs/labor_supply_response.py +0 -0
  153. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/outputs/local_authority_impact.py +0 -0
  154. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/outputs/poverty.py +0 -0
  155. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/outputs/program_statistics.py +0 -0
  156. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/outputs/uk_geography_assets.py +0 -0
  157. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/outputs/uk_geography_impact.py +0 -0
  158. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/provenance/__init__.py +0 -0
  159. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/provenance/bundle_validation.py +0 -0
  160. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/provenance/certification.py +0 -0
  161. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/provenance/dataset_materialization.py +0 -0
  162. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/provenance/manifest.py +0 -0
  163. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/provenance/pyproject_pins.py +0 -0
  164. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/provenance/spm_configuration.py +0 -0
  165. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/provenance/trace.py +0 -0
  166. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/provenance/verify.py +0 -0
  167. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/provenance/zenodo.py +0 -0
  168. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/results/__init__.py +0 -0
  169. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/results/schema.py +0 -0
  170. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/results/trace_tro.py +0 -0
  171. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/results/tracking.py +0 -0
  172. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/tax_benefit_models/be/__init__.py +0 -0
  173. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/tax_benefit_models/be/datasets.py +0 -0
  174. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/tax_benefit_models/be/model.py +0 -0
  175. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/tax_benefit_models/common/__init__.py +0 -0
  176. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/tax_benefit_models/common/axes.py +0 -0
  177. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/tax_benefit_models/common/extra_variables.py +0 -0
  178. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/tax_benefit_models/common/household.py +0 -0
  179. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/tax_benefit_models/common/model_version.py +0 -0
  180. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/tax_benefit_models/common/reform.py +0 -0
  181. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/tax_benefit_models/common/result.py +0 -0
  182. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/tax_benefit_models/uk/__init__.py +0 -0
  183. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/tax_benefit_models/uk/analysis.py +0 -0
  184. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/tax_benefit_models/uk/datasets.py +0 -0
  185. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/tax_benefit_models/uk/household.py +0 -0
  186. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/tax_benefit_models/uk/model.py +0 -0
  187. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/tax_benefit_models/us/__init__.py +0 -0
  188. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/tax_benefit_models/us/analysis.py +0 -0
  189. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/tax_benefit_models/us/datasets.py +0 -0
  190. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/tax_benefit_models/us/household.py +0 -0
  191. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/tax_benefit_models/us/legacy_inputs.py +0 -0
  192. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/tax_benefit_models/us/model.py +0 -0
  193. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/tax_benefit_models/us/spm.py +0 -0
  194. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/utils/__init__.py +0 -0
  195. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/utils/dates.py +0 -0
  196. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/utils/design.py +0 -0
  197. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/utils/entity_utils.py +0 -0
  198. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/utils/errors.py +0 -0
  199. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/utils/hashing.py +0 -0
  200. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/utils/household_validation.py +0 -0
  201. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/utils/parameter_labels.py +0 -0
  202. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/utils/parametric_reforms.py +0 -0
  203. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine/utils/plotting.py +0 -0
  204. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine.egg-info/SOURCES.txt +0 -0
  205. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine.egg-info/dependency_links.txt +0 -0
  206. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine.egg-info/entry_points.txt +0 -0
  207. {policyengine-6.2.0 → policyengine-6.2.1}/src/policyengine.egg-info/top_level.txt +0 -0
  208. {policyengine-6.2.0 → policyengine-6.2.1}/tests/__init__.py +0 -0
  209. {policyengine-6.2.0 → policyengine-6.2.1}/tests/conftest.py +0 -0
  210. {policyengine-6.2.0 → policyengine-6.2.1}/tests/fixtures/__init__.py +0 -0
  211. {policyengine-6.2.0 → policyengine-6.2.1}/tests/fixtures/filtering_fixtures.py +0 -0
  212. {policyengine-6.2.0 → policyengine-6.2.1}/tests/fixtures/household_calculator_snapshots/uk_couple_two_kids.json +0 -0
  213. {policyengine-6.2.0 → policyengine-6.2.1}/tests/fixtures/household_calculator_snapshots/uk_model_surface.json +0 -0
  214. {policyengine-6.2.0 → policyengine-6.2.1}/tests/fixtures/household_calculator_snapshots/uk_single_adult_employment_income.json +0 -0
  215. {policyengine-6.2.0 → policyengine-6.2.1}/tests/fixtures/household_calculator_snapshots/uk_single_adult_no_income.json +0 -0
  216. {policyengine-6.2.0 → policyengine-6.2.1}/tests/fixtures/household_calculator_snapshots/uk_single_parent_one_child.json +0 -0
  217. {policyengine-6.2.0 → policyengine-6.2.1}/tests/fixtures/household_calculator_snapshots/us_married_two_kids_high_income.json +0 -0
  218. {policyengine-6.2.0 → policyengine-6.2.1}/tests/fixtures/household_calculator_snapshots/us_model_surface.json +0 -0
  219. {policyengine-6.2.0 → policyengine-6.2.1}/tests/fixtures/household_calculator_snapshots/us_single_adult_employment_income.json +0 -0
  220. {policyengine-6.2.0 → policyengine-6.2.1}/tests/fixtures/household_calculator_snapshots/us_single_adult_no_income.json +0 -0
  221. {policyengine-6.2.0 → policyengine-6.2.1}/tests/fixtures/household_calculator_snapshots/us_single_parent_one_child.json +0 -0
  222. {policyengine-6.2.0 → policyengine-6.2.1}/tests/fixtures/parameter_labels_fixtures.py +0 -0
  223. {policyengine-6.2.0 → policyengine-6.2.1}/tests/fixtures/parametric_reforms_fixtures.py +0 -0
  224. {policyengine-6.2.0 → policyengine-6.2.1}/tests/fixtures/poverty_by_demographics_fixtures.py +0 -0
  225. {policyengine-6.2.0 → policyengine-6.2.1}/tests/fixtures/region_fixtures.py +0 -0
  226. {policyengine-6.2.0 → policyengine-6.2.1}/tests/fixtures/release_tros/README.md +0 -0
  227. {policyengine-6.2.0 → policyengine-6.2.1}/tests/fixtures/release_tros/country-models.lock.toml +0 -0
  228. {policyengine-6.2.0 → policyengine-6.2.1}/tests/fixtures/release_tros/manifest.json +0 -0
  229. {policyengine-6.2.0 → policyengine-6.2.1}/tests/fixtures/release_tros/us-release_manifest.json +0 -0
  230. {policyengine-6.2.0 → policyengine-6.2.1}/tests/fixtures/release_tros/us.trace.tro.jsonld +0 -0
  231. {policyengine-6.2.0 → policyengine-6.2.1}/tests/fixtures/spm_development.py +0 -0
  232. {policyengine-6.2.0 → policyengine-6.2.1}/tests/fixtures/us_reform_fixtures.py +0 -0
  233. {policyengine-6.2.0 → policyengine-6.2.1}/tests/fixtures/variable_label_fixtures.py +0 -0
  234. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_aggregate.py +0 -0
  235. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_be_axiom_pilot.py +0 -0
  236. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_budgetary_impact.py +0 -0
  237. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_bump_version.py +0 -0
  238. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_bundle.py +0 -0
  239. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_bundle_metadata.py +0 -0
  240. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_cache.py +0 -0
  241. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_certify_data_release.py +0 -0
  242. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_change_aggregate.py +0 -0
  243. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_cliff_impact.py +0 -0
  244. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_cliff_impact_analysis.py +0 -0
  245. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_congressional_district_impact.py +0 -0
  246. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_constituency_impact.py +0 -0
  247. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_dataset_materialization.py +0 -0
  248. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_dataset_persistence.py +0 -0
  249. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_dataset_runtime.py +0 -0
  250. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_dataset_source.py +0 -0
  251. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_decile_grouping.py +0 -0
  252. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_derivations.py +0 -0
  253. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_dict_reforms_on_simulation.py +0 -0
  254. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_entity_mapping.py +0 -0
  255. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_entity_utils.py +0 -0
  256. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_entity_utils_characterization.py +0 -0
  257. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_errors.py +0 -0
  258. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_extra_variables.py +0 -0
  259. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_filtering.py +0 -0
  260. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_generate_trace_tros.py +0 -0
  261. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_graph/__init__.py +0 -0
  262. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_graph/conftest.py +0 -0
  263. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_graph/test_extractor.py +0 -0
  264. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_household_calculator_snapshot.py +0 -0
  265. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_household_impact.py +0 -0
  266. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_inequality.py +0 -0
  267. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_intra_decile_impact.py +0 -0
  268. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_labor_supply_response.py +0 -0
  269. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_local_authority_impact.py +0 -0
  270. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_manifest_version_mismatch.py +0 -0
  271. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_models.py +0 -0
  272. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_pandas3_compatibility.py +0 -0
  273. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_parameter_labels.py +0 -0
  274. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_parameter_nodes.py +0 -0
  275. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_parameter_values.py +0 -0
  276. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_parametric_reforms.py +0 -0
  277. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_poverty.py +0 -0
  278. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_poverty_by_demographics.py +0 -0
  279. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_poverty_run.py +0 -0
  280. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_preservation_mirror.py +0 -0
  281. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_program_statistics.py +0 -0
  282. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_pyproject_pins.py +0 -0
  283. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_region.py +0 -0
  284. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_region_group_strategy.py +0 -0
  285. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_release_credentials.py +0 -0
  286. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_release_lock.py +0 -0
  287. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_release_manifests.py +0 -0
  288. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_results.py +0 -0
  289. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_run_record.py +0 -0
  290. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_scoping_strategy.py +0 -0
  291. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_small_follow_ups.py +0 -0
  292. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_spm_bundle_bootstrap.py +0 -0
  293. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_spm_bundle_tooling.py +0 -0
  294. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_spm_decile.py +0 -0
  295. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_spm_development_authentication.py +0 -0
  296. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_spm_household.py +0 -0
  297. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_spm_model.py +0 -0
  298. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_spm_selection.py +0 -0
  299. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_spm_selection_schema.py +0 -0
  300. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_trace_tro.py +0 -0
  301. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_trace_tro_verify.py +0 -0
  302. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_uk_analysis.py +0 -0
  303. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_uk_geography_assets.py +0 -0
  304. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_uk_program_statistics.py +0 -0
  305. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_uk_regions.py +0 -0
  306. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_us_legacy_inputs.py +0 -0
  307. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_us_legacy_inputs_integration.py +0 -0
  308. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_us_long_term_datasets.py +0 -0
  309. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_us_microsim_structural_reforms.py +0 -0
  310. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_us_native_alignment.py +0 -0
  311. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_us_native_hdf_weights.py +0 -0
  312. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_us_program_statistics.py +0 -0
  313. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_us_reform_application.py +0 -0
  314. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_us_regions.py +0 -0
  315. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_variable_labels.py +0 -0
  316. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_variable_metadata.py +0 -0
  317. {policyengine-6.2.0 → policyengine-6.2.1}/tests/test_zenodo_mirror.py +0 -0
@@ -10,6 +10,10 @@ on:
10
10
  - paper.bib
11
11
  - architecture.png
12
12
 
13
+ concurrency:
14
+ group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}
15
+ cancel-in-progress: ${{ github.event_name == 'pull_request' }}
16
+
13
17
  jobs:
14
18
  paper:
15
19
  runs-on: ubuntu-latest
@@ -14,6 +14,10 @@ on:
14
14
  - src/policyengine/data/bundle/manifest.json
15
15
  workflow_dispatch:
16
16
 
17
+ concurrency:
18
+ group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}
19
+ cancel-in-progress: ${{ github.event_name == 'pull_request' }}
20
+
17
21
  jobs:
18
22
  check-changelog:
19
23
  name: Check changelog fragment
@@ -77,7 +81,7 @@ jobs:
77
81
  - name: Smoke-import core modules
78
82
  run: python -c "import policyengine; from policyengine.core import Dataset, Policy, Simulation; from policyengine.outputs import aggregate, poverty, inequality; print('import OK')"
79
83
  BundleVerification:
80
- name: Verify bundle metadata
84
+ name: Verify release inputs and bundle packages
81
85
  # Private manifest credentials are available only to trusted repository PRs.
82
86
  if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository
83
87
  runs-on: ubuntu-latest
@@ -93,8 +97,19 @@ jobs:
93
97
  uses: actions/setup-python@v6
94
98
  with:
95
99
  python-version: '3.13'
96
- - name: Check derived bundle metadata
97
- run: python scripts/bundle.py check
100
+ - name: Install package for TRACE verification
101
+ run: uv pip install -e . h5py --system
102
+ - name: Check reviewed release inputs
103
+ env:
104
+ HUGGING_FACE_TOKEN: ${{ secrets.HUGGING_FACE_TOKEN }}
105
+ run: |
106
+ if [[ -z "${HUGGING_FACE_TOKEN:-}" ]]; then
107
+ echo "::error::Full private release verification requires HUGGING_FACE_TOKEN"
108
+ exit 1
109
+ fi
110
+ python scripts/check_release_credentials.py
111
+ python scripts/bundle.py check --published-spm --include-tros --strict-tros
112
+ python scripts/release_lock.py
98
113
  - name: Install bundle package scaffold
99
114
  run: |
100
115
  uv pip install -e ".[models]" --system
@@ -117,17 +132,10 @@ jobs:
117
132
  PY
118
133
  - name: Check installed package consistency
119
134
  run: python -m pip check
120
- # Only the reviewed registry lock is a pull-request concern. The
121
- # read-only credential, published-measurement and TRACE sidecar gates
122
- # are release gates: the release workflow regenerates the sidecars and
123
- # publishes the wheels immediately before checking them, so they cannot
124
- # be satisfied from a pull request. They run in push.yaml instead.
125
- - name: Check the reviewed registry lock
126
- run: python scripts/release_lock.py
127
135
  - name: Verify bundle packages
128
136
  run: policyengine bundle verify --country us --country uk --packages-only --json
129
137
  Test:
130
- runs-on: macos-latest
138
+ runs-on: ubuntu-latest
131
139
  strategy:
132
140
  fail-fast: false
133
141
  matrix:
@@ -11,6 +11,10 @@ on:
11
11
  - .github/**
12
12
  workflow_dispatch:
13
13
 
14
+ concurrency:
15
+ group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}
16
+ cancel-in-progress: ${{ github.event_name == 'pull_request' }}
17
+
14
18
  jobs:
15
19
  Test:
16
20
  runs-on: ubuntu-latest
@@ -39,7 +39,7 @@ jobs:
39
39
 
40
40
  Test:
41
41
  if: github.event.head_commit.message != 'Update package version'
42
- runs-on: macos-latest
42
+ runs-on: ubuntu-latest
43
43
  strategy:
44
44
  fail-fast: false
45
45
  matrix:
@@ -1,3 +1,15 @@
1
+ ## [6.2.1] - 2026-09-30
2
+
3
+ ### Changed
4
+
5
+ - Update the certified PolicyEngine bundle to PolicyEngine Core 3.32.10.
6
+ - Run the full Python test matrices on GitHub-hosted Ubuntu machines and cancel earlier workflow runs when a pull request receives a new commit.
7
+
8
+ ### Fixed
9
+
10
+ - Correct the US and UK TRACE composition fingerprints after the PolicyEngine Core 3.32.10 bundle update, and run the authenticated TRACE comparison on same-repository pull requests.
11
+
12
+
1
13
  ## [6.2.0] - 2026-09-29
2
14
 
3
15
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: policyengine
3
- Version: 6.2.0
3
+ Version: 6.2.1
4
4
  Summary: A package to conduct policy analysis using PolicyEngine tax-benefit models.
5
5
  Author-email: PolicyEngine <hello@policyengine.org>
6
6
  License: GNU AFFERO GENERAL PUBLIC LICENSE
@@ -685,15 +685,15 @@ Requires-Dist: plotly>=5.0.0; extra == "plotting"
685
685
  Provides-Extra: graph
686
686
  Requires-Dist: networkx>=3.0; extra == "graph"
687
687
  Provides-Extra: models
688
- Requires-Dist: policyengine-core==3.32.5; extra == "models"
688
+ Requires-Dist: policyengine-core==3.32.10; extra == "models"
689
689
  Requires-Dist: policyengine-us==2.2.1; extra == "models"
690
690
  Requires-Dist: policyengine-uk==2.102.3; extra == "models"
691
691
  Requires-Dist: spm-calculator==1.0.0; extra == "models"
692
692
  Provides-Extra: uk
693
- Requires-Dist: policyengine-core==3.32.5; extra == "uk"
693
+ Requires-Dist: policyengine-core==3.32.10; extra == "uk"
694
694
  Requires-Dist: policyengine-uk==2.102.3; extra == "uk"
695
695
  Provides-Extra: us
696
- Requires-Dist: policyengine-core==3.32.5; extra == "us"
696
+ Requires-Dist: policyengine-core==3.32.10; extra == "us"
697
697
  Requires-Dist: policyengine-us==2.2.1; extra == "us"
698
698
  Requires-Dist: spm-calculator==1.0.0; extra == "us"
699
699
  Provides-Extra: dev
@@ -711,7 +711,7 @@ Requires-Dist: towncrier>=24.8.0; extra == "dev"
711
711
  Requires-Dist: mypy>=1.11.0; extra == "dev"
712
712
  Requires-Dist: pytest-cov>=5.0.0; extra == "dev"
713
713
  Requires-Dist: hypothesis>=6.100.0; extra == "dev"
714
- Requires-Dist: policyengine-core==3.32.5; extra == "dev"
714
+ Requires-Dist: policyengine-core==3.32.10; extra == "dev"
715
715
  Requires-Dist: policyengine-us==2.2.1; extra == "dev"
716
716
  Requires-Dist: policyengine-uk==2.102.3; extra == "dev"
717
717
  Requires-Dist: spm-calculator==1.0.0; extra == "dev"
@@ -106,7 +106,7 @@ separate benefit inputs; they do not override SPM measurement composition.
106
106
 
107
107
  These changes require the coordinated canonical country/calculator bundle, which
108
108
  the packaged production manifest now pins and certifies: `policyengine-us`
109
- 2.2.1, `policyengine-core` 3.32.5, `spm-calculator` 1.0.0, and the US data
109
+ 2.2.1, `policyengine-core` 3.32.10, `spm-calculator` 1.0.0, and the US data
110
110
  release `populace-us-2024-spm-20260915`. Local-wheel development manifest
111
111
  fixtures remain explicitly uncertified. The measurement receipt identifies a
112
112
  calculation; it does not certify a population dataset or establish publication
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "policyengine"
7
- version = "6.2.0"
7
+ version = "6.2.1"
8
8
  description = "A package to conduct policy analysis using PolicyEngine tax-benefit models."
9
9
  readme = "README.md"
10
10
  authors = [
@@ -40,17 +40,17 @@ graph = [
40
40
  "networkx>=3.0",
41
41
  ]
42
42
  models = [
43
- "policyengine-core==3.32.5",
43
+ "policyengine-core==3.32.10",
44
44
  "policyengine-us==2.2.1",
45
45
  "policyengine-uk==2.102.3",
46
46
  "spm-calculator==1.0.0",
47
47
  ]
48
48
  uk = [
49
- "policyengine-core==3.32.5",
49
+ "policyengine-core==3.32.10",
50
50
  "policyengine-uk==2.102.3",
51
51
  ]
52
52
  us = [
53
- "policyengine-core==3.32.5",
53
+ "policyengine-core==3.32.10",
54
54
  "policyengine-us==2.2.1",
55
55
  "spm-calculator==1.0.0",
56
56
  ]
@@ -69,7 +69,7 @@ dev = [
69
69
  "mypy>=1.11.0",
70
70
  "pytest-cov>=5.0.0",
71
71
  "hypothesis>=6.100.0",
72
- "policyengine-core==3.32.5",
72
+ "policyengine-core==3.32.10",
73
73
  "policyengine-us==2.2.1",
74
74
  "policyengine-uk==2.102.3",
75
75
  "spm-calculator==1.0.0",
@@ -1,10 +1,10 @@
1
1
  {
2
- "bundle_version": "6.2.0",
2
+ "bundle_version": "6.2.1",
3
3
  "citation": {
4
4
  "publisher": "PolicyEngine",
5
- "title": "PolicyEngine bundle 6.2.0",
5
+ "title": "PolicyEngine bundle 6.2.1",
6
6
  "type": "software-bundle",
7
- "version": "6.2.0"
7
+ "version": "6.2.1"
8
8
  },
9
9
  "countries": {
10
10
  "uk": {
@@ -17,7 +17,7 @@
17
17
  "data_releases": {
18
18
  "uk": {
19
19
  "build_id": "policyengine-uk-data-1.56.16",
20
- "bundle_id": "uk-6.2.0",
20
+ "bundle_id": "uk-6.2.1",
21
21
  "certification": {
22
22
  "built_with_model_git_sha": "12a1e028afeef08d8b2d74ee03fd9de3a78b2dd3",
23
23
  "built_with_model_version": "2.89.2",
@@ -99,7 +99,7 @@
99
99
  "version": "2.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.0",
102
+ "policyengine_version": "6.2.1",
103
103
  "region_datasets": {
104
104
  "national": {
105
105
  "path_template": "enhanced_frs_2024_25.h5"
@@ -112,7 +112,7 @@
112
112
  },
113
113
  "us": {
114
114
  "build_id": "populace-us-2024-spm-20260915",
115
- "bundle_id": "us-6.2.0",
115
+ "bundle_id": "us-6.2.1",
116
116
  "certification": {
117
117
  "built_with_model_version": "2.2.1",
118
118
  "certified_by": "policyengine.py bundle certification",
@@ -210,7 +210,7 @@
210
210
  "version": "2.2.1",
211
211
  "wheel_url": "https://files.pythonhosted.org/packages/5e/09/86ac3968d2a18e28fce3ba1186fc21728e9f299b96a806d6f204f1e0aaed/policyengine_us-2.2.1-py3-none-any.whl"
212
212
  },
213
- "policyengine_version": "6.2.0",
213
+ "policyengine_version": "6.2.1",
214
214
  "region_datasets": {
215
215
  "national": {
216
216
  "path_template": "populace_us_2024.h5"
@@ -290,17 +290,17 @@
290
290
  "packages": {
291
291
  "policyengine": {
292
292
  "import_name": "policyengine",
293
- "install_requirement": "policyengine==6.2.0",
293
+ "install_requirement": "policyengine==6.2.1",
294
294
  "name": "policyengine",
295
295
  "role": "bundle_carrier",
296
- "version": "6.2.0"
296
+ "version": "6.2.1"
297
297
  },
298
298
  "policyengine-core": {
299
299
  "import_name": "policyengine_core",
300
- "install_requirement": "policyengine-core==3.32.5",
300
+ "install_requirement": "policyengine-core==3.32.10",
301
301
  "name": "policyengine-core",
302
302
  "role": "runtime_dependency",
303
- "version": "3.32.5"
303
+ "version": "3.32.10"
304
304
  },
305
305
  "policyengine-uk": {
306
306
  "country": "uk",
@@ -329,6 +329,6 @@
329
329
  "wheel_url": "https://files.pythonhosted.org/packages/19/a0/c484f69a0ebf88a9b9fd0ac28176f8df66550f46714f1b0c5ec0b360824e/spm_calculator-1.0.0-py3-none-any.whl"
330
330
  }
331
331
  },
332
- "policyengine_version": "6.2.0",
332
+ "policyengine_version": "6.2.1",
333
333
  "schema_version": 2
334
334
  }
@@ -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.0 covering the bundle manifest, the certified dataset artifact, the country model wheel, and the country data release manifest when it is available.",
21
+ "schema:description": "TRACE TRO for certified runtime bundle uk-6.2.1 covering the bundle manifest, the certified dataset artifact, the country model wheel, and the country data release manifest when it is available.",
22
22
  "schema:name": "policyengine uk certified bundle TRO",
23
23
  "trov:createdWith": {
24
24
  "@type": "schema:SoftwareApplication",
25
25
  "schema:name": "policyengine",
26
- "schema:softwareVersion": "6.2.0"
26
+ "schema:softwareVersion": "6.2.1"
27
27
  },
28
28
  "trov:hasArrangement": [
29
29
  {
30
30
  "@id": "arrangement/1",
31
31
  "@type": "trov:ArtifactArrangement",
32
- "rdfs:comment": "Certified arrangement for bundle uk-6.2.0.",
32
+ "rdfs:comment": "Certified arrangement for bundle uk-6.2.1.",
33
33
  "trov:hasArtifactLocation": [
34
34
  {
35
35
  "@id": "arrangement/1/location/bundle_manifest",
@@ -75,7 +75,7 @@
75
75
  "@type": "trov:ResearchArtifact",
76
76
  "schema:name": "policyengine.py bundle manifest for uk",
77
77
  "trov:mimeType": "application/json",
78
- "trov:sha256": "8a942b26fec7ed828ba533c6c456d95c3292c52a0370e1713a4e2d6cf186ae29"
78
+ "trov:sha256": "0b80f402511f5cec0cfbe018b7f8b42e83b54a7bdfc5c9c210a2f77bb63bd21b"
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": "aa8a6265cb0660dcbe3d1d8560cfea70011927ff2f29e8f91d4dad4efc9b055a"
105
+ "trov:sha256": "a318203a1ff8cf141dfe8b138902e445ae1ab7bcce6e3d714e87661a4bb6deaa"
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.0 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.1 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.0"
25
+ "schema:softwareVersion": "6.2.1"
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.0.",
31
+ "rdfs:comment": "Certified arrangement for bundle us-6.2.1.",
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": "8a942b26fec7ed828ba533c6c456d95c3292c52a0370e1713a4e2d6cf186ae29"
77
+ "trov:sha256": "0b80f402511f5cec0cfbe018b7f8b42e83b54a7bdfc5c9c210a2f77bb63bd21b"
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": "acb3c462fafa434aa3f54fd5cfed5e38647679da1889582c3c5edfded5e13dbb"
104
+ "trov:sha256": "7f7f19f41f2cfd707098768565562f6509b454b48c79bcd0558dab061b5b40a6"
105
105
  }
106
106
  },
107
107
  "trov:hasPerformance": {
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: policyengine
3
- Version: 6.2.0
3
+ Version: 6.2.1
4
4
  Summary: A package to conduct policy analysis using PolicyEngine tax-benefit models.
5
5
  Author-email: PolicyEngine <hello@policyengine.org>
6
6
  License: GNU AFFERO GENERAL PUBLIC LICENSE
@@ -685,15 +685,15 @@ Requires-Dist: plotly>=5.0.0; extra == "plotting"
685
685
  Provides-Extra: graph
686
686
  Requires-Dist: networkx>=3.0; extra == "graph"
687
687
  Provides-Extra: models
688
- Requires-Dist: policyengine-core==3.32.5; extra == "models"
688
+ Requires-Dist: policyengine-core==3.32.10; extra == "models"
689
689
  Requires-Dist: policyengine-us==2.2.1; extra == "models"
690
690
  Requires-Dist: policyengine-uk==2.102.3; extra == "models"
691
691
  Requires-Dist: spm-calculator==1.0.0; extra == "models"
692
692
  Provides-Extra: uk
693
- Requires-Dist: policyengine-core==3.32.5; extra == "uk"
693
+ Requires-Dist: policyengine-core==3.32.10; extra == "uk"
694
694
  Requires-Dist: policyengine-uk==2.102.3; extra == "uk"
695
695
  Provides-Extra: us
696
- Requires-Dist: policyengine-core==3.32.5; extra == "us"
696
+ Requires-Dist: policyengine-core==3.32.10; extra == "us"
697
697
  Requires-Dist: policyengine-us==2.2.1; extra == "us"
698
698
  Requires-Dist: spm-calculator==1.0.0; extra == "us"
699
699
  Provides-Extra: dev
@@ -711,7 +711,7 @@ Requires-Dist: towncrier>=24.8.0; extra == "dev"
711
711
  Requires-Dist: mypy>=1.11.0; extra == "dev"
712
712
  Requires-Dist: pytest-cov>=5.0.0; extra == "dev"
713
713
  Requires-Dist: hypothesis>=6.100.0; extra == "dev"
714
- Requires-Dist: policyengine-core==3.32.5; extra == "dev"
714
+ Requires-Dist: policyengine-core==3.32.10; extra == "dev"
715
715
  Requires-Dist: policyengine-us==2.2.1; extra == "dev"
716
716
  Requires-Dist: policyengine-uk==2.102.3; extra == "dev"
717
717
  Requires-Dist: spm-calculator==1.0.0; extra == "dev"
@@ -22,7 +22,7 @@ towncrier>=24.8.0
22
22
  mypy>=1.11.0
23
23
  pytest-cov>=5.0.0
24
24
  hypothesis>=6.100.0
25
- policyengine-core==3.32.5
25
+ policyengine-core==3.32.10
26
26
  policyengine-us==2.2.1
27
27
  policyengine-uk==2.102.3
28
28
  spm-calculator==1.0.0
@@ -31,7 +31,7 @@ spm-calculator==1.0.0
31
31
  networkx>=3.0
32
32
 
33
33
  [models]
34
- policyengine-core==3.32.5
34
+ policyengine-core==3.32.10
35
35
  policyengine-us==2.2.1
36
36
  policyengine-uk==2.102.3
37
37
  spm-calculator==1.0.0
@@ -40,10 +40,10 @@ spm-calculator==1.0.0
40
40
  plotly>=5.0.0
41
41
 
42
42
  [uk]
43
- policyengine-core==3.32.5
43
+ policyengine-core==3.32.10
44
44
  policyengine-uk==2.102.3
45
45
 
46
46
  [us]
47
- policyengine-core==3.32.5
47
+ policyengine-core==3.32.10
48
48
  policyengine-us==2.2.1
49
49
  spm-calculator==1.0.0
@@ -13,6 +13,7 @@ import pytest
13
13
  import requests
14
14
 
15
15
  from policyengine.provenance import manifest
16
+ from policyengine.provenance.trace import compute_trace_composition_fingerprint
16
17
 
17
18
  ROOT = Path(__file__).resolve().parents[1]
18
19
  FIXTURES = ROOT / "tests" / "fixtures" / "release_tros"
@@ -21,6 +22,27 @@ import bundle as maintenance # noqa: E402
21
22
  import generate_trace_tros as generator # noqa: E402
22
23
 
23
24
 
25
+ @pytest.mark.parametrize("country", ["us", "uk"])
26
+ def test_bundled_tro_composition_fingerprint_matches_artifacts(country):
27
+ tro_path = (
28
+ ROOT
29
+ / "src"
30
+ / "policyengine"
31
+ / "data"
32
+ / "bundle"
33
+ / f"{country}.trace.tro.jsonld"
34
+ )
35
+ tro = json.loads(tro_path.read_text())["@graph"][0]
36
+ composition = tro["trov:hasComposition"]
37
+ artifact_hashes = [
38
+ artifact["trov:sha256"] for artifact in composition["trov:hasArtifact"]
39
+ ]
40
+
41
+ assert composition["trov:hasFingerprint"]["trov:sha256"] == (
42
+ compute_trace_composition_fingerprint(artifact_hashes)
43
+ )
44
+
45
+
24
46
  @pytest.fixture
25
47
  def release(monkeypatch, tmp_path):
26
48
  package = tmp_path / "policyengine"
@@ -300,15 +322,18 @@ def test_release_workflows_gate_complete_inputs_and_lock():
300
322
  assert commands.index(
301
323
  "python scripts/check_release_credentials.py"
302
324
  ) < commands.index("check --published-spm")
303
- # The pull-request job checks only the reviewed registry lock. The
304
- # read-only credential, published-measurement and TRACE sidecar gates
305
- # depend on the release workflow regenerating sidecars and publishing
306
- # wheels first, so a pull request can never satisfy them.
325
+ # Same-repository pull requests have the read-only credential required to
326
+ # run the exact pre-versioning release check before merge.
307
327
  pr_commands = "\n".join(
308
328
  step.get("run", "") for step in pr["jobs"]["BundleVerification"]["steps"]
309
329
  )
310
330
  assert "python scripts/release_lock.py" in pr_commands
311
- assert "--published-spm" not in pr_commands
331
+ assert "check --published-spm --include-tros --strict-tros" in pr_commands
332
+ assert 'if [[ -z "${HUGGING_FACE_TOKEN:-}" ]]' in pr_commands
333
+ assert "python scripts/check_release_credentials.py" in pr_commands
334
+ assert pr_commands.index(
335
+ "python scripts/check_release_credentials.py"
336
+ ) < pr_commands.index("check --published-spm")
312
337
  commands = "\n".join(
313
338
  step.get("run", "") for step in push["jobs"]["Versioning"]["steps"]
314
339
  )
@@ -1807,7 +1807,7 @@ wheels = [
1807
1807
 
1808
1808
  [[package]]
1809
1809
  name = "policyengine"
1810
- version = "6.2.0"
1810
+ version = "6.2.1"
1811
1811
  source = { editable = "." }
1812
1812
  dependencies = [
1813
1813
  { name = "h5py" },
@@ -1880,10 +1880,10 @@ requires-dist = [
1880
1880
  { name = "pandas", specifier = ">=2.0.0" },
1881
1881
  { name = "plotly", marker = "extra == 'dev'", specifier = ">=5.0.0" },
1882
1882
  { name = "plotly", marker = "extra == 'plotting'", specifier = ">=5.0.0" },
1883
- { name = "policyengine-core", marker = "extra == 'dev'", specifier = "==3.32.5" },
1884
- { name = "policyengine-core", marker = "extra == 'models'", specifier = "==3.32.5" },
1885
- { name = "policyengine-core", marker = "extra == 'uk'", specifier = "==3.32.5" },
1886
- { name = "policyengine-core", marker = "extra == 'us'", specifier = "==3.32.5" },
1883
+ { name = "policyengine-core", marker = "extra == 'dev'", specifier = "==3.32.10" },
1884
+ { name = "policyengine-core", marker = "extra == 'models'", specifier = "==3.32.10" },
1885
+ { name = "policyengine-core", marker = "extra == 'uk'", specifier = "==3.32.10" },
1886
+ { name = "policyengine-core", marker = "extra == 'us'", specifier = "==3.32.10" },
1887
1887
  { name = "policyengine-uk", marker = "extra == 'dev'", specifier = "==2.102.3" },
1888
1888
  { name = "policyengine-uk", marker = "extra == 'models'", specifier = "==2.102.3" },
1889
1889
  { name = "policyengine-uk", marker = "extra == 'uk'", specifier = "==2.102.3" },
@@ -1907,7 +1907,7 @@ provides-extras = ["plotting", "graph", "models", "uk", "us", "dev"]
1907
1907
 
1908
1908
  [[package]]
1909
1909
  name = "policyengine-core"
1910
- version = "3.32.5"
1910
+ version = "3.32.10"
1911
1911
  source = { registry = "https://pypi.org/simple" }
1912
1912
  dependencies = [
1913
1913
  { name = "dpath" },
@@ -1928,9 +1928,9 @@ dependencies = [
1928
1928
  { name = "standard-imghdr" },
1929
1929
  { name = "wheel" },
1930
1930
  ]
1931
- sdist = { url = "https://files.pythonhosted.org/packages/12/54/cfd2138584de9cddaa4459bba7fdc381101ca8b8ffd38356a1b256850d5f/policyengine_core-3.32.5.tar.gz", hash = "sha256:f051c269b538fe77ee7868f7cfbc0138551960b1b677a0ad6fdc1a93f1660460", size = 420112, upload-time = "2026-09-10T04:16:48.889Z" }
1931
+ sdist = { url = "https://files.pythonhosted.org/packages/d6/cd/9fc967c5b787baa5f9d83461773ba0982a8e22ae83c40155a7ee55edd11a/policyengine_core-3.32.10.tar.gz", hash = "sha256:0f51e8abfa8f172c69d03ba8f4304632a348fc6dca780e41021b2fd0cec04fde", size = 427479, upload-time = "2026-09-29T17:56:43.582Z" }
1932
1932
  wheels = [
1933
- { url = "https://files.pythonhosted.org/packages/c6/d9/72c3707465e9fe77e6f7a55ea64b49a287cbf875b78f6e862d945df26975/policyengine_core-3.32.5-py3-none-any.whl", hash = "sha256:9d8c162d5fe5c784ae16c885da3ffbfc39a536add0e111133144d8edd555935f", size = 245925, upload-time = "2026-09-10T04:16:47.153Z" },
1933
+ { url = "https://files.pythonhosted.org/packages/58/50/291d73da16f39a3c4f05dffb6d40b1142fc400ec39b5a2ca7481e6fe9d90/policyengine_core-3.32.10-py3-none-any.whl", hash = "sha256:124afc555fe7c848ae8237b820fed0b6ea0ea1280e8850ad8bf356937ee10e5b", size = 247410, upload-time = "2026-09-29T17:56:42.218Z" },
1934
1934
  ]
1935
1935
 
1936
1936
  [[package]]
@@ -2219,7 +2219,7 @@ wheels = [
2219
2219
 
2220
2220
  [[package]]
2221
2221
  name = "pytest"
2222
- version = "8.4.1"
2222
+ version = "9.1.1"
2223
2223
  source = { registry = "https://pypi.org/simple" }
2224
2224
  dependencies = [
2225
2225
  { name = "colorama", marker = "sys_platform == 'win32'" },
@@ -2228,21 +2228,22 @@ dependencies = [
2228
2228
  { name = "pluggy" },
2229
2229
  { name = "pygments" },
2230
2230
  ]
2231
- sdist = { url = "https://files.pythonhosted.org/packages/08/ba/45911d754e8eba3d5a841a5ce61a65a685ff1798421ac054f85aa8747dfb/pytest-8.4.1.tar.gz", hash = "sha256:7c67fd69174877359ed9371ec3af8a3d2b04741818c51e5e99cc1742251fa93c", size = 1517714, upload-time = "2025-06-18T05:48:06.109Z" }
2231
+ sdist = { url = "https://files.pythonhosted.org/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313", size = 1636369, upload-time = "2026-06-19T10:58:32.857Z" }
2232
2232
  wheels = [
2233
- { url = "https://files.pythonhosted.org/packages/29/16/c8a903f4c4dffe7a12843191437d7cd8e32751d5de349d45d3fe69544e87/pytest-8.4.1-py3-none-any.whl", hash = "sha256:539c70ba6fcead8e78eebbf1115e8b589e7565830d7d006a8723f19ac8a0afb7", size = 365474, upload-time = "2025-06-18T05:48:03.955Z" },
2233
+ { url = "https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c", size = 386536, upload-time = "2026-06-19T10:58:31.347Z" },
2234
2234
  ]
2235
2235
 
2236
2236
  [[package]]
2237
2237
  name = "pytest-asyncio"
2238
- version = "1.1.0"
2238
+ version = "1.4.0"
2239
2239
  source = { registry = "https://pypi.org/simple" }
2240
2240
  dependencies = [
2241
2241
  { name = "pytest" },
2242
+ { name = "typing-extensions", marker = "python_full_version < '3.13'" },
2242
2243
  ]
2243
- sdist = { url = "https://files.pythonhosted.org/packages/4e/51/f8794af39eeb870e87a8c8068642fc07bce0c854d6865d7dd0f2a9d338c2/pytest_asyncio-1.1.0.tar.gz", hash = "sha256:796aa822981e01b68c12e4827b8697108f7205020f24b5793b3c41555dab68ea", size = 46652, upload-time = "2025-07-16T04:29:26.393Z" }
2244
+ sdist = { url = "https://files.pythonhosted.org/packages/43/7c/d36d04db312ecf4298932ef77e6e4a9e8ad017906e24e34f0b0c361a2473/pytest_asyncio-1.4.0.tar.gz", hash = "sha256:c6c0d2259945122819f171a32ecea2c349ead889ee28176caaf492143424be42", size = 58514, upload-time = "2026-05-26T09:56:04.083Z" }
2244
2245
  wheels = [
2245
- { url = "https://files.pythonhosted.org/packages/c7/9d/bf86eddabf8c6c9cb1ea9a869d6873b46f105a5d292d3a6f7071f5b07935/pytest_asyncio-1.1.0-py3-none-any.whl", hash = "sha256:5fe2d69607b0bd75c656d1211f969cadba035030156745ee09e7d71740e58ecf", size = 15157, upload-time = "2025-07-16T04:29:24.929Z" },
2246
+ { url = "https://files.pythonhosted.org/packages/03/e2/08a497ef684b88559c9cc5f4ad53a37e7b99e727094a86d6ea32536d5d3c/pytest_asyncio-1.4.0-py3-none-any.whl", hash = "sha256:933ca923a23075a87fb7070c0ec272a6848489824d887c85c812670932835aa1", size = 16930, upload-time = "2026-05-26T09:56:02.576Z" },
2246
2247
  ]
2247
2248
 
2248
2249
  [[package]]
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes