policyengine 4.16.0__tar.gz → 4.16.2__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.
- {policyengine-4.16.0 → policyengine-4.16.2}/.github/copilot-instructions.md +2 -2
- {policyengine-4.16.0 → policyengine-4.16.2}/AGENTS.md +2 -2
- {policyengine-4.16.0 → policyengine-4.16.2}/CHANGELOG.md +14 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/CLAUDE.md +2 -2
- {policyengine-4.16.0/src/policyengine.egg-info → policyengine-4.16.2}/PKG-INFO +5 -5
- {policyengine-4.16.0 → policyengine-4.16.2}/docs/engineering/skills/README.md +2 -2
- policyengine-4.16.2/docs/engineering/skills/data-certification.md +83 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/docs/release-bundles.md +28 -12
- {policyengine-4.16.0 → policyengine-4.16.2}/pyproject.toml +5 -5
- policyengine-4.16.2/scripts/certify_data_release.py +111 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/data/release_manifests/uk.json +2 -2
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/data/release_manifests/uk.trace.tro.jsonld +7 -7
- policyengine-4.16.2/src/policyengine/data/release_manifests/us.json +3477 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/data/release_manifests/us.trace.tro.jsonld +24 -25
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/provenance/__init__.py +6 -6
- policyengine-4.16.2/src/policyengine/provenance/certification.py +385 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/provenance/manifest.py +25 -2
- policyengine-4.16.2/src/policyengine/provenance/pyproject_pins.py +122 -0
- {policyengine-4.16.0 → policyengine-4.16.2/src/policyengine.egg-info}/PKG-INFO +5 -5
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine.egg-info/SOURCES.txt +6 -14
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine.egg-info/requires.txt +4 -4
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/fixtures/household_calculator_snapshots/us_married_two_kids_high_income.json +3 -3
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/fixtures/household_calculator_snapshots/us_model_surface.json +1 -1
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/fixtures/household_calculator_snapshots/us_single_adult_employment_income.json +3 -3
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/fixtures/household_calculator_snapshots/us_single_adult_no_income.json +3 -3
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/fixtures/household_calculator_snapshots/us_single_parent_one_child.json +3 -3
- policyengine-4.16.2/tests/test_certify_data_release.py +275 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_models.py +5 -4
- policyengine-4.16.2/tests/test_pyproject_pins.py +105 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_release_manifests.py +26 -34
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_trace_tro.py +12 -12
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_us_regions.py +8 -4
- {policyengine-4.16.0 → policyengine-4.16.2}/uv.lock +11 -11
- policyengine-4.16.0/docs/engineering/skills/release-bundles.md +0 -122
- policyengine-4.16.0/scripts/import_policyengine_bundle.py +0 -13
- policyengine-4.16.0/src/policyengine/data/release_manifests/us.json +0 -505
- policyengine-4.16.0/src/policyengine/provenance/bundle_import/__init__.py +0 -15
- policyengine-4.16.0/src/policyengine/provenance/bundle_import/api.py +0 -141
- policyengine-4.16.0/src/policyengine/provenance/bundle_import/archive.py +0 -109
- policyengine-4.16.0/src/policyengine/provenance/bundle_import/cli.py +0 -84
- policyengine-4.16.0/src/policyengine/provenance/bundle_import/constants.py +0 -11
- policyengine-4.16.0/src/policyengine/provenance/bundle_import/country_manifest.py +0 -218
- policyengine-4.16.0/src/policyengine/provenance/bundle_import/digest.py +0 -73
- policyengine-4.16.0/src/policyengine/provenance/bundle_import/hf.py +0 -63
- policyengine-4.16.0/src/policyengine/provenance/bundle_import/io.py +0 -36
- policyengine-4.16.0/src/policyengine/provenance/bundle_import/pyproject.py +0 -113
- policyengine-4.16.0/src/policyengine/provenance/bundle_import/types.py +0 -31
- policyengine-4.16.0/tests/test_import_policyengine_bundle.py +0 -432
- {policyengine-4.16.0 → policyengine-4.16.2}/.claude/policyengine-guide.md +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/.claude/quick-reference.md +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/.github/CONTRIBUTING.md +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/.github/bump_version.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/.github/changelog_template.md +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/.github/check-changelog.sh +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/.github/fetch_version.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/.github/get-changelog-diff.sh +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/.github/has-functional-changes.sh +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/.github/is-version-number-acceptable.sh +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/.github/publish-git-tag.sh +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/.github/workflows/draft-pdf.yml +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/.github/workflows/pr_code_changes.yaml +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/.github/workflows/pr_docs_changes.yaml +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/.github/workflows/push.yaml +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/.gitignore +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/.python-version +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/CITATION.cff +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/CODE_OF_CONDUCT.md +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/LICENSE +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/Makefile +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/README.md +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/architecture.png +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/architecture.svg +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/changelog.d/.gitkeep +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/docs/.gitignore +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/docs/_generator/README.md +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/docs/_generator/build_reference.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/docs/_quarto.yml +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/docs/countries.md +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/docs/data-publishing-design.md +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/docs/dev.md +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/docs/engineering/skills/github-prs.md +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/docs/engineering/skills/repository-guidance.md +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/docs/examples.md +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/docs/getting-started.md +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/docs/households.md +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/docs/impact-analysis.md +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/docs/index.md +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/docs/methodology/index.md +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/docs/methodology/model-architecture.md +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/docs/methodology/us-health-costs.md +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/docs/microsim.md +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/docs/outputs.md +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/docs/programs/index.md +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/docs/programs/us-chip.md +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/docs/reference/index.md +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/docs/reforms.md +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/docs/regions.md +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/docs/trace-case-study.md +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/docs/visualisation.md +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/examples/employment_income_variation_uk.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/examples/employment_income_variation_us.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/examples/household_impact_example.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/examples/income_bands_uk.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/examples/income_distribution_us.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/examples/paper_repro_uk.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/examples/policy_change_uk.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/examples/speedtest_us_simulation.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/examples/us_budgetary_impact.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/paper-preview.html +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/paper.bib +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/paper.md +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/scripts/check_data_staleness.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/scripts/generate_trace_tros.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/scripts/refresh_release_bundle.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/setup.cfg +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/__init__.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/cli.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/core/__init__.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/core/cache.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/core/dataset.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/core/dynamic.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/core/output.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/core/parameter.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/core/parameter_node.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/core/parameter_value.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/core/policy.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/core/region.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/core/scoping_strategy.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/core/simulation.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/core/tax_benefit_model.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/core/tax_benefit_model_version.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/core/variable.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/countries/__init__.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/countries/uk/__init__.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/countries/uk/regions.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/countries/us/__init__.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/countries/us/data/__init__.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/countries/us/data/districts.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/countries/us/data/places.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/countries/us/data/states.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/countries/us/regions.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/data/__init__.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/data/schemas/trace_tro.schema.json +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/data/uk_geography_assets.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/derivations/__init__.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/derivations/narrate.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/derivations/trace.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/graph/__init__.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/graph/extractor.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/graph/graph.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/outputs/__init__.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/outputs/aggregate.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/outputs/change_aggregate.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/outputs/cliff_impact.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/outputs/congressional_district_impact.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/outputs/constituency_impact.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/outputs/decile_impact.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/outputs/extra_variables.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/outputs/inequality.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/outputs/intra_decile_impact.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/outputs/labor_supply_response.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/outputs/local_authority_impact.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/outputs/poverty.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/outputs/program_statistics.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/outputs/uk_geography_assets.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/provenance/bundle.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/provenance/dataset_sources.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/provenance/trace.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/results/__init__.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/results/schema.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/results/trace_tro.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/results/tracking.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/tax_benefit_models/common/__init__.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/tax_benefit_models/common/extra_variables.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/tax_benefit_models/common/household.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/tax_benefit_models/common/model_version.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/tax_benefit_models/common/reform.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/tax_benefit_models/common/result.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/tax_benefit_models/uk/__init__.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/tax_benefit_models/uk/analysis.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/tax_benefit_models/uk/datasets.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/tax_benefit_models/uk/household.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/tax_benefit_models/uk/model.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/tax_benefit_models/us/__init__.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/tax_benefit_models/us/analysis.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/tax_benefit_models/us/datasets.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/tax_benefit_models/us/household.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/tax_benefit_models/us/model.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/utils/__init__.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/utils/data/__init__.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/utils/data/caching_google_storage_client.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/utils/data/version_aware_storage_client.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/utils/dates.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/utils/design.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/utils/entity_utils.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/utils/errors.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/utils/google_cloud_bucket.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/utils/household_validation.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/utils/parameter_labels.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/utils/parametric_reforms.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine/utils/plotting.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine.egg-info/dependency_links.txt +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine.egg-info/entry_points.txt +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/src/policyengine.egg-info/top_level.txt +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/__init__.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/conftest.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/fixtures/__init__.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/fixtures/filtering_fixtures.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/fixtures/household_calculator_snapshots/uk_couple_two_kids.json +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/fixtures/household_calculator_snapshots/uk_model_surface.json +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/fixtures/household_calculator_snapshots/uk_single_adult_employment_income.json +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/fixtures/household_calculator_snapshots/uk_single_adult_no_income.json +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/fixtures/household_calculator_snapshots/uk_single_parent_one_child.json +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/fixtures/parameter_labels_fixtures.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/fixtures/parametric_reforms_fixtures.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/fixtures/poverty_by_demographics_fixtures.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/fixtures/region_fixtures.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/fixtures/us_reform_fixtures.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/fixtures/variable_label_fixtures.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_aggregate.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_bump_version.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_bundle_refresh.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_cache.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_change_aggregate.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_cliff_impact.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_cliff_impact_analysis.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_congressional_district_impact.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_constituency_impact.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_dataset_sources.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_derivations.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_dict_reforms_on_simulation.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_entity_mapping.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_entity_utils.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_errors.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_extra_variables.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_filtering.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_graph/__init__.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_graph/conftest.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_graph/test_extractor.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_household_calculator_snapshot.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_household_impact.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_inequality.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_intra_decile_impact.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_labor_supply_response.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_local_authority_impact.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_manifest_version_mismatch.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_pandas3_compatibility.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_parameter_labels.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_parametric_reforms.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_poverty.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_poverty_by_demographics.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_poverty_run.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_preservation_mirror.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_region.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_results.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_scoping_strategy.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_small_follow_ups.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_uk_analysis.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_uk_geography_assets.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_uk_program_statistics.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_uk_regions.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_us_long_term_datasets.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_us_microsim_structural_reforms.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_us_program_statistics.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_us_reform_application.py +0 -0
- {policyengine-4.16.0 → policyengine-4.16.2}/tests/test_variable_labels.py +0 -0
|
@@ -10,5 +10,5 @@ from branches in `PolicyEngine/policyengine.py`; never create fork PRs.
|
|
|
10
10
|
For repository-wide API, testing, documentation, release, or package-boundary
|
|
11
11
|
changes, read `docs/engineering/skills/repository-guidance.md`.
|
|
12
12
|
|
|
13
|
-
For
|
|
14
|
-
`docs/engineering/skills/
|
|
13
|
+
For data-release certification or reviews, read
|
|
14
|
+
`docs/engineering/skills/data-certification.md`.
|
|
@@ -15,8 +15,8 @@ Before making or reviewing repository-wide API, testing, documentation, release,
|
|
|
15
15
|
or package-boundary changes, read
|
|
16
16
|
`docs/engineering/skills/repository-guidance.md`.
|
|
17
17
|
|
|
18
|
-
Before
|
|
19
|
-
`docs/engineering/skills/
|
|
18
|
+
Before certifying or reviewing a country data release, read
|
|
19
|
+
`docs/engineering/skills/data-certification.md`.
|
|
20
20
|
|
|
21
21
|
## Repository Boundaries
|
|
22
22
|
|
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
## [4.16.2] - 2026-06-12
|
|
2
|
+
|
|
3
|
+
### Changed
|
|
4
|
+
|
|
5
|
+
- Certify country data releases directly from their Hugging Face release manifests (`scripts/certify_data_release.py`), replacing the policyengine-bundles import flow. The vendored US manifest is regenerated through the new path (byte-identical apart from the certification source strings), and the vendored bundle archive copies are no longer shipped.
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
## [4.16.1] - 2026-06-12
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- Import PolicyEngine bundle 4.16.0: the `populace-data` release manifest (`populace_us_2024` built from primary sources) replaces `policyengine-us-data` as the certified US data release, with policyengine-us 1.723.0 and policyengine-core 3.27.1. Dataset references and region datasets now honor per-artifact repo pins so inherited datasets keep resolving from their original repos.
|
|
13
|
+
|
|
14
|
+
|
|
1
15
|
## [4.16.0] - 2026-06-11
|
|
2
16
|
|
|
3
17
|
### Added
|
|
@@ -20,5 +20,5 @@ Before making or reviewing repository-wide API, testing, documentation, release,
|
|
|
20
20
|
or package-boundary changes, read
|
|
21
21
|
`docs/engineering/skills/repository-guidance.md`.
|
|
22
22
|
|
|
23
|
-
Before
|
|
24
|
-
`docs/engineering/skills/
|
|
23
|
+
Before certifying or reviewing a country data release, read
|
|
24
|
+
`docs/engineering/skills/data-certification.md`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: policyengine
|
|
3
|
-
Version: 4.16.
|
|
3
|
+
Version: 4.16.2
|
|
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
|
|
@@ -692,8 +692,8 @@ Provides-Extra: uk
|
|
|
692
692
|
Requires-Dist: policyengine_core>=3.26.1; extra == "uk"
|
|
693
693
|
Requires-Dist: policyengine-uk==2.88.20; extra == "uk"
|
|
694
694
|
Provides-Extra: us
|
|
695
|
-
Requires-Dist: policyengine_core
|
|
696
|
-
Requires-Dist: policyengine-us==1.
|
|
695
|
+
Requires-Dist: policyengine_core>=3.27.1; extra == "us"
|
|
696
|
+
Requires-Dist: policyengine-us==1.723.0; extra == "us"
|
|
697
697
|
Provides-Extra: dev
|
|
698
698
|
Requires-Dist: pytest; extra == "dev"
|
|
699
699
|
Requires-Dist: furo; extra == "dev"
|
|
@@ -705,9 +705,9 @@ Requires-Dist: build; extra == "dev"
|
|
|
705
705
|
Requires-Dist: plotly>=5.0.0; extra == "dev"
|
|
706
706
|
Requires-Dist: pytest-asyncio>=0.26.0; extra == "dev"
|
|
707
707
|
Requires-Dist: ruff>=0.9.0; extra == "dev"
|
|
708
|
-
Requires-Dist: policyengine_core
|
|
708
|
+
Requires-Dist: policyengine_core>=3.27.1; extra == "dev"
|
|
709
709
|
Requires-Dist: policyengine-uk==2.88.20; extra == "dev"
|
|
710
|
-
Requires-Dist: policyengine-us==1.
|
|
710
|
+
Requires-Dist: policyengine-us==1.723.0; extra == "dev"
|
|
711
711
|
Requires-Dist: towncrier>=24.8.0; extra == "dev"
|
|
712
712
|
Requires-Dist: mypy>=1.11.0; extra == "dev"
|
|
713
713
|
Requires-Dist: pytest-cov>=5.0.0; extra == "dev"
|
|
@@ -13,5 +13,5 @@ Current skills:
|
|
|
13
13
|
changelog-fragment requirements, PR head verification, and title conventions.
|
|
14
14
|
- `repository-guidance.md`: policyengine.py structure, commands, package
|
|
15
15
|
boundaries, test expectations, and repo-specific anti-patterns.
|
|
16
|
-
- `
|
|
17
|
-
|
|
16
|
+
- `data-certification.md`: certifying country data releases from their
|
|
17
|
+
release manifests, validation semantics, expected files, and legacy paths.
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# Data certification
|
|
2
|
+
|
|
3
|
+
Use this skill when certifying a country data release for `policyengine.py`,
|
|
4
|
+
or reviewing a certification change.
|
|
5
|
+
|
|
6
|
+
## What certification is
|
|
7
|
+
|
|
8
|
+
A data release is published on Hugging Face with a release manifest: per-
|
|
9
|
+
artifact repo/revision/sha256 pins, build provenance, compatibility claims,
|
|
10
|
+
and region dataset templates. Certification asserts that *this*
|
|
11
|
+
`policyengine.py` release, with the model package pinned in
|
|
12
|
+
`pyproject.toml`, serves that data release — and the assertion is only made
|
|
13
|
+
good by the test suite passing on the exact pinned pair.
|
|
14
|
+
|
|
15
|
+
There is no intermediate bundle repo. The vendored country manifest at
|
|
16
|
+
`src/policyengine/data/release_manifests/{country}.json` is derived directly
|
|
17
|
+
from the data release manifest.
|
|
18
|
+
|
|
19
|
+
## Certifying a release
|
|
20
|
+
|
|
21
|
+
Open the work on a fresh branch from current `main` (use a clean worktree if
|
|
22
|
+
the checkout is dirty).
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
python scripts/certify_data_release.py --country us \
|
|
26
|
+
--manifest-uri "hf://dataset/policyengine/populace-us@<tag>/releases/<tag>/release_manifest.json"
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
The script fetches and validates the manifest (every artifact must carry a
|
|
30
|
+
revision pin; the certified dataset must be reachable), writes the vendored
|
|
31
|
+
country manifest, exact-pins the country model package and raises the core
|
|
32
|
+
floor in `pyproject.toml`, regenerates the TRACE TRO sidecar, and writes a
|
|
33
|
+
Towncrier changelog fragment.
|
|
34
|
+
|
|
35
|
+
Private data (UK) requires `HUGGING_FACE_TOKEN` or `HF_TOKEN`.
|
|
36
|
+
|
|
37
|
+
After running:
|
|
38
|
+
|
|
39
|
+
- `uv lock` if pins moved, then `uv sync --all-extras`,
|
|
40
|
+
- run the full test suite — snapshot drift from a model bump is refreshed
|
|
41
|
+
with `PE_UPDATE_SNAPSHOTS=1 pytest tests/test_household_calculator_snapshot.py`,
|
|
42
|
+
- commit the manifest, TRO, `pyproject.toml`, `uv.lock`, and fragment
|
|
43
|
+
together.
|
|
44
|
+
|
|
45
|
+
A certification PR should normally change only:
|
|
46
|
+
|
|
47
|
+
- `src/policyengine/data/release_manifests/{country}.json` (+ `.trace.tro.jsonld`)
|
|
48
|
+
- `pyproject.toml` / `uv.lock`
|
|
49
|
+
- one Towncrier fragment under `changelog.d/`
|
|
50
|
+
- test constants/snapshots that pin certified versions
|
|
51
|
+
|
|
52
|
+
## Validation semantics
|
|
53
|
+
|
|
54
|
+
Hard failures (certification refuses): missing national default dataset,
|
|
55
|
+
default dataset absent from artifacts, any artifact without a revision pin,
|
|
56
|
+
unreachable certified dataset, unknown country.
|
|
57
|
+
|
|
58
|
+
Certification gate: the model version must either exactly match the
|
|
59
|
+
build-time model (`compatibility_basis: built_with_model_package`) or be
|
|
60
|
+
covered by the publisher's `compatible_model_packages` claim
|
|
61
|
+
(`compatibility_basis: compatible_model_packages`, recorded with a
|
|
62
|
+
warning — the publisher's claim is made good only by this repo's test
|
|
63
|
+
suite passing on the pinned pair). Neither basis means certification is
|
|
64
|
+
refused: a new data build or a published compatibility claim is required.
|
|
65
|
+
|
|
66
|
+
Warnings (recorded, not blocking): artifacts without sha256, and the
|
|
67
|
+
publisher-claim basis above.
|
|
68
|
+
|
|
69
|
+
## Legacy paths
|
|
70
|
+
|
|
71
|
+
Countries whose current data release predates release manifests (the UK
|
|
72
|
+
enhanced FRS) are refreshed with the legacy single-country tool until their
|
|
73
|
+
next release certifies through a manifest:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
python scripts/refresh_release_bundle.py --country uk --model-version 2.89.0
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Do not hand-edit vendored country manifests for normal updates.
|
|
80
|
+
|
|
81
|
+
The retired `policyengine-bundles` flow (candidates → generated bundle →
|
|
82
|
+
archive import) is preserved read-only in that repo's history; bundles
|
|
83
|
+
4.15.x–4.16.x remain the historical record of earlier certifications.
|
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# Release Bundles
|
|
2
2
|
|
|
3
|
+
> **Current process.** Certification now runs inside this repository:
|
|
4
|
+
> `scripts/certify_data_release.py` derives the vendored country manifest
|
|
5
|
+
> directly from a country's data release manifest (see the
|
|
6
|
+
> [data certification](engineering/skills/data-certification.md)
|
|
7
|
+
> engineering skill). The intermediate `policyengine-bundles` repository
|
|
8
|
+
> flow is retired; its published bundles remain the historical record of
|
|
9
|
+
> earlier certifications. The architecture below — country `*-data`
|
|
10
|
+
> repos publish immutable manifests, `policyengine.py` certifies — is
|
|
11
|
+
> unchanged.
|
|
12
|
+
|
|
3
13
|
This document defines the intended reproducibility boundary for `policyengine.py`.
|
|
4
14
|
|
|
5
15
|
The key design decision is:
|
|
@@ -59,18 +69,19 @@ It does not define the final supported runtime bundle exposed to users.
|
|
|
59
69
|
|
|
60
70
|
It does not rebuild microdata artifacts.
|
|
61
71
|
|
|
62
|
-
|
|
63
|
-
`
|
|
64
|
-
|
|
65
|
-
the legacy country release manifests that runtime code still reads. The import
|
|
72
|
+
Certification runs in this repository: the vendored country release
|
|
73
|
+
manifest under `src/policyengine/data/release_manifests/` is derived
|
|
74
|
+
directly from the country's published data release manifest. The
|
|
66
75
|
entrypoint is:
|
|
67
76
|
|
|
68
77
|
```bash
|
|
69
|
-
python scripts/
|
|
78
|
+
python scripts/certify_data_release.py --country us \
|
|
79
|
+
--manifest-uri "hf://dataset/policyengine/populace-us@<tag>/releases/<tag>/release_manifest.json"
|
|
70
80
|
```
|
|
71
81
|
|
|
72
|
-
|
|
73
|
-
|
|
82
|
+
Earlier releases (policyengine 4.15.x–4.16.x) were certified through the
|
|
83
|
+
`PolicyEngine/policyengine-bundles` archive flow; those bundles remain the
|
|
84
|
+
historical record of their certifications.
|
|
74
85
|
|
|
75
86
|
## Two manifest layers
|
|
76
87
|
|
|
@@ -396,11 +407,16 @@ Things that should usually not affect the fingerprint:
|
|
|
396
407
|
`policyengine.py` may certify a staged data artifact for a model version only if one of the following is true:
|
|
397
408
|
|
|
398
409
|
1. the model version exactly matches the `built_with_model_package.version`
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
410
|
+
(`compatibility_basis: built_with_model_package`)
|
|
411
|
+
2. the data publisher's `compatible_model_packages` covers the model version
|
|
412
|
+
(`compatibility_basis: compatible_model_packages` — the publisher's claim,
|
|
413
|
+
recorded with a warning and made good by the test suite passing on the
|
|
414
|
+
pinned pair)
|
|
415
|
+
|
|
416
|
+
If neither is true, certification fails hard and a new data build or a
|
|
417
|
+
published compatibility claim is required. A `data_build_fingerprint`
|
|
418
|
+
basis (same fingerprint as the build-time model) is a planned third
|
|
419
|
+
basis; it requires fingerprint metadata from the installed model package.
|
|
404
420
|
|
|
405
421
|
## Artifact states
|
|
406
422
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "policyengine"
|
|
7
|
-
version = "4.16.
|
|
7
|
+
version = "4.16.2"
|
|
8
8
|
description = "A package to conduct policy analysis using PolicyEngine tax-benefit models."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
authors = [
|
|
@@ -48,8 +48,8 @@ uk = [
|
|
|
48
48
|
"policyengine-uk==2.88.20",
|
|
49
49
|
]
|
|
50
50
|
us = [
|
|
51
|
-
"policyengine_core
|
|
52
|
-
"policyengine-us==1.
|
|
51
|
+
"policyengine_core>=3.27.1",
|
|
52
|
+
"policyengine-us==1.723.0",
|
|
53
53
|
]
|
|
54
54
|
dev = [
|
|
55
55
|
"pytest",
|
|
@@ -62,9 +62,9 @@ dev = [
|
|
|
62
62
|
"plotly>=5.0.0",
|
|
63
63
|
"pytest-asyncio>=0.26.0",
|
|
64
64
|
"ruff>=0.9.0",
|
|
65
|
-
"policyengine_core
|
|
65
|
+
"policyengine_core>=3.27.1",
|
|
66
66
|
"policyengine-uk==2.88.20",
|
|
67
|
-
"policyengine-us==1.
|
|
67
|
+
"policyengine-us==1.723.0",
|
|
68
68
|
"towncrier>=24.8.0",
|
|
69
69
|
"mypy>=1.11.0",
|
|
70
70
|
"pytest-cov>=5.0.0",
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"""Certify a country data release from its HF release manifest.
|
|
2
|
+
|
|
3
|
+
Replaces the policyengine-bundles import flow: fetches the data release
|
|
4
|
+
manifest, validates it, writes the vendored country manifest, exact-pins
|
|
5
|
+
the country model package in ``pyproject.toml``, regenerates the TRACE
|
|
6
|
+
TRO sidecar, and writes a Towncrier changelog fragment.
|
|
7
|
+
|
|
8
|
+
Usage::
|
|
9
|
+
|
|
10
|
+
python scripts/certify_data_release.py --country us \\
|
|
11
|
+
--manifest-uri "hf://dataset/policyengine/populace-us@<tag>/releases/<tag>/release_manifest.json"
|
|
12
|
+
|
|
13
|
+
Private data (UK) requires ``HUGGING_FACE_TOKEN`` or ``HF_TOKEN`` in the
|
|
14
|
+
environment. After running: commit the changed manifest / TRO /
|
|
15
|
+
pyproject.toml / changelog fragment, re-lock if pins moved, and run the
|
|
16
|
+
test suite — certification is only asserted once the suite passes on the
|
|
17
|
+
exact pinned pair.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
from __future__ import annotations
|
|
21
|
+
|
|
22
|
+
import argparse
|
|
23
|
+
import os
|
|
24
|
+
import sys
|
|
25
|
+
from pathlib import Path
|
|
26
|
+
|
|
27
|
+
REPO_ROOT = Path(__file__).resolve().parents[1]
|
|
28
|
+
sys.path.insert(0, str(REPO_ROOT / "src"))
|
|
29
|
+
|
|
30
|
+
from policyengine.provenance.certification import ( # noqa: E402
|
|
31
|
+
certify_data_release,
|
|
32
|
+
)
|
|
33
|
+
from policyengine.provenance.pyproject_pins import ( # noqa: E402
|
|
34
|
+
update_country_pins,
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def main(argv=None) -> int:
|
|
39
|
+
parser = argparse.ArgumentParser(description="Certify a country data release.")
|
|
40
|
+
parser.add_argument("--country", required=True, choices=["us", "uk"])
|
|
41
|
+
parser.add_argument(
|
|
42
|
+
"--manifest-uri",
|
|
43
|
+
required=True,
|
|
44
|
+
help="hf://dataset/<repo_id>@<revision>/<path-to-release_manifest.json>",
|
|
45
|
+
)
|
|
46
|
+
parser.add_argument(
|
|
47
|
+
"--model-version",
|
|
48
|
+
default=None,
|
|
49
|
+
help="Model package version to certify for (default: installed).",
|
|
50
|
+
)
|
|
51
|
+
parser.add_argument("--no-pyproject", action="store_true")
|
|
52
|
+
parser.add_argument("--no-tro", action="store_true")
|
|
53
|
+
parser.add_argument("--no-changelog", action="store_true")
|
|
54
|
+
parser.add_argument(
|
|
55
|
+
"--skip-artifact-check",
|
|
56
|
+
action="store_true",
|
|
57
|
+
help="Skip the reachability HEAD on the certified dataset.",
|
|
58
|
+
)
|
|
59
|
+
args = parser.parse_args(argv)
|
|
60
|
+
|
|
61
|
+
token = os.environ.get("HUGGING_FACE_TOKEN") or os.environ.get("HF_TOKEN")
|
|
62
|
+
|
|
63
|
+
result = certify_data_release(
|
|
64
|
+
country=args.country,
|
|
65
|
+
manifest_uri=args.manifest_uri,
|
|
66
|
+
model_version=args.model_version,
|
|
67
|
+
token=token,
|
|
68
|
+
check_artifacts=not args.skip_artifact_check,
|
|
69
|
+
)
|
|
70
|
+
print(result.summary())
|
|
71
|
+
|
|
72
|
+
if not args.no_pyproject:
|
|
73
|
+
from importlib.metadata import version as installed_version
|
|
74
|
+
|
|
75
|
+
update_country_pins(
|
|
76
|
+
pyproject_path=REPO_ROOT / "pyproject.toml",
|
|
77
|
+
country=args.country,
|
|
78
|
+
model_package=result.model_package,
|
|
79
|
+
model_version=result.model_version,
|
|
80
|
+
core_version=installed_version("policyengine_core"),
|
|
81
|
+
)
|
|
82
|
+
print(f"pinned {result.model_package}=={result.model_version}")
|
|
83
|
+
|
|
84
|
+
if not args.no_tro:
|
|
85
|
+
from policyengine.provenance.bundle import regenerate_trace_tro
|
|
86
|
+
|
|
87
|
+
tro_path = regenerate_trace_tro(
|
|
88
|
+
args.country, result.country_manifest_path.parent
|
|
89
|
+
)
|
|
90
|
+
print(f"trace tro: {tro_path}")
|
|
91
|
+
|
|
92
|
+
if not args.no_changelog:
|
|
93
|
+
changelog_dir = REPO_ROOT / "changelog.d"
|
|
94
|
+
changelog_dir.mkdir(exist_ok=True)
|
|
95
|
+
fragment = (
|
|
96
|
+
changelog_dir
|
|
97
|
+
/ f"certify-{args.country}-{result.build_id or 'data'}.changed.md"
|
|
98
|
+
)
|
|
99
|
+
fragment.write_text(
|
|
100
|
+
f"Certify the {args.country.upper()} data release "
|
|
101
|
+
f"`{result.build_id}` ({result.default_dataset}, "
|
|
102
|
+
f"{result.model_package} {result.model_version}) directly from "
|
|
103
|
+
"its data release manifest.\n"
|
|
104
|
+
)
|
|
105
|
+
print(f"changelog: {fragment}")
|
|
106
|
+
|
|
107
|
+
return 0
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
if __name__ == "__main__":
|
|
111
|
+
raise SystemExit(main())
|
|
@@ -18,18 +18,18 @@
|
|
|
18
18
|
"schema:url": "https://policyengine.org"
|
|
19
19
|
},
|
|
20
20
|
"schema:dateCreated": "2026-05-20T20:16:50.641086Z",
|
|
21
|
-
"schema:description": "TRACE TRO for certified runtime bundle uk-4.16.
|
|
21
|
+
"schema:description": "TRACE TRO for certified runtime bundle uk-4.16.2 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": "4.16.
|
|
26
|
+
"schema:softwareVersion": "4.16.2"
|
|
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-4.16.
|
|
32
|
+
"rdfs:comment": "Certified arrangement for bundle uk-4.16.2.",
|
|
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": "
|
|
78
|
+
"trov:sha256": "5f4629bb55d361c9a1a9f2a46950570acccfefd10ec5fd04865b27d9017d10ea"
|
|
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": "
|
|
105
|
+
"trov:sha256": "cfdc777af8b1dd4666c26bad8ceb7a47e0fe6cec0f89c569601e90055760858e"
|
|
106
106
|
}
|
|
107
107
|
},
|
|
108
108
|
"trov:hasPerformance": {
|
|
@@ -112,8 +112,8 @@
|
|
|
112
112
|
"pe:certifiedBy": "policyengine.py bundled manifest",
|
|
113
113
|
"pe:certifiedForModelVersion": "2.88.20",
|
|
114
114
|
"pe:ciGitRef": "refs/heads/main",
|
|
115
|
-
"pe:ciGitSha": "
|
|
116
|
-
"pe:ciRunUrl": "https://github.com/PolicyEngine/policyengine.py/actions/runs/
|
|
115
|
+
"pe:ciGitSha": "8b084c5cefdf02d38dd6f974fd846905c3167f39",
|
|
116
|
+
"pe:ciRunUrl": "https://github.com/PolicyEngine/policyengine.py/actions/runs/27407803462",
|
|
117
117
|
"pe:compatibilityBasis": "exact_build_model_version",
|
|
118
118
|
"pe:dataBuildFingerprint": "sha256:77f149725a36055fd89961855230401852b0712d301c6e26d6d16565c6b23809",
|
|
119
119
|
"pe:dataBuildId": "policyengine-uk-data-1.55.10",
|