policyengine 4.18.2__tar.gz → 4.18.3__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 (262) hide show
  1. {policyengine-4.18.2 → policyengine-4.18.3}/CHANGELOG.md +7 -0
  2. {policyengine-4.18.2 → policyengine-4.18.3}/PKG-INFO +1 -1
  3. {policyengine-4.18.2 → policyengine-4.18.3}/docs/bundles.md +29 -2
  4. {policyengine-4.18.2 → policyengine-4.18.3}/docs/engineering/skills/data-certification.md +34 -1
  5. {policyengine-4.18.2 → policyengine-4.18.3}/docs/release-bundles.md +25 -1
  6. {policyengine-4.18.2 → policyengine-4.18.3}/pyproject.toml +1 -1
  7. {policyengine-4.18.2 → policyengine-4.18.3}/scripts/bundle.py +25 -1
  8. {policyengine-4.18.2 → policyengine-4.18.3}/scripts/certify_data_release.py +25 -1
  9. policyengine-4.18.3/src/policyengine/data/bundle/manifest.json +547 -0
  10. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/data/bundle/uk.trace.tro.jsonld +7 -7
  11. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/data/bundle/us.trace.tro.jsonld +7 -7
  12. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/provenance/certification.py +171 -0
  13. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine.egg-info/PKG-INFO +1 -1
  14. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_certify_data_release.py +271 -1
  15. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_us_regions.py +71 -6
  16. policyengine-4.18.2/src/policyengine/data/bundle/manifest.json +0 -232
  17. {policyengine-4.18.2 → policyengine-4.18.3}/.claude/policyengine-guide.md +0 -0
  18. {policyengine-4.18.2 → policyengine-4.18.3}/.claude/quick-reference.md +0 -0
  19. {policyengine-4.18.2 → policyengine-4.18.3}/.github/CONTRIBUTING.md +0 -0
  20. {policyengine-4.18.2 → policyengine-4.18.3}/.github/bump_version.py +0 -0
  21. {policyengine-4.18.2 → policyengine-4.18.3}/.github/changelog_template.md +0 -0
  22. {policyengine-4.18.2 → policyengine-4.18.3}/.github/check-changelog.sh +0 -0
  23. {policyengine-4.18.2 → policyengine-4.18.3}/.github/copilot-instructions.md +0 -0
  24. {policyengine-4.18.2 → policyengine-4.18.3}/.github/fetch_version.py +0 -0
  25. {policyengine-4.18.2 → policyengine-4.18.3}/.github/get-changelog-diff.sh +0 -0
  26. {policyengine-4.18.2 → policyengine-4.18.3}/.github/has-functional-changes.sh +0 -0
  27. {policyengine-4.18.2 → policyengine-4.18.3}/.github/is-version-number-acceptable.sh +0 -0
  28. {policyengine-4.18.2 → policyengine-4.18.3}/.github/publish-git-tag.sh +0 -0
  29. {policyengine-4.18.2 → policyengine-4.18.3}/.github/workflows/draft-pdf.yml +0 -0
  30. {policyengine-4.18.2 → policyengine-4.18.3}/.github/workflows/pr_code_changes.yaml +0 -0
  31. {policyengine-4.18.2 → policyengine-4.18.3}/.github/workflows/pr_docs_changes.yaml +0 -0
  32. {policyengine-4.18.2 → policyengine-4.18.3}/.github/workflows/push.yaml +0 -0
  33. {policyengine-4.18.2 → policyengine-4.18.3}/.gitignore +0 -0
  34. {policyengine-4.18.2 → policyengine-4.18.3}/.python-version +0 -0
  35. {policyengine-4.18.2 → policyengine-4.18.3}/AGENTS.md +0 -0
  36. {policyengine-4.18.2 → policyengine-4.18.3}/CITATION.cff +0 -0
  37. {policyengine-4.18.2 → policyengine-4.18.3}/CLAUDE.md +0 -0
  38. {policyengine-4.18.2 → policyengine-4.18.3}/CODE_OF_CONDUCT.md +0 -0
  39. {policyengine-4.18.2 → policyengine-4.18.3}/LICENSE +0 -0
  40. {policyengine-4.18.2 → policyengine-4.18.3}/Makefile +0 -0
  41. {policyengine-4.18.2 → policyengine-4.18.3}/README.md +0 -0
  42. {policyengine-4.18.2 → policyengine-4.18.3}/architecture.png +0 -0
  43. {policyengine-4.18.2 → policyengine-4.18.3}/architecture.svg +0 -0
  44. {policyengine-4.18.2 → policyengine-4.18.3}/changelog.d/.gitkeep +0 -0
  45. {policyengine-4.18.2 → policyengine-4.18.3}/docs/.gitignore +0 -0
  46. {policyengine-4.18.2 → policyengine-4.18.3}/docs/_generator/README.md +0 -0
  47. {policyengine-4.18.2 → policyengine-4.18.3}/docs/_generator/build_reference.py +0 -0
  48. {policyengine-4.18.2 → policyengine-4.18.3}/docs/_quarto.yml +0 -0
  49. {policyengine-4.18.2 → policyengine-4.18.3}/docs/countries.md +0 -0
  50. {policyengine-4.18.2 → policyengine-4.18.3}/docs/data-publishing-design.md +0 -0
  51. {policyengine-4.18.2 → policyengine-4.18.3}/docs/dev.md +0 -0
  52. {policyengine-4.18.2 → policyengine-4.18.3}/docs/engineering/skills/README.md +0 -0
  53. {policyengine-4.18.2 → policyengine-4.18.3}/docs/engineering/skills/github-prs.md +0 -0
  54. {policyengine-4.18.2 → policyengine-4.18.3}/docs/engineering/skills/repository-guidance.md +0 -0
  55. {policyengine-4.18.2 → policyengine-4.18.3}/docs/examples.md +0 -0
  56. {policyengine-4.18.2 → policyengine-4.18.3}/docs/getting-started.md +0 -0
  57. {policyengine-4.18.2 → policyengine-4.18.3}/docs/households.md +0 -0
  58. {policyengine-4.18.2 → policyengine-4.18.3}/docs/impact-analysis.md +0 -0
  59. {policyengine-4.18.2 → policyengine-4.18.3}/docs/index.md +0 -0
  60. {policyengine-4.18.2 → policyengine-4.18.3}/docs/methodology/index.md +0 -0
  61. {policyengine-4.18.2 → policyengine-4.18.3}/docs/methodology/model-architecture.md +0 -0
  62. {policyengine-4.18.2 → policyengine-4.18.3}/docs/methodology/us-health-costs.md +0 -0
  63. {policyengine-4.18.2 → policyengine-4.18.3}/docs/microsim.md +0 -0
  64. {policyengine-4.18.2 → policyengine-4.18.3}/docs/outputs.md +0 -0
  65. {policyengine-4.18.2 → policyengine-4.18.3}/docs/programs/index.md +0 -0
  66. {policyengine-4.18.2 → policyengine-4.18.3}/docs/programs/us-chip.md +0 -0
  67. {policyengine-4.18.2 → policyengine-4.18.3}/docs/reference/index.md +0 -0
  68. {policyengine-4.18.2 → policyengine-4.18.3}/docs/reforms.md +0 -0
  69. {policyengine-4.18.2 → policyengine-4.18.3}/docs/regions.md +0 -0
  70. {policyengine-4.18.2 → policyengine-4.18.3}/docs/run-records.md +0 -0
  71. {policyengine-4.18.2 → policyengine-4.18.3}/docs/trace-case-study.md +0 -0
  72. {policyengine-4.18.2 → policyengine-4.18.3}/docs/visualisation.md +0 -0
  73. {policyengine-4.18.2 → policyengine-4.18.3}/examples/employment_income_variation_uk.py +0 -0
  74. {policyengine-4.18.2 → policyengine-4.18.3}/examples/employment_income_variation_us.py +0 -0
  75. {policyengine-4.18.2 → policyengine-4.18.3}/examples/household_impact_example.py +0 -0
  76. {policyengine-4.18.2 → policyengine-4.18.3}/examples/income_bands_uk.py +0 -0
  77. {policyengine-4.18.2 → policyengine-4.18.3}/examples/income_distribution_us.py +0 -0
  78. {policyengine-4.18.2 → policyengine-4.18.3}/examples/paper_repro_uk.py +0 -0
  79. {policyengine-4.18.2 → policyengine-4.18.3}/examples/policy_change_uk.py +0 -0
  80. {policyengine-4.18.2 → policyengine-4.18.3}/examples/speedtest_us_simulation.py +0 -0
  81. {policyengine-4.18.2 → policyengine-4.18.3}/examples/us_budgetary_impact.py +0 -0
  82. {policyengine-4.18.2 → policyengine-4.18.3}/paper-preview.html +0 -0
  83. {policyengine-4.18.2 → policyengine-4.18.3}/paper.bib +0 -0
  84. {policyengine-4.18.2 → policyengine-4.18.3}/paper.md +0 -0
  85. {policyengine-4.18.2 → policyengine-4.18.3}/scripts/check_data_staleness.py +0 -0
  86. {policyengine-4.18.2 → policyengine-4.18.3}/scripts/export_bundle_release_assets.py +0 -0
  87. {policyengine-4.18.2 → policyengine-4.18.3}/scripts/generate_bundle_artifacts.py +0 -0
  88. {policyengine-4.18.2 → policyengine-4.18.3}/scripts/generate_trace_tros.py +0 -0
  89. {policyengine-4.18.2 → policyengine-4.18.3}/scripts/prepare_package_bundle_update.py +0 -0
  90. {policyengine-4.18.2 → policyengine-4.18.3}/setup.cfg +0 -0
  91. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/__init__.py +0 -0
  92. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/bundle.py +0 -0
  93. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/cli.py +0 -0
  94. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/core/__init__.py +0 -0
  95. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/core/cache.py +0 -0
  96. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/core/dataset.py +0 -0
  97. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/core/dynamic.py +0 -0
  98. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/core/output.py +0 -0
  99. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/core/parameter.py +0 -0
  100. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/core/parameter_node.py +0 -0
  101. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/core/parameter_value.py +0 -0
  102. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/core/policy.py +0 -0
  103. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/core/region.py +0 -0
  104. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/core/run_record.py +0 -0
  105. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/core/scoping_strategy.py +0 -0
  106. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/core/simulation.py +0 -0
  107. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/core/tax_benefit_model.py +0 -0
  108. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/core/tax_benefit_model_version.py +0 -0
  109. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/core/variable.py +0 -0
  110. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/countries/__init__.py +0 -0
  111. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/countries/uk/__init__.py +0 -0
  112. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/countries/uk/regions.py +0 -0
  113. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/countries/us/__init__.py +0 -0
  114. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/countries/us/data/__init__.py +0 -0
  115. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/countries/us/data/districts.py +0 -0
  116. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/countries/us/data/places.py +0 -0
  117. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/countries/us/data/states.py +0 -0
  118. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/countries/us/regions.py +0 -0
  119. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/data/__init__.py +0 -0
  120. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/data/schemas/trace_tro.schema.json +0 -0
  121. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/data/uk_geography_assets.py +0 -0
  122. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/derivations/__init__.py +0 -0
  123. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/derivations/narrate.py +0 -0
  124. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/derivations/trace.py +0 -0
  125. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/graph/__init__.py +0 -0
  126. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/graph/extractor.py +0 -0
  127. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/graph/graph.py +0 -0
  128. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/outputs/__init__.py +0 -0
  129. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/outputs/aggregate.py +0 -0
  130. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/outputs/change_aggregate.py +0 -0
  131. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/outputs/cliff_impact.py +0 -0
  132. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/outputs/congressional_district_impact.py +0 -0
  133. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/outputs/constituency_impact.py +0 -0
  134. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/outputs/decile_impact.py +0 -0
  135. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/outputs/extra_variables.py +0 -0
  136. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/outputs/inequality.py +0 -0
  137. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/outputs/intra_decile_impact.py +0 -0
  138. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/outputs/labor_supply_response.py +0 -0
  139. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/outputs/local_authority_impact.py +0 -0
  140. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/outputs/poverty.py +0 -0
  141. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/outputs/program_statistics.py +0 -0
  142. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/outputs/uk_geography_assets.py +0 -0
  143. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/outputs/uk_geography_impact.py +0 -0
  144. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/provenance/__init__.py +0 -0
  145. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/provenance/dataset_sources.py +0 -0
  146. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/provenance/manifest.py +0 -0
  147. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/provenance/pyproject_pins.py +0 -0
  148. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/provenance/trace.py +0 -0
  149. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/provenance/verify.py +0 -0
  150. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/results/__init__.py +0 -0
  151. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/results/schema.py +0 -0
  152. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/results/trace_tro.py +0 -0
  153. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/results/tracking.py +0 -0
  154. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/tax_benefit_models/common/__init__.py +0 -0
  155. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/tax_benefit_models/common/extra_variables.py +0 -0
  156. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/tax_benefit_models/common/household.py +0 -0
  157. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/tax_benefit_models/common/model_version.py +0 -0
  158. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/tax_benefit_models/common/reform.py +0 -0
  159. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/tax_benefit_models/common/result.py +0 -0
  160. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/tax_benefit_models/uk/__init__.py +0 -0
  161. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/tax_benefit_models/uk/analysis.py +0 -0
  162. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/tax_benefit_models/uk/datasets.py +0 -0
  163. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/tax_benefit_models/uk/household.py +0 -0
  164. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/tax_benefit_models/uk/model.py +0 -0
  165. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/tax_benefit_models/us/__init__.py +0 -0
  166. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/tax_benefit_models/us/analysis.py +0 -0
  167. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/tax_benefit_models/us/datasets.py +0 -0
  168. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/tax_benefit_models/us/household.py +0 -0
  169. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/tax_benefit_models/us/model.py +0 -0
  170. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/utils/__init__.py +0 -0
  171. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/utils/data/__init__.py +0 -0
  172. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/utils/data/caching_google_storage_client.py +0 -0
  173. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/utils/data/version_aware_storage_client.py +0 -0
  174. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/utils/dates.py +0 -0
  175. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/utils/design.py +0 -0
  176. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/utils/entity_utils.py +0 -0
  177. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/utils/errors.py +0 -0
  178. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/utils/google_cloud_bucket.py +0 -0
  179. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/utils/household_validation.py +0 -0
  180. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/utils/parameter_labels.py +0 -0
  181. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/utils/parametric_reforms.py +0 -0
  182. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/utils/plotting.py +0 -0
  183. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine.egg-info/SOURCES.txt +0 -0
  184. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine.egg-info/dependency_links.txt +0 -0
  185. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine.egg-info/entry_points.txt +0 -0
  186. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine.egg-info/requires.txt +0 -0
  187. {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine.egg-info/top_level.txt +0 -0
  188. {policyengine-4.18.2 → policyengine-4.18.3}/tests/__init__.py +0 -0
  189. {policyengine-4.18.2 → policyengine-4.18.3}/tests/conftest.py +0 -0
  190. {policyengine-4.18.2 → policyengine-4.18.3}/tests/fixtures/__init__.py +0 -0
  191. {policyengine-4.18.2 → policyengine-4.18.3}/tests/fixtures/filtering_fixtures.py +0 -0
  192. {policyengine-4.18.2 → policyengine-4.18.3}/tests/fixtures/household_calculator_snapshots/uk_couple_two_kids.json +0 -0
  193. {policyengine-4.18.2 → policyengine-4.18.3}/tests/fixtures/household_calculator_snapshots/uk_model_surface.json +0 -0
  194. {policyengine-4.18.2 → policyengine-4.18.3}/tests/fixtures/household_calculator_snapshots/uk_single_adult_employment_income.json +0 -0
  195. {policyengine-4.18.2 → policyengine-4.18.3}/tests/fixtures/household_calculator_snapshots/uk_single_adult_no_income.json +0 -0
  196. {policyengine-4.18.2 → policyengine-4.18.3}/tests/fixtures/household_calculator_snapshots/uk_single_parent_one_child.json +0 -0
  197. {policyengine-4.18.2 → policyengine-4.18.3}/tests/fixtures/household_calculator_snapshots/us_married_two_kids_high_income.json +0 -0
  198. {policyengine-4.18.2 → policyengine-4.18.3}/tests/fixtures/household_calculator_snapshots/us_model_surface.json +0 -0
  199. {policyengine-4.18.2 → policyengine-4.18.3}/tests/fixtures/household_calculator_snapshots/us_single_adult_employment_income.json +0 -0
  200. {policyengine-4.18.2 → policyengine-4.18.3}/tests/fixtures/household_calculator_snapshots/us_single_adult_no_income.json +0 -0
  201. {policyengine-4.18.2 → policyengine-4.18.3}/tests/fixtures/household_calculator_snapshots/us_single_parent_one_child.json +0 -0
  202. {policyengine-4.18.2 → policyengine-4.18.3}/tests/fixtures/parameter_labels_fixtures.py +0 -0
  203. {policyengine-4.18.2 → policyengine-4.18.3}/tests/fixtures/parametric_reforms_fixtures.py +0 -0
  204. {policyengine-4.18.2 → policyengine-4.18.3}/tests/fixtures/poverty_by_demographics_fixtures.py +0 -0
  205. {policyengine-4.18.2 → policyengine-4.18.3}/tests/fixtures/region_fixtures.py +0 -0
  206. {policyengine-4.18.2 → policyengine-4.18.3}/tests/fixtures/us_reform_fixtures.py +0 -0
  207. {policyengine-4.18.2 → policyengine-4.18.3}/tests/fixtures/variable_label_fixtures.py +0 -0
  208. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_aggregate.py +0 -0
  209. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_bump_version.py +0 -0
  210. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_bundle.py +0 -0
  211. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_bundle_metadata.py +0 -0
  212. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_cache.py +0 -0
  213. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_change_aggregate.py +0 -0
  214. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_cliff_impact.py +0 -0
  215. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_cliff_impact_analysis.py +0 -0
  216. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_congressional_district_impact.py +0 -0
  217. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_constituency_impact.py +0 -0
  218. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_dataset_sources.py +0 -0
  219. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_derivations.py +0 -0
  220. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_dict_reforms_on_simulation.py +0 -0
  221. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_entity_mapping.py +0 -0
  222. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_entity_utils.py +0 -0
  223. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_errors.py +0 -0
  224. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_extra_variables.py +0 -0
  225. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_filtering.py +0 -0
  226. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_graph/__init__.py +0 -0
  227. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_graph/conftest.py +0 -0
  228. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_graph/test_extractor.py +0 -0
  229. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_household_calculator_snapshot.py +0 -0
  230. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_household_impact.py +0 -0
  231. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_inequality.py +0 -0
  232. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_intra_decile_impact.py +0 -0
  233. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_labor_supply_response.py +0 -0
  234. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_local_authority_impact.py +0 -0
  235. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_manifest_version_mismatch.py +0 -0
  236. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_models.py +0 -0
  237. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_pandas3_compatibility.py +0 -0
  238. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_parameter_labels.py +0 -0
  239. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_parametric_reforms.py +0 -0
  240. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_poverty.py +0 -0
  241. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_poverty_by_demographics.py +0 -0
  242. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_poverty_run.py +0 -0
  243. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_preservation_mirror.py +0 -0
  244. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_pyproject_pins.py +0 -0
  245. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_region.py +0 -0
  246. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_release_manifests.py +0 -0
  247. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_results.py +0 -0
  248. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_run_record.py +0 -0
  249. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_scoping_strategy.py +0 -0
  250. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_small_follow_ups.py +0 -0
  251. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_trace_tro.py +0 -0
  252. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_trace_tro_verify.py +0 -0
  253. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_uk_analysis.py +0 -0
  254. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_uk_geography_assets.py +0 -0
  255. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_uk_program_statistics.py +0 -0
  256. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_uk_regions.py +0 -0
  257. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_us_long_term_datasets.py +0 -0
  258. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_us_microsim_structural_reforms.py +0 -0
  259. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_us_program_statistics.py +0 -0
  260. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_us_reform_application.py +0 -0
  261. {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_variable_labels.py +0 -0
  262. {policyengine-4.18.2 → policyengine-4.18.3}/uv.lock +0 -0
@@ -1,3 +1,10 @@
1
+ ## [4.18.3] - 2026-06-25
2
+
3
+ ### Changed
4
+
5
+ - Certify the US populace data release `populace-us-2024-f0af251-703bd81a565c-20260620T201958Z` (populace_us_2024, policyengine-us 1.729.0) into the PolicyEngine bundle manifest, including inherited state datasets from policyengine-us-data 1.115.5.
6
+
7
+
1
8
  ## [4.18.2] - 2026-06-23
2
9
 
3
10
  ### Fixed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: policyengine
3
- Version: 4.18.2
3
+ Version: 4.18.3
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
@@ -28,12 +28,18 @@ uvx --from policyengine policyengine bundle install
28
28
  When run from `uvx` or `pipx`, the installer creates or reuses `./.venv`.
29
29
  Inside an existing virtualenv or conda environment, it installs into that active
30
30
  environment. The installer then installs the
31
- exact bundled package scaffold with pip, downloads certified US and UK datasets
32
- into `./data`, moves replaced dataset files into
31
+ exact bundled package scaffold with pip, downloads certified default US and UK
32
+ datasets into `./data`, moves replaced dataset files into
33
33
  `./data/.policyengine-bundle-backups/<timestamp>/`, and writes a
34
34
  `./data/.policyengine-bundle-receipt.json` receipt that records the target
35
35
  Python.
36
36
 
37
+ The bundle manifest can certify additional regional datasets, such as US state
38
+ datasets. Those artifacts are part of the citable bundle manifest, but
39
+ `policyengine bundle install` does not eagerly download every regional file.
40
+ Runtime callers should use the manifest's regional dataset URI when a regional
41
+ simulation needs one.
42
+
37
43
  Country-specific and package-only installs are supported:
38
44
 
39
45
  ```bash
@@ -82,6 +88,27 @@ python scripts/bundle.py certify-data \
82
88
  --manifest-uri hf://dataset/policyengine/populace-uk-private@<release>/releases/<release>/release_manifest.json
83
89
  ```
84
90
 
91
+ For US Populace releases, include the inherited state datasets from
92
+ `policyengine-us-data`:
93
+
94
+ ```bash
95
+ python scripts/bundle.py certify-data \
96
+ --country us \
97
+ --data-producer populace \
98
+ --manifest-uri hf://dataset/policyengine/populace-us@<release>/releases/<release>/release_manifest.json \
99
+ --regional-manifest-uri hf://model/policyengine/policyengine-us-data@<version>/releases/<version>/release_manifest.json \
100
+ --model-version <policyengine-us-version>
101
+ ```
102
+
103
+ The regional manifest must include all 51 `states/{STATE}.h5` artifacts with
104
+ their original repo, revision, and sha256 pins. The resulting bundle manifest
105
+ certifies Populace as the US national default dataset and
106
+ `policyengine-us-data` as the state dataset source.
107
+ The regional manifest URI is recorded for traceability; the bundle does not
108
+ currently record the regional manifest's own sha256. The citable pins are the
109
+ artifact-level repo, revision, and sha256 values copied into
110
+ `data_releases.us.datasets`.
111
+
85
112
  Use `python scripts/bundle.py generate` to regenerate derived bundle metadata,
86
113
  and `python scripts/bundle.py generate --include-tros` when TRACE TRO sidecars
87
114
  should also be regenerated. Private data releases require `HUGGING_FACE_TOKEN`
@@ -26,6 +26,38 @@ python scripts/bundle.py certify-data --country uk --data-producer populace \
26
26
  --manifest-uri "hf://dataset/policyengine/populace-uk-private@<tag>/releases/<tag>/release_manifest.json"
27
27
  ```
28
28
 
29
+ For US Populace certification, include the inherited state datasets from the
30
+ certified `policyengine-us-data` release manifest:
31
+
32
+ ```bash
33
+ python scripts/bundle.py certify-data --country us --data-producer populace \
34
+ --manifest-uri "hf://dataset/policyengine/populace-us@<tag>/releases/<tag>/release_manifest.json" \
35
+ --regional-manifest-uri "hf://model/policyengine/policyengine-us-data@<version>/releases/<version>/release_manifest.json" \
36
+ --model-version "<policyengine-us-version>"
37
+ ```
38
+
39
+ The regional manifest is required for US while the stack still serves
40
+ state-level datasets from `policyengine-us-data`. It must contain all 51
41
+ `states/{STATE}.h5` artifacts, including DC, and each state artifact must carry
42
+ its original `repo_id`, `revision`, and `sha256`. Certification preserves those
43
+ per-artifact pins in `data_releases.us.datasets` and writes:
44
+
45
+ ```json
46
+ "region_datasets": {
47
+ "national": {"path_template": "populace_us_2024.h5"},
48
+ "state": {"path_template": "states/{state_code}.h5"}
49
+ }
50
+ ```
51
+
52
+ Do not move or rewrite state artifacts into the Populace repo. The certified
53
+ bundle is intentionally hybrid: Populace owns the national default dataset, and
54
+ `policyengine-us-data` owns the inherited state datasets until that path is
55
+ migrated.
56
+ The regional manifest URI is recorded for traceability, but the bundle does not
57
+ currently record the regional manifest's own sha256. Treat the copied
58
+ artifact-level repo, revision, and sha256 pins in `data_releases.us.datasets`
59
+ as the citable state dataset certification.
60
+
29
61
  The script fetches and validates the manifest (every artifact must carry a
30
62
  revision pin; the certified dataset must be reachable), writes the canonical
31
63
  bundle manifest, exact-pins the country model package in that same manifest,
@@ -53,7 +85,8 @@ A certification PR should normally change only:
53
85
  Hard failures (certification refuses): missing national default dataset,
54
86
  default dataset absent from artifacts, any artifact without a revision pin,
55
87
  unreachable certified dataset, missing required supplemental release files
56
- (for example Populace-US `us_source_coverage.json`), unknown country.
88
+ (for example Populace-US `us_source_coverage.json`), missing or malformed US
89
+ state overlay artifacts when `--regional-manifest-uri` is used, unknown country.
57
90
 
58
91
  Certification gate: the model version must either exactly match the
59
92
  build-time model (`compatibility_basis: built_with_model_package`) or be
@@ -38,12 +38,17 @@ uvx --from policyengine==4.19.1 policyengine bundle install 4.19.1
38
38
  When run from `uvx` or `pipx`, the command creates or reuses `.venv`. Inside an
39
39
  existing virtualenv or conda environment, it installs into that active
40
40
  environment. It installs the bundled Python packages with pip, downloads the
41
- certified US and UK datasets into `./data`, and writes a
41
+ certified default US and UK datasets into `./data`, and writes a
42
42
  `./data/.policyengine-bundle-receipt.json` receipt that records the target
43
43
  Python.
44
44
  Existing dataset files with the same filename are moved to
45
45
  `./data/.policyengine-bundle-backups/<timestamp>/`.
46
46
 
47
+ Regional datasets may also be certified in the bundle manifest. They are not
48
+ eagerly downloaded by `policyengine bundle install`; callers should materialize
49
+ the certified regional URI from the manifest when they run a regional
50
+ simulation.
51
+
47
52
  Useful variants:
48
53
 
49
54
  ```bash
@@ -123,6 +128,25 @@ python scripts/bundle.py certify-data --country us \
123
128
  --manifest-uri "hf://dataset/policyengine/populace-us@<tag>/releases/<tag>/release_manifest.json"
124
129
  ```
125
130
 
131
+ US Populace certification currently also needs the inherited state-level
132
+ datasets from the certified `policyengine-us-data` release manifest:
133
+
134
+ ```bash
135
+ python scripts/bundle.py certify-data --country us --data-producer populace \
136
+ --manifest-uri "hf://dataset/policyengine/populace-us@<tag>/releases/<tag>/release_manifest.json" \
137
+ --regional-manifest-uri "hf://model/policyengine/policyengine-us-data@<version>/releases/<version>/release_manifest.json" \
138
+ --model-version "<policyengine-us-version>"
139
+ ```
140
+
141
+ That produces one US bundle manifest entry containing the Populace national
142
+ default dataset plus all 51 `states/{STATE}.h5` artifacts pinned to
143
+ `policyengine-us-data`. The resulting `region_datasets.state` template lets
144
+ runtime code resolve a state region to the exact certified state artifact.
145
+ The regional manifest URI is retained for traceability, but the bundle does not
146
+ currently store the regional manifest's own sha256. For inherited state data,
147
+ the citable pins are the copied artifact-level repo, revision, and sha256
148
+ values in `data_releases.us.datasets`.
149
+
126
150
  Earlier releases (policyengine 4.15.x–4.16.x) were certified through the
127
151
  `PolicyEngine/policyengine-bundles` archive flow; those bundles remain the
128
152
  historical record of their certifications.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "policyengine"
7
- version = "4.18.2"
7
+ version = "4.18.3"
8
8
  description = "A package to conduct policy analysis using PolicyEngine tax-benefit models."
9
9
  readme = "README.md"
10
10
  authors = [
@@ -38,6 +38,12 @@ def _certify_data(args: argparse.Namespace) -> int:
38
38
  argv.extend(["--data-producer", args.data_producer])
39
39
  if args.model_version:
40
40
  argv.extend(["--model-version", args.model_version])
41
+ if args.regional_manifest_uri:
42
+ argv.extend(["--regional-manifest-uri", args.regional_manifest_uri])
43
+ if args.regional_artifact_prefix:
44
+ argv.extend(["--regional-artifact-prefix", args.regional_artifact_prefix])
45
+ if args.regional_path_template:
46
+ argv.extend(["--regional-path-template", args.regional_path_template])
41
47
  if args.no_generate:
42
48
  argv.append("--no-generate")
43
49
  if args.no_changelog:
@@ -141,6 +147,21 @@ def _parser() -> argparse.ArgumentParser:
141
147
  "--model-version",
142
148
  help="Model package version to certify for. Defaults to installed metadata.",
143
149
  )
150
+ certify.add_argument(
151
+ "--regional-manifest-uri",
152
+ help=(
153
+ "Optional regional release_manifest.json URI to merge into US "
154
+ "Populace certification."
155
+ ),
156
+ )
157
+ certify.add_argument(
158
+ "--regional-artifact-prefix",
159
+ help="Regional artifact prefix to import. Defaults to states/.",
160
+ )
161
+ certify.add_argument(
162
+ "--regional-path-template",
163
+ help="Region dataset path template to certify.",
164
+ )
144
165
  certify.add_argument(
145
166
  "--no-generate",
146
167
  action="store_true",
@@ -154,7 +175,10 @@ def _parser() -> argparse.ArgumentParser:
154
175
  certify.add_argument(
155
176
  "--skip-artifact-check",
156
177
  action="store_true",
157
- help="Skip the certified dataset reachability check.",
178
+ help=(
179
+ "Skip reachability checks for the certified dataset and any "
180
+ "vendored/regional artifacts."
181
+ ),
158
182
  )
159
183
  certify.set_defaults(func=_certify_data)
160
184
 
@@ -49,6 +49,24 @@ def main(argv=None) -> int:
49
49
  required=True,
50
50
  help="hf://dataset/<repo_id>@<revision>/<path-to-release_manifest.json>",
51
51
  )
52
+ parser.add_argument(
53
+ "--regional-manifest-uri",
54
+ default=None,
55
+ help=(
56
+ "Optional regional data release manifest to merge into US Populace "
57
+ "certification."
58
+ ),
59
+ )
60
+ parser.add_argument(
61
+ "--regional-artifact-prefix",
62
+ default="states/",
63
+ help="Regional artifact path prefix to import. Defaults to states/.",
64
+ )
65
+ parser.add_argument(
66
+ "--regional-path-template",
67
+ default="states/{state_code}.h5",
68
+ help="Region dataset path template to certify into the bundle manifest.",
69
+ )
52
70
  parser.add_argument(
53
71
  "--model-version",
54
72
  default=None,
@@ -59,7 +77,10 @@ def main(argv=None) -> int:
59
77
  parser.add_argument(
60
78
  "--skip-artifact-check",
61
79
  action="store_true",
62
- help="Skip the reachability HEAD on the certified dataset.",
80
+ help=(
81
+ "Skip reachability HEAD checks for the certified dataset and any "
82
+ "vendored/regional artifacts."
83
+ ),
63
84
  )
64
85
  args = parser.parse_args(argv)
65
86
 
@@ -78,6 +99,9 @@ def main(argv=None) -> int:
78
99
  / "bundle"
79
100
  / "manifest.json",
80
101
  check_artifacts=not args.skip_artifact_check,
102
+ regional_manifest_uri=args.regional_manifest_uri,
103
+ regional_artifact_prefix=args.regional_artifact_prefix,
104
+ regional_path_template=args.regional_path_template,
81
105
  )
82
106
  print(result.summary())
83
107