diff --git a/.github/workflows/code_changes.yaml b/.github/workflows/code_changes.yaml
index 8c2997685..2bd433a49 100644
--- a/.github/workflows/code_changes.yaml
+++ b/.github/workflows/code_changes.yaml
@@ -50,11 +50,3 @@ jobs:
run: make test
env:
HUGGING_FACE_TOKEN: ${{ secrets.HUGGING_FACE_TOKEN }}
- - name: Build documentation
- run: make documentation
- - name: Deploy documentation
- uses: JamesIves/github-pages-deploy-action@releases/v3
- with:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- BRANCH: gh-pages # The branch the action should deploy to.
- FOLDER: docs/book/_build/html # The folder the action should deploy.
diff --git a/.github/workflows/pr_code_changes.yaml b/.github/workflows/pr_code_changes.yaml
index 2da6f1778..bc2c93975 100644
--- a/.github/workflows/pr_code_changes.yaml
+++ b/.github/workflows/pr_code_changes.yaml
@@ -21,10 +21,7 @@ jobs:
with:
args: ". -l 79 --check"
Test:
- strategy:
- matrix:
- os: [macos-latest]
- runs-on: ${{ matrix.os }}
+ runs-on: macos-latest
permissions:
contents: "read"
id-token: "write"
diff --git a/changelog_entry.yaml b/changelog_entry.yaml
index e69de29bb..c4b7bd812 100644
--- a/changelog_entry.yaml
+++ b/changelog_entry.yaml
@@ -0,0 +1,7 @@
+- bump: minor
+ changes:
+ added:
+ - Documentation on growth factors.
+ - Cleaned up non-standard uprating factors for wealth variables.
+ - Added triple lock uprating detail and reform switches.
+ - Added ability to download entity datasets from HuggingFace.
diff --git a/docs/book/assumptions/growthfactors.ipynb b/docs/book/assumptions/growthfactors.ipynb
deleted file mode 100644
index 22ffbaf62..000000000
--- a/docs/book/assumptions/growthfactors.ipynb
+++ /dev/null
@@ -1,181 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "id": "cae6dd91",
- "metadata": {},
- "source": [
- "# Growth factors\n",
- "\n",
- "This page contains the growth factors used to uprate values in the model. These are used to uprate values from one year to the next, for example, to increase employment incomes in line with average earnings growth.\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "id": "8036244a",
- "metadata": {
- "tags": [
- "hide-input"
- ]
- },
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "
\n",
- " | \n",
- " \n",
- "\n",
- " Loading ITables v2.4.2 from the internet...\n",
- " (need help?) | \n",
- "
\n",
- "\n",
- "\n"
- ],
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "from policyengine_uk.data.economic_assumptions import BASELINE_GROWFACTORS\n",
- "\n",
- "BASELINE_GROWFACTORS = BASELINE_GROWFACTORS.copy()\n",
- "\n",
- "for col in BASELINE_GROWFACTORS.columns[2:]:\n",
- " BASELINE_GROWFACTORS[col] *= 100\n",
- "\n",
- "import itables\n",
- "\n",
- "BASELINE_GROWFACTORS\n",
- "\n",
- "# show in itables\n",
- "itables.show(BASELINE_GROWFACTORS, name=\"Baseline growth factors\", max_rows=1000)"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "policyengine",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.11.13"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/docs/book/assumptions/growthfactors.md b/docs/book/assumptions/growthfactors.md
new file mode 100644
index 000000000..5dd1fe838
--- /dev/null
+++ b/docs/book/assumptions/growthfactors.md
@@ -0,0 +1,96 @@
+# Economic assumptions
+
+We project economic variables using year-over-year growth rates stored in `parameters/gov/economic_assumptions/yoy_growth.yaml`. We generate index values from these rates to update household variables. We source all values from the OBR's Economic and Fiscal Outlook (March 2025) unless we specify otherwise.
+
+## Consumer price index
+
+We use the OBR's CPI projections to drive most benefit and consumption variables.
+
+| Fiscal year | 2022 | 2023 | 2024 | 2025 | 2026 | 2027 | 2028 | 2029 |
+|-------------|------|------|------|------|------|------|------|------|
+| Growth rate | 10.0% | 5.7% | 2.3% | 3.2% | 1.9% | 2.0% | 2.0% | 2.0% |
+
+We apply CPI to these variables:
+- All reported benefits– `attendance_allowance_reported`, `carers_allowance_reported`, `child_benefit_reported`, `child_tax_credit_reported`, `dla_m_reported`, `dla_sc_reported`, `esa_contrib_reported`, `esa_income_reported`, `housing_benefit_reported`, `iidb_reported`, `incapacity_benefit_reported`, `income_support_reported`, `jsa_contrib_reported`, `jsa_income_reported`, `maternity_allowance_reported`, `pension_credit_reported`, `pip_dl_reported`, `pip_m_reported`, `sda_reported`, `state_pension_reported`, `universal_credit_reported`, `winter_fuel_allowance_reported`, `working_tax_credit_reported`
+- All consumption categories– `alcohol_and_tobacco_consumption`, `clothing_and_footwear_consumption`, `communication_consumption`, `domestic_energy_consumption`, `education_consumption`, `food_and_non_alcoholic_beverages_consumption`, `health_consumption`, `household_furnishings_consumption`, `housing_water_and_electricity_consumption`, `miscellaneous_consumption`, `recreation_consumption`, `restaurants_and_hotels_consumption`, `transport_consumption`
+- Other variables– `afcs_reported`, `bsp_reported`, `childcare_expenses`, `diesel_spending`, `free_school_fruit_veg`, `free_school_meals`, `free_school_milk`, `maintenance_expenses`, `petrol_spending`, `statutory_maternity_pay`, `statutory_paternity_pay`, `statutory_sick_pay`, `state_pension`
+
+## Average earnings
+
+We apply the OBR's wage growth forecasts to employment-related variables.
+
+| Fiscal year | 2022 | 2023 | 2024 | 2025 | 2026 | 2027 | 2028 | 2029 |
+|-------------|------|------|------|------|------|------|------|------|
+| Growth rate | 6.4% | 6.9% | 4.7% | 3.7% | 2.2% | 2.1% | 2.3% | 2.5% |
+
+We use average earnings for these variables: `employee_pension_contributions`, `employer_pension_contributions`, `employment_income`, `employment_income_before_lsr`, `personal_pension_contributions`, `student_loan_repayments`
+
+## Per capita GDP
+
+We derive these rates from OBR GDP growth and ONS population projections.
+
+| Fiscal year | 2022 | 2023 | 2024 | 2025 | 2026 | 2027 | 2028 | 2029 |
+|-------------|------|------|------|------|------|------|------|------|
+| Growth rate | 9.2% | 5.0% | 3.8% | 2.8% | 2.8% | 3.1% | 3.3% | 3.3% |
+
+We use per capita GDP for these variables: `capital_gains`, `capital_gains_before_response`, `corporate_wealth`, `dividend_income`, `gross_financial_wealth`, `lump_sum_income`, `main_residence_value`, `maintenance_income`, `miscellaneous_income`, `mortgage_capital_repayment`, `net_financial_wealth`, `non_residential_property_value`, `other_investment_income`, `other_residential_property_value`, `owned_land`, `pension_income`, `private_transfer_income`, `property_income`, `savings`, `savings_interest_income`, `sublet_income`
+
+## Council tax
+
+We use the OBR's Council Tax receipts and projections.
+
+| Fiscal year | 2022 | 2023 | 2024 | 2025 | 2026 | 2027 | 2028 | 2029 |
+|-------------|------|------|------|------|------|------|------|------|
+| Growth rate | 5.3% | 5.6% | 6.4% | 4.6% | 4.5% | 4.6% | 4.5% | 4.5% |
+
+We apply this to: `council_tax`
+
+## Mortgage interest
+
+We use the OBR's mortgage interest rate index growth rates.
+
+| Fiscal year | 2022 | 2023 | 2024 | 2025 | 2026 | 2027 | 2028 | 2029 |
+|-------------|------|------|------|------|------|------|------|------|
+| Growth rate | 26.2% | 48.5% | 22.1% | 13.6% | 12.6% | 8.2% | 4.2% | 4.7% |
+
+We apply this to: `mortgage_interest_repayment`
+
+## Private pension index
+
+We use RPI year-on-year change from the previous year, capped at 5%.
+
+| Fiscal year | 2022 | 2023 | 2024 | 2025 | 2026 | 2027 | 2028 | 2029 |
+|-------------|------|------|------|------|------|------|------|------|
+| Growth rate | 5.0% | 5.0% | 5.0% | 4.7% | 3.7% | 2.2% | 2.1% | 2.3% |
+
+We apply this to: `private_pension_income`
+
+## Rent
+
+We use the OBR's rental growth projections.
+
+| Fiscal year | 2022 | 2023 | 2024 | 2025 | 2026 | 2027 | 2028 | 2029 |
+|-------------|------|------|------|------|------|------|------|------|
+| Growth rate | 4.0% | 6.3% | 7.4% | 5.7% | 3.6% | 2.7% | 2.3% | 2.4% |
+
+We apply this to: `rent`
+
+## Per capita mixed income
+
+We derive these rates from OBR mixed income growth and ONS population projections.
+
+| Fiscal year | 2022 | 2023 | 2024 | 2025 | 2026 | 2027 | 2028 | 2029 |
+|-------------|------|------|------|------|------|------|------|------|
+| Growth rate | 6.3% | 2.4% | 4.8% | 4.7% | 3.1% | 3.1% | 3.6% | 3.8% |
+
+We apply this to: `self_employment_income`
+
+## Population
+
+We use ONS population projections.
+
+| Fiscal year | 2022 | 2023 | 2024 | 2025 | 2026 | 2027 | 2028 | 2029 |
+|-------------|------|------|------|------|------|------|------|------|
+| Growth rate | 0.3% | 1.4% | 1.0% | 1.1% | 0.7% | 0.8% | 0.4% | 0.5% |
+
+We apply this to: `household_weight`
\ No newline at end of file
diff --git a/policyengine_uk/__init__.py b/policyengine_uk/__init__.py
index 9686788cb..352fca387 100644
--- a/policyengine_uk/__init__.py
+++ b/policyengine_uk/__init__.py
@@ -13,5 +13,9 @@
from pathlib import Path
import os
from policyengine_core.taxbenefitsystems import TaxBenefitSystem
+from policyengine_uk.data.economic_assumptions import (
+ BASELINE_GROWFACTORS,
+ apply_growth_factors,
+)
REPO = Path(__file__).parent
diff --git a/policyengine_uk/data/__init__.py b/policyengine_uk/data/__init__.py
index b2cb2aa39..4603c15be 100644
--- a/policyengine_uk/data/__init__.py
+++ b/policyengine_uk/data/__init__.py
@@ -1,5 +1 @@
from policyengine_uk.data.dataset_schema import UKDataset
-from policyengine_uk.data.economic_assumptions import (
- BASELINE_GROWFACTORS,
- apply_growth_factors,
-)
diff --git a/policyengine_uk/data/dataset_schema.py b/policyengine_uk/data/dataset_schema.py
index 675bef0a0..f85619264 100644
--- a/policyengine_uk/data/dataset_schema.py
+++ b/policyengine_uk/data/dataset_schema.py
@@ -1,5 +1,11 @@
import pandas as pd
-from policyengine_uk import Microsimulation
+from typing import TYPE_CHECKING
+
+if TYPE_CHECKING:
+ from policyengine_uk import Microsimulation
+
+from pathlib import Path
+import h5py
class UKDataset:
@@ -7,6 +13,27 @@ class UKDataset:
benunit: pd.DataFrame
household: pd.DataFrame
+ @staticmethod
+ def validate_file_path(file_path: str):
+ if not file_path.endswith(".h5"):
+ raise ValueError("File path must end with '.h5' for UKDataset.")
+ if not Path(file_path).exists():
+ raise FileNotFoundError(f"File not found: {file_path}")
+
+ # Check if the file contains time_period, person, benunit, and household datasets
+ with h5py.File(file_path, "r") as f:
+ required_datasets = [
+ "time_period",
+ "person",
+ "benunit",
+ "household",
+ ]
+ for dataset in required_datasets:
+ if dataset not in f:
+ raise ValueError(
+ f"Dataset '{dataset}' not found in the file: {file_path}"
+ )
+
def __init__(
self,
file_path: str = None,
@@ -16,6 +43,7 @@ def __init__(
fiscal_year: int = 2025,
):
if file_path is not None:
+ self.validate_file_path(file_path)
with pd.HDFStore(file_path) as f:
self.person = f["person"]
self.benunit = f["benunit"]
@@ -59,7 +87,9 @@ def copy(self):
)
@staticmethod
- def from_simulation(simulation: Microsimulation, fiscal_year: int = 2025):
+ def from_simulation(
+ simulation: "Microsimulation", fiscal_year: int = 2025
+ ):
entity_dfs = {}
for entity in ["person", "benunit", "household"]:
diff --git a/policyengine_uk/data/economic_assumptions.py b/policyengine_uk/data/economic_assumptions.py
index dd05f77b7..64b345709 100644
--- a/policyengine_uk/data/economic_assumptions.py
+++ b/policyengine_uk/data/economic_assumptions.py
@@ -2,7 +2,7 @@
from pathlib import Path
from policyengine_uk.data.dataset_schema import UKDataset
-START_YEAR = 2020
+START_YEAR = 2022
END_YEAR = 2029
@@ -13,40 +13,29 @@ def create_policyengine_uprating_factors_table(print_diff=True):
variable_names = []
years = []
- index_values = []
+ yoy_values = []
parameter_by_variable = {}
for variable in system.variables.values():
if variable.uprating is not None:
- parameter = system.parameters.get_child(variable.uprating)
+ parameter = system.parameters.get_child(
+ variable.uprating.replace("indices", "yoy_growth")
+ )
parameter_by_variable[variable.name] = parameter.name
- start_value = parameter(START_YEAR)
for year in range(START_YEAR, END_YEAR + 1):
variable_names.append(variable.name)
- years.append(str(year)) # Convert to string here
- growth = parameter(year) / start_value
- index_values.append(round(growth, 3))
+ years.append(str(year))
+ yoy_values.append(round(parameter(year), 3))
df["Variable"] = variable_names
df["Year"] = years
- df["Value"] = index_values
+ df["Value"] = yoy_values
# Convert to there is a column for each year
df = df.pivot(index="Variable", columns="Year", values="Value")
df = df.sort_values("Variable")
- # Create a table with growth factors by year
-
- df_growth = df.copy()
- for year in range(END_YEAR, START_YEAR, -1):
- year_str = str(year)
- prev_year_str = str(year - 1)
- df_growth[year_str] = round(
- df_growth[year_str] / df_growth[prev_year_str] - 1, 3
- )
- df_growth[str(START_YEAR)] = 0
-
file_path = Path(__file__).parent / "uprating_growth_factors.csv"
# Read old CSV if it exists
@@ -57,16 +46,16 @@ def create_policyengine_uprating_factors_table(print_diff=True):
old_df.columns = old_df.columns.astype(str)
# Prepare new dataframe
- df_growth["Parameter"] = df.index.map(parameter_by_variable)
- df_growth = df_growth[
+ df["Parameter"] = df.index.map(parameter_by_variable)
+ df = df[
["Parameter"] + [str(year) for year in range(START_YEAR, END_YEAR + 1)]
]
# Print diff if old CSV existed and print_diff is True
if old_df is not None and print_diff:
- print_csv_diff(old_df, df_growth)
+ print_csv_diff(old_df, df)
# Save new CSV
- df_growth.to_csv(file_path)
+ df.to_csv(file_path)
return pd.read_csv(file_path)
diff --git a/policyengine_uk/data/uprating_growth_factors.csv b/policyengine_uk/data/uprating_growth_factors.csv
index 69243548c..f0f6400db 100644
--- a/policyengine_uk/data/uprating_growth_factors.csv
+++ b/policyengine_uk/data/uprating_growth_factors.csv
@@ -1,83 +1,83 @@
-Variable,Parameter,2020,2021,2022,2023,2024,2025,2026,2027,2028,2029
-afcs_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-alcohol_and_tobacco_consumption,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-attendance_allowance_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-bsp_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-capital_gains,gov.economic_assumptions.indices.obr.per_capita.gdp,0,0.072,0.138,0.066,0.08,0.068,0.056,0.045,0.034,0.035
-capital_gains_before_response,gov.economic_assumptions.indices.obr.per_capita.gdp,0,0.072,0.138,0.066,0.08,0.068,0.056,0.045,0.034,0.035
-carers_allowance_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-child_benefit_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-child_tax_credit_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-childcare_expenses,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-clothing_and_footwear_consumption,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-communication_consumption,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-corporate_wealth,household.wealth.corporate_wealth,0,0.0,-0.109,0.004,0.03,0.031,0.035,0.035,0.035,0.0
-council_tax,gov.obr.council_tax,0,0.0,0.0,0.0,0.064,0.046,0.045,0.046,0.045,0.045
-diesel_spending,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-dividend_income,gov.economic_assumptions.indices.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
-dla_m_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-dla_sc_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-domestic_energy_consumption,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-education_consumption,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-employee_pension_contributions,gov.economic_assumptions.indices.obr.average_earnings,0,0.058,0.065,0.068,0.047,0.038,0.021,0.021,0.023,0.025
-employer_pension_contributions,gov.economic_assumptions.indices.obr.average_earnings,0,0.058,0.065,0.068,0.047,0.038,0.021,0.021,0.023,0.025
-employment_income,gov.economic_assumptions.indices.obr.average_earnings,0,0.058,0.065,0.068,0.047,0.038,0.021,0.021,0.023,0.025
-employment_income_before_lsr,gov.economic_assumptions.indices.obr.average_earnings,0,0.058,0.065,0.068,0.047,0.038,0.021,0.021,0.023,0.025
-esa_contrib_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-esa_income_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-food_and_non_alcoholic_beverages_consumption,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-free_school_fruit_veg,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-free_school_meals,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-free_school_milk,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-gross_financial_wealth,household.wealth.financial_assets,0,0.014,-0.108,0.004,0.03,0.032,0.034,0.034,0.036,0.0
-health_consumption,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-household_furnishings_consumption,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-household_weight,gov.ons.population,0,0.004,0.003,0.014,0.01,0.011,0.007,0.008,0.004,0.005
-housing_benefit_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-housing_water_and_electricity_consumption,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-iidb_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-incapacity_benefit_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-income_support_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-jsa_contrib_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-jsa_income_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-lump_sum_income,gov.economic_assumptions.indices.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
-main_residence_value,household.wealth.financial_assets,0,0.014,-0.108,0.004,0.03,0.032,0.034,0.034,0.036,0.0
-maintenance_expenses,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-maintenance_income,gov.economic_assumptions.indices.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
-maternity_allowance_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-miscellaneous_consumption,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-miscellaneous_income,gov.economic_assumptions.indices.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
-mortgage_capital_repayment,gov.obr.house_prices,0,0.082,0.083,-0.01,0.027,0.024,0.025,0.026,0.023,0.024
-mortgage_interest_repayment,gov.obr.mortgage_interest,0,0.003,0.262,0.485,0.221,0.136,0.126,0.082,0.042,0.047
-net_financial_wealth,household.wealth.financial_assets,0,0.014,-0.108,0.004,0.03,0.032,0.034,0.034,0.036,0.0
-non_residential_property_value,household.wealth.financial_assets,0,0.014,-0.108,0.004,0.03,0.032,0.034,0.034,0.036,0.0
-other_investment_income,gov.economic_assumptions.indices.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
-other_residential_property_value,household.wealth.financial_assets,0,0.014,-0.108,0.004,0.03,0.032,0.034,0.034,0.036,0.0
-owned_land,household.wealth.financial_assets,0,0.014,-0.108,0.004,0.03,0.032,0.034,0.034,0.036,0.0
-pension_credit_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-pension_income,gov.economic_assumptions.indices.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
-personal_pension_contributions,gov.economic_assumptions.indices.obr.average_earnings,0,0.058,0.065,0.068,0.047,0.038,0.021,0.021,0.023,0.025
-petrol_spending,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-pip_dl_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-pip_m_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-private_pension_income,gov.obr.private_pension_index,0,0.05,0.05,0.05,0.033,0.042,0.03,0.03,0.029,0.028
-private_transfer_income,gov.economic_assumptions.indices.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
-property_income,gov.economic_assumptions.indices.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
-recreation_consumption,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-rent,gov.obr.rent,0,0.018,0.04,0.063,0.074,0.057,0.036,0.027,0.023,0.024
-restaurants_and_hotels_consumption,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-savings,household.wealth.financial_assets,0,0.014,-0.108,0.004,0.03,0.032,0.034,0.034,0.036,0.0
-savings_interest_income,gov.economic_assumptions.indices.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
-sda_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-self_employment_income,gov.obr.per_capita.mixed_income,0,0.06,0.063,0.024,0.048,0.047,0.031,0.031,0.036,0.038
-state_pension,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-state_pension_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-statutory_maternity_pay,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-statutory_paternity_pay,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-statutory_sick_pay,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-student_loan_repayments,gov.economic_assumptions.indices.obr.average_earnings,0,0.058,0.065,0.068,0.047,0.038,0.021,0.021,0.023,0.025
-sublet_income,gov.economic_assumptions.indices.obr.per_capita.gdp,0,0.125,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
-transport_consumption,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-universal_credit_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-winter_fuel_allowance_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
-working_tax_credit_reported,gov.obr.consumer_price_index,0,0.039,0.101,0.057,0.023,0.032,0.02,0.02,0.02,0.02
+Variable,Parameter,2022,2023,2024,2025,2026,2027,2028,2029
+afcs_reported,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+alcohol_and_tobacco_consumption,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+attendance_allowance_reported,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+bsp_reported,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+capital_gains,gov.economic_assumptions.yoy_growth.obr.per_capita.gdp,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
+capital_gains_before_response,gov.economic_assumptions.yoy_growth.obr.per_capita.gdp,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
+carers_allowance_reported,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+child_benefit_reported,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+child_tax_credit_reported,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+childcare_expenses,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+clothing_and_footwear_consumption,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+communication_consumption,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+corporate_wealth,gov.economic_assumptions.yoy_growth.obr.per_capita.gdp,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
+council_tax,gov.economic_assumptions.yoy_growth.obr.council_tax,0.053,0.056,0.064,0.046,0.045,0.046,0.045,0.045
+diesel_spending,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+dividend_income,gov.economic_assumptions.yoy_growth.obr.per_capita.gdp,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
+dla_m_reported,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+dla_sc_reported,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+domestic_energy_consumption,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+education_consumption,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+employee_pension_contributions,gov.economic_assumptions.yoy_growth.obr.average_earnings,0.064,0.069,0.047,0.037,0.022,0.021,0.023,0.025
+employer_pension_contributions,gov.economic_assumptions.yoy_growth.obr.average_earnings,0.064,0.069,0.047,0.037,0.022,0.021,0.023,0.025
+employment_income,gov.economic_assumptions.yoy_growth.obr.average_earnings,0.064,0.069,0.047,0.037,0.022,0.021,0.023,0.025
+employment_income_before_lsr,gov.economic_assumptions.yoy_growth.obr.average_earnings,0.064,0.069,0.047,0.037,0.022,0.021,0.023,0.025
+esa_contrib_reported,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+esa_income_reported,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+food_and_non_alcoholic_beverages_consumption,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+free_school_fruit_veg,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+free_school_meals,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+free_school_milk,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+gross_financial_wealth,gov.economic_assumptions.yoy_growth.obr.per_capita.gdp,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
+health_consumption,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+household_furnishings_consumption,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+household_weight,gov.economic_assumptions.yoy_growth.ons.population,0.003,0.014,0.01,0.011,0.007,0.008,0.004,0.005
+housing_benefit_reported,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+housing_water_and_electricity_consumption,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+iidb_reported,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+incapacity_benefit_reported,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+income_support_reported,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+jsa_contrib_reported,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+jsa_income_reported,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+lump_sum_income,gov.economic_assumptions.yoy_growth.obr.per_capita.gdp,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
+main_residence_value,gov.economic_assumptions.yoy_growth.obr.per_capita.gdp,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
+maintenance_expenses,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+maintenance_income,gov.economic_assumptions.yoy_growth.obr.per_capita.gdp,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
+maternity_allowance_reported,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+miscellaneous_consumption,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+miscellaneous_income,gov.economic_assumptions.yoy_growth.obr.per_capita.gdp,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
+mortgage_capital_repayment,gov.economic_assumptions.yoy_growth.obr.per_capita.gdp,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
+mortgage_interest_repayment,gov.economic_assumptions.yoy_growth.obr.mortgage_interest,0.262,0.485,0.221,0.136,0.126,0.082,0.042,0.047
+net_financial_wealth,gov.economic_assumptions.yoy_growth.obr.per_capita.gdp,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
+non_residential_property_value,gov.economic_assumptions.yoy_growth.obr.per_capita.gdp,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
+other_investment_income,gov.economic_assumptions.yoy_growth.obr.per_capita.gdp,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
+other_residential_property_value,gov.economic_assumptions.yoy_growth.obr.per_capita.gdp,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
+owned_land,gov.economic_assumptions.yoy_growth.obr.per_capita.gdp,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
+pension_credit_reported,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+pension_income,gov.economic_assumptions.yoy_growth.obr.per_capita.gdp,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
+personal_pension_contributions,gov.economic_assumptions.yoy_growth.obr.average_earnings,0.064,0.069,0.047,0.037,0.022,0.021,0.023,0.025
+petrol_spending,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+pip_dl_reported,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+pip_m_reported,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+private_pension_income,gov.economic_assumptions.yoy_growth.obr.private_pension_index,0.05,0.05,0.05,0.047,0.037,0.022,0.021,0.023
+private_transfer_income,gov.economic_assumptions.yoy_growth.obr.per_capita.gdp,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
+property_income,gov.economic_assumptions.yoy_growth.obr.per_capita.gdp,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
+recreation_consumption,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+rent,gov.economic_assumptions.yoy_growth.obr.rent,0.04,0.063,0.074,0.057,0.036,0.027,0.023,0.024
+restaurants_and_hotels_consumption,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+savings,gov.economic_assumptions.yoy_growth.obr.per_capita.gdp,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
+savings_interest_income,gov.economic_assumptions.yoy_growth.obr.per_capita.gdp,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
+sda_reported,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+self_employment_income,gov.economic_assumptions.yoy_growth.obr.per_capita.mixed_income,0.063,0.024,0.048,0.047,0.031,0.031,0.036,0.038
+state_pension,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+state_pension_reported,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+statutory_maternity_pay,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+statutory_paternity_pay,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+statutory_sick_pay,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+student_loan_repayments,gov.economic_assumptions.yoy_growth.obr.average_earnings,0.064,0.069,0.047,0.037,0.022,0.021,0.023,0.025
+sublet_income,gov.economic_assumptions.yoy_growth.obr.per_capita.gdp,0.092,0.05,0.038,0.028,0.028,0.031,0.033,0.033
+transport_consumption,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+universal_credit_reported,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+winter_fuel_allowance_reported,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
+working_tax_credit_reported,gov.economic_assumptions.yoy_growth.obr.consumer_price_index,0.1,0.057,0.023,0.032,0.019,0.02,0.02,0.02
diff --git a/policyengine_uk/parameters/gov/contrib/create_private_pension_uprating.py b/policyengine_uk/parameters/gov/contrib/create_private_pension_uprating.py
index af3538c8e..c09fbe6b7 100644
--- a/policyengine_uk/parameters/gov/contrib/create_private_pension_uprating.py
+++ b/policyengine_uk/parameters/gov/contrib/create_private_pension_uprating.py
@@ -10,23 +10,17 @@ def add_private_pension_uprating_factor(
parameters: ParameterNode,
) -> ParameterNode:
values = {}
- rpi = parameters.gov.economic_assumptions.indices.obr.rpi
- last_value = rpi(YEARS[0] - 1)
+ rpi = parameters.gov.economic_assumptions.yoy_growth.obr.rpi
for year in YEARS:
- value = rpi(year - 1)
- rel_change = value / rpi(year - 2)
- rel_change = min(rel_change, 1.05)
- new_index = last_value * rel_change
- last_value = new_index
- values[f"{year}-01-01"] = new_index
+ values[f"{year}-01-01"] = min(rpi(year - 1), 0.05)
new_parameter = Parameter(
- "gov.economic_assumptions.indices.obr.private_pension_index",
+ "gov.economic_assumptions.yoy_growth.obr.private_pension_index",
data={
"values": values,
},
)
- parameters.gov.economic_assumptions.indices.obr.add_child(
+ parameters.gov.economic_assumptions.yoy_growth.obr.add_child(
"private_pension_index", new_parameter
)
return parameters
diff --git a/policyengine_uk/parameters/gov/dwp/state_pension/basic_state_pension/amount.yaml b/policyengine_uk/parameters/gov/dwp/state_pension/basic_state_pension/amount.yaml
index 38ecd5c2a..5030badb7 100644
--- a/policyengine_uk/parameters/gov/dwp/state_pension/basic_state_pension/amount.yaml
+++ b/policyengine_uk/parameters/gov/dwp/state_pension/basic_state_pension/amount.yaml
@@ -27,7 +27,7 @@ values:
metadata:
unit: currency-GBP
label: basic State Pension amount
- uprating: gov.dwp.state_pension.triple_lock.index
+ uprating: gov.economic_assumptions.indices.triple_lock
reference:
- title: House of Commons Library
href: https://researchbriefings.files.parliament.uk/documents/SN05649/SN05649.pdf
\ No newline at end of file
diff --git a/policyengine_uk/parameters/gov/dwp/state_pension/new_state_pension/amount.yaml b/policyengine_uk/parameters/gov/dwp/state_pension/new_state_pension/amount.yaml
index 2ffd63efe..97b721943 100644
--- a/policyengine_uk/parameters/gov/dwp/state_pension/new_state_pension/amount.yaml
+++ b/policyengine_uk/parameters/gov/dwp/state_pension/new_state_pension/amount.yaml
@@ -13,7 +13,7 @@ values:
metadata:
unit: currency-GBP
label: New State Pension amount
- uprating: gov.dwp.state_pension.triple_lock.index
+ uprating: gov.economic_assumptions.indices.triple_lock
reference:
- title: House of Commons Library
href: https://researchbriefings.files.parliament.uk/documents/SN05649/SN05649.pdf
\ No newline at end of file
diff --git a/policyengine_uk/parameters/gov/dwp/state_pension/triple_lock/create_triple_lock.py b/policyengine_uk/parameters/gov/dwp/state_pension/triple_lock/create_triple_lock.py
index eb9b21fce..2da97a6ad 100644
--- a/policyengine_uk/parameters/gov/dwp/state_pension/triple_lock/create_triple_lock.py
+++ b/policyengine_uk/parameters/gov/dwp/state_pension/triple_lock/create_triple_lock.py
@@ -8,30 +8,37 @@
def add_triple_lock(parameters: ParameterNode) -> ParameterNode:
- obr = parameters.gov.economic_assumptions.indices.obr
+ obr = parameters.gov.economic_assumptions.yoy_growth.obr
average_earnings = obr.average_earnings
cpi = obr.consumer_price_index
- min_rate = parameters.gov.dwp.state_pension.triple_lock.minimum_rate
+ triple_lock = parameters.gov.dwp.state_pension.triple_lock
+ min_rate = triple_lock.minimum_rate
values = {}
- index = 1
-
for year in YEARS:
- earnings_increase = average_earnings(year - 1) / average_earnings(
- year - 2
- )
- cpi_increase = cpi(year - 1) / cpi(year - 2)
+ earnings_increase = average_earnings(year - 1)
+ cpi_increase = cpi(year - 1)
min_rate_y = min_rate(year)
- triple_lock_increase = max(earnings_increase, cpi_increase, min_rate_y)
- index *= triple_lock_increase
- values[f"{year}-01-01"] = round(index, 3)
+ if triple_lock.include_earnings(
+ year
+ ) and triple_lock.include_inflation(year):
+ triple_lock_increase = max(
+ earnings_increase, cpi_increase, min_rate_y
+ )
+ elif triple_lock.include_earnings(year):
+ triple_lock_increase = max(earnings_increase, min_rate_y)
+ elif triple_lock.include_inflation(year):
+ triple_lock_increase = max(cpi_increase, min_rate_y)
+ else:
+ triple_lock_increase = min_rate_y
+ values[f"{year}-01-01"] = round(triple_lock_increase, 3)
new_parameter = Parameter(
- "gov.dwp.state_pension.triple_lock.index",
+ "gov.economic_assumptions.yoy_growth.triple_lock",
data={"values": values, "metadata": {"unit": "/1"}},
)
- parameters.gov.dwp.state_pension.triple_lock.add_child(
- "index", new_parameter
+ parameters.gov.economic_assumptions.yoy_growth.add_child(
+ "triple_lock", new_parameter
)
return parameters
diff --git a/policyengine_uk/parameters/gov/dwp/state_pension/triple_lock/include_earnings.yaml b/policyengine_uk/parameters/gov/dwp/state_pension/triple_lock/include_earnings.yaml
new file mode 100644
index 000000000..248a0581e
--- /dev/null
+++ b/policyengine_uk/parameters/gov/dwp/state_pension/triple_lock/include_earnings.yaml
@@ -0,0 +1,8 @@
+description: Whether the triple lock should include average earnings.
+values:
+ 2012-01-01: true
+ 2022-01-01: false
+ 2023-01-01: true
+metadata:
+ unit: bool
+ label: include average earnings in triple lock
\ No newline at end of file
diff --git a/policyengine_uk/parameters/gov/dwp/state_pension/triple_lock/include_inflation.yaml b/policyengine_uk/parameters/gov/dwp/state_pension/triple_lock/include_inflation.yaml
new file mode 100644
index 000000000..8fac31a2f
--- /dev/null
+++ b/policyengine_uk/parameters/gov/dwp/state_pension/triple_lock/include_inflation.yaml
@@ -0,0 +1,6 @@
+description: Whether the triple lock should include inflation.
+values:
+ 2012-01-01: true
+metadata:
+ unit: bool
+ label: include inflation in triple lock
\ No newline at end of file
diff --git a/policyengine_uk/parameters/gov/economic_assumptions/yoy_growth.yaml b/policyengine_uk/parameters/gov/economic_assumptions/yoy_growth.yaml
index adc9f2828..227aedfd4 100644
--- a/policyengine_uk/parameters/gov/economic_assumptions/yoy_growth.yaml
+++ b/policyengine_uk/parameters/gov/economic_assumptions/yoy_growth.yaml
@@ -113,9 +113,9 @@ obr:
council_tax:
description: Council tax year-on-year growth.
values:
- 2021-01-01: 0.0
- 2022-01-01: 0.0
- 2023-01-01: 0.0
+ 2021-01-01: 0.078
+ 2022-01-01: 0.053
+ 2023-01-01: 0.056
2024-01-01: 0.064
2025-01-01: 0.046
2026-01-01: 0.045
@@ -263,43 +263,3 @@ ons:
reference:
- title: ONS Population Projections
href: https://www.ons.gov.uk/
-
-household:
- wealth:
- corporate_wealth:
- description: Corporate wealth year-on-year growth.
- values:
- 2021-01-01: 0.0
- 2022-01-01: -0.109
- 2023-01-01: 0.004
- 2024-01-01: 0.03
- 2025-01-01: 0.031
- 2026-01-01: 0.035
- 2027-01-01: 0.035
- 2028-01-01: 0.035
- 2029-01-01: 0.0
- metadata:
- unit: /1
- label: corporate wealth growth
- reference:
- - title: Household wealth estimates
- href: https://www.ons.gov.uk/
-
- financial_assets:
- description: Financial assets year-on-year growth.
- values:
- 2021-01-01: 0.014
- 2022-01-01: -0.108
- 2023-01-01: 0.004
- 2024-01-01: 0.03
- 2025-01-01: 0.032
- 2026-01-01: 0.034
- 2027-01-01: 0.034
- 2028-01-01: 0.036
- 2029-01-01: 0.0
- metadata:
- unit: /1
- label: financial assets growth
- reference:
- - title: Household wealth estimates
- href: https://www.ons.gov.uk/
\ No newline at end of file
diff --git a/policyengine_uk/system.py b/policyengine_uk/system.py
index d20d75d4d..5e76e9a6c 100644
--- a/policyengine_uk/system.py
+++ b/policyengine_uk/system.py
@@ -6,6 +6,8 @@
Simulation as CoreSimulation,
Microsimulation as CoreMicrosimulation,
)
+from policyengine_uk.data.dataset_schema import UKDataset
+from policyengine_core.tools.hugging_face import download_huggingface_dataset
import pandas as pd
from policyengine_uk.utils.parameters import (
@@ -56,12 +58,12 @@ class CountryTaxBenefitSystem(TaxBenefitSystem):
modelled_policies = COUNTRY_DIR / "modelled_policies.yaml"
def process_parameters(self, reform=None):
- self.parameters = create_economic_assumption_indices(self.parameters)
- self.parameters = add_triple_lock(self.parameters)
- self.parameters = add_private_pension_uprating_factor(self.parameters)
- self.parameters.add_child("baseline", self.parameters.clone())
if reform:
self.apply_reform_set(reform)
+ self.parameters = add_private_pension_uprating_factor(self.parameters)
+ self.parameters = add_triple_lock(self.parameters)
+ self.parameters = create_economic_assumption_indices(self.parameters)
+ self.parameters.add_child("baseline", self.parameters.clone())
self.parameters = homogenize_parameter_structures(
self.parameters, self.variables
)
@@ -155,6 +157,29 @@ class Microsimulation(CoreMicrosimulation):
max_spiral_loops = 10
def __init__(self, *args, dataset=ENHANCED_FRS, **kwargs):
+ if dataset is not None:
+ if isinstance(dataset, str):
+ if "hf://" in dataset:
+ owner, repo, filename = dataset.split("/")[-3:]
+ if "@" in filename:
+ version = filename.split("@")[-1]
+ filename = filename.split("@")[0]
+ else:
+ version = None
+ dataset_file_path = download_huggingface_dataset(
+ repo=f"{owner}/{repo}",
+ repo_filename=filename,
+ version=version,
+ )
+
+ if Path(dataset_file_path).exists():
+ if dataset_file_path.endswith(".h5"):
+ try:
+ UKDataset.validate_file_path(dataset_file_path)
+ dataset = UKDataset(file_path=dataset_file_path)
+ except:
+ dataset = Dataset.from_file(dataset_file_path)
+
super().__init__(*args, dataset=dataset, **kwargs)
reform = create_structural_reforms_from_parameters(
diff --git a/policyengine_uk/variables/gov/dwp/basic_state_pension.py b/policyengine_uk/variables/gov/dwp/basic_state_pension.py
index a119eaae1..549dda4de 100644
--- a/policyengine_uk/variables/gov/dwp/basic_state_pension.py
+++ b/policyengine_uk/variables/gov/dwp/basic_state_pension.py
@@ -24,6 +24,6 @@ def formula(person, period, parameters):
min_(reported, maximum_basic_sp),
0,
)
- triple_lock = parameters.gov.dwp.state_pension.triple_lock.index
+ triple_lock = parameters.gov.economic_assumptions.indices.triple_lock
uprating_since_data_year = triple_lock(period) / triple_lock(data_year)
return amount_in_data_year * uprating_since_data_year * WEEKS_IN_YEAR
diff --git a/policyengine_uk/variables/gov/gov_tax.py b/policyengine_uk/variables/gov/gov_tax.py
index 155881bfc..10069d0c4 100644
--- a/policyengine_uk/variables/gov/gov_tax.py
+++ b/policyengine_uk/variables/gov/gov_tax.py
@@ -34,6 +34,7 @@ class gov_tax(Variable):
"high_income_incident_tax_change",
"ni_employer",
"student_loan_repayments",
+ "vat",
]
def formula(household, period, parameters):
diff --git a/policyengine_uk/variables/household/wealth/gross_financial_wealth.py b/policyengine_uk/variables/household/wealth/gross_financial_wealth.py
index 60e6736a9..f62c2338e 100644
--- a/policyengine_uk/variables/household/wealth/gross_financial_wealth.py
+++ b/policyengine_uk/variables/household/wealth/gross_financial_wealth.py
@@ -7,4 +7,4 @@ class gross_financial_wealth(Variable):
definition_period = YEAR
value_type = float
unit = GBP
- uprating = "household.wealth.financial_assets"
+ uprating = "gov.economic_assumptions.indices.obr.per_capita.gdp"
diff --git a/policyengine_uk/variables/household/wealth/net_financial_wealth.py b/policyengine_uk/variables/household/wealth/net_financial_wealth.py
index 3ae66a674..254518afa 100644
--- a/policyengine_uk/variables/household/wealth/net_financial_wealth.py
+++ b/policyengine_uk/variables/household/wealth/net_financial_wealth.py
@@ -7,4 +7,4 @@ class net_financial_wealth(Variable):
definition_period = YEAR
value_type = float
unit = GBP
- uprating = "household.wealth.financial_assets"
+ uprating = "gov.economic_assumptions.indices.obr.per_capita.gdp"
diff --git a/policyengine_uk/variables/household/wealth/savings.py b/policyengine_uk/variables/household/wealth/savings.py
index aa0ba7cdd..d0aea30af 100644
--- a/policyengine_uk/variables/household/wealth/savings.py
+++ b/policyengine_uk/variables/household/wealth/savings.py
@@ -8,4 +8,4 @@ class savings(Variable):
definition_period = YEAR
value_type = float
unit = GBP
- uprating = "household.wealth.financial_assets"
+ uprating = "gov.economic_assumptions.indices.obr.per_capita.gdp"
diff --git a/policyengine_uk/variables/input/corporate_wealth.py b/policyengine_uk/variables/input/corporate_wealth.py
index 3f5815732..ba3a3d83b 100644
--- a/policyengine_uk/variables/input/corporate_wealth.py
+++ b/policyengine_uk/variables/input/corporate_wealth.py
@@ -8,5 +8,5 @@ class corporate_wealth(Variable):
definition_period = YEAR
value_type = float
unit = GBP
- uprating = "household.wealth.corporate_wealth"
+ uprating = "gov.economic_assumptions.indices.obr.per_capita.gdp"
quantity_type = STOCK
diff --git a/policyengine_uk/variables/input/main_residence_value.py b/policyengine_uk/variables/input/main_residence_value.py
index 5d17f0dc6..82adf3c91 100644
--- a/policyengine_uk/variables/input/main_residence_value.py
+++ b/policyengine_uk/variables/input/main_residence_value.py
@@ -9,4 +9,4 @@ class main_residence_value(Variable):
value_type = float
unit = GBP
quantity_type = STOCK
- uprating = "household.wealth.financial_assets"
+ uprating = "gov.economic_assumptions.indices.obr.per_capita.gdp"
diff --git a/policyengine_uk/variables/input/non_residential_property_value.py b/policyengine_uk/variables/input/non_residential_property_value.py
index dbb65a838..2ab290a0d 100644
--- a/policyengine_uk/variables/input/non_residential_property_value.py
+++ b/policyengine_uk/variables/input/non_residential_property_value.py
@@ -11,4 +11,4 @@ class non_residential_property_value(Variable):
value_type = float
unit = GBP
quantity_type = STOCK
- uprating = "household.wealth.financial_assets"
+ uprating = "gov.economic_assumptions.indices.obr.per_capita.gdp"
diff --git a/policyengine_uk/variables/input/other_residential_property_value.py b/policyengine_uk/variables/input/other_residential_property_value.py
index 8550dc95e..c09361374 100644
--- a/policyengine_uk/variables/input/other_residential_property_value.py
+++ b/policyengine_uk/variables/input/other_residential_property_value.py
@@ -11,4 +11,4 @@ class other_residential_property_value(Variable):
value_type = float
unit = GBP
quantity_type = STOCK
- uprating = "household.wealth.financial_assets"
+ uprating = "gov.economic_assumptions.indices.obr.per_capita.gdp"
diff --git a/policyengine_uk/variables/input/owned_land.py b/policyengine_uk/variables/input/owned_land.py
index e2d577050..23b23b009 100644
--- a/policyengine_uk/variables/input/owned_land.py
+++ b/policyengine_uk/variables/input/owned_land.py
@@ -9,4 +9,4 @@ class owned_land(Variable):
definition_period = YEAR
value_type = float
quantity_type = STOCK
- uprating = "household.wealth.financial_assets"
+ uprating = "gov.economic_assumptions.indices.obr.per_capita.gdp"
diff --git a/pyproject.toml b/pyproject.toml
index 74c45baf1..959d34c83 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -51,6 +51,11 @@ packages = ["policyengine_uk"]
"LICENSE" = "share/openfisca/openfisca-country-template/LICENSE"
"README.md" = "share/openfisca/openfisca-country-template/README.md"
+[dependency-groups]
+dev = [
+ "tables>=3.10.1",
+]
+
[project.optional-dependencies]
dev = [
"black",
@@ -66,4 +71,4 @@ dev = [
"snowballstemmer>=2,<3",
"jupyter-book",
"linecheck",
-]
\ No newline at end of file
+]
diff --git a/uv.lock b/uv.lock
index c3136714b..977d7299b 100644
--- a/uv.lock
+++ b/uv.lock
@@ -120,6 +120,43 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/09/71/54e999902aed72baf26bca0d50781b01838251a462612966e9fc4891eadd/black-25.1.0-py3-none-any.whl", hash = "sha256:95e8176dae143ba9097f351d174fdaf0ccd29efb414b362ae3fd72bf0f710717", size = 207646, upload-time = "2025-01-29T04:15:38.082Z" },
]
+[[package]]
+name = "blosc2"
+version = "3.5.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "msgpack" },
+ { name = "ndindex" },
+ { name = "numexpr", marker = "platform_machine != 'wasm32'" },
+ { name = "numpy" },
+ { name = "platformdirs" },
+ { name = "py-cpuinfo", marker = "platform_machine != 'wasm32'" },
+ { name = "requests" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/10/a0/1abec67127972fabf07bc1b7208324399fb25576ba3a2104738dbd40fc8a/blosc2-3.5.1.tar.gz", hash = "sha256:5d72f7a9a8b3b523c588be9d66e9e7f2463483716c4c01e5056c1f7e37167f85", size = 3653626, upload-time = "2025-07-02T11:47:16.4Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/55/4c/89aa228bf6e64b0daa1b7e485d404601e8e136c3834f87909f2803cb60fa/blosc2-3.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ff031df2707cd7143b7c744bf10c55932151001cc5ff9d79a899714714732a2d", size = 4001801, upload-time = "2025-07-02T11:46:48.607Z" },
+ { url = "https://files.pythonhosted.org/packages/fe/d3/22581f254299c27a81a2fb2356665e15fc0e7186f626e508d82514d22b26/blosc2-3.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0fc7976024a89d490911ce9ef78968369acca908f0f771cf00e072a457ee342d", size = 3376036, upload-time = "2025-07-02T11:46:50.673Z" },
+ { url = "https://files.pythonhosted.org/packages/24/f1/c4112715dece9e0eb837f63c53ce1cd5e889afbe19712222ef0a5da3690d/blosc2-3.5.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0fcc6c64315121f02555a398e6fbaf4b71edc39a4ca7567e089ce1af7288e9ed", size = 4291062, upload-time = "2025-07-02T11:46:51.823Z" },
+ { url = "https://files.pythonhosted.org/packages/84/a2/8019187fb5a1789203dd96eea0d4311bc56f3386ddfe9e723357acb8a7bd/blosc2-3.5.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d3174273decf69b9e61b2a57d4cad5bf651de04d22526568f5a5e3036631831f", size = 4433984, upload-time = "2025-07-02T11:46:53.288Z" },
+ { url = "https://files.pythonhosted.org/packages/a1/d7/e8e98d5a2252d8aafd84a4a1431bd44612159ce339dd9a2199087998d8ea/blosc2-3.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:a4dcaf581cd7ec91d91f379e7e3dc7d5dd6c300e88ae162b04b106d21f10f5c1", size = 2224498, upload-time = "2025-07-02T11:46:54.988Z" },
+ { url = "https://files.pythonhosted.org/packages/fa/18/2001026c7bdac8fb3d9df6f31d3c4e2a2f22f73870509ddd163e36b0e521/blosc2-3.5.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ebf860878dd7a4fb41dcb90b1c6b3c5db7e34dc64ab51bea3679534af4a54a4a", size = 4004794, upload-time = "2025-07-02T11:46:56.012Z" },
+ { url = "https://files.pythonhosted.org/packages/a4/4e/0f94eb790fb86bfd0f4d92496bc515db849987a7b9cbb10c49a9cf3a0037/blosc2-3.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1a9fc80970d5bb135bd9579db26d96ec79739bd1f187bbaf52e04102e7c664de", size = 3379124, upload-time = "2025-07-02T11:46:57.958Z" },
+ { url = "https://files.pythonhosted.org/packages/ee/4e/d3d80033a20e97a1d5c3eccfecce343144407334e8b7f17b1532987a4974/blosc2-3.5.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fcf6658546da153fc8537dbf8edab1b22d6cedba32ec8c2a9a4165e450375b28", size = 4295187, upload-time = "2025-07-02T11:46:59.167Z" },
+ { url = "https://files.pythonhosted.org/packages/a6/31/171ed90aa74936f1335cb471d95915232328b280d4888e1a8c9cca1fd3f0/blosc2-3.5.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d77e0abe67675ec21ce812a4da3d01406dd4942c8929a5a78d91b2f558dd8c9e", size = 4437993, upload-time = "2025-07-02T11:47:00.667Z" },
+ { url = "https://files.pythonhosted.org/packages/b4/59/e3fb8114b369a6f7467e642e7e9818fb77ca47a177de767eb2414f8678ec/blosc2-3.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:0e6f5ccfb817363191577dd0e40839788f664891908b82c2dcd969fb37e0e954", size = 2222769, upload-time = "2025-07-02T11:47:02.01Z" },
+ { url = "https://files.pythonhosted.org/packages/d4/ab/bbc1771dc66815277c3d3e316d0f2864209bc15421608ee13ce955b9de3b/blosc2-3.5.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:780213c917d9ac28b52a09ac82baa761262e8421688937b67f6516987a96fc58", size = 4012189, upload-time = "2025-07-02T11:47:03.343Z" },
+ { url = "https://files.pythonhosted.org/packages/20/84/dafbb363539313c5d5e2f4c082c42a652c5767831e7e1fe77eb509aed73e/blosc2-3.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6e3d1d0885e955e184efae81168448106644d5a0a60c0911b98e94fe9d756fa9", size = 3372462, upload-time = "2025-07-02T11:47:05.053Z" },
+ { url = "https://files.pythonhosted.org/packages/07/7f/8e77b054ce2eff7b7c9810378cfcc78f73a4e45c2bf122833395f5dce61d/blosc2-3.5.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d7c23e48414283dcfa5676abc6a4be9fb92a7b372a20f7acf90438abc69a746e", size = 4278243, upload-time = "2025-07-02T11:47:06.757Z" },
+ { url = "https://files.pythonhosted.org/packages/a6/fd/df0d0c7aec2d135b9c8df9d3d8136c84d614d04595f051b1f5b8aeab238d/blosc2-3.5.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5df464652ddcae9ef8d8b3354ad224b1e147187dde5b6470e0e9f95bec328756", size = 4420536, upload-time = "2025-07-02T11:47:07.974Z" },
+ { url = "https://files.pythonhosted.org/packages/6b/64/a7497c8ba3aceed462d9cbe8227aeee20fbf77415702a0ced11a03fd0d5a/blosc2-3.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:530965c444186bfb92a4406ab4c2d801939df35a5c58658131000f68ce1a37ec", size = 2212429, upload-time = "2025-07-02T11:47:09.045Z" },
+ { url = "https://files.pythonhosted.org/packages/c1/17/38adc448a44c8d0e6f3700de4c072d5cbf3cdd7dffdfe62ccf179c985641/blosc2-3.5.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:44b4e51fd0b5a7e6ccae8053e133037f5984f6990a1e9b787376f4ec42aaf5bf", size = 4010715, upload-time = "2025-07-02T11:47:10.49Z" },
+ { url = "https://files.pythonhosted.org/packages/0c/3b/bd2803d030c204984f8b14ce9919bcb67b6582141898a28887ae1fa58d80/blosc2-3.5.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b59805aa56ff1f9e6e4ba2f293e54cdf356b64db983bb019dbdbac72f88f2e38", size = 3371665, upload-time = "2025-07-02T11:47:11.651Z" },
+ { url = "https://files.pythonhosted.org/packages/2b/c8/b86f3ecfecff76cab9c3c1f54fcbb05ab654b6d0a940b9b614b896f8105f/blosc2-3.5.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:485ca015db7352fa0e3b78b912c66ec495d60b94cab36a82abfb9f87715e6abd", size = 4280046, upload-time = "2025-07-02T11:47:12.913Z" },
+ { url = "https://files.pythonhosted.org/packages/c9/38/8815054e054e45fda3c9d1e25ac77e6387d10d8e33c64bcf79f432b3c4fa/blosc2-3.5.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f88cfa1f1d64d77278c7fae0ab8c42291b7b2e8f36fcee154a0c55388e697fe9", size = 4422773, upload-time = "2025-07-02T11:47:14.184Z" },
+ { url = "https://files.pythonhosted.org/packages/b1/f0/55b5090c8fb6e9a12810cf141cd59875718148a78f62a4da818045f7e4b6/blosc2-3.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:9d36c4a8489c0f8719040a7543918e2701821340b8643d508c450d0d012259bf", size = 2213487, upload-time = "2025-07-02T11:47:15.297Z" },
+]
+
[[package]]
name = "certifi"
version = "2025.7.9"
@@ -414,7 +451,7 @@ name = "exceptiongroup"
version = "1.3.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "typing-extensions", marker = "python_full_version < '3.13'" },
+ { name = "typing-extensions", marker = "python_full_version < '3.11'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/0b/9f/a65090624ecf468cdca03533906e7c69ed7588582240cfe7cc9e770b50eb/exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88", size = 29749, upload-time = "2025-05-10T17:42:51.123Z" }
wheels = [
@@ -961,6 +998,54 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/bc/51/bd8752149339e023d7f2a0a42ae3612fb38045bc873eaa465da132e0cc3c/microdf_python-0.4.4-py3-none-any.whl", hash = "sha256:435e9e9852612a81de1bdcffdc606c25dcd3fa2ea43d9fb52a85b2887bbca0ec", size = 26793, upload-time = "2025-07-09T17:40:09.641Z" },
]
+[[package]]
+name = "msgpack"
+version = "1.1.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/45/b1/ea4f68038a18c77c9467400d166d74c4ffa536f34761f7983a104357e614/msgpack-1.1.1.tar.gz", hash = "sha256:77b79ce34a2bdab2594f490c8e80dd62a02d650b91a75159a63ec413b8d104cd", size = 173555, upload-time = "2025-06-13T06:52:51.324Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/33/52/f30da112c1dc92cf64f57d08a273ac771e7b29dea10b4b30369b2d7e8546/msgpack-1.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:353b6fc0c36fde68b661a12949d7d49f8f51ff5fa019c1e47c87c4ff34b080ed", size = 81799, upload-time = "2025-06-13T06:51:37.228Z" },
+ { url = "https://files.pythonhosted.org/packages/e4/35/7bfc0def2f04ab4145f7f108e3563f9b4abae4ab0ed78a61f350518cc4d2/msgpack-1.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:79c408fcf76a958491b4e3b103d1c417044544b68e96d06432a189b43d1215c8", size = 78278, upload-time = "2025-06-13T06:51:38.534Z" },
+ { url = "https://files.pythonhosted.org/packages/e8/c5/df5d6c1c39856bc55f800bf82778fd4c11370667f9b9e9d51b2f5da88f20/msgpack-1.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78426096939c2c7482bf31ef15ca219a9e24460289c00dd0b94411040bb73ad2", size = 402805, upload-time = "2025-06-13T06:51:39.538Z" },
+ { url = "https://files.pythonhosted.org/packages/20/8e/0bb8c977efecfe6ea7116e2ed73a78a8d32a947f94d272586cf02a9757db/msgpack-1.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b17ba27727a36cb73aabacaa44b13090feb88a01d012c0f4be70c00f75048b4", size = 408642, upload-time = "2025-06-13T06:51:41.092Z" },
+ { url = "https://files.pythonhosted.org/packages/59/a1/731d52c1aeec52006be6d1f8027c49fdc2cfc3ab7cbe7c28335b2910d7b6/msgpack-1.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a17ac1ea6ec3c7687d70201cfda3b1e8061466f28f686c24f627cae4ea8efd0", size = 395143, upload-time = "2025-06-13T06:51:42.575Z" },
+ { url = "https://files.pythonhosted.org/packages/2b/92/b42911c52cda2ba67a6418ffa7d08969edf2e760b09015593c8a8a27a97d/msgpack-1.1.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:88d1e966c9235c1d4e2afac21ca83933ba59537e2e2727a999bf3f515ca2af26", size = 395986, upload-time = "2025-06-13T06:51:43.807Z" },
+ { url = "https://files.pythonhosted.org/packages/61/dc/8ae165337e70118d4dab651b8b562dd5066dd1e6dd57b038f32ebc3e2f07/msgpack-1.1.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:f6d58656842e1b2ddbe07f43f56b10a60f2ba5826164910968f5933e5178af75", size = 402682, upload-time = "2025-06-13T06:51:45.534Z" },
+ { url = "https://files.pythonhosted.org/packages/58/27/555851cb98dcbd6ce041df1eacb25ac30646575e9cd125681aa2f4b1b6f1/msgpack-1.1.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:96decdfc4adcbc087f5ea7ebdcfd3dee9a13358cae6e81d54be962efc38f6338", size = 406368, upload-time = "2025-06-13T06:51:46.97Z" },
+ { url = "https://files.pythonhosted.org/packages/d4/64/39a26add4ce16f24e99eabb9005e44c663db00e3fce17d4ae1ae9d61df99/msgpack-1.1.1-cp310-cp310-win32.whl", hash = "sha256:6640fd979ca9a212e4bcdf6eb74051ade2c690b862b679bfcb60ae46e6dc4bfd", size = 65004, upload-time = "2025-06-13T06:51:48.582Z" },
+ { url = "https://files.pythonhosted.org/packages/7d/18/73dfa3e9d5d7450d39debde5b0d848139f7de23bd637a4506e36c9800fd6/msgpack-1.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:8b65b53204fe1bd037c40c4148d00ef918eb2108d24c9aaa20bc31f9810ce0a8", size = 71548, upload-time = "2025-06-13T06:51:49.558Z" },
+ { url = "https://files.pythonhosted.org/packages/7f/83/97f24bf9848af23fe2ba04380388216defc49a8af6da0c28cc636d722502/msgpack-1.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:71ef05c1726884e44f8b1d1773604ab5d4d17729d8491403a705e649116c9558", size = 82728, upload-time = "2025-06-13T06:51:50.68Z" },
+ { url = "https://files.pythonhosted.org/packages/aa/7f/2eaa388267a78401f6e182662b08a588ef4f3de6f0eab1ec09736a7aaa2b/msgpack-1.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:36043272c6aede309d29d56851f8841ba907a1a3d04435e43e8a19928e243c1d", size = 79279, upload-time = "2025-06-13T06:51:51.72Z" },
+ { url = "https://files.pythonhosted.org/packages/f8/46/31eb60f4452c96161e4dfd26dbca562b4ec68c72e4ad07d9566d7ea35e8a/msgpack-1.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a32747b1b39c3ac27d0670122b57e6e57f28eefb725e0b625618d1b59bf9d1e0", size = 423859, upload-time = "2025-06-13T06:51:52.749Z" },
+ { url = "https://files.pythonhosted.org/packages/45/16/a20fa8c32825cc7ae8457fab45670c7a8996d7746ce80ce41cc51e3b2bd7/msgpack-1.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a8b10fdb84a43e50d38057b06901ec9da52baac6983d3f709d8507f3889d43f", size = 429975, upload-time = "2025-06-13T06:51:53.97Z" },
+ { url = "https://files.pythonhosted.org/packages/86/ea/6c958e07692367feeb1a1594d35e22b62f7f476f3c568b002a5ea09d443d/msgpack-1.1.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba0c325c3f485dc54ec298d8b024e134acf07c10d494ffa24373bea729acf704", size = 413528, upload-time = "2025-06-13T06:51:55.507Z" },
+ { url = "https://files.pythonhosted.org/packages/75/05/ac84063c5dae79722bda9f68b878dc31fc3059adb8633c79f1e82c2cd946/msgpack-1.1.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:88daaf7d146e48ec71212ce21109b66e06a98e5e44dca47d853cbfe171d6c8d2", size = 413338, upload-time = "2025-06-13T06:51:57.023Z" },
+ { url = "https://files.pythonhosted.org/packages/69/e8/fe86b082c781d3e1c09ca0f4dacd457ede60a13119b6ce939efe2ea77b76/msgpack-1.1.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:d8b55ea20dc59b181d3f47103f113e6f28a5e1c89fd5b67b9140edb442ab67f2", size = 422658, upload-time = "2025-06-13T06:51:58.419Z" },
+ { url = "https://files.pythonhosted.org/packages/3b/2b/bafc9924df52d8f3bb7c00d24e57be477f4d0f967c0a31ef5e2225e035c7/msgpack-1.1.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4a28e8072ae9779f20427af07f53bbb8b4aa81151054e882aee333b158da8752", size = 427124, upload-time = "2025-06-13T06:51:59.969Z" },
+ { url = "https://files.pythonhosted.org/packages/a2/3b/1f717e17e53e0ed0b68fa59e9188f3f610c79d7151f0e52ff3cd8eb6b2dc/msgpack-1.1.1-cp311-cp311-win32.whl", hash = "sha256:7da8831f9a0fdb526621ba09a281fadc58ea12701bc709e7b8cbc362feabc295", size = 65016, upload-time = "2025-06-13T06:52:01.294Z" },
+ { url = "https://files.pythonhosted.org/packages/48/45/9d1780768d3b249accecc5a38c725eb1e203d44a191f7b7ff1941f7df60c/msgpack-1.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:5fd1b58e1431008a57247d6e7cc4faa41c3607e8e7d4aaf81f7c29ea013cb458", size = 72267, upload-time = "2025-06-13T06:52:02.568Z" },
+ { url = "https://files.pythonhosted.org/packages/e3/26/389b9c593eda2b8551b2e7126ad3a06af6f9b44274eb3a4f054d48ff7e47/msgpack-1.1.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ae497b11f4c21558d95de9f64fff7053544f4d1a17731c866143ed6bb4591238", size = 82359, upload-time = "2025-06-13T06:52:03.909Z" },
+ { url = "https://files.pythonhosted.org/packages/ab/65/7d1de38c8a22cf8b1551469159d4b6cf49be2126adc2482de50976084d78/msgpack-1.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:33be9ab121df9b6b461ff91baac6f2731f83d9b27ed948c5b9d1978ae28bf157", size = 79172, upload-time = "2025-06-13T06:52:05.246Z" },
+ { url = "https://files.pythonhosted.org/packages/0f/bd/cacf208b64d9577a62c74b677e1ada005caa9b69a05a599889d6fc2ab20a/msgpack-1.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f64ae8fe7ffba251fecb8408540c34ee9df1c26674c50c4544d72dbf792e5ce", size = 425013, upload-time = "2025-06-13T06:52:06.341Z" },
+ { url = "https://files.pythonhosted.org/packages/4d/ec/fd869e2567cc9c01278a736cfd1697941ba0d4b81a43e0aa2e8d71dab208/msgpack-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a494554874691720ba5891c9b0b39474ba43ffb1aaf32a5dac874effb1619e1a", size = 426905, upload-time = "2025-06-13T06:52:07.501Z" },
+ { url = "https://files.pythonhosted.org/packages/55/2a/35860f33229075bce803a5593d046d8b489d7ba2fc85701e714fc1aaf898/msgpack-1.1.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cb643284ab0ed26f6957d969fe0dd8bb17beb567beb8998140b5e38a90974f6c", size = 407336, upload-time = "2025-06-13T06:52:09.047Z" },
+ { url = "https://files.pythonhosted.org/packages/8c/16/69ed8f3ada150bf92745fb4921bd621fd2cdf5a42e25eb50bcc57a5328f0/msgpack-1.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d275a9e3c81b1093c060c3837e580c37f47c51eca031f7b5fb76f7b8470f5f9b", size = 409485, upload-time = "2025-06-13T06:52:10.382Z" },
+ { url = "https://files.pythonhosted.org/packages/c6/b6/0c398039e4c6d0b2e37c61d7e0e9d13439f91f780686deb8ee64ecf1ae71/msgpack-1.1.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4fd6b577e4541676e0cc9ddc1709d25014d3ad9a66caa19962c4f5de30fc09ef", size = 412182, upload-time = "2025-06-13T06:52:11.644Z" },
+ { url = "https://files.pythonhosted.org/packages/b8/d0/0cf4a6ecb9bc960d624c93effaeaae75cbf00b3bc4a54f35c8507273cda1/msgpack-1.1.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bb29aaa613c0a1c40d1af111abf025f1732cab333f96f285d6a93b934738a68a", size = 419883, upload-time = "2025-06-13T06:52:12.806Z" },
+ { url = "https://files.pythonhosted.org/packages/62/83/9697c211720fa71a2dfb632cad6196a8af3abea56eece220fde4674dc44b/msgpack-1.1.1-cp312-cp312-win32.whl", hash = "sha256:870b9a626280c86cff9c576ec0d9cbcc54a1e5ebda9cd26dab12baf41fee218c", size = 65406, upload-time = "2025-06-13T06:52:14.271Z" },
+ { url = "https://files.pythonhosted.org/packages/c0/23/0abb886e80eab08f5e8c485d6f13924028602829f63b8f5fa25a06636628/msgpack-1.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:5692095123007180dca3e788bb4c399cc26626da51629a31d40207cb262e67f4", size = 72558, upload-time = "2025-06-13T06:52:15.252Z" },
+ { url = "https://files.pythonhosted.org/packages/a1/38/561f01cf3577430b59b340b51329803d3a5bf6a45864a55f4ef308ac11e3/msgpack-1.1.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3765afa6bd4832fc11c3749be4ba4b69a0e8d7b728f78e68120a157a4c5d41f0", size = 81677, upload-time = "2025-06-13T06:52:16.64Z" },
+ { url = "https://files.pythonhosted.org/packages/09/48/54a89579ea36b6ae0ee001cba8c61f776451fad3c9306cd80f5b5c55be87/msgpack-1.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8ddb2bcfd1a8b9e431c8d6f4f7db0773084e107730ecf3472f1dfe9ad583f3d9", size = 78603, upload-time = "2025-06-13T06:52:17.843Z" },
+ { url = "https://files.pythonhosted.org/packages/a0/60/daba2699b308e95ae792cdc2ef092a38eb5ee422f9d2fbd4101526d8a210/msgpack-1.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:196a736f0526a03653d829d7d4c5500a97eea3648aebfd4b6743875f28aa2af8", size = 420504, upload-time = "2025-06-13T06:52:18.982Z" },
+ { url = "https://files.pythonhosted.org/packages/20/22/2ebae7ae43cd8f2debc35c631172ddf14e2a87ffcc04cf43ff9df9fff0d3/msgpack-1.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d592d06e3cc2f537ceeeb23d38799c6ad83255289bb84c2e5792e5a8dea268a", size = 423749, upload-time = "2025-06-13T06:52:20.211Z" },
+ { url = "https://files.pythonhosted.org/packages/40/1b/54c08dd5452427e1179a40b4b607e37e2664bca1c790c60c442c8e972e47/msgpack-1.1.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4df2311b0ce24f06ba253fda361f938dfecd7b961576f9be3f3fbd60e87130ac", size = 404458, upload-time = "2025-06-13T06:52:21.429Z" },
+ { url = "https://files.pythonhosted.org/packages/2e/60/6bb17e9ffb080616a51f09928fdd5cac1353c9becc6c4a8abd4e57269a16/msgpack-1.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e4141c5a32b5e37905b5940aacbc59739f036930367d7acce7a64e4dec1f5e0b", size = 405976, upload-time = "2025-06-13T06:52:22.995Z" },
+ { url = "https://files.pythonhosted.org/packages/ee/97/88983e266572e8707c1f4b99c8fd04f9eb97b43f2db40e3172d87d8642db/msgpack-1.1.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b1ce7f41670c5a69e1389420436f41385b1aa2504c3b0c30620764b15dded2e7", size = 408607, upload-time = "2025-06-13T06:52:24.152Z" },
+ { url = "https://files.pythonhosted.org/packages/bc/66/36c78af2efaffcc15a5a61ae0df53a1d025f2680122e2a9eb8442fed3ae4/msgpack-1.1.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4147151acabb9caed4e474c3344181e91ff7a388b888f1e19ea04f7e73dc7ad5", size = 424172, upload-time = "2025-06-13T06:52:25.704Z" },
+ { url = "https://files.pythonhosted.org/packages/8c/87/a75eb622b555708fe0427fab96056d39d4c9892b0c784b3a721088c7ee37/msgpack-1.1.1-cp313-cp313-win32.whl", hash = "sha256:500e85823a27d6d9bba1d057c871b4210c1dd6fb01fbb764e37e4e8847376323", size = 65347, upload-time = "2025-06-13T06:52:26.846Z" },
+ { url = "https://files.pythonhosted.org/packages/ca/91/7dc28d5e2a11a5ad804cf2b7f7a5fcb1eb5a4966d66a5d2b41aee6376543/msgpack-1.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:6d489fba546295983abd142812bda76b57e33d0b9f5d5b71c09a583285506f69", size = 72341, upload-time = "2025-06-13T06:52:27.835Z" },
+]
+
[[package]]
name = "mypy-extensions"
version = "1.1.0"
@@ -1038,6 +1123,62 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b", size = 78454, upload-time = "2024-04-04T11:20:34.895Z" },
]
+[[package]]
+name = "ndindex"
+version = "1.10.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/dc/a0/f584c0b6b998e4981201a1383200663a725f556f439cf58d02a093cb9f91/ndindex-1.10.0.tar.gz", hash = "sha256:20e3a2f0a8ed4646abf0f13296aab0b5b9cc8c5bc182b71b5945e76eb6f558bb", size = 258688, upload-time = "2025-05-21T17:42:22.718Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/61/de/45af0f9b0abe5795228ca79577541c1c79b664996a5c9d15df21789e2ced/ndindex-1.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3d96dc319c39dce679d85a997f4eeb439f6de73c0793956b66598954ca61365c", size = 162311, upload-time = "2025-05-21T17:40:36.873Z" },
+ { url = "https://files.pythonhosted.org/packages/d9/dd/d950718536c3898580c3f903888209d75057659b862b3d8d8af17bdb4fa8/ndindex-1.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b082de3c042b6da7ca327f17d088de3695333c30e0f9717d2ed5de5dc4d70802", size = 161621, upload-time = "2025-05-21T17:40:38.792Z" },
+ { url = "https://files.pythonhosted.org/packages/bd/00/462ef86c63590e1f2e56d31ce46e9f13ae6aebd7506d33c08b927d2f1594/ndindex-1.10.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:69cf517d138f47163d6c94cd9ccaafb91606a2aab386c05aaa0718975da09c88", size = 482241, upload-time = "2025-05-21T17:40:40.671Z" },
+ { url = "https://files.pythonhosted.org/packages/e3/a6/975bfec7bec7f274853b0c33953b5f2df4ad51f62d1aab0c7142fee98261/ndindex-1.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9cea2a5f7a432dafadb6c5732a9af3e7139adbf9085320f284885fe5d4776e4", size = 501603, upload-time = "2025-05-21T17:40:42.394Z" },
+ { url = "https://files.pythonhosted.org/packages/13/4a/8d39f8ab1d20cd246360d7af707107bc4a332c6758ea45780a5bff6ec29f/ndindex-1.10.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a3d2ea706c80e21022f6661524efb0aeed89a714a8fda4712df8d4a90ef507f5", size = 1620040, upload-time = "2025-05-21T17:40:44.638Z" },
+ { url = "https://files.pythonhosted.org/packages/87/83/ba24c57073c29ba3f69c52767bec64dc818e90ac23f6ee43c98172b9f888/ndindex-1.10.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d5b3b8f99970ce40fbff1e55ad9ddf9ea708e82ace91271784e7ff1d08707c4c", size = 1529863, upload-time = "2025-05-21T17:40:46.886Z" },
+ { url = "https://files.pythonhosted.org/packages/cd/2c/61e88acae938898994a6cfe83716db0e440f44f7b0c821a7adb2ab4cedbd/ndindex-1.10.0-cp310-cp310-win32.whl", hash = "sha256:6a5a401b867530fe4f1022cc8d578c8092cfdc726348e6d1569ec91881da365f", size = 149122, upload-time = "2025-05-21T17:40:48.921Z" },
+ { url = "https://files.pythonhosted.org/packages/a9/61/2bc88b2b5f71649f9e07fcf3509ce8eb187adbb3e787e4600b28ce00139c/ndindex-1.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:88504651ddcb6733ba0caf0cdfc214d8ba9f140609b69f6566ad143322ce5a96", size = 156550, upload-time = "2025-05-21T17:40:50.819Z" },
+ { url = "https://files.pythonhosted.org/packages/b4/1c/a53253d68bb269e5591c39b96ae2c4dd671132a82f63d70aea486f76d70c/ndindex-1.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2e42198c8636eaf468cf28b7e1700738de37841853f5f15a0671bad4c3876a85", size = 162556, upload-time = "2025-05-21T17:40:52.668Z" },
+ { url = "https://files.pythonhosted.org/packages/0d/2a/4e268ff5992d4b42755ee19cf46c3e954632aadd57810db7173fe945ad47/ndindex-1.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ec9865e787eababc9aa1be973bf8545c044e2b68297fe37adf7aeefe0ec61f59", size = 161769, upload-time = "2025-05-21T17:40:54.55Z" },
+ { url = "https://files.pythonhosted.org/packages/14/67/28ef988483e1ff446873150979b20fa87833c711fbe3a816e0e6a3e6e7d3/ndindex-1.10.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:72377bc5d15229eeefa73a4370212d0bdb8992c76c2228df0771e0dcdeb5354a", size = 504542, upload-time = "2025-05-21T17:40:56.771Z" },
+ { url = "https://files.pythonhosted.org/packages/79/d8/a4638485d17e5a236a7f8687a63229b4cc4737d018d8f8bdf18983419d5b/ndindex-1.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a8c9f85a1d6497a1fc3a8ac7faf64eef600f95d4330566ae7468e59b6da28d7", size = 528179, upload-time = "2025-05-21T17:40:58.859Z" },
+ { url = "https://files.pythonhosted.org/packages/40/2a/a7c119db8332b85fa6886104ac388a771dd2b0ec35e4b2443d555c5e0e00/ndindex-1.10.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:560211699c4fa370c30edace212b4b61950934c3c9a7b3964f52f2dd09c6913a", size = 1642463, upload-time = "2025-05-21T17:41:01.234Z" },
+ { url = "https://files.pythonhosted.org/packages/14/9a/41dd8270e9b0a411221c1c584fb088f0d43d750d596cf02e1f8b528c426d/ndindex-1.10.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:68e4ed3b5816d22cddf71478197c62ea2453a8f7dea0da57b52ce8b537c7a0c3", size = 1553373, upload-time = "2025-05-21T17:41:03.474Z" },
+ { url = "https://files.pythonhosted.org/packages/6e/36/4d42edfc5f350b83801a473721927c4c01c210014bb2ea1a754e232871d3/ndindex-1.10.0-cp311-cp311-win32.whl", hash = "sha256:52adf006f99f21913300d93d8b08fdd9d12796ee2dc7a1737acd1beea5f7e7af", size = 148975, upload-time = "2025-05-21T17:41:05.65Z" },
+ { url = "https://files.pythonhosted.org/packages/e9/b3/ec2b3447e49d69f033edb003761d3e2e01f2e5fe8ab397140099920405aa/ndindex-1.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:b90559638d35dd3c7f3f46dced6a306935866f86ba5cbd35190ef954334c33b9", size = 156723, upload-time = "2025-05-21T17:41:07.952Z" },
+ { url = "https://files.pythonhosted.org/packages/e5/cb/c44335f5aa81d54d2c06ea0076cc394a9d247ad8bf7dd63c87dec10d2e1f/ndindex-1.10.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:50f9c49659d91b19964da9ee96d5cb18f5102dc1b31ea5ca085f0b4d905cdc60", size = 162959, upload-time = "2025-05-21T17:41:09.96Z" },
+ { url = "https://files.pythonhosted.org/packages/42/f5/2bff167479b589a21288f8f150ca2dbbb5d20e3eb264515eafc5ff1c58f8/ndindex-1.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3e58c340b829275d2a2ac8fc468fca6dd1ca78a7351824dabf4a52cf0a79f648", size = 161618, upload-time = "2025-05-21T17:41:12.3Z" },
+ { url = "https://files.pythonhosted.org/packages/69/ed/1e921acc45f18b6ade332af772496b5a3681856c13b3a0bc3f5a46630b4e/ndindex-1.10.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dd170addae6e4322438cc9ac1ae0cbf0d8f7bea25716fdbef53c4964ee84a64a", size = 521535, upload-time = "2025-05-21T17:41:13.863Z" },
+ { url = "https://files.pythonhosted.org/packages/ec/4a/0b6a4c8c06803efe531fc57d008294bd12a95b94c9ca4922f87cee2c3829/ndindex-1.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b33b378d1ec4d2e041d7d14a2d6d05f74a6ef0f9273985930ad0b993d86e8064", size = 546226, upload-time = "2025-05-21T17:41:15.514Z" },
+ { url = "https://files.pythonhosted.org/packages/4e/94/f8fb6e28660428bb359ffaf088409228fb9033db76ca6363fcf60d31ec13/ndindex-1.10.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c1eb9aa7ad4dd561dfb94b8c069677c59032f7c663e53ab05f97aa20c1643d1b", size = 1660328, upload-time = "2025-05-21T17:41:17.347Z" },
+ { url = "https://files.pythonhosted.org/packages/df/8e/a70ba950fff63d0a3a7142a53ff160cb03076a95964adb057be75a9c9be5/ndindex-1.10.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d490499a09e9cb78d02801d39d7da21e4975f09c78d0e1095a881adf20d0d4e7", size = 1576545, upload-time = "2025-05-21T17:41:19.55Z" },
+ { url = "https://files.pythonhosted.org/packages/d4/17/2a415224e7e35c7e36ffa1f58ef515f7653b118f0098c0f76f3e765b2826/ndindex-1.10.0-cp312-cp312-win32.whl", hash = "sha256:2c65d448210f8e3763e12d9a138195de77b383164d819080eaf64e832c2933bc", size = 149056, upload-time = "2025-05-21T17:41:21.141Z" },
+ { url = "https://files.pythonhosted.org/packages/37/e7/4f955c90e86c025ef04234adfa34ee5053f3dfc835b7d632e7c38ab713fc/ndindex-1.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:d8a9bfac1ce127bf55ad73b62ec57a415d5489db7a76056905a449f8346b69a3", size = 157017, upload-time = "2025-05-21T17:41:22.977Z" },
+ { url = "https://files.pythonhosted.org/packages/03/ee/8f7aa7dde0f2d947c2e4034f4c58b308bf1f48a18780183e7f84298a573c/ndindex-1.10.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:50b579a0c57a4072fc97848f1d0db8cb228ca73d050c8bc9d4e7cf2e75510829", size = 161193, upload-time = "2025-05-21T17:41:24.452Z" },
+ { url = "https://files.pythonhosted.org/packages/9b/3b/9f2a49b5d3a558e9cd067e0911e1bb8d8d553e1d689bb9a9119c775636b9/ndindex-1.10.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0956611e29f51857a54ba0750568ebdbf0eacfad4a262253af2522e77b476369", size = 159952, upload-time = "2025-05-21T17:41:25.806Z" },
+ { url = "https://files.pythonhosted.org/packages/76/b9/93273d8dd7a2e155af6ed0bad2f2618202794ffe537184b25ff666cf8e31/ndindex-1.10.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f82aada1f194c5ea11943ca89532cf449881de8c9c2c48b8baa43d467486fdb2", size = 502466, upload-time = "2025-05-21T17:41:27.342Z" },
+ { url = "https://files.pythonhosted.org/packages/b5/07/c64b0c8416f604f6990da5d1fa97c9de1278a4eec1efcc63b71053b4f0c0/ndindex-1.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38a56a16edbd62ef039b93e393047e66238d02dbc1e95e95b79c0bdd0a4785f7", size = 526910, upload-time = "2025-05-21T17:41:29.071Z" },
+ { url = "https://files.pythonhosted.org/packages/b3/a5/316f13eeda944db14015a6edaebd88fc83b196d86cae9f576be319b93873/ndindex-1.10.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:8b11a3b8fd983adafea988b2a7e51fe8c0be819639b16506a472429069158f6d", size = 1642168, upload-time = "2025-05-21T17:41:31.213Z" },
+ { url = "https://files.pythonhosted.org/packages/f3/13/4c1cf1b6280669f32e9960215d6cbed027084b0bb423c924095f247f3185/ndindex-1.10.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:be7cfaed1e7a72c7e0bbc4a0e1965d3cc8207cb3d56bd351c0cb2b2d94db0bdd", size = 1557347, upload-time = "2025-05-21T17:41:32.893Z" },
+ { url = "https://files.pythonhosted.org/packages/2d/ac/36124ca146aaa6e84ac479e06a81b5ae9ebde2e3b4b2c77c49492bcfebae/ndindex-1.10.0-cp313-cp313-win32.whl", hash = "sha256:f779a0c20ffd617535bf57c7437d5521d5453daf2e0db0d148301df6b24c0932", size = 148623, upload-time = "2025-05-21T17:41:34.628Z" },
+ { url = "https://files.pythonhosted.org/packages/23/38/13169cc35be65a6683784c5a1f2c7e6d2219f58fb56abe9d13ef762a634a/ndindex-1.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:1ef8d71e0ddf0c6e39e64f1e328a37ebefcca1b89218a4068c353851bcb4cb0f", size = 156188, upload-time = "2025-05-21T17:41:36.043Z" },
+ { url = "https://files.pythonhosted.org/packages/29/f6/ba98045516f39b0414d03c466e7c46b79290cd54a73ff961b9081bc66a6e/ndindex-1.10.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:6fcefeefc48815dd8e99999999477d91d4287d8034b1c81084042a49976b212c", size = 167198, upload-time = "2025-05-21T17:41:37.544Z" },
+ { url = "https://files.pythonhosted.org/packages/ca/14/4c8b1256009cda78387e6e3035d4b86582d98b557e56f7ee8f58df3e57b4/ndindex-1.10.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:882367d3d5a4d20155c23d890bf01ffbac78019eee09a9456ff3322f62eb34c1", size = 167324, upload-time = "2025-05-21T17:41:39.004Z" },
+ { url = "https://files.pythonhosted.org/packages/c5/34/a1e8117c0fe5a862da9e7f0162233340c7a9bbd728161a06cd0ad856514e/ndindex-1.10.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f04b3eeced5a10f1c00197ee93c913a691467c752306c0d97e6df9c02af4e6d", size = 608219, upload-time = "2025-05-21T17:41:40.556Z" },
+ { url = "https://files.pythonhosted.org/packages/19/6c/f9b449d0d9db404637d026798a208b677c04c349ab740db33ab78065603d/ndindex-1.10.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:cb68232e58ca6cc92ddc8cdddcff8dcdfa5de030e89de8457e5d43de77bcc331", size = 1639541, upload-time = "2025-05-21T17:41:42.33Z" },
+ { url = "https://files.pythonhosted.org/packages/2c/14/0bfe948a092ddba3c23f18a6f4e3fc2029adfc3e433e634410ba98b7700f/ndindex-1.10.0-cp313-cp313t-win32.whl", hash = "sha256:af8ecd5a0221482e9b467918b90e78f85241572102fdcf0a941ef087e7dcf2e4", size = 157843, upload-time = "2025-05-21T17:41:43.981Z" },
+ { url = "https://files.pythonhosted.org/packages/50/49/0e7d831e918db3e8819f7327e835e4b106fe91ed0c865e96fb952f936b7f/ndindex-1.10.0-cp313-cp313t-win_amd64.whl", hash = "sha256:2fb32342379547032fd25dbf5bfc7003ebc1bde582779e9a171373a738d6fb8b", size = 166116, upload-time = "2025-05-21T17:41:45.506Z" },
+ { url = "https://files.pythonhosted.org/packages/b0/61/afde1bf918386625e477a7ac0fa518ca83f9239e2675affccf8d48d05e25/ndindex-1.10.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:1851d2d490413edc5c5734f5f74e8d3b59cfc23eae561d10bd4db6e4162dcf02", size = 146659, upload-time = "2025-05-21T17:42:00.855Z" },
+ { url = "https://files.pythonhosted.org/packages/63/22/90a3e3aa613d4d7e5432e8d7cf0188049f61b34b104eef7f014b7e35a3aa/ndindex-1.10.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:490c577e6915f8d2d045239a14e70b1dfd14b703028a41f6a3713821598d0db8", size = 146160, upload-time = "2025-05-21T17:42:02.227Z" },
+ { url = "https://files.pythonhosted.org/packages/80/a5/677dc41756ac9b2ac3bd0b458abda4dee0c74ee1c6560be3a1b36cc2c9d1/ndindex-1.10.0-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:21f4c61db28b7ba8dc03548a3b2c3561feb8d61f7293dfc310df52aa2676463f", size = 163067, upload-time = "2025-05-21T17:42:03.615Z" },
+ { url = "https://files.pythonhosted.org/packages/01/8d/319499a3f9da41695a75243b8fd8576d42c1e382f5dc935b885f590a42be/ndindex-1.10.0-pp310-pypy310_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd41c7cce386bc21a38a2153427ce47f92d6bdb097dc3c5c42fa24e75090c8f", size = 160109, upload-time = "2025-05-21T17:42:05.137Z" },
+ { url = "https://files.pythonhosted.org/packages/7c/66/a6721aac78028ee1dd35106a20a2f5c940f17587bc8c8fb9d98040eeddec/ndindex-1.10.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ba5f6d09ad320e0045ea39d7efd66a21d73cd4875d114be08e7ba6204a8feb7", size = 148094, upload-time = "2025-05-21T17:42:06.563Z" },
+ { url = "https://files.pythonhosted.org/packages/c3/61/1333424bdfcebdcea63f5ed86ac98dccaf07ebb7e1463ca845a06e321d91/ndindex-1.10.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:aa17ea725f85af9285b298f72ccc8012949c0916d4426b0215d1c556dd995246", size = 146929, upload-time = "2025-05-21T17:42:08.04Z" },
+ { url = "https://files.pythonhosted.org/packages/eb/7c/0813615d958ec78c521b9c09518b1f49ec553a0bec0646b5f4ebbf33bdcb/ndindex-1.10.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:219fdef9d6a557913fd92418275088b46c727944356f3fe59f4f72d62efd6f3d", size = 146417, upload-time = "2025-05-21T17:42:09.534Z" },
+ { url = "https://files.pythonhosted.org/packages/d8/a1/b340a47409253f05c78d400f98b43477549ad1a1f7a5358acb784c79ed48/ndindex-1.10.0-pp311-pypy311_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1962137fcb69c00e2db42d5d045f9b7413fc37f44b143e7ae4a8c2c68ba3832", size = 163867, upload-time = "2025-05-21T17:42:10.994Z" },
+ { url = "https://files.pythonhosted.org/packages/02/24/e5192ffb87070e9ff2328d715e5aa3a7f6b673e86c1ee8f48136815564e1/ndindex-1.10.0-pp311-pypy311_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18c9c8271926fb16c59e827b61bb77f45ee31a824eaa50b386edcd77a6a7c9a3", size = 160644, upload-time = "2025-05-21T17:42:12.415Z" },
+ { url = "https://files.pythonhosted.org/packages/09/c5/b894cc961460e608b869d91164e9f825e3bb0579defb37c0eea61dce584e/ndindex-1.10.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:76e4fb082c83ccbc67c7a64b80e33bc5dfe9379f30c3b40a865914ae79947071", size = 147721, upload-time = "2025-05-21T17:42:13.825Z" },
+]
+
[[package]]
name = "nest-asyncio"
version = "1.6.0"
@@ -1300,14 +1441,14 @@ wheels = [
[[package]]
name = "policyengine-uk"
-version = "2.34.5"
+version = "2.35.1"
source = { editable = "." }
dependencies = [
{ name = "microdf-python" },
{ name = "policyengine-core" },
]
-[package.dev-dependencies]
+[package.optional-dependencies]
dev = [
{ name = "black" },
{ name = "coverage" },
@@ -1324,28 +1465,34 @@ dev = [
{ name = "yaml-changelog" },
]
+[package.dev-dependencies]
+dev = [
+ { name = "tables", version = "3.10.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" },
+ { name = "tables", version = "3.10.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" },
+]
+
[package.metadata]
requires-dist = [
+ { name = "black", marker = "extra == 'dev'" },
+ { name = "coverage", marker = "extra == 'dev'" },
+ { name = "furo", marker = "extra == 'dev'", specifier = "<2023" },
+ { name = "jupyter-book", marker = "extra == 'dev'" },
+ { name = "linecheck", marker = "extra == 'dev'" },
{ name = "microdf-python" },
{ name = "policyengine-core", specifier = ">=3.6.4" },
+ { name = "pytest", marker = "extra == 'dev'" },
+ { name = "setuptools", marker = "extra == 'dev'" },
+ { name = "snowballstemmer", marker = "extra == 'dev'", specifier = ">=2,<3" },
+ { name = "sphinx-argparse", marker = "extra == 'dev'", specifier = ">=0.3.2,<1" },
+ { name = "sphinx-math-dollar", marker = "extra == 'dev'", specifier = ">=1.2.1,<2" },
+ { name = "tqdm", marker = "extra == 'dev'" },
+ { name = "wheel", marker = "extra == 'dev'" },
+ { name = "yaml-changelog", marker = "extra == 'dev'", specifier = ">=0.1.7" },
]
+provides-extras = ["dev"]
[package.metadata.requires-dev]
-dev = [
- { name = "black" },
- { name = "coverage" },
- { name = "furo", specifier = "<2023" },
- { name = "jupyter-book" },
- { name = "linecheck" },
- { name = "pytest" },
- { name = "setuptools" },
- { name = "snowballstemmer", specifier = ">=2,<3" },
- { name = "sphinx-argparse", specifier = ">=0.3.2,<1" },
- { name = "sphinx-math-dollar", specifier = ">=1.2.1,<2" },
- { name = "tqdm" },
- { name = "wheel" },
- { name = "yaml-changelog", specifier = ">=0.1.7" },
-]
+dev = [{ name = "tables", specifier = ">=3.10.1" }]
[[package]]
name = "prompt-toolkit"
@@ -1392,6 +1539,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842, upload-time = "2024-07-21T12:58:20.04Z" },
]
+[[package]]
+name = "py-cpuinfo"
+version = "9.0.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/37/a8/d832f7293ebb21690860d2e01d8115e5ff6f2ae8bbdc953f0eb0fa4bd2c7/py-cpuinfo-9.0.0.tar.gz", hash = "sha256:3cdbbf3fac90dc6f118bfd64384f309edeadd902d7c8fb17f02ffa1fc3f49690", size = 104716, upload-time = "2022-10-25T20:38:06.303Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/e0/a9/023730ba63db1e494a271cb018dcd361bd2c917ba7004c3e49d5daf795a2/py_cpuinfo-9.0.0-py3-none-any.whl", hash = "sha256:859625bc251f64e21f077d099d4162689c762b5d6a4c3c97553d56241c9674d5", size = 22335, upload-time = "2022-10-25T20:38:27.636Z" },
+]
+
[[package]]
name = "pybtex"
version = "0.25.1"
@@ -2139,6 +2295,79 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521, upload-time = "2023-09-30T13:58:03.53Z" },
]
+[[package]]
+name = "tables"
+version = "3.10.1"
+source = { registry = "https://pypi.org/simple" }
+resolution-markers = [
+ "python_full_version < '3.11'",
+]
+dependencies = [
+ { name = "blosc2", marker = "python_full_version < '3.11'" },
+ { name = "numexpr", marker = "python_full_version < '3.11'" },
+ { name = "numpy", marker = "python_full_version < '3.11'" },
+ { name = "packaging", marker = "python_full_version < '3.11'" },
+ { name = "py-cpuinfo", marker = "python_full_version < '3.11'" },
+ { name = "typing-extensions", marker = "python_full_version < '3.11'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/0d/5d/96708a84e9fcd29d1f684d56d4c38a23d29b1c934599a072a49f27ccfa71/tables-3.10.1.tar.gz", hash = "sha256:4aa07ac734b9c037baeaf44aec64ec902ad247f57811b59f30c4e31d31f126cf", size = 4762413, upload-time = "2024-08-17T09:57:47.127Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/ff/69/a768ec8104ada032c9be09f521f548766ddd0351bc941c9d42fa5db001de/tables-3.10.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bca9d11a570ca1bc57f0845e54e55c3093d5a1ace376faee639e09503a73745b", size = 6823691, upload-time = "2024-08-17T09:56:50.229Z" },
+ { url = "https://files.pythonhosted.org/packages/e4/2d/074bc14b39de9b552eec02ee583eff2997d903da1355f4450506335a6055/tables-3.10.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b62881cb682438d1e92b9178db42b160638aef3ca23341f7d98e9b27821b1eb4", size = 5471221, upload-time = "2024-08-17T09:56:54.84Z" },
+ { url = "https://files.pythonhosted.org/packages/4a/30/29411ab804b5ac4bee25c82ba38f4e7a8c0b52c6a1cdbeea7d1db33a53fe/tables-3.10.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9cf1bfd8b0e0195196205fc8a134628219cff85d20da537facd67a291e6b347", size = 7170201, upload-time = "2024-08-17T09:56:59.011Z" },
+ { url = "https://files.pythonhosted.org/packages/0a/7d/3165c7538b8e89b22fa17ad68e04106cca7023cf68e94011ae7b3b6d2a78/tables-3.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77f0e6dd45b91d99bf3976c8655c48fe3816baf390b9098e4fb2f0fdf9da7078", size = 7571035, upload-time = "2024-08-17T09:57:03.115Z" },
+ { url = "https://files.pythonhosted.org/packages/46/b3/985a23d2cf27aad383301a5e99e1851228a1941b868515612b5357bded5f/tables-3.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:d90542ec172d1d60df0b796c48ad446f2b69a5d5cd3077bd6450891b854d1ffb", size = 6311650, upload-time = "2024-08-17T09:57:06.593Z" },
+ { url = "https://files.pythonhosted.org/packages/dc/04/957264eb35e60251830a965e2d02332eb36ed14fbd8345df06981bbf3ece/tables-3.10.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8917262a2bb3cd79d37e108557e34ec4b365fdcc806e01dd10765a84c65dab6", size = 6790492, upload-time = "2024-08-17T09:57:10.247Z" },
+ { url = "https://files.pythonhosted.org/packages/b2/19/eb7af9d92aaf6766f5fedfce11a97ab03cf39856561c5f562dc0c769a682/tables-3.10.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f93f6db623b484bb6606537c2a71e95ee34fae19b0d891867642dd8c7be05af6", size = 5506835, upload-time = "2024-08-17T09:57:13.883Z" },
+ { url = "https://files.pythonhosted.org/packages/b0/8f/897324e1ad543ca439b2c91f04c406f3eeda6e7ff2f43b4cd939f05043e4/tables-3.10.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01ca51624bca1a87e703d6d6b796368bc3460ff007ea8b1341be03bedd863833", size = 7166960, upload-time = "2024-08-17T09:57:17.463Z" },
+ { url = "https://files.pythonhosted.org/packages/4e/5c/3f21d1135bf60af99ac79a17bbffd333d69763df2197ba04f47dd30bbd4e/tables-3.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9372516c76be3a05a573df63a69ce38315d03b5816d2a1e89c48129ec8b161b0", size = 7568724, upload-time = "2024-08-17T09:57:23.02Z" },
+ { url = "https://files.pythonhosted.org/packages/1f/e3/3ee6b66263902eccadc4e0e23bca7fb480fd190904b7ce0bea4777b5b799/tables-3.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:09190fb504888aeacafb7739c13d5c5a3e87af3d261f4d2f832b1f8407be133a", size = 6312200, upload-time = "2024-08-17T09:57:26.322Z" },
+ { url = "https://files.pythonhosted.org/packages/95/ec/ea6c476e33602c172c797fe8f8ab96d007d964137068276d142b142a28e5/tables-3.10.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a7090af37909e3bf229d5599fa442633e5a93b6082960b01038dc0106e07a8da", size = 6791597, upload-time = "2024-08-17T09:57:29.598Z" },
+ { url = "https://files.pythonhosted.org/packages/74/02/a967a506e9204e3328a8c03f67e6f3c919defc8df11aba83ae5b2abf7b0f/tables-3.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:203ed50c0c5f30f007df7633089b2a567b99856cd25d68f19d91624a8db2e7ad", size = 5474779, upload-time = "2024-08-17T09:57:32.43Z" },
+ { url = "https://files.pythonhosted.org/packages/c3/26/925793f753664ec698b2c6315c818269313db143da38150897cf260405c2/tables-3.10.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e36ce9f10471c69c1f0b06c6966de762558a35d62592c55df7994a8019adaf0c", size = 7130683, upload-time = "2024-08-17T09:57:36.181Z" },
+ { url = "https://files.pythonhosted.org/packages/d8/79/2b34f22284459e940a84e71dba19b2a34c7cc0ce3cdf685923c50d5b9611/tables-3.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f233e78cc9fa4157ec4c3ef2abf01a731fe7969bc6ed73539e5f4cd3b94c98b2", size = 7531367, upload-time = "2024-08-17T09:57:39.864Z" },
+ { url = "https://files.pythonhosted.org/packages/3d/27/5a23830f611e26dd7ee104096c6bb82e481b16f3f17ccaed3075f8d48312/tables-3.10.1-cp312-cp312-win_amd64.whl", hash = "sha256:34357d2f2f75843a44e6fe54d1f11fc2e35a8fd3cb134df3d3362cff78010adb", size = 6295046, upload-time = "2024-08-17T09:57:43.561Z" },
+ { url = "https://files.pythonhosted.org/packages/d3/d4/e7c25df877e054b05f146d6ccb920bcdbe8d39b35a0962868b80547532c7/tables-3.10.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6fc5b46a4f359249c3ab9a0a0a2448d7e680e68cffd63fdf3fb7171781edd46e", size = 6824253, upload-time = "2024-11-09T19:26:06.428Z" },
+ { url = "https://files.pythonhosted.org/packages/c6/49/091865d75090a24493bd1b66e52d72f4d9627ff42983a13d4dcd89455d02/tables-3.10.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2ecabd7f459d40b7f9f5256850dd5f43773fda7b789f827de92c3d26df1e320f", size = 5499587, upload-time = "2024-11-09T19:26:12.402Z" },
+ { url = "https://files.pythonhosted.org/packages/23/83/9dac8af333149fa01add439f710d4a312b70faf81c2f59a16b8bfaebb75e/tables-3.10.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40a4ee18f3c9339d9dd8fd3777c75cda5768f2ff347064a2796f59161a190af8", size = 7128236, upload-time = "2024-11-09T19:26:15.716Z" },
+ { url = "https://files.pythonhosted.org/packages/89/fd/62f31643596f6ab71fc6d2a87acdee0bc01a03fbe1a7f3f6dc0c91e2546d/tables-3.10.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:757c6ea257c174af8036cf8f273ede756bbcd6db5ac7e2a4d64e788b0f371152", size = 7527953, upload-time = "2024-11-09T19:26:20.229Z" },
+]
+
+[[package]]
+name = "tables"
+version = "3.10.2"
+source = { registry = "https://pypi.org/simple" }
+resolution-markers = [
+ "python_full_version >= '3.12'",
+ "python_full_version == '3.11.*'",
+]
+dependencies = [
+ { name = "blosc2", marker = "python_full_version >= '3.11'" },
+ { name = "numexpr", marker = "python_full_version >= '3.11'" },
+ { name = "numpy", marker = "python_full_version >= '3.11'" },
+ { name = "packaging", marker = "python_full_version >= '3.11'" },
+ { name = "py-cpuinfo", marker = "python_full_version >= '3.11'" },
+ { name = "typing-extensions", marker = "python_full_version >= '3.11'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/15/50/23ead25f60bb1babe7f2f061d8a2f8c2f6804c1a20b3058677beb9085b56/tables-3.10.2.tar.gz", hash = "sha256:2544812a7186fadba831d6dd34eb49ccd788d6a83f4e4c2b431b835b6796c910", size = 4779722, upload-time = "2025-01-04T20:44:13.034Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/96/f6/ef0c376c1fa01b916d5db0c2681be063f6289ee99faf7bb6610e0b55b773/tables-3.10.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:63f8adec3c4421a011c5c6a245c0c1fccf16dba7aaa67d9915d2821cf365ed4a", size = 6767194, upload-time = "2025-01-04T20:42:53.5Z" },
+ { url = "https://files.pythonhosted.org/packages/d9/d0/accd41382fa9da45bf816c56f85bda64223a3b8d0006d3496b67e0781a6e/tables-3.10.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:34c120bff666d33d3bdfb9e33173a4869d5f34e6c87824f2c7ec6a72c8dfab82", size = 5482665, upload-time = "2025-01-04T20:42:58.589Z" },
+ { url = "https://files.pythonhosted.org/packages/59/2f/c95e94423c463177b8a7d55a1dbbd524840fe6a684844ff728f238e71f68/tables-3.10.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e71f63ac67c583ac42943c99c2d33bcc9e361e94d1ab1a763dc0698bdd9ff815", size = 7117696, upload-time = "2025-01-04T20:43:04.014Z" },
+ { url = "https://files.pythonhosted.org/packages/88/d5/71665919aa2a5a3d2a20eeef3c71dc7c2ebbd9f26d114a7808514aba24d6/tables-3.10.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:154773f97763ccc91a29bcead6ab7b5ef164c2ed8c409cd79a2115aa9b4184c9", size = 7520921, upload-time = "2025-01-04T20:43:10.002Z" },
+ { url = "https://files.pythonhosted.org/packages/46/96/b5023c1f7b9d560cac3e2c0daceebaeb88dd24c70c75db2d291abfa563e5/tables-3.10.2-cp311-cp311-win_amd64.whl", hash = "sha256:96b5e945d275415e79ddb0578657ecc6ac77030dcc0632ab2c39f89390bb239d", size = 6407137, upload-time = "2025-01-04T20:43:15.838Z" },
+ { url = "https://files.pythonhosted.org/packages/ab/c4/1efbcc699db863d88874f3d111e5bb6dd2e0fbaca38f91c992e696324730/tables-3.10.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c6ba58205d1f6a4e0e2212bc221e76cf104f22190f90c3f1683f3c1ab138f28f", size = 6734990, upload-time = "2025-01-04T20:43:20.794Z" },
+ { url = "https://files.pythonhosted.org/packages/4a/db/4c7facfc805ab764f2ee256011d20f96791d2426afa3389ca7ff2a8a4ea8/tables-3.10.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cdb5c040aa43e5e96259d6f6bb9df5b66fef2b071a6eb035c21bf6508e865d40", size = 5483377, upload-time = "2025-01-04T20:43:25.923Z" },
+ { url = "https://files.pythonhosted.org/packages/93/0a/53815b516a2465b329e5dc2079c99a8b6b1a23f6b9ce5da8a7ebc7892bf4/tables-3.10.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e694123fa886d9be57f55fc7e1dcacac49f0b4ed4a931c795bd8f82f7111b5a8", size = 7081356, upload-time = "2025-01-04T20:43:31.066Z" },
+ { url = "https://files.pythonhosted.org/packages/d3/e1/3f4adfc83eb7390abb964682a7d1df0dbe451dd2cee99750b1c7ca8e2c9d/tables-3.10.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6c12d0d04de89297763923ebeaddfd7e0b51f29041895db284fd4913e7448b7", size = 7483570, upload-time = "2025-01-04T20:43:36.694Z" },
+ { url = "https://files.pythonhosted.org/packages/9a/d4/0b9ba57a5a8d2d05d1108055a8d70a4b066db4ebed61921de34043a31bdb/tables-3.10.2-cp312-cp312-win_amd64.whl", hash = "sha256:a406d5dbbcb6604bd1ca129af337e0790d4e02d29d06159ddb9f74e38d756d32", size = 6388443, upload-time = "2025-01-04T20:43:42.503Z" },
+ { url = "https://files.pythonhosted.org/packages/ab/02/8c7aeaa6c8aac8e0298d40dc5fc55477fddc30cb31e4dc7e5e473be4b464/tables-3.10.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7b8bc07c715bad3d447ed8f834388ef2e10265e2c4af6b1297fc61adb645948f", size = 6725764, upload-time = "2025-01-04T20:43:48.171Z" },
+ { url = "https://files.pythonhosted.org/packages/91/f4/8683395d294b9e4576fd7d888aa6cf5583c013c2c0a2e47f862c2842407f/tables-3.10.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:28677ed8e1a371471495599078f48da0850f82457d6c852ca77959c974371140", size = 5442663, upload-time = "2025-01-04T20:43:53.722Z" },
+ { url = "https://files.pythonhosted.org/packages/72/9b/ea43159eed8f81bfa1ead8fa8201a3c352e84c7220e046bb548736833951/tables-3.10.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaaea478dcf27dd54679ef2643c26d3b8b15676ad81e4d80a88fd1682d23deb1", size = 7078747, upload-time = "2025-01-04T20:43:59.596Z" },
+ { url = "https://files.pythonhosted.org/packages/04/95/b3e88edc674e35d9011b168df0d7a9b1c3ab98733fa26e740ac7964edc2f/tables-3.10.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c5e67a9f901842f9a4b1f3d2307f4bdd94047514fe0d0c558ed19c11f53c402a", size = 7479985, upload-time = "2025-01-04T20:44:04.13Z" },
+ { url = "https://files.pythonhosted.org/packages/63/ca/eaa029a43d269bdda6985931d6cfd479e876cd8cf7c887d818bef05ef03b/tables-3.10.2-cp313-cp313-win_amd64.whl", hash = "sha256:5637fdcded5ba5426aa24e0e42d6f990926a4da7f193830df131dfcb7e842900", size = 6385562, upload-time = "2025-01-04T20:44:08.196Z" },
+]
+
[[package]]
name = "tabulate"
version = "0.9.0"