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.
- {policyengine-4.18.2 → policyengine-4.18.3}/CHANGELOG.md +7 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/PKG-INFO +1 -1
- {policyengine-4.18.2 → policyengine-4.18.3}/docs/bundles.md +29 -2
- {policyengine-4.18.2 → policyengine-4.18.3}/docs/engineering/skills/data-certification.md +34 -1
- {policyengine-4.18.2 → policyengine-4.18.3}/docs/release-bundles.md +25 -1
- {policyengine-4.18.2 → policyengine-4.18.3}/pyproject.toml +1 -1
- {policyengine-4.18.2 → policyengine-4.18.3}/scripts/bundle.py +25 -1
- {policyengine-4.18.2 → policyengine-4.18.3}/scripts/certify_data_release.py +25 -1
- policyengine-4.18.3/src/policyengine/data/bundle/manifest.json +547 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/data/bundle/uk.trace.tro.jsonld +7 -7
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/data/bundle/us.trace.tro.jsonld +7 -7
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/provenance/certification.py +171 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine.egg-info/PKG-INFO +1 -1
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_certify_data_release.py +271 -1
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_us_regions.py +71 -6
- policyengine-4.18.2/src/policyengine/data/bundle/manifest.json +0 -232
- {policyengine-4.18.2 → policyengine-4.18.3}/.claude/policyengine-guide.md +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/.claude/quick-reference.md +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/.github/CONTRIBUTING.md +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/.github/bump_version.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/.github/changelog_template.md +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/.github/check-changelog.sh +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/.github/copilot-instructions.md +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/.github/fetch_version.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/.github/get-changelog-diff.sh +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/.github/has-functional-changes.sh +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/.github/is-version-number-acceptable.sh +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/.github/publish-git-tag.sh +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/.github/workflows/draft-pdf.yml +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/.github/workflows/pr_code_changes.yaml +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/.github/workflows/pr_docs_changes.yaml +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/.github/workflows/push.yaml +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/.gitignore +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/.python-version +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/AGENTS.md +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/CITATION.cff +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/CLAUDE.md +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/CODE_OF_CONDUCT.md +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/LICENSE +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/Makefile +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/README.md +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/architecture.png +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/architecture.svg +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/changelog.d/.gitkeep +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/docs/.gitignore +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/docs/_generator/README.md +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/docs/_generator/build_reference.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/docs/_quarto.yml +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/docs/countries.md +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/docs/data-publishing-design.md +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/docs/dev.md +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/docs/engineering/skills/README.md +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/docs/engineering/skills/github-prs.md +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/docs/engineering/skills/repository-guidance.md +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/docs/examples.md +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/docs/getting-started.md +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/docs/households.md +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/docs/impact-analysis.md +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/docs/index.md +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/docs/methodology/index.md +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/docs/methodology/model-architecture.md +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/docs/methodology/us-health-costs.md +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/docs/microsim.md +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/docs/outputs.md +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/docs/programs/index.md +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/docs/programs/us-chip.md +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/docs/reference/index.md +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/docs/reforms.md +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/docs/regions.md +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/docs/run-records.md +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/docs/trace-case-study.md +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/docs/visualisation.md +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/examples/employment_income_variation_uk.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/examples/employment_income_variation_us.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/examples/household_impact_example.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/examples/income_bands_uk.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/examples/income_distribution_us.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/examples/paper_repro_uk.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/examples/policy_change_uk.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/examples/speedtest_us_simulation.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/examples/us_budgetary_impact.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/paper-preview.html +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/paper.bib +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/paper.md +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/scripts/check_data_staleness.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/scripts/export_bundle_release_assets.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/scripts/generate_bundle_artifacts.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/scripts/generate_trace_tros.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/scripts/prepare_package_bundle_update.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/setup.cfg +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/__init__.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/bundle.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/cli.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/core/__init__.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/core/cache.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/core/dataset.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/core/dynamic.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/core/output.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/core/parameter.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/core/parameter_node.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/core/parameter_value.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/core/policy.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/core/region.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/core/run_record.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/core/scoping_strategy.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/core/simulation.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/core/tax_benefit_model.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/core/tax_benefit_model_version.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/core/variable.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/countries/__init__.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/countries/uk/__init__.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/countries/uk/regions.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/countries/us/__init__.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/countries/us/data/__init__.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/countries/us/data/districts.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/countries/us/data/places.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/countries/us/data/states.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/countries/us/regions.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/data/__init__.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/data/schemas/trace_tro.schema.json +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/data/uk_geography_assets.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/derivations/__init__.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/derivations/narrate.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/derivations/trace.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/graph/__init__.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/graph/extractor.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/graph/graph.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/outputs/__init__.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/outputs/aggregate.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/outputs/change_aggregate.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/outputs/cliff_impact.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/outputs/congressional_district_impact.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/outputs/constituency_impact.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/outputs/decile_impact.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/outputs/extra_variables.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/outputs/inequality.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/outputs/intra_decile_impact.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/outputs/labor_supply_response.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/outputs/local_authority_impact.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/outputs/poverty.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/outputs/program_statistics.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/outputs/uk_geography_assets.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/outputs/uk_geography_impact.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/provenance/__init__.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/provenance/dataset_sources.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/provenance/manifest.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/provenance/pyproject_pins.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/provenance/trace.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/provenance/verify.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/results/__init__.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/results/schema.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/results/trace_tro.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/results/tracking.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/tax_benefit_models/common/__init__.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/tax_benefit_models/common/extra_variables.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/tax_benefit_models/common/household.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/tax_benefit_models/common/model_version.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/tax_benefit_models/common/reform.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/tax_benefit_models/common/result.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/tax_benefit_models/uk/__init__.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/tax_benefit_models/uk/analysis.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/tax_benefit_models/uk/datasets.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/tax_benefit_models/uk/household.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/tax_benefit_models/uk/model.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/tax_benefit_models/us/__init__.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/tax_benefit_models/us/analysis.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/tax_benefit_models/us/datasets.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/tax_benefit_models/us/household.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/tax_benefit_models/us/model.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/utils/__init__.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/utils/data/__init__.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/utils/data/caching_google_storage_client.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/utils/data/version_aware_storage_client.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/utils/dates.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/utils/design.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/utils/entity_utils.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/utils/errors.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/utils/google_cloud_bucket.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/utils/household_validation.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/utils/parameter_labels.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/utils/parametric_reforms.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine/utils/plotting.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine.egg-info/SOURCES.txt +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine.egg-info/dependency_links.txt +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine.egg-info/entry_points.txt +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine.egg-info/requires.txt +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/src/policyengine.egg-info/top_level.txt +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/__init__.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/conftest.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/fixtures/__init__.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/fixtures/filtering_fixtures.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/fixtures/household_calculator_snapshots/uk_couple_two_kids.json +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/fixtures/household_calculator_snapshots/uk_model_surface.json +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/fixtures/household_calculator_snapshots/uk_single_adult_employment_income.json +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/fixtures/household_calculator_snapshots/uk_single_adult_no_income.json +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/fixtures/household_calculator_snapshots/uk_single_parent_one_child.json +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/fixtures/household_calculator_snapshots/us_married_two_kids_high_income.json +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/fixtures/household_calculator_snapshots/us_model_surface.json +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/fixtures/household_calculator_snapshots/us_single_adult_employment_income.json +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/fixtures/household_calculator_snapshots/us_single_adult_no_income.json +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/fixtures/household_calculator_snapshots/us_single_parent_one_child.json +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/fixtures/parameter_labels_fixtures.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/fixtures/parametric_reforms_fixtures.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/fixtures/poverty_by_demographics_fixtures.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/fixtures/region_fixtures.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/fixtures/us_reform_fixtures.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/fixtures/variable_label_fixtures.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_aggregate.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_bump_version.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_bundle.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_bundle_metadata.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_cache.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_change_aggregate.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_cliff_impact.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_cliff_impact_analysis.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_congressional_district_impact.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_constituency_impact.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_dataset_sources.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_derivations.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_dict_reforms_on_simulation.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_entity_mapping.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_entity_utils.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_errors.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_extra_variables.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_filtering.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_graph/__init__.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_graph/conftest.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_graph/test_extractor.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_household_calculator_snapshot.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_household_impact.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_inequality.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_intra_decile_impact.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_labor_supply_response.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_local_authority_impact.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_manifest_version_mismatch.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_models.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_pandas3_compatibility.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_parameter_labels.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_parametric_reforms.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_poverty.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_poverty_by_demographics.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_poverty_run.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_preservation_mirror.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_pyproject_pins.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_region.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_release_manifests.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_results.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_run_record.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_scoping_strategy.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_small_follow_ups.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_trace_tro.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_trace_tro_verify.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_uk_analysis.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_uk_geography_assets.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_uk_program_statistics.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_uk_regions.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_us_long_term_datasets.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_us_microsim_structural_reforms.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_us_program_statistics.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_us_reform_application.py +0 -0
- {policyengine-4.18.2 → policyengine-4.18.3}/tests/test_variable_labels.py +0 -0
- {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
|
|
@@ -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
|
|
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`),
|
|
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.
|
|
@@ -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=
|
|
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=
|
|
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
|
|