diff --git a/changelog.d/535.changed.md b/changelog.d/535.changed.md new file mode 100644 index 00000000..f5e36998 --- /dev/null +++ b/changelog.d/535.changed.md @@ -0,0 +1 @@ +Bump policyengine-uk to 2.102.3, which rebases the absolute poverty line to HBAI's FYE 2025 reference year (431.69 BHC / 373.89 AHC a week at FYE 2025, as DWP has reported it since March 2026), and certify the UK data release `policyengine-uk-data-1.56.16` (enhanced_frs_2024_25) for it on the publisher's compatibility claim. UK absolute poverty rates rise: in 2026-27 on the certified enhanced FRS, by about 4 points overall and about 7 points for children after housing costs. The bump also brings every policyengine-uk change since 2.90.2, including relative poverty measured on the median over individuals (policyengine-uk#1865). diff --git a/pyproject.toml b/pyproject.toml index 20f856fc..800b3c23 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -42,12 +42,12 @@ graph = [ models = [ "policyengine-core==3.32.5", "policyengine-us==2.2.1", - "policyengine-uk==2.90.2", + "policyengine-uk==2.102.3", "spm-calculator==1.0.0", ] uk = [ "policyengine-core==3.32.5", - "policyengine-uk==2.90.2", + "policyengine-uk==2.102.3", ] us = [ "policyengine-core==3.32.5", @@ -71,7 +71,7 @@ dev = [ "hypothesis>=6.100.0", "policyengine-core==3.32.5", "policyengine-us==2.2.1", - "policyengine-uk==2.90.2", + "policyengine-uk==2.102.3", "spm-calculator==1.0.0", ] diff --git a/src/policyengine/data/bundle/manifest.json b/src/policyengine/data/bundle/manifest.json index 87bfbaf6..7db81cb1 100644 --- a/src/policyengine/data/bundle/manifest.json +++ b/src/policyengine/data/bundle/manifest.json @@ -22,7 +22,7 @@ "built_with_model_git_sha": "12a1e028afeef08d8b2d74ee03fd9de3a78b2dd3", "built_with_model_version": "2.89.2", "certified_by": "policyengine.py bundle certification", - "certified_for_model_version": "2.90.2", + "certified_for_model_version": "2.102.3", "compatibility_basis": "legacy_compatible_model_package", "data_build_fingerprint": "sha256:6bfff835b504094c05342d2b4d770d2d94c8c1adcb15c4468931f53b21a89ea9", "data_build_id": "policyengine-uk-data-1.56.16" @@ -41,7 +41,7 @@ "data_package": { "name": "policyengine-uk-data", "release_manifest_path": "releases/1.56.16/release_manifest.json", - "release_manifest_revision": "2966541fca275ab5ccb6cfb659b010b1db37ad49", + "release_manifest_revision": "78788372fec47fc8df835bd32307ef61eaed83c2", "repo_id": "policyengine/policyengine-uk-data-private", "repo_type": "model", "version": "1.56.16" @@ -95,9 +95,9 @@ "default_dataset_uri": "hf://policyengine/policyengine-uk-data-private/enhanced_frs_2024_25.h5@1.56.16", "model_package": { "name": "policyengine-uk", - "sha256": "f100ef97e20b29b84138078f1dbc5b83f8857e6bc74b745fc6abef7ea1eeadf2", - "version": "2.90.2", - "wheel_url": "https://files.pythonhosted.org/packages/ec/da/658bff2df6094bd7bf2b0f561ff60fd41508adbd0a3af29b4553c83bc678/policyengine_uk-2.90.2-py3-none-any.whl" + "sha256": "f02a76712a3edf9983c713c1db42e9653a6e974e4ce335dd4b5676bbc2bcd636", + "version": "2.102.3", + "wheel_url": "https://files.pythonhosted.org/packages/37/e6/e8d9069d498f1510a1380f24a78e957902d01f00b10248c146d6710d5b37/policyengine_uk-2.102.3-py3-none-any.whl" }, "policyengine_version": "6.1.2", "region_datasets": { @@ -105,9 +105,9 @@ "path_template": "enhanced_frs_2024_25.h5" } }, - "release_manifest_uri": "https://huggingface.co/policyengine/policyengine-uk-data-private/resolve/2966541fca275ab5ccb6cfb659b010b1db37ad49/releases/1.56.16/release_manifest.json", + "release_manifest_uri": "https://huggingface.co/policyengine/policyengine-uk-data-private/resolve/78788372fec47fc8df835bd32307ef61eaed83c2/releases/1.56.16/release_manifest.json", "schema_version": 1, - "source_manifest_uri": "hf://model/policyengine/policyengine-uk-data-private@2966541fca275ab5ccb6cfb659b010b1db37ad49/releases/1.56.16/release_manifest.json", + "source_manifest_uri": "hf://model/policyengine/policyengine-uk-data-private@78788372fec47fc8df835bd32307ef61eaed83c2/releases/1.56.16/release_manifest.json", "version": "policyengine-uk-data-1.56.16" }, "us": { @@ -305,10 +305,10 @@ "policyengine-uk": { "country": "uk", "import_name": "policyengine_uk", - "install_requirement": "policyengine-uk==2.90.2", + "install_requirement": "policyengine-uk==2.102.3", "name": "policyengine-uk", "role": "country_model", - "version": "2.90.2" + "version": "2.102.3" }, "policyengine-us": { "country": "us", diff --git a/src/policyengine/data/bundle/uk.trace.tro.jsonld b/src/policyengine/data/bundle/uk.trace.tro.jsonld index d35f658c..32ebdd3c 100644 --- a/src/policyengine/data/bundle/uk.trace.tro.jsonld +++ b/src/policyengine/data/bundle/uk.trace.tro.jsonld @@ -45,7 +45,7 @@ "trov:hasArtifact": { "@id": "composition/1/artifact/data_release_manifest" }, - "trov:hasLocation": "https://huggingface.co/policyengine/policyengine-uk-data-private/resolve/2966541fca275ab5ccb6cfb659b010b1db37ad49/releases/1.56.16/release_manifest.json" + "trov:hasLocation": "https://huggingface.co/policyengine/policyengine-uk-data-private/resolve/78788372fec47fc8df835bd32307ef61eaed83c2/releases/1.56.16/release_manifest.json" }, { "@id": "arrangement/1/location/dataset", @@ -61,7 +61,7 @@ "trov:hasArtifact": { "@id": "composition/1/artifact/model_wheel" }, - "trov:hasLocation": "https://files.pythonhosted.org/packages/ec/da/658bff2df6094bd7bf2b0f561ff60fd41508adbd0a3af29b4553c83bc678/policyengine_uk-2.90.2-py3-none-any.whl" + "trov:hasLocation": "https://files.pythonhosted.org/packages/37/e6/e8d9069d498f1510a1380f24a78e957902d01f00b10248c146d6710d5b37/policyengine_uk-2.102.3-py3-none-any.whl" } ] } @@ -75,14 +75,14 @@ "@type": "trov:ResearchArtifact", "schema:name": "policyengine.py bundle manifest for uk", "trov:mimeType": "application/json", - "trov:sha256": "d7e6308efd9e711f238a4d4a3aa8bc07e0962f3f4c9596e9ad6490ff5c63e45a" + "trov:sha256": "330df26dd0b1b98cf70871b5cf35de1cbe71e42905f07fd1b3d1b2495bbce121" }, { "@id": "composition/1/artifact/data_release_manifest", "@type": "trov:ResearchArtifact", "schema:name": "policyengine-uk-data release manifest 1.56.16", "trov:mimeType": "application/json", - "trov:sha256": "9bfccac472d74b044596205ee153b0c81fcd8d93e84f5820c7081e30f2cab0c5" + "trov:sha256": "cb61e3d897fbfa0cc079edc140aebc8947b1a685f581a420de91170ce2686155" }, { "@id": "composition/1/artifact/dataset", @@ -94,15 +94,15 @@ { "@id": "composition/1/artifact/model_wheel", "@type": "trov:ResearchArtifact", - "schema:name": "policyengine-uk==2.90.2 wheel", + "schema:name": "policyengine-uk==2.102.3 wheel", "trov:mimeType": "application/zip", - "trov:sha256": "f100ef97e20b29b84138078f1dbc5b83f8857e6bc74b745fc6abef7ea1eeadf2" + "trov:sha256": "f02a76712a3edf9983c713c1db42e9653a6e974e4ce335dd4b5676bbc2bcd636" } ], "trov:hasFingerprint": { "@id": "composition/1/fingerprint", "@type": "trov:CompositionFingerprint", - "trov:sha256": "d79d22d81bd1d48bfaf836ab3c03ba79721e77594b9695929cb163b872f00373" + "trov:sha256": "5bd332aeeddba294dbfae7c3640cc6dbee25a022ec5766876b3f706818ca1415" } }, "trov:hasPerformance": { @@ -111,12 +111,12 @@ "pe:builtWithModelGitSha": "12a1e028afeef08d8b2d74ee03fd9de3a78b2dd3", "pe:builtWithModelVersion": "2.89.2", "pe:certifiedBy": "policyengine.py bundle certification", - "pe:certifiedForModelVersion": "2.90.2", + "pe:certifiedForModelVersion": "2.102.3", "pe:compatibilityBasis": "legacy_compatible_model_package", "pe:dataBuildFingerprint": "sha256:6bfff835b504094c05342d2b4d770d2d94c8c1adcb15c4468931f53b21a89ea9", "pe:dataBuildId": "policyengine-uk-data-1.56.16", "pe:emittedIn": "repository-bundle", - "rdfs:comment": "Certification of build policyengine-uk-data-1.56.16 for policyengine-uk 2.90.2.", + "rdfs:comment": "Certification of build policyengine-uk-data-1.56.16 for policyengine-uk 2.102.3.", "trov:accessedArrangement": { "@id": "arrangement/1" }, diff --git a/src/policyengine/data/bundle/us.trace.tro.jsonld b/src/policyengine/data/bundle/us.trace.tro.jsonld index f28abb5d..55c0eab4 100644 --- a/src/policyengine/data/bundle/us.trace.tro.jsonld +++ b/src/policyengine/data/bundle/us.trace.tro.jsonld @@ -74,7 +74,7 @@ "@type": "trov:ResearchArtifact", "schema:name": "policyengine.py bundle manifest for us", "trov:mimeType": "application/json", - "trov:sha256": "d7e6308efd9e711f238a4d4a3aa8bc07e0962f3f4c9596e9ad6490ff5c63e45a" + "trov:sha256": "330df26dd0b1b98cf70871b5cf35de1cbe71e42905f07fd1b3d1b2495bbce121" }, { "@id": "composition/1/artifact/data_release_manifest", @@ -101,7 +101,7 @@ "trov:hasFingerprint": { "@id": "composition/1/fingerprint", "@type": "trov:CompositionFingerprint", - "trov:sha256": "75052afc5a871ead813d47d3a5dd61b7085e963a164e7047870e705919420192" + "trov:sha256": "ccffcc3565d3989d61421729259834e0ff3c990151e533d306a5bce361fb9a60" } }, "trov:hasPerformance": { diff --git a/tests/fixtures/household_calculator_snapshots/uk_model_surface.json b/tests/fixtures/household_calculator_snapshots/uk_model_surface.json index 80334585..dd10f62d 100644 --- a/tests/fixtures/household_calculator_snapshots/uk_model_surface.json +++ b/tests/fixtures/household_calculator_snapshots/uk_model_surface.json @@ -5,7 +5,7 @@ "has_income_tax": true, "has_region_registry": true, "model_package_name": "policyengine-uk", - "num_parameters_bucketed_100s": 23, - "num_variables_bucketed_100s": 8, + "num_parameters_bucketed_100s": 26, + "num_variables_bucketed_100s": 9, "region_registry_country": "uk" } diff --git a/tests/test_models.py b/tests/test_models.py index e9c3e5eb..ea799390 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -43,7 +43,7 @@ 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.90.2" + assert uk_latest.model_package.version == "2.102.3" assert uk_latest.data_package.name == "policyengine-uk-data" assert uk_latest.data_package.version == "1.56.16" assert ( diff --git a/tests/test_release_manifests.py b/tests/test_release_manifests.py index f1c75d17..485cc1d0 100644 --- a/tests/test_release_manifests.py +++ b/tests/test_release_manifests.py @@ -72,11 +72,11 @@ "hf://policyengine/populace-us/populace_us_2024_acs_local.h5" f"@{US_LOCAL_AREA_RELEASE_ID}" ) -UK_MODEL_VERSION = "2.90.2" +UK_MODEL_VERSION = "2.102.3" UK_BUILT_WITH_MODEL_VERSION = "2.89.2" UK_DATA_RELEASE_VERSION = "1.56.16" UK_DATA_RELEASE_ID = "policyengine-uk-data-1.56.16" -UK_DATA_RELEASE_REVISION = "2966541fca275ab5ccb6cfb659b010b1db37ad49" +UK_DATA_RELEASE_REVISION = "78788372fec47fc8df835bd32307ef61eaed83c2" UK_DATA_RELEASE_PATH = "releases/1.56.16/release_manifest.json" # The prior certified default, kept resolvable via dataset_overlays. UK_POPULACE_RELEASE_ID = "populace-uk-2023-dd68c73-4aa4b14-20260619T023711Z" diff --git a/uv.lock b/uv.lock index b353ba9f..1a948765 100644 --- a/uv.lock +++ b/uv.lock @@ -1884,9 +1884,9 @@ requires-dist = [ { name = "policyengine-core", marker = "extra == 'models'", specifier = "==3.32.5" }, { name = "policyengine-core", marker = "extra == 'uk'", specifier = "==3.32.5" }, { name = "policyengine-core", marker = "extra == 'us'", specifier = "==3.32.5" }, - { name = "policyengine-uk", marker = "extra == 'dev'", specifier = "==2.90.2" }, - { name = "policyengine-uk", marker = "extra == 'models'", specifier = "==2.90.2" }, - { name = "policyengine-uk", marker = "extra == 'uk'", specifier = "==2.90.2" }, + { name = "policyengine-uk", marker = "extra == 'dev'", specifier = "==2.102.3" }, + { name = "policyengine-uk", marker = "extra == 'models'", specifier = "==2.102.3" }, + { name = "policyengine-uk", marker = "extra == 'uk'", specifier = "==2.102.3" }, { name = "policyengine-us", marker = "extra == 'dev'", specifier = "==2.2.1" }, { name = "policyengine-us", marker = "extra == 'models'", specifier = "==2.2.1" }, { name = "policyengine-us", marker = "extra == 'us'", specifier = "==2.2.1" }, @@ -1935,7 +1935,7 @@ wheels = [ [[package]] name = "policyengine-uk" -version = "2.90.2" +version = "2.102.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "microdf-python" }, @@ -1943,9 +1943,9 @@ dependencies = [ { name = "pydantic" }, { name = "tables" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/40/e1/6652fd4ff8806d81b7c846ce2baeef4b9a8457ed380bb0853419d3cf36d9/policyengine_uk-2.90.2.tar.gz", hash = "sha256:c9baeaded1bb6d6f5ca5fcd962b80a198509513737c194aa867b0ef6d13d6a09", size = 1237478, upload-time = "2026-08-13T05:30:05.961Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a7/49/1db19a439463f1304e93521debf40794f7b3483d37356c6d99c346112d0f/policyengine_uk-2.102.3.tar.gz", hash = "sha256:cdb0900e78818b46fdb79b2a8299bce6c7d6c14692e26cf38367781beea607be", size = 1314347, upload-time = "2026-09-28T19:50:44.714Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ec/da/658bff2df6094bd7bf2b0f561ff60fd41508adbd0a3af29b4553c83bc678/policyengine_uk-2.90.2-py3-none-any.whl", hash = "sha256:f100ef97e20b29b84138078f1dbc5b83f8857e6bc74b745fc6abef7ea1eeadf2", size = 2034933, upload-time = "2026-08-13T05:30:03.884Z" }, + { url = "https://files.pythonhosted.org/packages/37/e6/e8d9069d498f1510a1380f24a78e957902d01f00b10248c146d6710d5b37/policyengine_uk-2.102.3-py3-none-any.whl", hash = "sha256:f02a76712a3edf9983c713c1db42e9653a6e974e4ce335dd4b5676bbc2bcd636", size = 2189605, upload-time = "2026-09-28T19:50:42.472Z" }, ] [[package]]