policyengine-uk 2.41.4__py3-none-any.whl → 2.43.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- policyengine_uk/data/dataset_schema.py +63 -15
- policyengine_uk/data/economic_assumptions.py +18 -1
- policyengine_uk/model_api.py +1 -0
- policyengine_uk/parameters/gov/economic_assumptions/yoy_growth.yaml +23 -1
- policyengine_uk/scenarios/__init__.py +3 -0
- policyengine_uk/scenarios/pip_reform.py +23 -0
- policyengine_uk/scenarios/reindex_benefit_cap.py +32 -0
- policyengine_uk/scenarios/repeal_two_child_limit.py +10 -0
- policyengine_uk/system.py +543 -186
- policyengine_uk/tests/microsimulation/reforms_config.yaml +1 -1
- policyengine_uk/utils/create_ahc_deflator.py +170 -0
- policyengine_uk/utils/scenario.py +184 -0
- {policyengine_uk-2.41.4.data → policyengine_uk-2.43.0.data}/data/share/openfisca/openfisca-country-template/CHANGELOG.md +16 -0
- {policyengine_uk-2.41.4.dist-info → policyengine_uk-2.43.0.dist-info}/METADATA +2 -2
- {policyengine_uk-2.41.4.dist-info → policyengine_uk-2.43.0.dist-info}/RECORD +19 -15
- policyengine_uk/repo.py +0 -3
- policyengine_uk/tests/policy/baseline/gov/abolitions/abolition_parameters.yaml +0 -250
- {policyengine_uk-2.41.4.data → policyengine_uk-2.43.0.data}/data/share/openfisca/openfisca-country-template/LICENSE +0 -0
- {policyengine_uk-2.41.4.data → policyengine_uk-2.43.0.data}/data/share/openfisca/openfisca-country-template/README.md +0 -0
- {policyengine_uk-2.41.4.dist-info → policyengine_uk-2.43.0.dist-info}/WHEEL +0 -0
- {policyengine_uk-2.41.4.dist-info → policyengine_uk-2.43.0.dist-info}/licenses/LICENSE +0 -0
@@ -16,7 +16,7 @@ reforms:
|
|
16
16
|
parameters:
|
17
17
|
gov.hmrc.child_benefit.amount.additional: 25
|
18
18
|
- name: Reduce Universal Credit taper rate to 20%
|
19
|
-
expected_impact: -
|
19
|
+
expected_impact: -38.4
|
20
20
|
parameters:
|
21
21
|
gov.dwp.universal_credit.means_test.reduction_rate: 0.2
|
22
22
|
- name: Raise Class 1 main employee NICs rate to 10%
|
@@ -0,0 +1,170 @@
|
|
1
|
+
import pandas as pd
|
2
|
+
import numpy as np
|
3
|
+
|
4
|
+
from policyengine_uk.system import system
|
5
|
+
|
6
|
+
# Source: ONS series ref 2863
|
7
|
+
historical_modified_cpi = pd.DataFrame(
|
8
|
+
{
|
9
|
+
"period": ["2022-01-01", "2023-01-01", "2024-01-01"],
|
10
|
+
"modified_cpi_index": [126.05, 133.22, 135.68],
|
11
|
+
"modified_cpi_yoy": [0.107, 0.057, 0.018],
|
12
|
+
}
|
13
|
+
)
|
14
|
+
|
15
|
+
# Source: ONS Consumer price inflation, updating weights: Annex A, Tables W1 to W3
|
16
|
+
initial_weights = {
|
17
|
+
"w_water": 9.7399 / 1000,
|
18
|
+
"w_rent": 81.4551 / 1000,
|
19
|
+
"w_repair": 2.9902 / 1000,
|
20
|
+
}
|
21
|
+
|
22
|
+
cpi = (
|
23
|
+
system.parameters.gov.economic_assumptions.indices.obr.consumer_price_index
|
24
|
+
)
|
25
|
+
water_index = (
|
26
|
+
system.parameters.gov.economic_assumptions.indices.ofwat.water_bills
|
27
|
+
)
|
28
|
+
rent_index = system.parameters.gov.economic_assumptions.indices.obr.rent
|
29
|
+
|
30
|
+
|
31
|
+
def get_parameter_values(param, start_year, end_year):
|
32
|
+
values = {}
|
33
|
+
for year in range(start_year, end_year + 1):
|
34
|
+
instant = f"{year}-01-01"
|
35
|
+
value = param(instant)
|
36
|
+
if value is not None:
|
37
|
+
values[year] = value
|
38
|
+
return values
|
39
|
+
|
40
|
+
|
41
|
+
def create_modified_cpi_forecast(
|
42
|
+
cpi_parameter,
|
43
|
+
water_index_parameter,
|
44
|
+
rent_index_parameter,
|
45
|
+
historical_modified_cpi,
|
46
|
+
initial_weights,
|
47
|
+
forecast_start_year=2025,
|
48
|
+
forecast_end_year=2029,
|
49
|
+
):
|
50
|
+
|
51
|
+
cpi_values = get_parameter_values(
|
52
|
+
cpi_parameter, forecast_start_year, forecast_end_year
|
53
|
+
)
|
54
|
+
water_values = get_parameter_values(
|
55
|
+
water_index_parameter, forecast_start_year, forecast_end_year
|
56
|
+
)
|
57
|
+
rent_values = get_parameter_values(
|
58
|
+
rent_index_parameter, forecast_start_year, forecast_end_year
|
59
|
+
)
|
60
|
+
|
61
|
+
last_historical_year = forecast_start_year - 1
|
62
|
+
last_cpi = cpi_parameter(f"{last_historical_year}-01-01")
|
63
|
+
last_water = water_index_parameter(f"{last_historical_year}-01-01")
|
64
|
+
last_rent = rent_index_parameter(f"{last_historical_year}-01-01")
|
65
|
+
|
66
|
+
results = []
|
67
|
+
for _, row in historical_modified_cpi.iterrows():
|
68
|
+
results.append(
|
69
|
+
{
|
70
|
+
"period": row["period"],
|
71
|
+
"modified_cpi_index": row["modified_cpi_index"],
|
72
|
+
"modified_cpi_yoy": row["modified_cpi_yoy"],
|
73
|
+
"data_type": "historical",
|
74
|
+
}
|
75
|
+
)
|
76
|
+
|
77
|
+
last_historical = historical_modified_cpi.iloc[-1]
|
78
|
+
last_modified_index = last_historical["modified_cpi_index"]
|
79
|
+
|
80
|
+
current_weights = initial_weights.copy()
|
81
|
+
current_weights["w_other"] = 1 - (
|
82
|
+
current_weights["w_water"]
|
83
|
+
+ current_weights["w_repair"]
|
84
|
+
+ current_weights["w_rent"]
|
85
|
+
)
|
86
|
+
|
87
|
+
forecast_years = sorted(cpi_values.keys())
|
88
|
+
prev_cpi = last_cpi
|
89
|
+
prev_water_index = last_water
|
90
|
+
prev_rent_index = last_rent
|
91
|
+
|
92
|
+
for year in forecast_years:
|
93
|
+
current_cpi = cpi_values[year]
|
94
|
+
current_water_index = water_values.get(year)
|
95
|
+
current_rent_index = rent_values.get(year)
|
96
|
+
|
97
|
+
pi_total = (current_cpi / prev_cpi) - 1
|
98
|
+
pi_repair = pi_total # Use CPI for maintenance and repair
|
99
|
+
pi_water = (current_water_index / prev_water_index) - 1
|
100
|
+
pi_rent = (current_rent_index / prev_rent_index) - 1
|
101
|
+
|
102
|
+
housing_contribution = (
|
103
|
+
current_weights["w_water"] * pi_water
|
104
|
+
+ current_weights["w_repair"] * pi_repair
|
105
|
+
+ current_weights["w_rent"] * pi_rent
|
106
|
+
)
|
107
|
+
|
108
|
+
pi_other = (pi_total - housing_contribution) / current_weights[
|
109
|
+
"w_other"
|
110
|
+
]
|
111
|
+
|
112
|
+
new_modified_index = last_modified_index * (1 + pi_other)
|
113
|
+
|
114
|
+
if len(results) >= 1:
|
115
|
+
prev_year_value = results[-1]["modified_cpi_index"]
|
116
|
+
modified_cpi_yoy = (new_modified_index / prev_year_value) - 1
|
117
|
+
else:
|
118
|
+
modified_cpi_yoy = np.nan
|
119
|
+
|
120
|
+
results.append(
|
121
|
+
{
|
122
|
+
"period": f"{year}-01-01",
|
123
|
+
"year": int(year),
|
124
|
+
"modified_cpi_index": new_modified_index,
|
125
|
+
"modified_cpi_yoy": modified_cpi_yoy,
|
126
|
+
"original_cpi_yoy": pi_total,
|
127
|
+
"data_type": "forecast",
|
128
|
+
"pi_other": pi_other,
|
129
|
+
"pi_total": pi_total,
|
130
|
+
"pi_rent": pi_rent,
|
131
|
+
"pi_water": pi_water,
|
132
|
+
"pi_repair": pi_repair,
|
133
|
+
}
|
134
|
+
)
|
135
|
+
|
136
|
+
total_weighted_growth = (
|
137
|
+
current_weights["w_water"] * (1 + pi_water)
|
138
|
+
+ current_weights["w_rent"] * (1 + pi_rent)
|
139
|
+
+ current_weights["w_repair"] * (1 + pi_repair)
|
140
|
+
+ current_weights["w_other"] * (1 + pi_other)
|
141
|
+
)
|
142
|
+
|
143
|
+
current_weights["w_water"] = (
|
144
|
+
current_weights["w_water"] * (1 + pi_water) / total_weighted_growth
|
145
|
+
)
|
146
|
+
current_weights["w_rent"] = (
|
147
|
+
current_weights["w_rent"] * (1 + pi_rent) / total_weighted_growth
|
148
|
+
)
|
149
|
+
current_weights["w_repair"] = (
|
150
|
+
current_weights["w_repair"]
|
151
|
+
* (1 + pi_repair)
|
152
|
+
/ total_weighted_growth
|
153
|
+
)
|
154
|
+
current_weights["w_other"] = (
|
155
|
+
current_weights["w_other"] * (1 + pi_other) / total_weighted_growth
|
156
|
+
)
|
157
|
+
|
158
|
+
last_modified_index = new_modified_index
|
159
|
+
prev_cpi = current_cpi
|
160
|
+
prev_water_index = current_water_index
|
161
|
+
prev_rent_index = current_rent_index
|
162
|
+
|
163
|
+
return pd.DataFrame(results)
|
164
|
+
|
165
|
+
|
166
|
+
if __name__ == "__main__":
|
167
|
+
modified_cpi_forecast = create_modified_cpi_forecast(
|
168
|
+
cpi, water_index, rent_index, historical_modified_cpi, initial_weights
|
169
|
+
)
|
170
|
+
print(modified_cpi_forecast.to_markdown(index=False))
|
@@ -0,0 +1,184 @@
|
|
1
|
+
from pydantic import BaseModel
|
2
|
+
from typing import Optional, Callable, Dict, Type, Union
|
3
|
+
from policyengine_core.simulations import Simulation
|
4
|
+
from policyengine_core.reforms import Reform
|
5
|
+
|
6
|
+
|
7
|
+
class Scenario(BaseModel):
|
8
|
+
"""Represents a scenario configuration for policy simulations.
|
9
|
+
|
10
|
+
A scenario can include parameter changes and/or simulation modifications
|
11
|
+
that are applied before running a simulation. Scenarios can be combined
|
12
|
+
using the + operator.
|
13
|
+
"""
|
14
|
+
|
15
|
+
parameter_changes: Optional[
|
16
|
+
Dict[
|
17
|
+
str,
|
18
|
+
Union[
|
19
|
+
int,
|
20
|
+
float,
|
21
|
+
bool,
|
22
|
+
Dict[Union[str, int], Union[int, float, bool]],
|
23
|
+
],
|
24
|
+
]
|
25
|
+
] = None
|
26
|
+
"""A dictionary of parameter changes to apply to the simulation. These are applied *before* parameter operations."""
|
27
|
+
|
28
|
+
simulation_modifier: Optional[Callable[["Simulation"], None]] = None
|
29
|
+
"""A function that modifies the simulation before running it."""
|
30
|
+
|
31
|
+
class Config:
|
32
|
+
"""Pydantic configuration."""
|
33
|
+
|
34
|
+
arbitrary_types_allowed = True # Allow Callable types
|
35
|
+
|
36
|
+
def __add__(self, other: "Scenario") -> "Scenario":
|
37
|
+
"""Combine two scenarios by merging parameter changes and chaining modifiers.
|
38
|
+
|
39
|
+
Args:
|
40
|
+
other: Another Scenario to combine with this one
|
41
|
+
|
42
|
+
Returns:
|
43
|
+
A new Scenario with merged parameter changes and combined modifiers
|
44
|
+
"""
|
45
|
+
# Merge parameter changes (other's changes take precedence in conflicts)
|
46
|
+
merged_params = {}
|
47
|
+
|
48
|
+
if self.parameter_changes:
|
49
|
+
merged_params.update(self.parameter_changes)
|
50
|
+
|
51
|
+
if other.parameter_changes:
|
52
|
+
for key, value in other.parameter_changes.items():
|
53
|
+
if (
|
54
|
+
key in merged_params
|
55
|
+
and isinstance(merged_params[key], dict)
|
56
|
+
and isinstance(value, dict)
|
57
|
+
):
|
58
|
+
# Deep merge nested dictionaries
|
59
|
+
merged_params[key] = {**merged_params[key], **value}
|
60
|
+
else:
|
61
|
+
# Simple override
|
62
|
+
merged_params[key] = value
|
63
|
+
|
64
|
+
# Chain simulation modifiers
|
65
|
+
combined_modifier = None
|
66
|
+
|
67
|
+
if self.simulation_modifier and other.simulation_modifier:
|
68
|
+
# Both have modifiers - chain them
|
69
|
+
def combined_modifier(simulation: Simulation) -> None:
|
70
|
+
self.simulation_modifier(simulation)
|
71
|
+
other.simulation_modifier(simulation)
|
72
|
+
|
73
|
+
elif self.simulation_modifier:
|
74
|
+
combined_modifier = self.simulation_modifier
|
75
|
+
elif other.simulation_modifier:
|
76
|
+
combined_modifier = other.simulation_modifier
|
77
|
+
|
78
|
+
# Return new scenario with merged configuration
|
79
|
+
return Scenario(
|
80
|
+
parameter_changes=merged_params if merged_params else None,
|
81
|
+
simulation_modifier=combined_modifier,
|
82
|
+
)
|
83
|
+
|
84
|
+
@classmethod
|
85
|
+
def from_reform(
|
86
|
+
cls, reform: Union[tuple, dict, Type[Reform]]
|
87
|
+
) -> "Scenario":
|
88
|
+
"""Create a Scenario from various reform representations.
|
89
|
+
|
90
|
+
Args:
|
91
|
+
reform: Can be:
|
92
|
+
- A Reform class type (will be applied via simulation modifier)
|
93
|
+
- A dict of parameter changes
|
94
|
+
- A tuple (treated as a Reform for backward compatibility)
|
95
|
+
|
96
|
+
Returns:
|
97
|
+
A new Scenario configured with the reform
|
98
|
+
|
99
|
+
Raises:
|
100
|
+
ValueError: If reform type is not supported
|
101
|
+
"""
|
102
|
+
if isinstance(reform, type) and issubclass(reform, Reform):
|
103
|
+
# Reform class - create modifier function
|
104
|
+
def modifier(simulation: Simulation) -> None:
|
105
|
+
reform_instance = reform()
|
106
|
+
reform_instance.apply(simulation.tax_benefit_system)
|
107
|
+
|
108
|
+
return cls(
|
109
|
+
simulation_modifier=modifier,
|
110
|
+
)
|
111
|
+
|
112
|
+
elif isinstance(reform, dict):
|
113
|
+
# Dictionary of parameter changes
|
114
|
+
return cls(
|
115
|
+
parameter_changes=reform,
|
116
|
+
)
|
117
|
+
|
118
|
+
elif isinstance(reform, tuple):
|
119
|
+
# Tuple format (legacy support) - treat as a Reform class
|
120
|
+
# Assuming the tuple contains (reform_class, *args)
|
121
|
+
if (
|
122
|
+
len(reform) > 0
|
123
|
+
and isinstance(reform[0], type)
|
124
|
+
and issubclass(reform[0], Reform)
|
125
|
+
):
|
126
|
+
reform_class = reform[0]
|
127
|
+
reform_args = reform[1:] if len(reform) > 1 else ()
|
128
|
+
|
129
|
+
def modifier(simulation: Simulation) -> None:
|
130
|
+
reform_instance = reform_class(*reform_args)
|
131
|
+
reform_instance.apply(simulation.tax_benefit_system)
|
132
|
+
|
133
|
+
return cls(
|
134
|
+
simulation_modifier=modifier,
|
135
|
+
)
|
136
|
+
else:
|
137
|
+
raise ValueError(f"Invalid tuple format for reform: {reform}")
|
138
|
+
|
139
|
+
else:
|
140
|
+
raise ValueError(
|
141
|
+
f"Unsupported reform type: {type(reform)}. "
|
142
|
+
"Expected Reform class, dict, or tuple."
|
143
|
+
)
|
144
|
+
|
145
|
+
def apply(self, simulation: Simulation) -> None:
|
146
|
+
"""Apply this scenario to a simulation.
|
147
|
+
|
148
|
+
First applies parameter changes, then runs the simulation modifier if present.
|
149
|
+
|
150
|
+
Args:
|
151
|
+
simulation: The simulation to modify
|
152
|
+
"""
|
153
|
+
# Apply parameter changes first
|
154
|
+
if self.parameter_changes:
|
155
|
+
for path, value in self.parameter_changes.items():
|
156
|
+
if isinstance(value, dict):
|
157
|
+
# Handle nested parameter changes
|
158
|
+
for sub_path, sub_value in value.items():
|
159
|
+
full_path = f"{path}.{sub_path}"
|
160
|
+
simulation.tax_benefit_system.parameters.update(
|
161
|
+
full_path,
|
162
|
+
period=None, # Apply to all periods
|
163
|
+
value=sub_value,
|
164
|
+
)
|
165
|
+
else:
|
166
|
+
# Simple parameter change
|
167
|
+
simulation.tax_benefit_system.parameters.update(
|
168
|
+
path, period=None, value=value # Apply to all periods
|
169
|
+
)
|
170
|
+
|
171
|
+
# Then apply simulation modifier
|
172
|
+
if self.simulation_modifier:
|
173
|
+
self.simulation_modifier(simulation)
|
174
|
+
|
175
|
+
def __repr__(self) -> str:
|
176
|
+
"""String representation of the Scenario."""
|
177
|
+
parts = []
|
178
|
+
if self.parameter_changes:
|
179
|
+
parts.append(
|
180
|
+
f"parameter_changes={len(self.parameter_changes)} items"
|
181
|
+
)
|
182
|
+
if self.simulation_modifier:
|
183
|
+
parts.append("simulation_modifier=<function>")
|
184
|
+
return f"Scenario({', '.join(parts)})"
|
@@ -5,6 +5,20 @@ All notable changes to this project will be documented in this file.
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
7
7
|
|
8
|
+
## [2.43.0] - 2025-07-26 11:31:02
|
9
|
+
|
10
|
+
### Added
|
11
|
+
|
12
|
+
- Scenario class for reforms.
|
13
|
+
- Documentation of Scenario and Simulation.
|
14
|
+
- Standardisation of uprating behaviour.
|
15
|
+
|
16
|
+
## [2.42.0] - 2025-07-25 08:57:23
|
17
|
+
|
18
|
+
### Changed
|
19
|
+
|
20
|
+
- Add after housing costs deflator
|
21
|
+
|
8
22
|
## [2.41.4] - 2025-07-24 14:41:02
|
9
23
|
|
10
24
|
### Fixed
|
@@ -2016,6 +2030,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
2016
2030
|
|
2017
2031
|
|
2018
2032
|
|
2033
|
+
[2.43.0]: https://github.com/PolicyEngine/openfisca-uk/compare/2.42.0...2.43.0
|
2034
|
+
[2.42.0]: https://github.com/PolicyEngine/openfisca-uk/compare/2.41.4...2.42.0
|
2019
2035
|
[2.41.4]: https://github.com/PolicyEngine/openfisca-uk/compare/2.41.3...2.41.4
|
2020
2036
|
[2.41.3]: https://github.com/PolicyEngine/openfisca-uk/compare/2.41.2...2.41.3
|
2021
2037
|
[2.41.2]: https://github.com/PolicyEngine/openfisca-uk/compare/2.41.1...2.41.2
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: policyengine-uk
|
3
|
-
Version: 2.
|
3
|
+
Version: 2.43.0
|
4
4
|
Summary: PolicyEngine tax and benefit system for the UK
|
5
5
|
Project-URL: Homepage, https://github.com/PolicyEngine/policyengine-uk
|
6
6
|
Project-URL: Repository, https://github.com/PolicyEngine/policyengine-uk
|
@@ -15,7 +15,7 @@ Classifier: Operating System :: POSIX
|
|
15
15
|
Classifier: Programming Language :: Python
|
16
16
|
Classifier: Topic :: Scientific/Engineering :: Information Analysis
|
17
17
|
Requires-Python: >=3.10
|
18
|
-
Requires-Dist: microdf-python
|
18
|
+
Requires-Dist: microdf-python>=1.0.0
|
19
19
|
Requires-Dist: policyengine-core>=3.6.4
|
20
20
|
Provides-Extra: dev
|
21
21
|
Requires-Dist: black; extra == 'dev'
|
@@ -1,12 +1,11 @@
|
|
1
1
|
policyengine_uk/__init__.py,sha256=ud1uvjBep-lcZKBWUd0eo-PAT_FM92_PqUlDp5OYl4g,355
|
2
2
|
policyengine_uk/entities.py,sha256=9yUbkUWQr3WydNE-gHhUudG97HGyXIZY3dkgQ6Z3t9A,1212
|
3
|
-
policyengine_uk/model_api.py,sha256=
|
3
|
+
policyengine_uk/model_api.py,sha256=KdwJCL2HkXVxDpL6fCsCnQ9Sub6Kqp7Hyxlis3MNIx4,241
|
4
4
|
policyengine_uk/modelled_policies.yaml,sha256=TLhvmkuI9ip-Fjq63n66RzDErCkN8K4BzY6XLxLMtFg,463
|
5
|
-
policyengine_uk/
|
6
|
-
policyengine_uk/system.py,sha256=jfMN-0cDBMsbqIgTenRxCblSY3o69YIeSWGFaBgF76s,9719
|
5
|
+
policyengine_uk/system.py,sha256=OooTAxHpzh4H5k8rWiH_qE4SooBomn-pjZnk4UvVR8A,21813
|
7
6
|
policyengine_uk/data/__init__.py,sha256=J0bZ3WnvPzZ4qfVLYcwOc4lziMUMdbcMqJ3xwjoekbM,101
|
8
|
-
policyengine_uk/data/dataset_schema.py,sha256=
|
9
|
-
policyengine_uk/data/economic_assumptions.py,sha256=
|
7
|
+
policyengine_uk/data/dataset_schema.py,sha256=4SPUqDmzTsmmWFaJIlpDzT7J6WvBDgxRPfUnbjjtFuQ,9854
|
8
|
+
policyengine_uk/data/economic_assumptions.py,sha256=4ZmE6z8Bbf21n0Hm-IpsS04Astg2NJAypv9TdA_udEk,6189
|
10
9
|
policyengine_uk/data/uprating_indices.yaml,sha256=kQtfeGWyqge4dbJhs0iF4kTMqovuegill_Zfs8orJi4,2394
|
11
10
|
policyengine_uk/parameters/gov/README.md,sha256=bHUep1_2pLHD3Or8SwjStOWXDIbW9OuYxOd4ml8IXcM,13
|
12
11
|
policyengine_uk/parameters/gov/benefit_uprating_cpi.yaml,sha256=2zOSdJeUhDZYYsKE2vLkcK-UbKNoOSVwfac0QIAp02g,250
|
@@ -314,7 +313,7 @@ policyengine_uk/parameters/gov/dwp/winter_fuel_payment/eligibility/taxable_incom
|
|
314
313
|
policyengine_uk/parameters/gov/economic_assumptions/create_economic_assumption_indices.py,sha256=Z4dYghSit5gXo4V3wBpnLIc9zgTX4cfEyb_TUlJkTGY,1937
|
315
314
|
policyengine_uk/parameters/gov/economic_assumptions/lag_average_earnings.py,sha256=ksHcyUQkLAJmKizCeSg8j0hzPc7ajgIvbExWLgCra4U,701
|
316
315
|
policyengine_uk/parameters/gov/economic_assumptions/lag_cpi.py,sha256=IdtaMLN1_OSu-RFZsQV8vBlbOvXsPlnNlsOuinRHrxg,642
|
317
|
-
policyengine_uk/parameters/gov/economic_assumptions/yoy_growth.yaml,sha256=
|
316
|
+
policyengine_uk/parameters/gov/economic_assumptions/yoy_growth.yaml,sha256=k2xxY4YvioJ0agEOHwebcEWVwQbgePrnXO1dvogGWCs,17673
|
318
317
|
policyengine_uk/parameters/gov/hmrc/README.md,sha256=nkHVZl6lsjI93sR8uC7wAbul3_61wJrsP08iaW8f5lk,7
|
319
318
|
policyengine_uk/parameters/gov/hmrc/minimum_wage.yaml,sha256=1oMbevU0ESHR51mcAG39POd1DA1FgPUep4hL6ojj-P4,2049
|
320
319
|
policyengine_uk/parameters/gov/hmrc/business_rates/README.md,sha256=9ud50i_gMjGj6VymF-nzFDTzkFRMMJx6ybpLwbWzvpI,17
|
@@ -526,10 +525,14 @@ policyengine_uk/reforms/cps/marriage_tax_reforms.py,sha256=UK7fTMoa4Xh2IvkT3wRDw
|
|
526
525
|
policyengine_uk/reforms/policyengine/__init__.py,sha256=5ubEO0DGRBXhn3QRSoBNT-jff9ORb4dd2J6FYNpSEik,42
|
527
526
|
policyengine_uk/reforms/policyengine/adjust_budgets.py,sha256=p1NbFB7wwfC_jRdeVLbClHm3MOvRO-gKmU7PzY2zJv8,2084
|
528
527
|
policyengine_uk/reforms/policyengine/disable_simulated_benefits.py,sha256=siEs1EpSHCm5-4CJKwGdDm9jArscd6kVM39JUrFTPlE,2524
|
528
|
+
policyengine_uk/scenarios/__init__.py,sha256=_Ci6FeBm6tEiv5LUVsn70ubBftSFlaNZXcc--epBdQM,156
|
529
|
+
policyengine_uk/scenarios/pip_reform.py,sha256=fv6-HCuRxhzt-XEYv9yLJTEliAWu3EGx6duADSBO4n8,687
|
530
|
+
policyengine_uk/scenarios/reindex_benefit_cap.py,sha256=dPUOsTkgYZNRN15e_ax5hg5ObHngk5tizz7FYStkGaE,1070
|
531
|
+
policyengine_uk/scenarios/repeal_two_child_limit.py,sha256=vZndQVFNCe7v7k4v-PgneOCPld-YTnCmlveRbX_1czk,250
|
529
532
|
policyengine_uk/tests/test_parameter_metadata.py,sha256=_2w2dSokAf5Jskye_KIL8eh80N7yIrUszlmqnZtwQws,450
|
530
533
|
policyengine_uk/tests/code_health/test_variables.py,sha256=9Y-KpmzhyRGy9eEqocK9z91NXHX5QIF3mDMNGvegb7Q,1398
|
531
534
|
policyengine_uk/tests/microsimulation/README.md,sha256=1toB1Z06ynlUielTrsAaeo9Vb-c3ZrB3tbbR4E1xUGk,3924
|
532
|
-
policyengine_uk/tests/microsimulation/reforms_config.yaml,sha256=
|
535
|
+
policyengine_uk/tests/microsimulation/reforms_config.yaml,sha256=qIxLo33i7qAAkCc6Pvpa-rhWTxoevrbOlsADjF-w7pk,1086
|
533
536
|
policyengine_uk/tests/microsimulation/test_reform_impacts.py,sha256=xM3M2pclEhA9JIFpnuiPMy1fEBFOKcSzroRPk73FPls,2635
|
534
537
|
policyengine_uk/tests/microsimulation/test_validity.py,sha256=RWhbSKrnrZCNQRVmGYlM8hnpe1_Blo5_xP8vr8u3kV0,694
|
535
538
|
policyengine_uk/tests/microsimulation/update_reform_impacts.py,sha256=2pxp2RNLWxV4CesGKKHmg3qBs79Jq2Jcq3GJIBk4euU,4824
|
@@ -595,7 +598,6 @@ policyengine_uk/tests/policy/baseline/finance/income/minimum_wage.yaml,sha256=qv
|
|
595
598
|
policyengine_uk/tests/policy/baseline/finance/income/minimum_wage_category.yaml,sha256=mGVi7xJRUiuoYjmp_Dcc1dWZ2-7ceIKAhN1r6NLI6tg,787
|
596
599
|
policyengine_uk/tests/policy/baseline/finance/tax/income_tax/savings_starter_rate_income.yaml,sha256=MVgdxK3jU9_i5WptA6SxYXipKg__mHm1tGk01A9MwS0,1195
|
597
600
|
policyengine_uk/tests/policy/baseline/finance/tax/income_tax/scottish_rates.yaml,sha256=6W1oeU7i13VJZhSS2_2du6a4P75YHkTSv3vmZJIs92I,181
|
598
|
-
policyengine_uk/tests/policy/baseline/gov/abolitions/abolition_parameters.yaml,sha256=9oaBaVXSP-3-02UZpr3nLB4b0re50G8jRFOop9SPq_A,4837
|
599
601
|
policyengine_uk/tests/policy/baseline/gov/dcms/bbc/tv_licence_discount.yaml,sha256=INGw-yjudsQMxNDTiWpcuWbns-UPDKGnH3VuF000kHY,805
|
600
602
|
policyengine_uk/tests/policy/baseline/gov/dcms/bbc/tv-licence/tv_licence.yaml,sha256=cYAZlmmoAxWymv7L0lDzPcX6dexNAERQnVQMOB0HVzE,562
|
601
603
|
policyengine_uk/tests/policy/baseline/gov/dfe/care_to_learn/care_to_learn.yaml,sha256=i5RIghjT2T7uWn_xvaeYb2dIJ7JsreSr_f12UPtFqpg,508
|
@@ -685,9 +687,11 @@ policyengine_uk/tests/policy/reforms/parametric/two_child_limit/age_exemption.ya
|
|
685
687
|
policyengine_uk/tests/policy/reforms/parametric/two_child_limit/ctc_age_exemption.yaml,sha256=xOgctFi4eLVW7agHdRPUU9szoRzt4p0R9eiMvPqwv_s,3577
|
686
688
|
policyengine_uk/tests/policy/reforms/parametric/winter_fuel_allowance/taxable_income_test.yaml,sha256=QY3LYJ92VzYH9mXU54XD_6PhefwHNK80kGYQ0R5I0SM,6289
|
687
689
|
policyengine_uk/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
690
|
+
policyengine_uk/utils/create_ahc_deflator.py,sha256=zCJ_R_hq8DUfuO7u3puhRl6gkC1hw2MX3TCusy-bICI,5464
|
688
691
|
policyengine_uk/utils/create_triple_lock.py,sha256=E8qR51cq5jPL6EOXFoPi1qJhrcUBXg3dfWTvdqWN2Bo,948
|
689
692
|
policyengine_uk/utils/dependencies.py,sha256=6mLDZr-lypI6RZMeb0rcWoJy5Ig7QT18kOuAMUgI7vg,8198
|
690
693
|
policyengine_uk/utils/parameters.py,sha256=OQTzTkHMdwbphCo0mV7_n_FJT0rdwIKNFTsk_lsdETE,1301
|
694
|
+
policyengine_uk/utils/scenario.py,sha256=xvWjv7WViH6NxqQF5RUECXtIWYktploOn-0kPYC3rXM,6702
|
691
695
|
policyengine_uk/utils/solve_private_school_attendance_factor.py,sha256=LUZCgHKAQTY5qHlGJutn7pOFUWT0AP16YcJy-YUjQ3Q,1609
|
692
696
|
policyengine_uk/utils/water/README.md,sha256=sdBI-JZ-jcRoSUfwNx5wjv5Ig_nM8OPvvjSsSMs_Wh8,443
|
693
697
|
policyengine_uk/utils/water/forecast_water_bills.py,sha256=B4vtfJuR8XfBP-KHGyhRp2Oo7X7buN-lDH6tBIXqE2U,2788
|
@@ -1369,10 +1373,10 @@ policyengine_uk/variables/misc/spi_imputed.py,sha256=iPVlBF_TisM0rtKvO-3-PQ2UYCe
|
|
1369
1373
|
policyengine_uk/variables/misc/uc_migrated.py,sha256=zFNcUJaO8gwmbL1iY9GKgUt3G6J9yrCraqBV_5dCvlM,306
|
1370
1374
|
policyengine_uk/variables/misc/categories/lower_middle_or_higher.py,sha256=C54tHYz2DmOyvQYCC1bF8RJwRZinhAq_e3aYC-9F5fM,157
|
1371
1375
|
policyengine_uk/variables/misc/categories/lower_or_higher.py,sha256=81NIbLLabRr9NwjpUZDuV8IV8_mqmp5NM-CZvt55TwE,129
|
1372
|
-
policyengine_uk-2.
|
1373
|
-
policyengine_uk-2.
|
1374
|
-
policyengine_uk-2.
|
1375
|
-
policyengine_uk-2.
|
1376
|
-
policyengine_uk-2.
|
1377
|
-
policyengine_uk-2.
|
1378
|
-
policyengine_uk-2.
|
1376
|
+
policyengine_uk-2.43.0.data/data/share/openfisca/openfisca-country-template/CHANGELOG.md,sha256=PQth_bhEgN2NEdwHaelS1QTnRcLNs7UQ2pU6N2vDfeU,58635
|
1377
|
+
policyengine_uk-2.43.0.data/data/share/openfisca/openfisca-country-template/LICENSE,sha256=dql8h4yceoMhuzlcK0TT_i-NgTFNIZsgE47Q4t3dUYI,34520
|
1378
|
+
policyengine_uk-2.43.0.data/data/share/openfisca/openfisca-country-template/README.md,sha256=PCy7LRLdUDQS8U4PaeHeBVnyBZAqHv1dAVDDvEcom20,1976
|
1379
|
+
policyengine_uk-2.43.0.dist-info/METADATA,sha256=E5g6_HGNjojCeqgn6FQlL1vk8HQ6d3hiKcykskekZU4,3502
|
1380
|
+
policyengine_uk-2.43.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
1381
|
+
policyengine_uk-2.43.0.dist-info/licenses/LICENSE,sha256=dql8h4yceoMhuzlcK0TT_i-NgTFNIZsgE47Q4t3dUYI,34520
|
1382
|
+
policyengine_uk-2.43.0.dist-info/RECORD,,
|
policyengine_uk/repo.py
DELETED