Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,11 @@ from policyengine.core import Simulation
from policyengine.outputs.aggregate import Aggregate, AggregateType

datasets = pe.uk.ensure_datasets(
datasets=["hf://policyengine/policyengine-uk-data/enhanced_frs_2023_24.h5"],
datasets=["enhanced_frs_2024_25"],
years=[2026],
data_folder="./data",
)
dataset = datasets["enhanced_frs_2023_24_2026"]
dataset = datasets["enhanced_frs_2024_25_2026"]

simulation = Simulation(dataset=dataset, tax_benefit_model_version=pe.uk.model)
simulation.run()
Expand Down Expand Up @@ -170,7 +170,7 @@ Use the pinned interpreter and the UK extra to run the checked-in paper repro:
uv run --python 3.14 --extra uk python examples/paper_repro_uk.py
```

On first run this will create `./data/enhanced_frs_2023_24_year_2026.h5`.
On first run this will create `./data/enhanced_frs_2024_25_year_2026.h5`.

## Features

Expand All @@ -192,7 +192,7 @@ from policyengine.tax_benefit_models.uk import PolicyEngineUKDataset

dataset = PolicyEngineUKDataset(
name="Representative data",
filepath="./data/frs_2023_24_year_2026.h5",
filepath="./data/frs_2024_25_year_2026.h5",
year=2026,
)
dataset.load()
Expand Down
1 change: 1 addition & 0 deletions changelog.d/update-uk-bundle.changed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Update the UK release bundle to policyengine-uk 2.88.23 and policyengine-uk-data 1.55.12.
4 changes: 2 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ graph = [
]
uk = [
"policyengine_core>=3.26.1",
"policyengine-uk==2.88.20",
"policyengine-uk==2.88.23",
]
us = [
"policyengine_core==3.26.1",
Expand All @@ -63,7 +63,7 @@ dev = [
"pytest-asyncio>=0.26.0",
"ruff>=0.9.0",
"policyengine_core==3.26.1",
"policyengine-uk==2.88.20",
"policyengine-uk==2.88.23",
"policyengine-us==1.700.0",
"towncrier>=24.8.0",
"mypy>=1.11.0",
Expand Down
47 changes: 24 additions & 23 deletions src/policyengine/data/release_manifests/uk.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,49 +5,50 @@
"policyengine_version": "4.12.1",
"model_package": {
"name": "policyengine-uk",
"version": "2.88.20",
"sha256": "8c3dacb868f3fb18296b8ef2475edaf543f57b8056d24a58bca59b108651f272",
"wheel_url": "https://files.pythonhosted.org/packages/32/f0/c0e7dbcc049501dc968da0a67de4976f305228328f96fe0ad08c65301c4f/policyengine_uk-2.88.20-py3-none-any.whl"
"version": "2.88.23",
"sha256": "5f8148a916a3221b5de7c8ce5971a0109412bbb693ee8f5f644b7f5a6368df1f",
"wheel_url": "https://files.pythonhosted.org/packages/23/d7/307c49731ad2ae73be8a4b0f410019d74ab6fd0b4cf270298392a1db54ef/policyengine_uk-2.88.23-py3-none-any.whl"
},
"data_package": {
"name": "policyengine-uk-data",
"version": "1.55.10",
"version": "1.55.12",
"repo_id": "policyengine/policyengine-uk-data-private",
"release_manifest_path": "release_manifest.json",
"release_manifest_revision": "655dd07e4bb9c777b00dac044949611f1feb824f"
"release_manifest_revision": "4e25f9d6b67244340161098e76bb5e67148eb1e7"
},
"certified_data_artifact": {
"data_package": {
"name": "policyengine-uk-data",
"version": "1.55.10"
"version": "1.55.12"
},
"build_id": "policyengine-uk-data-1.55.10",
"dataset": "enhanced_frs_2023_24",
"uri": "hf://policyengine/policyengine-uk-data-private/enhanced_frs_2023_24.h5@655dd07e4bb9c777b00dac044949611f1feb824f",
"sha256": "584ae33d80ca0431254610a3f8254d132da73477d31966d6446282861ecae50d"
"build_id": "policyengine-uk-data-1.55.12",
"dataset": "enhanced_frs_2024_25",
"uri": "hf://policyengine/policyengine-uk-data-private/enhanced_frs_2024_25.h5@4e25f9d6b67244340161098e76bb5e67148eb1e7",
"sha256": "d0a6a178152cfb0168c61aaf25078b10d2447aebadee92af690e973ac2371141"
},
"certification": {
"compatibility_basis": "exact_build_model_version",
"data_build_id": "policyengine-uk-data-1.55.10",
"built_with_model_version": "2.88.20",
"certified_for_model_version": "2.88.20",
"data_build_fingerprint": "sha256:77f149725a36055fd89961855230401852b0712d301c6e26d6d16565c6b23809",
"certified_by": "policyengine.py bundled manifest"
"data_build_id": "policyengine-uk-data-1.55.12",
"built_with_model_version": "2.88.23",
"certified_for_model_version": "2.88.23",
"data_build_fingerprint": "sha256:a9a1afc4f60c4614f2bbec47c318d812601e7bd1757e4121481421ec91815130",
"certified_by": "policyengine-uk-data release manifest",
"built_with_model_git_sha": "ca90dddf0d700f8d3fa45b5f2be6af857cb5141e"
},
"default_dataset": "enhanced_frs_2023_24",
"default_dataset": "enhanced_frs_2024_25",
"datasets": {
"frs_2023_24": {
"path": "frs_2023_24.h5",
"sha256": "df26d4d7af9d164aa2d064181b39290292d2f62bb26fee6126fc095fc06da292"
"frs_2024_25": {
"path": "frs_2024_25.h5",
"sha256": "715c5df79c15834dc4f62f05eee1f7813feb02df8128e8ca49ae4597ce5e94ad"
},
"enhanced_frs_2023_24": {
"path": "enhanced_frs_2023_24.h5",
"sha256": "584ae33d80ca0431254610a3f8254d132da73477d31966d6446282861ecae50d"
"enhanced_frs_2024_25": {
"path": "enhanced_frs_2024_25.h5",
"sha256": "d0a6a178152cfb0168c61aaf25078b10d2447aebadee92af690e973ac2371141"
}
},
"region_datasets": {
"national": {
"path_template": "enhanced_frs_2023_24.h5"
"path_template": "enhanced_frs_2024_25.h5"
}
}
}
44 changes: 21 additions & 23 deletions src/policyengine/data/release_manifests/uk.trace.tro.jsonld
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
"schema:name": "PolicyEngine",
"schema:url": "https://policyengine.org"
},
"schema:dateCreated": "2026-05-20T20:16:50.641086Z",
"schema:dateCreated": "2026-05-31T19:45:08.963190Z",
"schema:description": "TRACE TRO for certified runtime bundle uk-4.12.1 covering the bundle manifest, the certified dataset artifact, the country model wheel, and the country data release manifest when it is available.",
"schema:name": "policyengine uk certified bundle TRO",
"trov:createdWith": {
Expand Down Expand Up @@ -45,23 +45,23 @@
"trov:hasArtifact": {
"@id": "composition/1/artifact/data_release_manifest"
},
"trov:hasLocation": "https://huggingface.co/policyengine/policyengine-uk-data-private/resolve/655dd07e4bb9c777b00dac044949611f1feb824f/release_manifest.json"
"trov:hasLocation": "https://huggingface.co/policyengine/policyengine-uk-data-private/resolve/4e25f9d6b67244340161098e76bb5e67148eb1e7/release_manifest.json"
},
{
"@id": "arrangement/1/location/dataset",
"@type": "trov:ArtifactLocation",
"trov:hasArtifact": {
"@id": "composition/1/artifact/dataset"
},
"trov:hasLocation": "https://huggingface.co/policyengine/policyengine-uk-data-private/resolve/655dd07e4bb9c777b00dac044949611f1feb824f/enhanced_frs_2023_24.h5"
"trov:hasLocation": "https://huggingface.co/policyengine/policyengine-uk-data-private/resolve/4e25f9d6b67244340161098e76bb5e67148eb1e7/enhanced_frs_2024_25.h5"
},
{
"@id": "arrangement/1/location/model_wheel",
"@type": "trov:ArtifactLocation",
"trov:hasArtifact": {
"@id": "composition/1/artifact/model_wheel"
},
"trov:hasLocation": "https://files.pythonhosted.org/packages/32/f0/c0e7dbcc049501dc968da0a67de4976f305228328f96fe0ad08c65301c4f/policyengine_uk-2.88.20-py3-none-any.whl"
"trov:hasLocation": "https://files.pythonhosted.org/packages/23/d7/307c49731ad2ae73be8a4b0f410019d74ab6fd0b4cf270298392a1db54ef/policyengine_uk-2.88.23-py3-none-any.whl"
}
]
}
Expand All @@ -75,54 +75,52 @@
"@type": "trov:ResearchArtifact",
"schema:name": "policyengine.py bundle manifest for uk",
"trov:mimeType": "application/json",
"trov:sha256": "d73bcb0d37f3b0259f20cfb55777dee2a749a66671ca8c2f3f4816cea5bebd76"
"trov:sha256": "b03596858ae84d28b5254f6ccea641af72234762c5646dcb384dadab9e4403b4"
},
{
"@id": "composition/1/artifact/data_release_manifest",
"@type": "trov:ResearchArtifact",
"schema:name": "policyengine-uk-data release manifest 1.55.10",
"schema:name": "policyengine-uk-data release manifest 1.55.12",
"trov:mimeType": "application/json",
"trov:sha256": "9f41a0f14ca93d20e61d33419173c3fedc1c3ba295b6ca67dd3197a41643d179"
"trov:sha256": "ac2acc05a5fdcb44c91227b738e326e79c1e307c18841d32705432024de22011"
},
{
"@id": "composition/1/artifact/dataset",
"@type": "trov:ResearchArtifact",
"schema:name": "enhanced_frs_2023_24",
"schema:name": "enhanced_frs_2024_25",
"trov:mimeType": "application/x-hdf5",
"trov:sha256": "584ae33d80ca0431254610a3f8254d132da73477d31966d6446282861ecae50d"
"trov:sha256": "d0a6a178152cfb0168c61aaf25078b10d2447aebadee92af690e973ac2371141"
},
{
"@id": "composition/1/artifact/model_wheel",
"@type": "trov:ResearchArtifact",
"schema:name": "policyengine-uk==2.88.20 wheel",
"schema:name": "policyengine-uk==2.88.23 wheel",
"trov:mimeType": "application/zip",
"trov:sha256": "8c3dacb868f3fb18296b8ef2475edaf543f57b8056d24a58bca59b108651f272"
"trov:sha256": "5f8148a916a3221b5de7c8ce5971a0109412bbb693ee8f5f644b7f5a6368df1f"
}
],
"trov:hasFingerprint": {
"@id": "composition/1/fingerprint",
"@type": "trov:CompositionFingerprint",
"trov:sha256": "06c7b415b515d093711e2baad76e2a9055e483064094b7798b110c8b271ee8bb"
"trov:sha256": "c17b5134af288556c7aeaea9b86e2156fbb5a27fe4773bf70eee08598c204834"
}
},
"trov:hasPerformance": {
"@id": "trp/1",
"@type": "trov:TransparentResearchPerformance",
"pe:builtWithModelVersion": "2.88.20",
"pe:certifiedBy": "policyengine.py bundled manifest",
"pe:certifiedForModelVersion": "2.88.20",
"pe:ciGitRef": "refs/heads/main",
"pe:ciGitSha": "7c3416d538f2eb90a0d6d9d9cd0e4eee9071f58a",
"pe:ciRunUrl": "https://github.com/PolicyEngine/policyengine.py/actions/runs/26668334869",
"pe:builtWithModelGitSha": "ca90dddf0d700f8d3fa45b5f2be6af857cb5141e",
"pe:builtWithModelVersion": "2.88.23",
"pe:certifiedBy": "policyengine-uk-data release manifest",
"pe:certifiedForModelVersion": "2.88.23",
"pe:compatibilityBasis": "exact_build_model_version",
"pe:dataBuildFingerprint": "sha256:77f149725a36055fd89961855230401852b0712d301c6e26d6d16565c6b23809",
"pe:dataBuildId": "policyengine-uk-data-1.55.10",
"pe:emittedIn": "github-actions",
"rdfs:comment": "Certification of build policyengine-uk-data-1.55.10 for policyengine-uk 2.88.20.",
"pe:dataBuildFingerprint": "sha256:a9a1afc4f60c4614f2bbec47c318d812601e7bd1757e4121481421ec91815130",
"pe:dataBuildId": "policyengine-uk-data-1.55.12",
"pe:emittedIn": "local",
"rdfs:comment": "Certification of build policyengine-uk-data-1.55.12 for policyengine-uk 2.88.23.",
"trov:accessedArrangement": {
"@id": "arrangement/1"
},
"trov:startedAtTime": "2026-05-20T20:16:50.641086Z",
"trov:startedAtTime": "2026-05-31T19:45:08.963190Z",
"trov:wasConductedBy": {
"@id": "trs"
}
Expand Down
12 changes: 6 additions & 6 deletions src/policyengine/tax_benefit_models/uk/datasets.py
Original file line number Diff line number Diff line change
Expand Up @@ -102,8 +102,8 @@ def __repr__(self) -> str:

def create_datasets(
datasets: list[str] = [
"frs_2023_24",
"enhanced_frs_2023_24",
"frs_2024_25",
"enhanced_frs_2024_25",
],
years: list[int] = [2026, 2027, 2028, 2029, 2030],
data_folder: str = "./data",
Expand Down Expand Up @@ -184,8 +184,8 @@ def create_datasets(

def load_datasets(
datasets: list[str] = [
"frs_2023_24",
"enhanced_frs_2023_24",
"frs_2024_25",
"enhanced_frs_2024_25",
],
years: list[int] = [2026, 2027, 2028, 2029, 2030],
data_folder: str = "./data",
Expand All @@ -212,8 +212,8 @@ def load_datasets(

def ensure_datasets(
datasets: list[str] = [
"frs_2023_24",
"enhanced_frs_2023_24",
"frs_2024_25",
"enhanced_frs_2024_25",
],
years: list[int] = [2026, 2027, 2028, 2029, 2030],
data_folder: str = "./data",
Expand Down
17 changes: 11 additions & 6 deletions tests/test_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,14 @@
from policyengine.tax_benefit_models.uk import uk_latest
from policyengine.tax_benefit_models.us import us_latest

UK_MODEL_VERSION = "2.88.23"
UK_DATA_RELEASE_VERSION = "1.55.12"
UK_DATA_RELEASE_REVISION = "4e25f9d6b67244340161098e76bb5e67148eb1e7"
UK_DEFAULT_DATASET_URI = (
"hf://policyengine/policyengine-uk-data-private/"
f"enhanced_frs_2024_25.h5@{UK_DATA_RELEASE_REVISION}"
)


class TestUKModel:
"""Tests for PolicyEngine UK model."""
Expand All @@ -29,13 +37,10 @@ def test_has_release_manifest_metadata(self):
assert uk_latest.release_manifest is not None
assert uk_latest.release_manifest.country_id == "uk"
assert uk_latest.model_package.name == "policyengine-uk"
assert uk_latest.model_package.version == "2.88.20"
assert uk_latest.model_package.version == UK_MODEL_VERSION
assert uk_latest.data_package.name == "policyengine-uk-data"
assert uk_latest.data_package.version == "1.55.10"
assert (
uk_latest.default_dataset_uri
== "hf://policyengine/policyengine-uk-data-private/enhanced_frs_2023_24.h5@655dd07e4bb9c777b00dac044949611f1feb824f"
)
assert uk_latest.data_package.version == UK_DATA_RELEASE_VERSION
assert uk_latest.default_dataset_uri == UK_DEFAULT_DATASET_URI

def test_has_hundreds_of_parameters(self):
"""UK model should have hundreds of parameters."""
Expand Down
Loading
Loading