policyengine 6.7.0__tar.gz → 6.7.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-6.7.0 → policyengine-6.7.2}/CHANGELOG.md +14 -0
- {policyengine-6.7.0/src/policyengine.egg-info → policyengine-6.7.2}/PKG-INFO +1 -1
- {policyengine-6.7.0 → policyengine-6.7.2}/pyproject.toml +1 -1
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/data/bundle/manifest.json +10 -10
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/data/bundle/uk.trace.tro.jsonld +5 -5
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/data/bundle/us.trace.tro.jsonld +5 -5
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/tax_benefit_models/uk/budget_reform_contract.py +5 -2
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/tax_benefit_models/uk/budget_reform_population.py +124 -23
- {policyengine-6.7.0 → policyengine-6.7.2/src/policyengine.egg-info}/PKG-INFO +1 -1
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_uk_budget_reform_contract.py +646 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/uv.lock +1 -1
- {policyengine-6.7.0 → policyengine-6.7.2}/.claude/policyengine-guide.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/.claude/quick-reference.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/.github/CONTRIBUTING.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/.github/bump_version.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/.github/capture-version.sh +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/.github/changelog_template.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/.github/check-changelog.sh +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/.github/copilot-instructions.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/.github/dispatch-policyengine-release.sh +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/.github/fetch_version.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/.github/get-changelog-diff.sh +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/.github/has-functional-changes.sh +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/.github/is-version-number-acceptable.sh +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/.github/publish-git-tag.sh +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/.github/qualification-ledger.sh +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/.github/wait-for-pypi.sh +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/.github/workflows/certify-uk-release.yaml +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/.github/workflows/draft-pdf.yml +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/.github/workflows/pr_code_changes.yaml +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/.github/workflows/pr_docs_changes.yaml +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/.github/workflows/push.yaml +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/.gitignore +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/.python-version +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/AGENTS.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/CITATION.cff +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/CLAUDE.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/CODE_OF_CONDUCT.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/CONTRIBUTING.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/LICENSE +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/Makefile +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/README.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/architecture.png +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/architecture.svg +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/changelog.d/.gitkeep +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/docs/.gitignore +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/docs/_generator/README.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/docs/_generator/build_reference.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/docs/_quarto.yml +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/docs/bundles.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/docs/countries.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/docs/data-publishing-design.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/docs/decile-impact-spec.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/docs/dev.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/docs/disclosure.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/docs/engineering/runbooks/acs-local-wic-replacement.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/docs/engineering/runbooks/build-m-us-populace-certification.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/docs/engineering/runbooks/canonical-spm-development.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/docs/engineering/runbooks/uk-qualification.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/docs/engineering/runbooks/us-legacy-spm-sources.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/docs/engineering/skills/README.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/docs/engineering/skills/data-certification.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/docs/engineering/skills/github-prs.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/docs/engineering/skills/repository-guidance.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/docs/examples.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/docs/getting-started.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/docs/households.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/docs/impact-analysis.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/docs/index.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/docs/methodology/index.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/docs/methodology/model-architecture.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/docs/methodology/us-health-costs.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/docs/microsim.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/docs/outputs.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/docs/programs/index.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/docs/programs/us-chip.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/docs/receipts.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/docs/reference/index.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/docs/reforms.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/docs/regions.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/docs/release-bundles.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/docs/run-records.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/docs/trace-case-study.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/docs/visualisation.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/examples/belgium_axiom_pilot.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/examples/employment_income_variation_uk.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/examples/employment_income_variation_us.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/examples/household_impact_example.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/examples/income_bands_uk.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/examples/income_distribution_us.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/examples/paper_repro_uk.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/examples/policy_change_uk.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/examples/speedtest_us_simulation.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/examples/uk_geography_disclosure.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/examples/us_budgetary_impact.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/paper-preview.html +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/paper.bib +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/paper.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/scripts/bundle.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/scripts/certify_data_release.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/scripts/check_data_staleness.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/scripts/check_native_spm_loading.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/scripts/check_release_credentials.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/scripts/check_uk_candidate.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/scripts/export_bundle_release_assets.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/scripts/generate_bundle_artifacts.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/scripts/generate_receipt_schemas.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/scripts/generate_trace_tros.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/scripts/prepare_package_bundle_update.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/scripts/release_consumers.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/scripts/release_lock.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/scripts/spm_bundle.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/setup.cfg +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/__init__.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/bundle.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/cli.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/core/__init__.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/core/cache.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/core/dataset.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/core/dynamic.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/core/output.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/core/parameter.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/core/parameter_node.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/core/parameter_value.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/core/policy.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/core/region.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/core/run_record.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/core/scoping_strategy.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/core/simulation.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/core/spm.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/core/tax_benefit_model.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/core/tax_benefit_model_version.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/core/variable.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/countries/__init__.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/countries/uk/__init__.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/countries/uk/regions.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/countries/us/__init__.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/countries/us/data/__init__.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/countries/us/data/districts.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/countries/us/data/places.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/countries/us/data/states.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/countries/us/regions.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/data/__init__.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/data/qualification/replay_policy.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/data/qualification/uk.json +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/data/qualification/uk_budget_critical_inputs.json +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/data/qualification/uk_review_bounds.json +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/data/schemas/execution_receipt.v1.schema.json +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/data/schemas/trace_tro.schema.json +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/data/schemas/vendor/policyengine-scorecard/README.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/data/schemas/vendor/policyengine-scorecard/qualification_request.v1.json +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/data/schemas/vendor/policyengine-scorecard/replay_receipt.v1.json +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/data/schemas/vendor/policyengine-scorecard/replay_status.v1.json +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/data/uk_geography_assets.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/derivations/__init__.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/derivations/narrate.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/derivations/trace.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/disclosure/__init__.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/disclosure/__main__.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/disclosure/areas.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/disclosure/estimate.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/disclosure/noise.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/disclosure/release.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/disclosure/schema.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/disclosure/support.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/disclosure/validate.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/graph/__init__.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/graph/extractor.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/graph/graph.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/outputs/__init__.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/outputs/aggregate.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/outputs/change_aggregate.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/outputs/cliff_impact.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/outputs/congressional_district_impact.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/outputs/constituency_impact.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/outputs/decile_analysis.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/outputs/decile_grouping.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/outputs/decile_impact.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/outputs/extra_variables.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/outputs/inequality.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/outputs/intra_decile_impact.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/outputs/labor_supply_response.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/outputs/local_authority_impact.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/outputs/poverty.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/outputs/program_statistics.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/outputs/uk_geography_assets.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/outputs/uk_geography_disclosure.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/outputs/uk_geography_impact.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/provenance/__init__.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/provenance/bundle_validation.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/provenance/bytecode.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/provenance/canonical.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/provenance/certification.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/provenance/dataset_materialization.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/provenance/loaded.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/provenance/manifest.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/provenance/pyproject_pins.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/provenance/qualification.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/provenance/qualification_ledger.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/provenance/receipt.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/provenance/spm_configuration.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/provenance/trace.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/provenance/uk_candidate.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/provenance/uk_qualification.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/provenance/verify.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/provenance/wheels.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/provenance/zenodo.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/results/__init__.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/results/schema.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/results/trace_tro.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/results/tracking.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/tax_benefit_models/be/__init__.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/tax_benefit_models/be/datasets.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/tax_benefit_models/be/model.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/tax_benefit_models/common/__init__.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/tax_benefit_models/common/axes.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/tax_benefit_models/common/extra_variables.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/tax_benefit_models/common/household.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/tax_benefit_models/common/model_version.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/tax_benefit_models/common/reform.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/tax_benefit_models/common/result.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/tax_benefit_models/uk/__init__.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/tax_benefit_models/uk/analysis.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/tax_benefit_models/uk/capital_gains_responses.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/tax_benefit_models/uk/datasets.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/tax_benefit_models/uk/household.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/tax_benefit_models/uk/model.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/tax_benefit_models/us/__init__.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/tax_benefit_models/us/analysis.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/tax_benefit_models/us/datasets.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/tax_benefit_models/us/household.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/tax_benefit_models/us/legacy_inputs.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/tax_benefit_models/us/legacy_spm/__init__.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/tax_benefit_models/us/legacy_spm/declarations.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/tax_benefit_models/us/legacy_spm/independence.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/tax_benefit_models/us/legacy_spm/model_adapter.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/tax_benefit_models/us/legacy_spm/record.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/tax_benefit_models/us/legacy_spm/registry.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/tax_benefit_models/us/legacy_spm/runs.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/tax_benefit_models/us/legacy_spm/universe.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/tax_benefit_models/us/model.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/tax_benefit_models/us/spm.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/utils/__init__.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/utils/dates.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/utils/design.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/utils/entity_utils.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/utils/errors.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/utils/hashing.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/utils/household_validation.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/utils/parameter_labels.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/utils/parametric_reforms.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine/utils/plotting.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine.egg-info/SOURCES.txt +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine.egg-info/dependency_links.txt +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine.egg-info/entry_points.txt +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine.egg-info/requires.txt +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/src/policyengine.egg-info/top_level.txt +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/__init__.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/conftest.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/__init__.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/filtering_fixtures.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/household_calculator_snapshots/uk_couple_two_kids.json +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/household_calculator_snapshots/uk_model_surface.json +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/household_calculator_snapshots/uk_single_adult_employment_income.json +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/household_calculator_snapshots/uk_single_adult_no_income.json +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/household_calculator_snapshots/uk_single_parent_one_child.json +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/household_calculator_snapshots/us_married_two_kids_high_income.json +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/household_calculator_snapshots/us_model_surface.json +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/household_calculator_snapshots/us_single_adult_employment_income.json +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/household_calculator_snapshots/us_single_adult_no_income.json +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/household_calculator_snapshots/us_single_parent_one_child.json +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/parameter_labels_fixtures.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/parametric_reforms_fixtures.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/poverty_by_demographics_fixtures.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/region_fixtures.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/release_tros/README.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/release_tros/country-models.lock.toml +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/release_tros/manifest.json +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/release_tros/us-release_manifest.json +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/release_tros/us.trace.tro.jsonld +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/spm_development.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/uk_contract/README.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/uk_contract/evaluate_case_rows.json +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/uk_contract/full_released_uk_2.130.1.json +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/uk_contract/pinned_uk_2.125.1_defects.json +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/uk_contract/population_pass_max_examples_0.json +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/uk_metrics/README.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/uk_metrics/budget_metrics_report.json +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/uk_metrics/standard_reforms.yaml +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/uk_replay/DIGESTS.json +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/uk_replay/README.md +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/uk_replay/qualification_request_golden.jcs +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/uk_replay/qualification_request_golden.json +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/uk_replay/receipt_6.4.1_attempt1/REPLAY_RECEIPT.json +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/uk_replay/receipt_6.4.1_attempt1/REQUEST.json +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/uk_replay/receipt_6.5.0/REPLAY_RECEIPT.json +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/uk_replay/receipt_6.5.0/REQUEST.json +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/uk_replay/receipt_6.5.0/STATUS.json +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/uk_replay/replay_receipt_golden.jcs +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/uk_replay/replay_receipt_golden.json +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/us_reform_fixtures.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/fixtures/variable_label_fixtures.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/qualification_fixtures.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/receipt_modifiers.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/receipt_unbindable_modifiers.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_aggregate.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_be_axiom_pilot.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_budgetary_impact.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_bump_version.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_bundle.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_bundle_metadata.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_cache.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_canonical_json.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_certify_data_release.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_change_aggregate.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_cliff_impact.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_cliff_impact_analysis.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_congressional_district_impact.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_constituency_impact.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_dataset_materialization.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_dataset_persistence.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_dataset_runtime.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_dataset_source.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_decile_grouping.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_derivations.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_dict_reforms_on_simulation.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_disclosure_areas.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_disclosure_estimate.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_disclosure_noise.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_disclosure_release.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_disclosure_schema.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_disclosure_support.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_disclosure_validate.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_entity_mapping.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_entity_utils.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_entity_utils_characterization.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_errors.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_execution_receipt.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_extra_variables.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_filtering.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_generate_trace_tros.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_graph/__init__.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_graph/conftest.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_graph/test_extractor.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_household_calculator_snapshot.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_household_impact.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_inequality.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_intra_decile_impact.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_labor_supply_response.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_local_authority_impact.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_manifest_version_mismatch.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_models.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_pandas3_compatibility.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_parameter_labels.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_parameter_nodes.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_parameter_values.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_parametric_reforms.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_poverty.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_poverty_by_demographics.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_poverty_run.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_preservation_mirror.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_program_statistics.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_pyproject_pins.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_qualification_contracts.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_qualification_ledger_concurrency.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_qualification_ledger_script.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_qualified_pair_certification.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_region.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_region_group_strategy.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_release_credentials.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_release_lock.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_release_manifests.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_release_tro_generation.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_results.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_run_record.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_scoping_strategy.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_small_follow_ups.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_spm_bundle_bootstrap.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_spm_bundle_tooling.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_spm_decile.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_spm_development_authentication.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_spm_household.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_spm_model.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_spm_selection.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_spm_selection_schema.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_trace_tro.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_trace_tro_verify.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_uk_analysis.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_uk_candidate_gates.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_uk_candidate_metric_baselines.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_uk_cgt_response_records.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_uk_cgt_responses.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_uk_dated_reforms.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_uk_geography_assets.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_uk_geography_disclosure.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_uk_program_statistics.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_uk_qualification_pipeline.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_uk_qualification_workflow.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_uk_regions.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_uk_year_file_data_year.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_us_legacy_inputs.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_us_legacy_inputs_integration.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_us_legacy_spm.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_us_legacy_spm_integration.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_us_legacy_spm_model_contract.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_us_long_term_datasets.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_us_microsim_structural_reforms.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_us_native_alignment.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_us_native_hdf_weights.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_us_program_statistics.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_us_reform_application.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_us_regions.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_us_year_file_stamp.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_variable_labels.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_variable_metadata.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_wheels.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/test_zenodo_mirror.py +0 -0
- {policyengine-6.7.0 → policyengine-6.7.2}/tests/uk_contract_row_scenarios.py +0 -0
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
## [6.7.2] - 2026-10-17
|
|
2
|
+
|
|
3
|
+
### Fixed
|
|
4
|
+
|
|
5
|
+
- The UK Budget reform contract's household route imports the UK model module directly, so it runs in the qualification gate, whose scripts skip the country imports that set `policyengine.uk`; every household-route row there had errored.
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
## [6.7.1] - 2026-10-17
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- The UK Budget reform contract's population rows no longer report a count of survey records from 1 to 9 (it reads "fewer than 10"), or a total over fewer than 10 changed records, and they state each condition they test as a flat true/false finding in `detail`.
|
|
13
|
+
|
|
14
|
+
|
|
1
15
|
## [6.7.0] - 2026-10-16
|
|
2
16
|
|
|
3
17
|
### Added
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
|
-
"bundle_version": "6.7.
|
|
2
|
+
"bundle_version": "6.7.2",
|
|
3
3
|
"citation": {
|
|
4
4
|
"publisher": "PolicyEngine",
|
|
5
|
-
"title": "PolicyEngine bundle 6.7.
|
|
5
|
+
"title": "PolicyEngine bundle 6.7.2",
|
|
6
6
|
"type": "software-bundle",
|
|
7
|
-
"version": "6.7.
|
|
7
|
+
"version": "6.7.2"
|
|
8
8
|
},
|
|
9
9
|
"countries": {
|
|
10
10
|
"uk": {
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"data_releases": {
|
|
18
18
|
"uk": {
|
|
19
19
|
"build_id": "policyengine-uk-data-1.58.1",
|
|
20
|
-
"bundle_id": "uk-6.7.
|
|
20
|
+
"bundle_id": "uk-6.7.2",
|
|
21
21
|
"certification": {
|
|
22
22
|
"built_with_model_git_sha": "daad71cd26c107f1b784ff600d1464ba59c70e4a",
|
|
23
23
|
"built_with_model_version": "2.122.2",
|
|
@@ -99,7 +99,7 @@
|
|
|
99
99
|
"version": "2.130.1",
|
|
100
100
|
"wheel_url": "https://files.pythonhosted.org/packages/1a/21/88e8addba0eabd9a7d3a29fa5293e141feb405baf0432209387f9a1f467a/policyengine_uk-2.130.1-py3-none-any.whl"
|
|
101
101
|
},
|
|
102
|
-
"policyengine_version": "6.7.
|
|
102
|
+
"policyengine_version": "6.7.2",
|
|
103
103
|
"region_datasets": {
|
|
104
104
|
"national": {
|
|
105
105
|
"path_template": "enhanced_frs_2024_25.h5"
|
|
@@ -112,7 +112,7 @@
|
|
|
112
112
|
},
|
|
113
113
|
"us": {
|
|
114
114
|
"build_id": "populace-us-2024-spm-20260915",
|
|
115
|
-
"bundle_id": "us-6.7.
|
|
115
|
+
"bundle_id": "us-6.7.2",
|
|
116
116
|
"certification": {
|
|
117
117
|
"built_with_model_version": "2.2.1",
|
|
118
118
|
"certified_by": "policyengine.py bundle certification",
|
|
@@ -217,7 +217,7 @@
|
|
|
217
217
|
"version": "2.2.1",
|
|
218
218
|
"wheel_url": "https://files.pythonhosted.org/packages/5e/09/86ac3968d2a18e28fce3ba1186fc21728e9f299b96a806d6f204f1e0aaed/policyengine_us-2.2.1-py3-none-any.whl"
|
|
219
219
|
},
|
|
220
|
-
"policyengine_version": "6.7.
|
|
220
|
+
"policyengine_version": "6.7.2",
|
|
221
221
|
"region_datasets": {
|
|
222
222
|
"congressional_district": {
|
|
223
223
|
"path_template": "populace_us_2024.h5"
|
|
@@ -295,10 +295,10 @@
|
|
|
295
295
|
"packages": {
|
|
296
296
|
"policyengine": {
|
|
297
297
|
"import_name": "policyengine",
|
|
298
|
-
"install_requirement": "policyengine==6.7.
|
|
298
|
+
"install_requirement": "policyengine==6.7.2",
|
|
299
299
|
"name": "policyengine",
|
|
300
300
|
"role": "bundle_carrier",
|
|
301
|
-
"version": "6.7.
|
|
301
|
+
"version": "6.7.2"
|
|
302
302
|
},
|
|
303
303
|
"policyengine-core": {
|
|
304
304
|
"import_name": "policyengine_core",
|
|
@@ -334,6 +334,6 @@
|
|
|
334
334
|
"wheel_url": "https://files.pythonhosted.org/packages/19/a0/c484f69a0ebf88a9b9fd0ac28176f8df66550f46714f1b0c5ec0b360824e/spm_calculator-1.0.0-py3-none-any.whl"
|
|
335
335
|
}
|
|
336
336
|
},
|
|
337
|
-
"policyengine_version": "6.7.
|
|
337
|
+
"policyengine_version": "6.7.2",
|
|
338
338
|
"schema_version": 2
|
|
339
339
|
}
|
|
@@ -18,18 +18,18 @@
|
|
|
18
18
|
"schema:url": "https://policyengine.org"
|
|
19
19
|
},
|
|
20
20
|
"schema:dateCreated": "2026-10-14T07:43:49.920588Z",
|
|
21
|
-
"schema:description": "TRACE TRO for certified runtime bundle uk-6.7.
|
|
21
|
+
"schema:description": "TRACE TRO for certified runtime bundle uk-6.7.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": "6.7.
|
|
26
|
+
"schema:softwareVersion": "6.7.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-6.7.
|
|
32
|
+
"rdfs:comment": "Certified arrangement for bundle uk-6.7.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": "6680bb82cd34486f2fe8c9fad7455b34fdecbd2586487b65c2b4c2cec2e6f20b"
|
|
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": "de752e7eba643dbd363f783783239fdcde3b439858c06ced739be5cb78a8734f"
|
|
106
106
|
}
|
|
107
107
|
},
|
|
108
108
|
"trov:hasPerformance": {
|
|
@@ -17,18 +17,18 @@
|
|
|
17
17
|
"schema:name": "PolicyEngine",
|
|
18
18
|
"schema:url": "https://policyengine.org"
|
|
19
19
|
},
|
|
20
|
-
"schema:description": "TRACE TRO for certified runtime bundle us-6.7.
|
|
20
|
+
"schema:description": "TRACE TRO for certified runtime bundle us-6.7.2 covering the bundle manifest, the certified dataset artifact, the country model wheel, and the country data release manifest when it is available.",
|
|
21
21
|
"schema:name": "policyengine us certified bundle TRO",
|
|
22
22
|
"trov:createdWith": {
|
|
23
23
|
"@type": "schema:SoftwareApplication",
|
|
24
24
|
"schema:name": "policyengine",
|
|
25
|
-
"schema:softwareVersion": "6.7.
|
|
25
|
+
"schema:softwareVersion": "6.7.2"
|
|
26
26
|
},
|
|
27
27
|
"trov:hasArrangement": [
|
|
28
28
|
{
|
|
29
29
|
"@id": "arrangement/1",
|
|
30
30
|
"@type": "trov:ArtifactArrangement",
|
|
31
|
-
"rdfs:comment": "Certified arrangement for bundle us-6.7.
|
|
31
|
+
"rdfs:comment": "Certified arrangement for bundle us-6.7.2.",
|
|
32
32
|
"trov:hasArtifactLocation": [
|
|
33
33
|
{
|
|
34
34
|
"@id": "arrangement/1/location/bundle_manifest",
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
"@type": "trov:ResearchArtifact",
|
|
75
75
|
"schema:name": "policyengine.py bundle manifest for us",
|
|
76
76
|
"trov:mimeType": "application/json",
|
|
77
|
-
"trov:sha256": "
|
|
77
|
+
"trov:sha256": "6680bb82cd34486f2fe8c9fad7455b34fdecbd2586487b65c2b4c2cec2e6f20b"
|
|
78
78
|
},
|
|
79
79
|
{
|
|
80
80
|
"@id": "composition/1/artifact/data_release_manifest",
|
|
@@ -101,7 +101,7 @@
|
|
|
101
101
|
"trov:hasFingerprint": {
|
|
102
102
|
"@id": "composition/1/fingerprint",
|
|
103
103
|
"@type": "trov:CompositionFingerprint",
|
|
104
|
-
"trov:sha256": "
|
|
104
|
+
"trov:sha256": "fdda3195c7d0d9de4123c8087ebaf2d09b20908b0068f46fa8f3bf686edf90f7"
|
|
105
105
|
}
|
|
106
106
|
},
|
|
107
107
|
"trov:hasPerformance": {
|
|
@@ -1257,10 +1257,13 @@ class _WrapperHouseholdRoute:
|
|
|
1257
1257
|
route = "wrapper.household"
|
|
1258
1258
|
|
|
1259
1259
|
def _call(self, case: Case, year: int, reform, variables: Sequence[str]):
|
|
1260
|
-
|
|
1260
|
+
# The module ``policyengine.uk`` names, imported directly: a process
|
|
1261
|
+
# that sets POLICYENGINE_SKIP_COUNTRY_IMPORTS, as the qualification
|
|
1262
|
+
# scripts do, leaves ``policyengine.uk`` as None.
|
|
1263
|
+
from policyengine.tax_benefit_models import uk
|
|
1261
1264
|
|
|
1262
1265
|
household = case.household
|
|
1263
|
-
return
|
|
1266
|
+
return uk.calculate_household(
|
|
1264
1267
|
people=[dict(person) for person in household.people],
|
|
1265
1268
|
benunit=dict(household.benunit),
|
|
1266
1269
|
household=dict(household.household),
|
|
@@ -47,10 +47,32 @@ Checks:
|
|
|
47
47
|
The last two are responsiveness checks: a reform that reaches the parameter
|
|
48
48
|
but not the award (as when an award is fixed before the reform applies)
|
|
49
49
|
fails them.
|
|
50
|
+
|
|
51
|
+
Detail
|
|
52
|
+
------
|
|
53
|
+
|
|
54
|
+
Each row's ``detail`` states every condition the check tests as a flat
|
|
55
|
+
true/false finding (``no_award_lower``, ``some_pension_higher``,
|
|
56
|
+
``income_tax:2027_matches`` and so on), so a failed check can be diagnosed
|
|
57
|
+
from the findings alone. A row passes exactly when its findings all hold;
|
|
58
|
+
one whose name ends ``_informational`` is reported for diagnosis and is not
|
|
59
|
+
a condition. Counts and totals follow the findings for local reruns.
|
|
60
|
+
|
|
61
|
+
The subsample's households are survey records, so the counts and totals
|
|
62
|
+
also follow the small-cell rule: no count from 1 to 9 (it reads ``"fewer
|
|
63
|
+
than 10"``), and no total over fewer than 10 changed records. The rule
|
|
64
|
+
covers counts and totals only, not an error's message or the difference
|
|
65
|
+
between two rows' figures (two routes' rows share a subsample), so the raw
|
|
66
|
+
report is not for publication. The qualification ledger publishes from it
|
|
67
|
+
only the fixed row fields and the top-level findings; the rule here keeps
|
|
68
|
+
raw copies (test fixtures, local runs) free of small counts too. A detail
|
|
69
|
+
that cannot be checked turns its row into an error, so the report does not
|
|
70
|
+
hold.
|
|
50
71
|
"""
|
|
51
72
|
|
|
52
73
|
from __future__ import annotations
|
|
53
74
|
|
|
75
|
+
import numbers
|
|
54
76
|
import os
|
|
55
77
|
import tempfile
|
|
56
78
|
import traceback
|
|
@@ -75,6 +97,57 @@ STATE_PENSION_RATES = (
|
|
|
75
97
|
)
|
|
76
98
|
RESPONSE_YEAR = 2027
|
|
77
99
|
|
|
100
|
+
#: The small-cell rule: a count of survey records from 1 to 9 is never
|
|
101
|
+
#: published, nor a total over that many.
|
|
102
|
+
SMALL_CELL_LIMIT = 10
|
|
103
|
+
FEWER_THAN_10 = "fewer than 10"
|
|
104
|
+
WITHHELD_FEWER_THAN_10 = "withheld: fewer than 10 records"
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
def is_small_cell(count: int) -> bool:
|
|
108
|
+
return 0 < count < SMALL_CELL_LIMIT
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def publishable_detail(detail: Any) -> Any:
|
|
112
|
+
"""``detail`` with every count from 1 to 9, at any depth, suppressed.
|
|
113
|
+
|
|
114
|
+
Booleans are findings, not counts, and stay as they are. A detail holds
|
|
115
|
+
only booleans, integers, floats, text, None, and lists or text-keyed
|
|
116
|
+
mappings of them; anything else (an array, a set) is an error rather
|
|
117
|
+
than passed through unchecked.
|
|
118
|
+
"""
|
|
119
|
+
if isinstance(detail, (bool, np.bool_)):
|
|
120
|
+
return bool(detail)
|
|
121
|
+
if isinstance(detail, numbers.Integral):
|
|
122
|
+
return FEWER_THAN_10 if is_small_cell(int(detail)) else int(detail)
|
|
123
|
+
if isinstance(detail, np.floating):
|
|
124
|
+
return float(detail)
|
|
125
|
+
if detail is None or isinstance(detail, (float, str)):
|
|
126
|
+
return detail
|
|
127
|
+
if isinstance(detail, dict) and all(isinstance(key, str) for key in detail):
|
|
128
|
+
return {key: publishable_detail(value) for key, value in detail.items()}
|
|
129
|
+
if isinstance(detail, (list, tuple)):
|
|
130
|
+
return [publishable_detail(value) for value in detail]
|
|
131
|
+
raise TypeError(f"A population detail cannot hold {type(detail).__name__}.")
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
def total_over_records(total: float, *records: int) -> float | str:
|
|
135
|
+
"""A total, withheld when any count of the records behind it is 1 to 9.
|
|
136
|
+
|
|
137
|
+
Pass each count that bounds how few records the total reflects: those
|
|
138
|
+
that moved at all, and those that moved by more than a negligible amount
|
|
139
|
+
(a few large changes among negligible ones are still a few records).
|
|
140
|
+
"""
|
|
141
|
+
if any(is_small_cell(count) for count in records):
|
|
142
|
+
return WITHHELD_FEWER_THAN_10
|
|
143
|
+
return total
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
def matches(names: Sequence[str], different: Sequence[str]) -> dict[str, bool]:
|
|
147
|
+
"""One ``<name>_matches`` finding per compared output."""
|
|
148
|
+
return {f"{name}_matches": name not in different for name in names}
|
|
149
|
+
|
|
150
|
+
|
|
78
151
|
POPULATION_BASELINE_ISOLATION = "population_baseline_isolation"
|
|
79
152
|
POPULATION_QUERY_ORDER = "population_query_order"
|
|
80
153
|
POPULATION_ROUTES_AGREE = "population_routes_agree"
|
|
@@ -223,18 +296,22 @@ def uc_allowance_verdict(
|
|
|
223
296
|
for state_paid, state_award in ((base_paid, base_award), (paid, award))
|
|
224
297
|
)
|
|
225
298
|
)
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
and scaled
|
|
229
|
-
and awards_lower == 0
|
|
230
|
-
and payments_unaccounted == 0
|
|
231
|
-
and payments_below_floor == 0
|
|
232
|
-
and payments_higher > 0
|
|
233
|
-
)
|
|
234
|
-
return holds, {
|
|
299
|
+
payments_lower = int(np.sum(paid < base_paid - PENNY))
|
|
300
|
+
findings = {
|
|
235
301
|
"standard_allowance_scaled_10_percent": scaled,
|
|
302
|
+
"no_award_lower": awards_lower == 0,
|
|
303
|
+
"payments_are_award_less_deductions": payments_unaccounted == 0,
|
|
304
|
+
"no_payment_below_the_payable_floor": payments_below_floor == 0,
|
|
305
|
+
"some_payment_higher": payments_higher > 0,
|
|
306
|
+
"no_non_finite_units": non_finite == 0,
|
|
307
|
+
}
|
|
308
|
+
holds = all(findings.values())
|
|
309
|
+
return holds, {
|
|
310
|
+
**findings,
|
|
311
|
+
# Lawful (deductions can rise more than the award), so not a condition.
|
|
312
|
+
"no_payment_lower_informational": payments_lower == 0,
|
|
236
313
|
"awards_lower": awards_lower,
|
|
237
|
-
"payments_lower":
|
|
314
|
+
"payments_lower": payments_lower,
|
|
238
315
|
"payments_higher": payments_higher,
|
|
239
316
|
"payments_not_award_less_deductions": payments_unaccounted,
|
|
240
317
|
"payments_below_the_payable_floor": payments_below_floor,
|
|
@@ -380,7 +457,7 @@ def run_population_checks(
|
|
|
380
457
|
POPULATION_BASELINE_ISOLATION,
|
|
381
458
|
route,
|
|
382
459
|
"fail" if different else "pass",
|
|
383
|
-
detail=different
|
|
460
|
+
detail=matches(list(before), different),
|
|
384
461
|
)
|
|
385
462
|
)
|
|
386
463
|
after = _arrays(build(None, None))
|
|
@@ -390,7 +467,7 @@ def run_population_checks(
|
|
|
390
467
|
POPULATION_BASELINE_ISOLATION,
|
|
391
468
|
"unreformed",
|
|
392
469
|
"fail" if different else "pass",
|
|
393
|
-
detail=different
|
|
470
|
+
detail=matches(list(before), different),
|
|
394
471
|
)
|
|
395
472
|
)
|
|
396
473
|
different = _same(before, _arrays(build(None, None), order=-1))
|
|
@@ -399,7 +476,7 @@ def run_population_checks(
|
|
|
399
476
|
POPULATION_QUERY_ORDER,
|
|
400
477
|
"unreformed",
|
|
401
478
|
"fail" if different else "pass",
|
|
402
|
-
detail=different
|
|
479
|
+
detail=matches(list(before), different),
|
|
403
480
|
)
|
|
404
481
|
)
|
|
405
482
|
tax = {
|
|
@@ -411,15 +488,18 @@ def run_population_checks(
|
|
|
411
488
|
}
|
|
412
489
|
first = country[0]
|
|
413
490
|
for route in country[1:]:
|
|
414
|
-
|
|
415
|
-
|
|
491
|
+
agree = {
|
|
492
|
+
f"income_tax:{year}_matches": bool(
|
|
493
|
+
np.array_equal(tax[route][year], tax[first][year])
|
|
494
|
+
)
|
|
416
495
|
for year in (2026, 2027)
|
|
417
|
-
|
|
496
|
+
}
|
|
418
497
|
rows.append(
|
|
419
498
|
_row(
|
|
420
499
|
POPULATION_ROUTES_AGREE,
|
|
421
500
|
f"{first} = {route}",
|
|
422
|
-
"pass" if
|
|
501
|
+
"pass" if all(agree.values()) else "fail",
|
|
502
|
+
detail=agree,
|
|
423
503
|
)
|
|
424
504
|
)
|
|
425
505
|
for route in country:
|
|
@@ -431,6 +511,8 @@ def run_population_checks(
|
|
|
431
511
|
# is on the total, and the counts are reported.
|
|
432
512
|
total_rises = bool(np.sum(change_2027) > 1e-6)
|
|
433
513
|
ok = unchanged_2026 and total_rises
|
|
514
|
+
lower = int(np.sum(change_2027 < -1e-6))
|
|
515
|
+
higher = int(np.sum(change_2027 > 1e-6))
|
|
434
516
|
rows.append(
|
|
435
517
|
_row(
|
|
436
518
|
POPULATION_APRIL_RATE_CHANGE,
|
|
@@ -438,23 +520,33 @@ def run_population_checks(
|
|
|
438
520
|
"pass" if ok else "fail",
|
|
439
521
|
detail={
|
|
440
522
|
"2026_unchanged": unchanged_2026,
|
|
441
|
-
"
|
|
442
|
-
|
|
443
|
-
|
|
523
|
+
"2027_total_rises": total_rises,
|
|
524
|
+
# Withheld by the records that moved at all, which
|
|
525
|
+
# the total sums, and by those past the threshold.
|
|
526
|
+
"2027_total_change": total_over_records(
|
|
527
|
+
float(np.sum(change_2027)),
|
|
528
|
+
int(np.count_nonzero(change_2027)),
|
|
529
|
+
lower + higher,
|
|
530
|
+
),
|
|
531
|
+
"2027_people_with_lower_tax": lower,
|
|
532
|
+
"2027_people_with_higher_tax": higher,
|
|
444
533
|
},
|
|
445
534
|
)
|
|
446
535
|
)
|
|
447
536
|
for route in country:
|
|
448
537
|
simulation = build(route, FINITE)
|
|
449
|
-
same =
|
|
450
|
-
np.
|
|
451
|
-
|
|
538
|
+
same = bool(
|
|
539
|
+
np.array_equal(
|
|
540
|
+
np.asarray(simulation.calculate("income_tax", 2028), dtype=float),
|
|
541
|
+
before["income_tax:2028"],
|
|
542
|
+
)
|
|
452
543
|
)
|
|
453
544
|
rows.append(
|
|
454
545
|
_row(
|
|
455
546
|
POPULATION_FINITE_CHANGE_EXPIRES,
|
|
456
547
|
route,
|
|
457
548
|
"pass" if same else "fail",
|
|
549
|
+
detail={"income_tax:2028_matches": same},
|
|
458
550
|
)
|
|
459
551
|
)
|
|
460
552
|
|
|
@@ -506,6 +598,8 @@ def run_population_checks(
|
|
|
506
598
|
"pass" if scaled and lower == 0 and higher > 0 else "fail",
|
|
507
599
|
detail={
|
|
508
600
|
"basic_and_new_scaled_10_percent": bool(scaled),
|
|
601
|
+
"no_pension_lower": lower == 0,
|
|
602
|
+
"some_pension_higher": higher > 0,
|
|
509
603
|
"pensions_lower": lower,
|
|
510
604
|
"pensions_higher": higher,
|
|
511
605
|
},
|
|
@@ -516,12 +610,19 @@ def run_population_checks(
|
|
|
516
610
|
_row(
|
|
517
611
|
*POPULATION_ERROR_DIAGNOSTIC,
|
|
518
612
|
"error",
|
|
613
|
+
reason=type(error).__name__,
|
|
519
614
|
detail="".join(
|
|
520
615
|
traceback.format_exception_only(type(error), error)
|
|
521
616
|
).strip()[:1000],
|
|
522
617
|
)
|
|
523
618
|
)
|
|
524
619
|
for row in rows:
|
|
620
|
+
if isinstance(row.get("detail"), dict):
|
|
621
|
+
try:
|
|
622
|
+
row["detail"] = publishable_detail(row["detail"])
|
|
623
|
+
except TypeError as error:
|
|
624
|
+
# Fail closed: drop what cannot be checked, and the row errs.
|
|
625
|
+
row.update(status="error", reason=type(error).__name__, detail=None)
|
|
525
626
|
row.setdefault("subsample_households", SUBSAMPLE_HOUSEHOLDS)
|
|
526
627
|
row.setdefault("seed", seed)
|
|
527
628
|
return rows
|