policyengine-core 3.30.2__tar.gz → 3.30.4__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_core-3.30.2 → policyengine_core-3.30.4}/CHANGELOG.md +14 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/PKG-INFO +1 -1
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/data_storage/in_memory_storage.py +26 -2
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/simulations/microsimulation.py +14 -4
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/pyproject.toml +1 -1
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_holders.py +1 -1
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_microsimulation_weights.py +33 -0
- policyengine_core-3.30.4/tests/core/test_storage_anchored_periods.py +61 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/.github/ISSUE_TEMPLATE.md +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/.github/bump_version.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/.github/changelog_template.md +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/.github/get-changelog-diff.sh +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/.github/has-functional-changes.sh +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/.github/is-version-number-acceptable.sh +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/.github/publish-git-tag.sh +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/.github/workflows/pr.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/.github/workflows/push.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/.gitignore +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/.python-version +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/AGENTS.md +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/CLAUDE.md +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/CONTRIBUTING.md +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/LICENSE +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/MANIFEST.in +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/Makefile +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/README.md +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/_build/logs/myst.build.json +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/changelog.d/.gitkeep +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/docs/_config.yml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/docs/_static/style.css +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/docs/_toc.yml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/docs/add_plotly_to_book.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/docs/contributing/intro.md +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/docs/engineering/skills/README.md +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/docs/engineering/skills/documentation_review.md +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/docs/engineering/skills/github-prs.md +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/docs/engineering/skills/testing.md +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/docs/intro.md +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/docs/logo.png +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/docs/python_api/commons.md +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/docs/python_api/country_template.md +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/docs/python_api/data.md +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/docs/python_api/data_storage.md +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/docs/python_api/entities.md +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/docs/python_api/enums.md +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/docs/python_api/errors.md +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/docs/python_api/experimental.md +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/docs/python_api/extension_template.md +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/docs/python_api/holders.md +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/docs/python_api/parameters.md +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/docs/python_api/periods.md +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/docs/python_api/populations.md +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/docs/python_api/projectors.md +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/docs/python_api/reforms.md +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/docs/python_api/scripts.md +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/docs/python_api/simulations.md +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/docs/python_api/taxbenefitsystems.md +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/docs/python_api/taxscales.md +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/docs/python_api/tools.md +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/docs/python_api/tracers.md +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/docs/python_api/types.md +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/docs/python_api/variables.md +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/docs/python_api/warnings.md +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/docs/usage/country.ipynb +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/docs/usage/datasets.ipynb +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/docs/usage/parameters.md +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/docs/usage/reforms.ipynb +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/docs/usage/simulation.ipynb +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/mypy.ini +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/build_metadata.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/charts/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/charts/api.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/charts/bar.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/charts/formatting.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/commons/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/commons/formulas.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/commons/misc.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/commons/rates.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/constants.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/data/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/data/datasets/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/data/datasets/country_template_dataset.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/entities.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/modelled_policies.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/parameters/benefits/basic_income.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/parameters/benefits/housing_allowance.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/parameters/benefits/index.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/parameters/benefits/parenting_allowance/amount.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/parameters/benefits/parenting_allowance/income_threshold.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/parameters/general/age_of_majority.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/parameters/general/age_of_retirement.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/parameters/taxes/housing_tax.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/parameters/taxes/income_tax_rate.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/parameters/taxes/social_security_contribution.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/reforms/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/reforms/add_dynamic_variable.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/reforms/add_new_tax.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/reforms/flat_social_security_contribution.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/reforms/modify_social_security_taxation.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/reforms/removal_basic_income.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/situation_examples/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/situation_examples/couple.json +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/situation_examples/housing.json +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/situation_examples/single.json +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/tests/age.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/tests/basic_income.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/tests/disposable_income.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/tests/housing_allowance.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/tests/housing_tax.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/tests/income_tax.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/tests/reforms/add_dynamic_variable.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/tests/reforms/add_new_tax.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/tests/reforms/modify_social_security_taxation.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/tests/situations/income_tax.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/tests/situations/parenting_allowance.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/tests/social_security_contribution.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/tests/test_microsimulation.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/variables/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/variables/benefits.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/variables/demographics.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/variables/housing.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/variables/ids.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/variables/income.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/variables/stats.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/variables/taxes.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/data/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/data/dataset.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/data_storage/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/data_storage/on_disk_storage.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/data_structures/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/data_structures/parameter_metadata.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/data_structures/parameter_node_metadata.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/data_structures/reference.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/data_structures/unit.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/entities/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/entities/entity.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/entities/group_entity.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/entities/helpers.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/entities/role.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/enums/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/enums/config.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/enums/enum.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/enums/enum_array.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/errors/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/errors/cycle_error.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/errors/empty_argument_error.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/errors/nan_creation_error.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/errors/non_deterministic_formula_error.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/errors/parameter_not_found_error.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/errors/parameter_parsing_error.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/errors/period_mismatch_error.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/errors/situation_parsing_error.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/errors/spiral_error.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/errors/variable_name_conflict_error.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/errors/variable_not_found_error.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/experimental/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/experimental/memory_config.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/extension_template/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/extension_template/local_benefit.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/extension_template/parameters/local_town/child_allowance/amount.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/extension_template/parameters/local_town/child_allowance/index.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/extension_template/parameters/local_town/index.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/extension_template/tests/local_benefit.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/holders/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/holders/helpers.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/holders/holder.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/model_api.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/parameters/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/parameters/at_instant_like.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/parameters/config.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/parameters/helpers.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/parameters/operations/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/parameters/operations/get_parameter.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/parameters/operations/homogenize_parameters.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/parameters/operations/interpolate_parameters.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/parameters/operations/propagate_parameter_metadata.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/parameters/operations/uprate_parameters.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/parameters/parameter.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/parameters/parameter_at_instant.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/parameters/parameter_node.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/parameters/parameter_node_at_instant.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/parameters/parameter_scale.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/parameters/parameter_scale_bracket.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/parameters/vectorial_parameter_node_at_instant.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/periods/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/periods/config.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/periods/helpers.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/periods/instant_.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/periods/period_.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/populations/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/populations/config.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/populations/group_population.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/populations/population.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/projectors/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/projectors/entity_to_person_projector.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/projectors/first_person_to_entity_projector.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/projectors/helpers.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/projectors/projector.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/projectors/unique_role_to_entity_projector.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/reforms/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/reforms/reform.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/scripts/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/scripts/assets/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/scripts/assets/index.html +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/scripts/policyengine_command.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/scripts/run_data.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/scripts/run_test.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/scripts/simulation_generator.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/simulations/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/simulations/helpers.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/simulations/individual_sim.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/simulations/simulation.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/simulations/simulation_builder.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/simulations/simulation_macro_cache.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/taxbenefitsystems/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/taxbenefitsystems/tax_benefit_system.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/taxscales/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/taxscales/abstract_rate_tax_scale.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/taxscales/abstract_tax_scale.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/taxscales/amount_tax_scale_like.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/taxscales/helpers.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/taxscales/linear_average_rate_tax_scale.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/taxscales/marginal_amount_tax_scale.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/taxscales/marginal_rate_tax_scale.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/taxscales/rate_tax_scale_like.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/taxscales/single_amount_tax_scale.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/taxscales/tax_scale_like.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/tools/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/tools/google_cloud.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/tools/hugging_face.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/tools/simulation_dumper.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/tools/test_from_situation.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/tools/test_runner.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/tools/win_file_manager.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/tracers/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/tracers/computation_log.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/tracers/flat_trace.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/tracers/full_tracer.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/tracers/performance_log.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/tracers/simple_tracer.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/tracers/trace_node.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/tracers/tracing_parameter_node_at_instant.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/tracers/variable_graph.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/types/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/types/data_types/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/types/data_types/arrays.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/variables/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/variables/config.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/variables/defined_for.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/variables/formula_randomness.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/variables/helpers.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/variables/typing.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/variables/variable.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/warnings/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/warnings/libyaml_warning.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/warnings/memory_config_warning.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/warnings/parameter_key_warning.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/warnings/tempfile_warning.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/pytest.ini +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/test.ipynb +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/conftest.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/commons/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/commons/test_between_function.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/commons/test_formulas.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/commons/test_is_in_function.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/commons/test_random_seed.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/commons/test_rates.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/data/test_dataset.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/enums/test_enum.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/model_api/test_index_.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/parameter_validation/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/parameter_validation/array_type.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/parameter_validation/duplicate_key.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/parameter_validation/filesystem_hierarchy/empty_index_file/index.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/parameter_validation/filesystem_hierarchy/node1/param.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/parameter_validation/indentation.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/parameter_validation/missing_value.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/parameter_validation/parameter_for_unit_propagation.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/parameter_validation/test_parameter_clone.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/parameter_validation/test_parameter_validation.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/parameter_validation/test_propagate_units.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/parameter_validation/test_unknown_keys.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/parameter_validation/unexpected_key_in_parameter.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/parameter_validation/unexpected_key_in_scale.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/parameter_validation/unexpected_key_in_value_at_instant.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/parameter_validation/unexpected_key_in_value_history.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/parameter_validation/unknown_key_beside_values.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/parameter_validation/uprating_under_metadata.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/parameter_validation/wrong_date.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/parameter_validation/wrong_scale.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/parameter_validation/wrong_type_in_bracket.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/parameter_validation/wrong_type_in_brackets.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/parameter_validation/wrong_type_in_parameter.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/parameter_validation/wrong_type_in_scale.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/parameter_validation/wrong_type_in_value_history.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/parameter_validation/wrong_value.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/parameter_validation/yaml_hierarchy/node1.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/parameters/operations/test_interpolation.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/parameters/operations/test_nesting.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/parameters/operations/test_propagation.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/parameters/operations/test_scale_threshold_uprating.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/parameters/operations/test_uprating.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/parameters/test_numpy2_structured_arrays.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/parameters_fancy_indexing/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/parameters_fancy_indexing/bareme.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/parameters_fancy_indexing/local_tax.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/parameters_fancy_indexing/rate.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/parameters_fancy_indexing/test_fancy_indexing.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/simulations/test_formula_randomness_concurrency.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/tax_scales/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/tax_scales/test_abstract_rate_tax_scale.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/tax_scales/test_abstract_tax_scale.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/tax_scales/test_linear_average_rate_tax_scale.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/tax_scales/test_marginal_amount_tax_scale.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/tax_scales/test_marginal_rate_tax_scale.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/tax_scales/test_rate_tax_scale_like.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/tax_scales/test_single_amount_tax_scale.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/tax_scales/test_tax_scales_commons.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_apply_reform_invalidates_cache.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_apply_reform_preserves_user_inputs.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_assert_near_precision.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_axes.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_bincount_minlength.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_branch_scoped_delete_arrays.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_build_metadata.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_calculate_output.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_countries.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_cycles.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_dataset_getattr.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_dump_restore.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_entities.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_eternity_subperiods.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_extensions.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_fast_cache.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_fast_cache_guards.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_formulas.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_holder_branch_fallback.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_macro_cache_not_singleton.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_medium_fixes.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_microsimulation_person_accessor.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_opt_out_cache.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_pandas3_compatibility.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_parameter_security.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_parameters.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_periods.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_projectors.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_reform_parameter_isolation.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_reform_period_keys.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_reforms.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_simulation_builder.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_simulations.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_stable_hash_seed.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_storage_delete_branch.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_subsample_baseline_branch.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_subsample_invalidates_cache.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_tax_benefit_system_cache_identity.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_tracers.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_yaml.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/tools/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/tools/test_assert_near.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/tools/test_google_cloud.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/tools/test_hugging_face.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/tools/test_runner/test_yaml_runner.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/variables/test_adds.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/variables/test_annualize.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/variables/test_bounds.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/variables/test_defined_for.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/variables/test_formula_randomness.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/variables/test_subtracts.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/variables/test_subtracts_sign.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/variables/test_variable_formula_determinism.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/variables/test_variables.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/fixtures/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/fixtures/appclient.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/fixtures/entities.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/fixtures/simulations.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/fixtures/taxbenefitsystems.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/fixtures/variables.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/fixtures/yaml_tests/__init__.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/fixtures/yaml_tests/directory/subdirectory/test_4.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/fixtures/yaml_tests/directory/test_1.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/fixtures/yaml_tests/directory/test_2.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/fixtures/yaml_tests/failing_test_absolute_error_margin.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/fixtures/yaml_tests/failing_test_relative_error_margin.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/fixtures/yaml_tests/test_absolute_error_margin.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/fixtures/yaml_tests/test_failure.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/fixtures/yaml_tests/test_name_filter.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/fixtures/yaml_tests/test_relative_error_margin.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/fixtures/yaml_tests/test_success.yml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/fixtures/yaml_tests/test_with_anchors.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/fixtures/yaml_tests/test_with_extension.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/fixtures/yaml_tests/test_with_reform.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/fixtures/yaml_tests/test_with_reform_2.yaml +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/smoke/test_country_init.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/smoke/test_us.py +0 -0
- {policyengine_core-3.30.2 → policyengine_core-3.30.4}/uv.lock +0 -0
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
## [3.30.4] - 2026-08-04
|
|
2
|
+
|
|
3
|
+
### Fixed
|
|
4
|
+
|
|
5
|
+
- Fix `Microsimulation.calculate_add` and `calculate_divide` to honor `map_to` for both values and weights.
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
## [3.30.3] - 2026-07-21
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- Fix InMemoryStorage period-key parsing so anchored year periods (e.g. a year-defined input set at a non-January month), whose string form contains colons, no longer crash get_known_periods and get_known_branch_periods; reject colon branch names and mid-month-anchored periods loudly at put time (their keys cannot round-trip; see #526).
|
|
13
|
+
|
|
14
|
+
|
|
1
15
|
## [3.30.2] - 2026-07-20
|
|
2
16
|
|
|
3
17
|
### Fixed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: policyengine-core
|
|
3
|
-
Version: 3.30.
|
|
3
|
+
Version: 3.30.4
|
|
4
4
|
Summary: Core microsimulation engine enabling country-specific policy models.
|
|
5
5
|
Project-URL: Homepage, https://github.com/policyengine/policyengine-core
|
|
6
6
|
Author-email: PolicyEngine <hello@policyengine.org>
|
|
@@ -40,6 +40,21 @@ class InMemoryStorage:
|
|
|
40
40
|
period = periods.period(periods.ETERNITY)
|
|
41
41
|
period = periods.period(period)
|
|
42
42
|
|
|
43
|
+
# Keys embed f"{branch_name}:{period}", so reject inputs whose key
|
|
44
|
+
# would be ambiguous to parse back: branch names containing the
|
|
45
|
+
# separator, and month/year periods anchored mid-month (their string
|
|
46
|
+
# form drops the day). See policyengine-core#526 for the structured-
|
|
47
|
+
# key refactor that will lift these restrictions.
|
|
48
|
+
if ":" in branch_name:
|
|
49
|
+
raise ValueError(
|
|
50
|
+
f"Branch name {branch_name!r} may not contain ':' "
|
|
51
|
+
"(see policyengine-core#526)."
|
|
52
|
+
)
|
|
53
|
+
if period.unit in (periods.YEAR, periods.MONTH) and period.start.day != 1:
|
|
54
|
+
raise ValueError(
|
|
55
|
+
f"Cannot cache period {period} anchored mid-month: its "
|
|
56
|
+
"string form is lossy (see policyengine-core#526)."
|
|
57
|
+
)
|
|
43
58
|
self._arrays[f"{branch_name}:{period}"] = value
|
|
44
59
|
|
|
45
60
|
def delete(self, period: Period = None, branch_name: str = "default") -> None:
|
|
@@ -71,12 +86,21 @@ class InMemoryStorage:
|
|
|
71
86
|
}
|
|
72
87
|
|
|
73
88
|
def get_known_periods(self) -> list:
|
|
74
|
-
|
|
89
|
+
# Split on the first colon only: an anchored period's string form
|
|
90
|
+
# itself contains colons (e.g. "default:year:2027-11").
|
|
91
|
+
return list(
|
|
92
|
+
map(
|
|
93
|
+
lambda x: periods.period(x.split(":", 1)[1]),
|
|
94
|
+
self._arrays.keys(),
|
|
95
|
+
)
|
|
96
|
+
)
|
|
75
97
|
|
|
76
98
|
def get_known_branch_periods(self) -> list:
|
|
77
99
|
return [
|
|
78
100
|
(branch_name, periods.period(period))
|
|
79
|
-
for branch_name, period in map(
|
|
101
|
+
for branch_name, period in map(
|
|
102
|
+
lambda x: x.split(":", 1), self._arrays.keys()
|
|
103
|
+
)
|
|
80
104
|
]
|
|
81
105
|
|
|
82
106
|
def get_memory_usage(self) -> dict:
|
|
@@ -88,10 +88,15 @@ class Microsimulation(Simulation):
|
|
|
88
88
|
map_to: str = None,
|
|
89
89
|
use_weights: bool = True,
|
|
90
90
|
) -> MicroSeries:
|
|
91
|
-
values = super().calculate_add(variable_name, period
|
|
91
|
+
values = super().calculate_add(variable_name, period)
|
|
92
|
+
if map_to is not None:
|
|
93
|
+
source_entity = self.tax_benefit_system.get_variable(
|
|
94
|
+
variable_name, check_existence=True
|
|
95
|
+
).entity.key
|
|
96
|
+
values = self.map_result(np.array(values), source_entity, map_to)
|
|
92
97
|
if not use_weights:
|
|
93
98
|
return values
|
|
94
|
-
weights = self.get_weights(variable_name, period)
|
|
99
|
+
weights = self.get_weights(variable_name, period, map_to)
|
|
95
100
|
return MicroSeries(np.array(values), weights=weights)
|
|
96
101
|
|
|
97
102
|
def calculate_divide(
|
|
@@ -101,10 +106,15 @@ class Microsimulation(Simulation):
|
|
|
101
106
|
map_to: str = None,
|
|
102
107
|
use_weights: bool = True,
|
|
103
108
|
) -> MicroSeries:
|
|
104
|
-
values = super().calculate_divide(variable_name, period
|
|
109
|
+
values = super().calculate_divide(variable_name, period)
|
|
110
|
+
if map_to is not None:
|
|
111
|
+
source_entity = self.tax_benefit_system.get_variable(
|
|
112
|
+
variable_name, check_existence=True
|
|
113
|
+
).entity.key
|
|
114
|
+
values = self.map_result(np.array(values), source_entity, map_to)
|
|
105
115
|
if not use_weights:
|
|
106
116
|
return values
|
|
107
|
-
weights = self.get_weights(variable_name, period)
|
|
117
|
+
weights = self.get_weights(variable_name, period, map_to)
|
|
108
118
|
return MicroSeries(np.array(values), weights=weights)
|
|
109
119
|
|
|
110
120
|
def calculate_dataframe(
|
|
@@ -184,7 +184,7 @@ def test_known_periods(couple):
|
|
|
184
184
|
holder.put_in_cache(data, month)
|
|
185
185
|
holder._memory_storage.put(data, month_2)
|
|
186
186
|
|
|
187
|
-
assert sorted(holder.get_known_periods())
|
|
187
|
+
assert sorted(holder.get_known_periods()) == [month, month_2]
|
|
188
188
|
|
|
189
189
|
|
|
190
190
|
def test_cache_enum_on_disk(single):
|
{policyengine_core-3.30.2 → policyengine_core-3.30.4}/tests/core/test_microsimulation_weights.py
RENAMED
|
@@ -16,6 +16,7 @@ def _weighted_dataset(include_person_weight: bool = True) -> Dataset:
|
|
|
16
16
|
"person_household_role__2022": ["parent", "child", "parent"],
|
|
17
17
|
"household_weight__2022": [10.0, 10.0, 20.0],
|
|
18
18
|
"salary__2022-01": [100.0, 200.0, 300.0],
|
|
19
|
+
"housing_tax__2022": [120.0, 120.0, 240.0],
|
|
19
20
|
}
|
|
20
21
|
if include_person_weight:
|
|
21
22
|
data["person_weight__2022"] = [1.0, 2.0, 3.0]
|
|
@@ -65,6 +66,38 @@ def test__given_dataframe_mapped_to_household__then_weights_are_household_weight
|
|
|
65
66
|
np.testing.assert_array_equal(dataframe.weights, np.array([10.0, 20.0]))
|
|
66
67
|
|
|
67
68
|
|
|
69
|
+
def test__given_calculate_add_mapped_to_household__then_values_and_weights_match_households():
|
|
70
|
+
# Given
|
|
71
|
+
simulation = Microsimulation(dataset=_weighted_dataset())
|
|
72
|
+
|
|
73
|
+
# When
|
|
74
|
+
result = simulation.calculate_add(
|
|
75
|
+
"salary",
|
|
76
|
+
"2022-01",
|
|
77
|
+
map_to="household",
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
# Then
|
|
81
|
+
np.testing.assert_array_equal(result, np.array([300.0, 300.0]))
|
|
82
|
+
np.testing.assert_array_equal(result.weights, np.array([10.0, 20.0]))
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def test__given_calculate_divide_mapped_to_person__then_values_and_weights_match_persons():
|
|
86
|
+
# Given
|
|
87
|
+
simulation = Microsimulation(dataset=_weighted_dataset())
|
|
88
|
+
|
|
89
|
+
# When
|
|
90
|
+
result = simulation.calculate_divide(
|
|
91
|
+
"housing_tax",
|
|
92
|
+
"2022-01",
|
|
93
|
+
map_to="person",
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
# Then
|
|
97
|
+
np.testing.assert_array_equal(result, np.array([10.0, 10.0, 20.0]))
|
|
98
|
+
np.testing.assert_array_equal(result.weights, np.array([10.0, 10.0, 20.0]))
|
|
99
|
+
|
|
100
|
+
|
|
68
101
|
Family = build_entity(
|
|
69
102
|
key="family",
|
|
70
103
|
plural="families",
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"""Regression tests for storage key parsing with anchored periods (#523).
|
|
2
|
+
|
|
3
|
+
A year period anchored at a non-January month stringifies with colons
|
|
4
|
+
(e.g. ``"year:2027-11"``), so storage keys look like
|
|
5
|
+
``"default:year:2027-11"``. ``get_known_periods`` and
|
|
6
|
+
``get_known_branch_periods`` previously split those keys on every colon,
|
|
7
|
+
crashing on the literal ``"year"`` (or mis-unpacking the tuple). This is
|
|
8
|
+
hit in practice whenever a year-defined input variable is set at a
|
|
9
|
+
non-January month test period.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from __future__ import annotations
|
|
13
|
+
|
|
14
|
+
import numpy as np
|
|
15
|
+
|
|
16
|
+
from policyengine_core import periods
|
|
17
|
+
from policyengine_core.data_storage.in_memory_storage import InMemoryStorage
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def test_get_known_periods_with_anchored_year_period():
|
|
21
|
+
storage = InMemoryStorage(is_eternal=False)
|
|
22
|
+
anchored = periods.period("year:2027-11")
|
|
23
|
+
storage.put(np.asarray([1.0]), anchored, branch_name="default")
|
|
24
|
+
storage.put(np.asarray([2.0]), "2024-01", branch_name="default")
|
|
25
|
+
known = storage.get_known_periods()
|
|
26
|
+
assert anchored in known
|
|
27
|
+
assert periods.period("2024-01") in known
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def test_get_known_branch_periods_with_anchored_year_period():
|
|
31
|
+
storage = InMemoryStorage(is_eternal=False)
|
|
32
|
+
anchored = periods.period("year:2027-11")
|
|
33
|
+
storage.put(np.asarray([1.0]), anchored, branch_name="reform")
|
|
34
|
+
assert storage.get_known_branch_periods() == [("reform", anchored)]
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def test_put_rejects_colon_branch_names():
|
|
38
|
+
import pytest
|
|
39
|
+
|
|
40
|
+
storage = InMemoryStorage(is_eternal=False)
|
|
41
|
+
with pytest.raises(ValueError, match="526"):
|
|
42
|
+
storage.put(np.asarray([1.0]), "2024-01", branch_name="my:reform")
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def test_put_rejects_mid_month_anchored_periods():
|
|
46
|
+
import pytest
|
|
47
|
+
|
|
48
|
+
from policyengine_core.periods import Instant, Period, YEAR
|
|
49
|
+
|
|
50
|
+
storage = InMemoryStorage(is_eternal=False)
|
|
51
|
+
day_anchored = Period((YEAR, Instant((2027, 11, 15)), 2))
|
|
52
|
+
with pytest.raises(ValueError, match="lossy"):
|
|
53
|
+
storage.put(np.asarray([1.0]), day_anchored, branch_name="default")
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def test_eternal_storage_round_trips():
|
|
57
|
+
storage = InMemoryStorage(is_eternal=True)
|
|
58
|
+
storage.put(np.asarray([1.0]), "2024-01", branch_name="default")
|
|
59
|
+
from policyengine_core import periods as p
|
|
60
|
+
|
|
61
|
+
assert storage.get_known_periods() == [p.period(p.ETERNITY)]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{policyengine_core-3.30.2 → policyengine_core-3.30.4}/.github/is-version-number-acceptable.sh
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/charts/formatting.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/country_template/entities.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/data_storage/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/data_structures/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/data_structures/reference.py
RENAMED
|
File without changes
|
{policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/data_structures/unit.py
RENAMED
|
File without changes
|
{policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/entities/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/entities/group_entity.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{policyengine_core-3.30.2 → policyengine_core-3.30.4}/policyengine_core/errors/cycle_error.py
RENAMED
|
File without changes
|
|
File without changes
|