policyengine-uk 2.45.4__py3-none-any.whl → 2.47.2__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.
Potentially problematic release.
This version of policyengine-uk might be problematic. Click here for more details.
- policyengine_uk/__init__.py +1 -0
- policyengine_uk/data/dataset_schema.py +6 -3
- policyengine_uk/data/economic_assumptions.py +1 -1
- policyengine_uk/dynamics/labour_supply.py +306 -0
- policyengine_uk/dynamics/participation.py +629 -0
- policyengine_uk/dynamics/progression.py +376 -0
- policyengine_uk/microsimulation.py +23 -1
- policyengine_uk/parameters/gov/dynamic/obr_labour_supply_assumptions.yaml +9 -0
- policyengine_uk/parameters/gov/economic_assumptions/yoy_growth.yaml +270 -32
- policyengine_uk/simulation.py +184 -9
- policyengine_uk/tax_benefit_system.py +4 -1
- policyengine_uk/tests/microsimulation/reforms_config.yaml +7 -7
- policyengine_uk/tests/microsimulation/test_validity.py +2 -3
- policyengine_uk/tests/microsimulation/update_reform_impacts.py +104 -40
- policyengine_uk/tests/policy/baseline/gov/dfe/extended_childcare_entitlement/extended_childcare_entitlement.yaml +8 -8
- policyengine_uk/utils/__init__.py +1 -0
- policyengine_uk/utils/compare.py +28 -0
- policyengine_uk/utils/solve_private_school_attendance_factor.py +4 -6
- policyengine_uk/variables/gov/dwp/additional_state_pension.py +1 -1
- policyengine_uk/variables/gov/dwp/basic_state_pension.py +1 -1
- policyengine_uk/variables/household/demographic/benunit/benunit_count_adults.py +11 -0
- policyengine_uk/variables/input/consumption/property/council_tax.py +0 -35
- policyengine_uk/variables/input/rent.py +0 -40
- {policyengine_uk-2.45.4.dist-info → policyengine_uk-2.47.2.dist-info}/METADATA +5 -4
- {policyengine_uk-2.45.4.dist-info → policyengine_uk-2.47.2.dist-info}/RECORD +27 -21
- {policyengine_uk-2.45.4.dist-info → policyengine_uk-2.47.2.dist-info}/WHEEL +0 -0
- {policyengine_uk-2.45.4.dist-info → policyengine_uk-2.47.2.dist-info}/licenses/LICENSE +0 -0
|
@@ -8,6 +8,18 @@ from pathlib import Path
|
|
|
8
8
|
from policyengine_uk import Microsimulation
|
|
9
9
|
import argparse
|
|
10
10
|
from datetime import datetime
|
|
11
|
+
from rich.console import Console
|
|
12
|
+
from rich.table import Table
|
|
13
|
+
from rich.progress import (
|
|
14
|
+
Progress,
|
|
15
|
+
SpinnerColumn,
|
|
16
|
+
TextColumn,
|
|
17
|
+
BarColumn,
|
|
18
|
+
TaskProgressColumn,
|
|
19
|
+
)
|
|
20
|
+
from rich.panel import Panel
|
|
21
|
+
from rich import print as rprint
|
|
22
|
+
import traceback
|
|
11
23
|
|
|
12
24
|
baseline = Microsimulation()
|
|
13
25
|
|
|
@@ -40,57 +52,97 @@ def update_impacts(
|
|
|
40
52
|
dry_run: If True, show changes without writing to file
|
|
41
53
|
verbose: If True, show detailed output
|
|
42
54
|
"""
|
|
55
|
+
console = Console()
|
|
56
|
+
|
|
43
57
|
# Load current configuration
|
|
44
58
|
with open(config_path, "r") as f:
|
|
45
59
|
config = yaml.safe_load(f)
|
|
46
60
|
|
|
47
61
|
if verbose:
|
|
48
|
-
print(
|
|
49
|
-
|
|
62
|
+
console.print(
|
|
63
|
+
Panel.fit(
|
|
64
|
+
f"[bold cyan]Loaded configuration from {config_path}[/bold cyan]\n"
|
|
65
|
+
f"[green]Found {len(config['reforms'])} reforms to update[/green]",
|
|
66
|
+
title="Configuration loaded",
|
|
67
|
+
)
|
|
68
|
+
)
|
|
50
69
|
|
|
51
70
|
# Track changes
|
|
52
71
|
changes = []
|
|
53
72
|
|
|
54
|
-
# Update each reform's expected impact
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
"name": reform["name"],
|
|
66
|
-
"old": old_impact,
|
|
67
|
-
"new": new_impact,
|
|
68
|
-
"diff": new_impact - old_impact,
|
|
69
|
-
}
|
|
70
|
-
)
|
|
71
|
-
|
|
72
|
-
reform["expected_impact"] = new_impact
|
|
73
|
+
# Update each reform's expected impact with progress bar
|
|
74
|
+
with Progress(
|
|
75
|
+
SpinnerColumn(),
|
|
76
|
+
TextColumn("[progress.description]{task.description}"),
|
|
77
|
+
BarColumn(),
|
|
78
|
+
TaskProgressColumn(),
|
|
79
|
+
console=console,
|
|
80
|
+
) as progress:
|
|
81
|
+
task = progress.add_task(
|
|
82
|
+
"[cyan]Processing reforms...", total=len(config["reforms"])
|
|
83
|
+
)
|
|
73
84
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
85
|
+
for reform in config["reforms"]:
|
|
86
|
+
progress.update(
|
|
87
|
+
task, description=f"[cyan]Processing: {reform['name'][:40]}..."
|
|
88
|
+
)
|
|
89
|
+
old_impact = reform["expected_impact"]
|
|
90
|
+
new_impact = round(get_fiscal_impact(reform["parameters"]), 1)
|
|
91
|
+
|
|
92
|
+
if (
|
|
93
|
+
abs(old_impact - new_impact) > 0.01
|
|
94
|
+
): # Only record meaningful changes
|
|
95
|
+
changes.append(
|
|
96
|
+
{
|
|
97
|
+
"name": reform["name"],
|
|
98
|
+
"old": old_impact,
|
|
99
|
+
"new": new_impact,
|
|
100
|
+
"diff": new_impact - old_impact,
|
|
101
|
+
}
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
reform["expected_impact"] = new_impact
|
|
105
|
+
progress.advance(task)
|
|
106
|
+
|
|
107
|
+
# Show detailed output if verbose
|
|
108
|
+
if verbose and changes:
|
|
109
|
+
console.print("\n[bold]Detailed changes:[/bold]")
|
|
110
|
+
for change in changes:
|
|
111
|
+
color = "red" if change["diff"] < 0 else "green"
|
|
112
|
+
console.print(
|
|
113
|
+
f" [yellow]{change['name']}[/yellow]\n"
|
|
114
|
+
f" Old impact: [dim]{change['old']:.1f} billion[/dim]\n"
|
|
115
|
+
f" New impact: [bold]{change['new']:.1f} billion[/bold]\n"
|
|
116
|
+
f" Change: [{color}]{change['diff']:+.1f} billion[/{color}]\n"
|
|
117
|
+
)
|
|
81
118
|
|
|
82
119
|
# Show summary of changes
|
|
83
120
|
if changes:
|
|
84
|
-
|
|
85
|
-
|
|
121
|
+
table = Table(
|
|
122
|
+
title="Summary of changes",
|
|
123
|
+
show_header=True,
|
|
124
|
+
header_style="bold magenta",
|
|
125
|
+
)
|
|
126
|
+
table.add_column("Reform", style="cyan", no_wrap=False)
|
|
127
|
+
table.add_column("Old impact (£bn)", justify="right")
|
|
128
|
+
table.add_column("New impact (£bn)", justify="right")
|
|
129
|
+
table.add_column("Change (£bn)", justify="right")
|
|
130
|
+
|
|
86
131
|
for change in changes:
|
|
87
|
-
|
|
88
|
-
|
|
132
|
+
color = "red" if change["diff"] < 0 else "green"
|
|
133
|
+
table.add_row(
|
|
134
|
+
change["name"],
|
|
135
|
+
f"{change['old']:.1f}",
|
|
136
|
+
f"{change['new']:.1f}",
|
|
137
|
+
f"[{color}]{change['diff']:+.1f}[/{color}]",
|
|
89
138
|
)
|
|
90
|
-
|
|
91
|
-
print(
|
|
139
|
+
|
|
140
|
+
console.print("\n", table)
|
|
141
|
+
console.print(
|
|
142
|
+
f"\n[bold cyan]Total changes: {len(changes)}[/bold cyan]"
|
|
143
|
+
)
|
|
92
144
|
else:
|
|
93
|
-
print("\
|
|
145
|
+
console.print("\n[green]✓ No significant changes detected.[/green]")
|
|
94
146
|
|
|
95
147
|
# Write updated configuration
|
|
96
148
|
if not dry_run:
|
|
@@ -109,13 +161,22 @@ def update_impacts(
|
|
|
109
161
|
with open(config_path, "w") as f:
|
|
110
162
|
yaml.dump(config, f, default_flow_style=False, sort_keys=False)
|
|
111
163
|
|
|
112
|
-
print(
|
|
113
|
-
|
|
164
|
+
console.print(
|
|
165
|
+
Panel.fit(
|
|
166
|
+
f"[green]✓ Configuration updated successfully![/green]\n"
|
|
167
|
+
f"[dim]Backup saved to: {backup_path}[/dim]",
|
|
168
|
+
title="Success",
|
|
169
|
+
border_style="green",
|
|
170
|
+
)
|
|
171
|
+
)
|
|
114
172
|
else:
|
|
115
|
-
print(
|
|
173
|
+
console.print(
|
|
174
|
+
"\n[yellow]⚠ Dry run - no changes written to file.[/yellow]"
|
|
175
|
+
)
|
|
116
176
|
|
|
117
177
|
|
|
118
178
|
def main():
|
|
179
|
+
console = Console()
|
|
119
180
|
parser = argparse.ArgumentParser(
|
|
120
181
|
description="Update reform impact expectations with current model values"
|
|
121
182
|
)
|
|
@@ -143,14 +204,17 @@ def main():
|
|
|
143
204
|
args = parser.parse_args()
|
|
144
205
|
|
|
145
206
|
if not args.config.exists():
|
|
146
|
-
print(
|
|
207
|
+
console.print(
|
|
208
|
+
f"[bold red]Error:[/bold red] Configuration file '{args.config}' not found!"
|
|
209
|
+
)
|
|
147
210
|
return 1
|
|
148
211
|
|
|
149
212
|
try:
|
|
150
213
|
update_impacts(args.config, dry_run=args.dry_run, verbose=args.verbose)
|
|
151
214
|
return 0
|
|
152
215
|
except Exception as e:
|
|
153
|
-
print(f"Error updating impacts: {e}")
|
|
216
|
+
console.print(f"[bold red]Error updating impacts:[/bold red] {e}")
|
|
217
|
+
console.print(traceback.format_exc())
|
|
154
218
|
return 1
|
|
155
219
|
|
|
156
220
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
- name: Eligible for 30 hours - All conditions met
|
|
2
2
|
period: 2025
|
|
3
|
-
absolute_error_margin:
|
|
3
|
+
absolute_error_margin: 3
|
|
4
4
|
input:
|
|
5
5
|
people:
|
|
6
6
|
child1:
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
- name: Eligible for 15 hours - All first conditions met
|
|
16
16
|
period: 2025
|
|
17
|
-
absolute_error_margin:
|
|
17
|
+
absolute_error_margin: 2
|
|
18
18
|
input:
|
|
19
19
|
people:
|
|
20
20
|
child1:
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
|
|
43
43
|
- name: Eligible for mixed hours - Family with multiple children
|
|
44
44
|
period: 2025
|
|
45
|
-
absolute_error_margin:
|
|
45
|
+
absolute_error_margin: 4
|
|
46
46
|
input:
|
|
47
47
|
people:
|
|
48
48
|
child1:
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
|
|
75
75
|
- name: Eligible with one working parent and one disabled parent
|
|
76
76
|
period: 2025
|
|
77
|
-
absolute_error_margin:
|
|
77
|
+
absolute_error_margin: 6
|
|
78
78
|
input:
|
|
79
79
|
people:
|
|
80
80
|
child1:
|
|
@@ -107,7 +107,7 @@
|
|
|
107
107
|
|
|
108
108
|
- name: Child using fewer hours than maximum entitlement
|
|
109
109
|
period: 2025
|
|
110
|
-
absolute_error_margin:
|
|
110
|
+
absolute_error_margin: 2
|
|
111
111
|
input:
|
|
112
112
|
people:
|
|
113
113
|
child1:
|
|
@@ -122,7 +122,7 @@
|
|
|
122
122
|
|
|
123
123
|
- name: Child using fewer hours than maximum entitlement - multiple children
|
|
124
124
|
period: 2025
|
|
125
|
-
absolute_error_margin:
|
|
125
|
+
absolute_error_margin: 2
|
|
126
126
|
input:
|
|
127
127
|
people:
|
|
128
128
|
child1:
|
|
@@ -140,7 +140,7 @@
|
|
|
140
140
|
|
|
141
141
|
- name: Benefit unit maximum hours cap applied
|
|
142
142
|
period: 2025
|
|
143
|
-
absolute_error_margin:
|
|
143
|
+
absolute_error_margin: 5
|
|
144
144
|
input:
|
|
145
145
|
people:
|
|
146
146
|
child1:
|
|
@@ -177,7 +177,7 @@
|
|
|
177
177
|
|
|
178
178
|
- name: Benefit unit without maximum hours cap applied with 3 years old child
|
|
179
179
|
period: 2025
|
|
180
|
-
absolute_error_margin:
|
|
180
|
+
absolute_error_margin: 2
|
|
181
181
|
input:
|
|
182
182
|
people:
|
|
183
183
|
child1:
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from .compare import compare_simulations
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import pandas as pd
|
|
2
|
+
from typing import TYPE_CHECKING
|
|
3
|
+
|
|
4
|
+
if TYPE_CHECKING:
|
|
5
|
+
from policyengine_uk.simulation import Microsimulation
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def compare_simulations(
|
|
9
|
+
simulations: list["Microsimulation"],
|
|
10
|
+
names: list[str],
|
|
11
|
+
year: int,
|
|
12
|
+
variables: list[str],
|
|
13
|
+
):
|
|
14
|
+
dfs = [
|
|
15
|
+
sim.calculate_dataframe(variables, year).rename(
|
|
16
|
+
columns=lambda x: f"{x}_{name}"
|
|
17
|
+
)
|
|
18
|
+
for sim, name in zip(simulations, names)
|
|
19
|
+
]
|
|
20
|
+
|
|
21
|
+
df = pd.concat(dfs, axis=1).reset_index().rename(columns={"index": "id"})
|
|
22
|
+
|
|
23
|
+
# Sort columns by variable
|
|
24
|
+
columns = []
|
|
25
|
+
for var in variables:
|
|
26
|
+
columns.extend([col for col in df.columns if col.startswith(var)])
|
|
27
|
+
|
|
28
|
+
return df[columns]
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from
|
|
1
|
+
from policyengine_uk import Microsimulation
|
|
2
2
|
from policyengine_core.reforms import Reform
|
|
3
3
|
from tqdm import tqdm
|
|
4
4
|
|
|
@@ -19,11 +19,9 @@ for factor in tqdm([round(x * 0.01, 2) for x in range(70, 91)]):
|
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
# Run the reformed microsimulation
|
|
22
|
-
reformed =
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
country="uk",
|
|
26
|
-
).baseline_simulation
|
|
22
|
+
reformed = Microsimulation(
|
|
23
|
+
reform=reform,
|
|
24
|
+
)
|
|
27
25
|
reformed.baseline_simulation.get_holder(
|
|
28
26
|
"attends_private_school"
|
|
29
27
|
).delete_arrays()
|
|
@@ -13,7 +13,7 @@ class additional_state_pension(Variable):
|
|
|
13
13
|
if simulation.dataset is None:
|
|
14
14
|
return 0
|
|
15
15
|
|
|
16
|
-
data_year =
|
|
16
|
+
data_year = 2023
|
|
17
17
|
reported = person("state_pension_reported", data_year) / WEEKS_IN_YEAR
|
|
18
18
|
type = person("state_pension_type", data_year)
|
|
19
19
|
maximum_basic_sp = parameters(
|
|
@@ -13,7 +13,7 @@ class basic_state_pension(Variable):
|
|
|
13
13
|
if simulation.dataset is None:
|
|
14
14
|
return 0
|
|
15
15
|
|
|
16
|
-
data_year =
|
|
16
|
+
data_year = 2023
|
|
17
17
|
reported = person("state_pension_reported", data_year) / WEEKS_IN_YEAR
|
|
18
18
|
type = person("state_pension_type", period)
|
|
19
19
|
maximum_basic_sp = parameters(
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
from policyengine_uk.model_api import *
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class benunit_count_adults(Variable):
|
|
5
|
+
value_type = int
|
|
6
|
+
entity = BenUnit
|
|
7
|
+
label = "number of adults in the benefit unit"
|
|
8
|
+
definition_period = YEAR
|
|
9
|
+
|
|
10
|
+
def formula(benunit, period, parameters):
|
|
11
|
+
return add(benunit, period, ["is_adult"])
|
|
@@ -9,38 +9,3 @@ class council_tax(Variable):
|
|
|
9
9
|
definition_period = YEAR
|
|
10
10
|
unit = GBP
|
|
11
11
|
quantity_type = FLOW
|
|
12
|
-
|
|
13
|
-
def formula(household, period, parameters):
|
|
14
|
-
if period.start.year < 2023:
|
|
15
|
-
# We don't have growth rates for council tax by nation before this.
|
|
16
|
-
return 0
|
|
17
|
-
|
|
18
|
-
if household.simulation.dataset is None:
|
|
19
|
-
return 0
|
|
20
|
-
|
|
21
|
-
data_year = household.simulation.dataset.time_period
|
|
22
|
-
|
|
23
|
-
original_ct = household("council_tax", data_year)
|
|
24
|
-
|
|
25
|
-
ct = parameters.gov.economic_assumptions.indices.obr.council_tax
|
|
26
|
-
|
|
27
|
-
def get_growth(country):
|
|
28
|
-
param = getattr(ct, country)
|
|
29
|
-
return param(period.start.year) / param(data_year)
|
|
30
|
-
|
|
31
|
-
country = household("country", period).decode_to_str()
|
|
32
|
-
|
|
33
|
-
return select(
|
|
34
|
-
[
|
|
35
|
-
country == "ENGLAND",
|
|
36
|
-
country == "WALES",
|
|
37
|
-
country == "SCOTLAND",
|
|
38
|
-
True,
|
|
39
|
-
],
|
|
40
|
-
[
|
|
41
|
-
original_ct * get_growth("england"),
|
|
42
|
-
original_ct * get_growth("wales"),
|
|
43
|
-
original_ct * get_growth("scotland"),
|
|
44
|
-
original_ct,
|
|
45
|
-
],
|
|
46
|
-
)
|
|
@@ -11,43 +11,3 @@ class rent(Variable):
|
|
|
11
11
|
value_type = float
|
|
12
12
|
unit = GBP
|
|
13
13
|
quantity_type = FLOW
|
|
14
|
-
|
|
15
|
-
def formula(household, period, parameters):
|
|
16
|
-
if period.start.year < 2023:
|
|
17
|
-
# We don't have growth rates for rent before this.
|
|
18
|
-
return 0
|
|
19
|
-
|
|
20
|
-
if household.simulation.dataset is None:
|
|
21
|
-
return 0
|
|
22
|
-
|
|
23
|
-
data_year = household.simulation.dataset.time_period
|
|
24
|
-
original_rent = household("rent", data_year)
|
|
25
|
-
tenure_type = household("tenure_type", period).decode_to_str()
|
|
26
|
-
|
|
27
|
-
is_social_rent = (tenure_type == "RENT_FROM_COUNCIL") | (
|
|
28
|
-
tenure_type == "RENT_FROM_HA"
|
|
29
|
-
)
|
|
30
|
-
|
|
31
|
-
is_private_rent = tenure_type == "RENT_PRIVATELY"
|
|
32
|
-
|
|
33
|
-
obr = parameters.gov.economic_assumptions.indices.obr
|
|
34
|
-
|
|
35
|
-
private_rent_uprating = obr.lagged_average_earnings(
|
|
36
|
-
period
|
|
37
|
-
) / obr.lagged_average_earnings(data_year)
|
|
38
|
-
social_rent_uprating = obr.social_rent(period) / obr.social_rent(
|
|
39
|
-
data_year
|
|
40
|
-
)
|
|
41
|
-
|
|
42
|
-
return select(
|
|
43
|
-
[
|
|
44
|
-
is_social_rent,
|
|
45
|
-
is_private_rent,
|
|
46
|
-
True,
|
|
47
|
-
],
|
|
48
|
-
[
|
|
49
|
-
original_rent * social_rent_uprating,
|
|
50
|
-
original_rent * private_rent_uprating,
|
|
51
|
-
original_rent,
|
|
52
|
-
],
|
|
53
|
-
)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: policyengine-uk
|
|
3
|
-
Version: 2.
|
|
4
|
-
Summary: PolicyEngine tax and benefit system for the UK
|
|
3
|
+
Version: 2.47.2
|
|
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
|
|
7
7
|
Project-URL: Issues, https://github.com/PolicyEngine/policyengine-uk/issues
|
|
@@ -20,7 +20,7 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.12
|
|
21
21
|
Classifier: Programming Language :: Python :: 3.13
|
|
22
22
|
Classifier: Topic :: Scientific/Engineering :: Information Analysis
|
|
23
|
-
Requires-Python: >=3.
|
|
23
|
+
Requires-Python: >=3.13
|
|
24
24
|
Requires-Dist: microdf-python>=1.0.2
|
|
25
25
|
Requires-Dist: policyengine-core>=3.19.3
|
|
26
26
|
Requires-Dist: pydantic>=2.11.7
|
|
@@ -28,10 +28,11 @@ Provides-Extra: dev
|
|
|
28
28
|
Requires-Dist: black; extra == 'dev'
|
|
29
29
|
Requires-Dist: coverage; extra == 'dev'
|
|
30
30
|
Requires-Dist: furo<2023; extra == 'dev'
|
|
31
|
-
Requires-Dist: jupyter-book; extra == 'dev'
|
|
31
|
+
Requires-Dist: jupyter-book>=2.0.0a0; extra == 'dev'
|
|
32
32
|
Requires-Dist: linecheck; extra == 'dev'
|
|
33
33
|
Requires-Dist: pytest; extra == 'dev'
|
|
34
34
|
Requires-Dist: pytest-cov; extra == 'dev'
|
|
35
|
+
Requires-Dist: rich; extra == 'dev'
|
|
35
36
|
Requires-Dist: setuptools; extra == 'dev'
|
|
36
37
|
Requires-Dist: snowballstemmer<3,>=2; extra == 'dev'
|
|
37
38
|
Requires-Dist: sphinx-argparse<1,>=0.3.2; extra == 'dev'
|
|
@@ -1,15 +1,18 @@
|
|
|
1
|
-
policyengine_uk/__init__.py,sha256=
|
|
1
|
+
policyengine_uk/__init__.py,sha256=unX9Z-eloDZK6yQJKXRRDL31k1ItKP-gpMl0AY6xZZU,380
|
|
2
2
|
policyengine_uk/entities.py,sha256=9yUbkUWQr3WydNE-gHhUudG97HGyXIZY3dkgQ6Z3t9A,1212
|
|
3
|
-
policyengine_uk/microsimulation.py,sha256=
|
|
3
|
+
policyengine_uk/microsimulation.py,sha256=WskrrDrLGfDYwS1CzFk5rJkQSQlTknLkxFufStKRpxc,3379
|
|
4
4
|
policyengine_uk/model_api.py,sha256=KdwJCL2HkXVxDpL6fCsCnQ9Sub6Kqp7Hyxlis3MNIx4,241
|
|
5
5
|
policyengine_uk/modelled_policies.yaml,sha256=TLhvmkuI9ip-Fjq63n66RzDErCkN8K4BzY6XLxLMtFg,463
|
|
6
|
-
policyengine_uk/simulation.py,sha256=
|
|
6
|
+
policyengine_uk/simulation.py,sha256=GaN8ZC7bZVTRzP7Np-PfUiX60F6dKszdTrNhXe_OLuU,21186
|
|
7
7
|
policyengine_uk/system.py,sha256=Z-ax_ImUq5k4tycuThczTxQNW5iTE6ikBJIBQdKfIzU,91
|
|
8
|
-
policyengine_uk/tax_benefit_system.py,sha256=
|
|
8
|
+
policyengine_uk/tax_benefit_system.py,sha256=CjX1lERyOm_vlgHQcQO92HZtJiwItLH-MxJveJqk6iM,5165
|
|
9
9
|
policyengine_uk/data/__init__.py,sha256=J0bZ3WnvPzZ4qfVLYcwOc4lziMUMdbcMqJ3xwjoekbM,101
|
|
10
|
-
policyengine_uk/data/dataset_schema.py,sha256=
|
|
11
|
-
policyengine_uk/data/economic_assumptions.py,sha256=
|
|
10
|
+
policyengine_uk/data/dataset_schema.py,sha256=781beGVnPWJhw2FzcG6he-LtmgxtwS1h6keAz7TPoXI,10036
|
|
11
|
+
policyengine_uk/data/economic_assumptions.py,sha256=U3wyBs4zVI5-bcMB-GivELC1qG-895l5NPds3cuWb90,6239
|
|
12
12
|
policyengine_uk/data/uprating_indices.yaml,sha256=kQtfeGWyqge4dbJhs0iF4kTMqovuegill_Zfs8orJi4,2394
|
|
13
|
+
policyengine_uk/dynamics/labour_supply.py,sha256=0yVMDWjq8fUxHVuhL51zjrz0Ac69T8g69OoVLrJQ8sA,10785
|
|
14
|
+
policyengine_uk/dynamics/participation.py,sha256=g5xUqg-Nj2lQny9GrUfI2D_swLx0-9k-486NXtcWwbM,23238
|
|
15
|
+
policyengine_uk/dynamics/progression.py,sha256=4Wl3ZE-bYxNTMVGeOGFh22lYtHGPCarrhp8JzuLQs7I,13738
|
|
13
16
|
policyengine_uk/parameters/gov/README.md,sha256=bHUep1_2pLHD3Or8SwjStOWXDIbW9OuYxOd4ml8IXcM,13
|
|
14
17
|
policyengine_uk/parameters/gov/benefit_uprating_cpi.yaml,sha256=2zOSdJeUhDZYYsKE2vLkcK-UbKNoOSVwfac0QIAp02g,250
|
|
15
18
|
policyengine_uk/parameters/gov/contrib/README.md,sha256=b282dmUFAmj7cXSfiMLyE81q5Y0Gnehy-6atLus-ESs,70
|
|
@@ -316,10 +319,11 @@ policyengine_uk/parameters/gov/dwp/winter_fuel_payment/eligibility/require_benef
|
|
|
316
319
|
policyengine_uk/parameters/gov/dwp/winter_fuel_payment/eligibility/state_pension_age_requirement.yaml,sha256=8wXlC5wX-ceoZ-s2kOk4IhAiomsXSCM-vnRRbL2kChA,356
|
|
317
320
|
policyengine_uk/parameters/gov/dwp/winter_fuel_payment/eligibility/taxable_income_test/maximum_taxable_income.yaml,sha256=vtXLTgcLg1tmvnsbmJUv45maVEzzKQTWK-lFYTGzuVk,280
|
|
318
321
|
policyengine_uk/parameters/gov/dwp/winter_fuel_payment/eligibility/taxable_income_test/use_maximum_taxable_income.yaml,sha256=MKnXmHJaDJbpO-mLemudo5n-yQMCByuVwUtlxItOvjg,280
|
|
322
|
+
policyengine_uk/parameters/gov/dynamic/obr_labour_supply_assumptions.yaml,sha256=lD3jXWlRh39SCms6pRto51OhWT2YiUeMMI2_gi7SUJg,316
|
|
319
323
|
policyengine_uk/parameters/gov/economic_assumptions/create_economic_assumption_indices.py,sha256=uxJy4X30P8NRSL7dH757bgpPANMdf5efar8Bu7uR78w,1937
|
|
320
324
|
policyengine_uk/parameters/gov/economic_assumptions/lag_average_earnings.py,sha256=ksHcyUQkLAJmKizCeSg8j0hzPc7ajgIvbExWLgCra4U,701
|
|
321
325
|
policyengine_uk/parameters/gov/economic_assumptions/lag_cpi.py,sha256=IdtaMLN1_OSu-RFZsQV8vBlbOvXsPlnNlsOuinRHrxg,642
|
|
322
|
-
policyengine_uk/parameters/gov/economic_assumptions/yoy_growth.yaml,sha256=
|
|
326
|
+
policyengine_uk/parameters/gov/economic_assumptions/yoy_growth.yaml,sha256=hZtw6qxYnvvk51a050q9rKBvstjbmpN4azh5HEZkP_E,23714
|
|
323
327
|
policyengine_uk/parameters/gov/hmrc/README.md,sha256=nkHVZl6lsjI93sR8uC7wAbul3_61wJrsP08iaW8f5lk,7
|
|
324
328
|
policyengine_uk/parameters/gov/hmrc/minimum_wage.yaml,sha256=1oMbevU0ESHR51mcAG39POd1DA1FgPUep4hL6ojj-P4,2049
|
|
325
329
|
policyengine_uk/parameters/gov/hmrc/business_rates/README.md,sha256=9ud50i_gMjGj6VymF-nzFDTzkFRMMJx6ybpLwbWzvpI,17
|
|
@@ -539,10 +543,10 @@ policyengine_uk/scenarios/uc_reform.py,sha256=WPYKGBY_V7A0pQPxDM0lOYTR9GoLrF-iEm
|
|
|
539
543
|
policyengine_uk/tests/test_parameter_metadata.py,sha256=_2w2dSokAf5Jskye_KIL8eh80N7yIrUszlmqnZtwQws,450
|
|
540
544
|
policyengine_uk/tests/code_health/test_variables.py,sha256=9Y-KpmzhyRGy9eEqocK9z91NXHX5QIF3mDMNGvegb7Q,1398
|
|
541
545
|
policyengine_uk/tests/microsimulation/README.md,sha256=1toB1Z06ynlUielTrsAaeo9Vb-c3ZrB3tbbR4E1xUGk,3924
|
|
542
|
-
policyengine_uk/tests/microsimulation/reforms_config.yaml,sha256=
|
|
546
|
+
policyengine_uk/tests/microsimulation/reforms_config.yaml,sha256=Kh1WlLAEmYbYgpiyrfD7VkT0oMf8a9lsCHLAa8mGuKY,1086
|
|
543
547
|
policyengine_uk/tests/microsimulation/test_reform_impacts.py,sha256=xM3M2pclEhA9JIFpnuiPMy1fEBFOKcSzroRPk73FPls,2635
|
|
544
|
-
policyengine_uk/tests/microsimulation/test_validity.py,sha256=
|
|
545
|
-
policyengine_uk/tests/microsimulation/update_reform_impacts.py,sha256=
|
|
548
|
+
policyengine_uk/tests/microsimulation/test_validity.py,sha256=_mHgrNu-hKzVd9V2GSg_yPQgJctxRzdQM7lM2bUvqNY,636
|
|
549
|
+
policyengine_uk/tests/microsimulation/update_reform_impacts.py,sha256=4m5EpPu4SXTE3qOPkx3eIZnlaOzprfm6GmMCXETZuLk,6890
|
|
546
550
|
policyengine_uk/tests/policy/baseline/consumption/rent/benunit_is_rent_liable.yaml,sha256=-PzGFSa2eY5Q7cWUUeqVhXosPDnbAemLN8AUZqcfP2I,210
|
|
547
551
|
policyengine_uk/tests/policy/baseline/consumption/rent/rent.yaml,sha256=s_tB77yXF-cn6G0FtIRtsGI9bW6kraLd4qZAesqX9Uw,130
|
|
548
552
|
policyengine_uk/tests/policy/baseline/contrib/labour/attends_private_school.yaml,sha256=YuZY1R3jMdnKbBR9j613RsapE20ukcEJuaxoEklpuBw,1011
|
|
@@ -609,7 +613,7 @@ policyengine_uk/tests/policy/baseline/gov/dcms/bbc/tv_licence_discount.yaml,sha2
|
|
|
609
613
|
policyengine_uk/tests/policy/baseline/gov/dcms/bbc/tv-licence/tv_licence.yaml,sha256=cYAZlmmoAxWymv7L0lDzPcX6dexNAERQnVQMOB0HVzE,562
|
|
610
614
|
policyengine_uk/tests/policy/baseline/gov/dfe/care_to_learn/care_to_learn.yaml,sha256=i5RIghjT2T7uWn_xvaeYb2dIJ7JsreSr_f12UPtFqpg,508
|
|
611
615
|
policyengine_uk/tests/policy/baseline/gov/dfe/care_to_learn/care_to_learn_eligible.yaml,sha256=XPeMlYk3ibEpT6GgVzVk_IPnsTHLDzM4mlcru1jwA-k,3745
|
|
612
|
-
policyengine_uk/tests/policy/baseline/gov/dfe/extended_childcare_entitlement/extended_childcare_entitlement.yaml,sha256=
|
|
616
|
+
policyengine_uk/tests/policy/baseline/gov/dfe/extended_childcare_entitlement/extended_childcare_entitlement.yaml,sha256=ZjA7nN4-sAI3GtM7jxBOgl0qU9_e-cRWz_I6IlhjU2M,4727
|
|
613
617
|
policyengine_uk/tests/policy/baseline/gov/dfe/extended_childcare_entitlement/extended_childcare_entitlement_eligible.yaml,sha256=fE6Cm9K0xQsTWrFS90lrVa8pgwC8gdpGtmttBgLsZhw,4305
|
|
614
618
|
policyengine_uk/tests/policy/baseline/gov/dfe/extended_childcare_entitlement/extended_childcare_entitlement_income_condition.yaml,sha256=5PihH858DmLIkWZTrDMuqF9X9PXCzejffjbKc_LhZPI,1250
|
|
615
619
|
policyengine_uk/tests/policy/baseline/gov/dfe/extended_childcare_entitlement/extended_childcare_entitlement_work_condition.yaml,sha256=7KmrVQddB70kbtn2TbdJ8q2ER58H9GhAJmeak0sODoE,2300
|
|
@@ -693,13 +697,14 @@ policyengine_uk/tests/policy/reforms/parametric/two_child_limit/__init__.py,sha2
|
|
|
693
697
|
policyengine_uk/tests/policy/reforms/parametric/two_child_limit/age_exemption.yaml,sha256=mlNyZewO9LCsVoKCFnhvLVWKaROnaD5TvStmN9ugfUI,3382
|
|
694
698
|
policyengine_uk/tests/policy/reforms/parametric/two_child_limit/ctc_age_exemption.yaml,sha256=xOgctFi4eLVW7agHdRPUU9szoRzt4p0R9eiMvPqwv_s,3577
|
|
695
699
|
policyengine_uk/tests/policy/reforms/parametric/winter_fuel_allowance/taxable_income_test.yaml,sha256=QY3LYJ92VzYH9mXU54XD_6PhefwHNK80kGYQ0R5I0SM,6289
|
|
696
|
-
policyengine_uk/utils/__init__.py,sha256=
|
|
700
|
+
policyengine_uk/utils/__init__.py,sha256=3c4PdgyrexqRqqkACZxyNNbhKduhuYZmzUWm6t1CkLc,41
|
|
701
|
+
policyengine_uk/utils/compare.py,sha256=mhHOiwYoj_lteA0uActRtO9y_Zd7cqUPVgVmBfx4u5o,697
|
|
697
702
|
policyengine_uk/utils/create_ahc_deflator.py,sha256=7GvhywFiUMSsh0syBd-A2MVBr-HU6t4RIuqSgMTyZEw,5463
|
|
698
703
|
policyengine_uk/utils/create_triple_lock.py,sha256=-LpKwztjcDaNYd3RpnMiwxAm48RWsvw0NY9wG6gXIYw,952
|
|
699
704
|
policyengine_uk/utils/dependencies.py,sha256=8epKWmZBeHnxqh3j0sb-Wl3Of_OdKNX-p1syLowUcWs,8197
|
|
700
705
|
policyengine_uk/utils/parameters.py,sha256=OQTzTkHMdwbphCo0mV7_n_FJT0rdwIKNFTsk_lsdETE,1301
|
|
701
706
|
policyengine_uk/utils/scenario.py,sha256=snA0HNfHqMQGjB35vo0hns4dPduCImGPvlGVAXxx85M,6751
|
|
702
|
-
policyengine_uk/utils/solve_private_school_attendance_factor.py,sha256=
|
|
707
|
+
policyengine_uk/utils/solve_private_school_attendance_factor.py,sha256=RIpxsT6OKhLlNCX5ielTRr2ZkPQOfPpg9AbP062iWh4,1555
|
|
703
708
|
policyengine_uk/utils/water/README.md,sha256=sdBI-JZ-jcRoSUfwNx5wjv5Ig_nM8OPvvjSsSMs_Wh8,443
|
|
704
709
|
policyengine_uk/utils/water/forecast_water_bills.py,sha256=B4vtfJuR8XfBP-KHGyhRp2Oo7X7buN-lDH6tBIXqE2U,2788
|
|
705
710
|
policyengine_uk/variables/contrib/cec/non_primary_residence_wealth_tax.py,sha256=Hx5HCHc9ioK6InqTgTt6fX9JwI0sroTLgPB5N5YCJz0,668
|
|
@@ -793,7 +798,7 @@ policyengine_uk/variables/gov/dwp/WTC_severely_disabled_element.py,sha256=2dbYIc
|
|
|
793
798
|
policyengine_uk/variables/gov/dwp/WTC_worker_element.py,sha256=c1Lm5Ke8Gr30gXV2x-HCAwlcMO1aqy989kiZOMm5QlQ,595
|
|
794
799
|
policyengine_uk/variables/gov/dwp/aa_category.py,sha256=mY_cgi6Sq4yROsop0Pix024Go6bMWAeYbN4xT5DrN1U,1032
|
|
795
800
|
policyengine_uk/variables/gov/dwp/access_fund.py,sha256=A5qKLeuwBsvPVrNfQi9grBb-dFSX8XtnE-RB9heCnug,245
|
|
796
|
-
policyengine_uk/variables/gov/dwp/additional_state_pension.py,sha256=
|
|
801
|
+
policyengine_uk/variables/gov/dwp/additional_state_pension.py,sha256=R_U1r3nA__kMTpBwWSl2UTAS1kpJVDhLgwmOi_KdK1Q,846
|
|
797
802
|
policyengine_uk/variables/gov/dwp/adult_ema.py,sha256=M3VfIALFbILPhaOb6NeY3ffBg4HR-ASBuECvDRQPoVE,247
|
|
798
803
|
policyengine_uk/variables/gov/dwp/afcs.py,sha256=rReaIh1KfrsZUyKRYFElTB_eLAge6zee1Yc5DRoBT7w,228
|
|
799
804
|
policyengine_uk/variables/gov/dwp/afcs_reported.py,sha256=JueDBWlD1hhSedf8q54EdpqFDEgFdMpBwGWwrMTVDNE,293
|
|
@@ -803,7 +808,7 @@ policyengine_uk/variables/gov/dwp/attendance_allowance_reported.py,sha256=6RD4Nq
|
|
|
803
808
|
policyengine_uk/variables/gov/dwp/baseline_ctc_entitlement.py,sha256=Z6aAfyDCvaepEX6PPfTdjQPwGgFnMhP4lpQjZ8P8AkE,445
|
|
804
809
|
policyengine_uk/variables/gov/dwp/baseline_income_support_entitlement.py,sha256=TvcCQjTPbtvrbwWTUhaBPqZSiu93ys6qcoNU7S4kqRU,232
|
|
805
810
|
policyengine_uk/variables/gov/dwp/baseline_wtc_entitlement.py,sha256=0BKhLGQAPlJBR6P7Yk28XFlyrFojCsVsFkJC00FMgkc,436
|
|
806
|
-
policyengine_uk/variables/gov/dwp/basic_state_pension.py,sha256=
|
|
811
|
+
policyengine_uk/variables/gov/dwp/basic_state_pension.py,sha256=FQbEQPDakKwTwnrQ3g9b6OWv29a_GNWK8kdkJtK34ek,1014
|
|
807
812
|
policyengine_uk/variables/gov/dwp/benefit_cap.py,sha256=x6ad7zFYKX6jaNoXV8xj0Hql5O3HraXKZlFFmxYGuSU,1287
|
|
808
813
|
policyengine_uk/variables/gov/dwp/benefit_cap_reduction.py,sha256=lbRftEtfkQQOt5ojhNnRYlinnDGiqTH9XwAd2fdR7Kg,777
|
|
809
814
|
policyengine_uk/variables/gov/dwp/bsp.py,sha256=D8WzwacEe789RHAIvB5RYQ1NOq9nsoFMNhDPrvb4qM0,221
|
|
@@ -1240,6 +1245,7 @@ policyengine_uk/variables/household/demographic/severe_disability_premium.py,sha
|
|
|
1240
1245
|
policyengine_uk/variables/household/demographic/tenure_type.py,sha256=9V40d4ihG6lQ1dZXFKNjVTwChDXvKGTOR3tUGkaMhEg,522
|
|
1241
1246
|
policyengine_uk/variables/household/demographic/youngest_adult_age.py,sha256=_T_8VEyKCSq31Ho70SZZBpkqbeFBNFDeJ6G6Edrn_y0,425
|
|
1242
1247
|
policyengine_uk/variables/household/demographic/youngest_child_age.py,sha256=6Tmhbiu8puCBQDYlWwxbpVRuddd7HkraDNyg1tuV5PE,425
|
|
1248
|
+
policyengine_uk/variables/household/demographic/benunit/benunit_count_adults.py,sha256=D82SiPCWFFQSYppWH5CPU6yfQVQ7h1SS4hYeAeYNeww,299
|
|
1243
1249
|
policyengine_uk/variables/household/demographic/benunit/benunit_count_children.py,sha256=dvOsBE_tCtaWtsjY1NfOw29OvXgfFWTk1hhlLIdfgJE,303
|
|
1244
1250
|
policyengine_uk/variables/household/income/base_net_income.py,sha256=9WcVGU3QbCJcIiSvVP65c0-fwhiiDKviqMGD-XKZvBQ,282
|
|
1245
1251
|
policyengine_uk/variables/household/income/baseline_hbai_excluded_income.py,sha256=qlLnaZIPuX1n14HbsDOhUo5hHYFTFBoTp-qlUUj83Z0,638
|
|
@@ -1338,7 +1344,7 @@ policyengine_uk/variables/input/pip_m_category.py,sha256=UfgnVrg5p5bR5n1jdcJb8qo
|
|
|
1338
1344
|
policyengine_uk/variables/input/private_pension_income.py,sha256=nquIdGsghUZtXY8nWCJM6qsd9zg9jCsuwiXPf3khYQk,473
|
|
1339
1345
|
policyengine_uk/variables/input/private_transfer_income.py,sha256=gS8QXT__YKCHAqQWrupujXTre-INgJftup4Y_IpZIqw,329
|
|
1340
1346
|
policyengine_uk/variables/input/property_income.py,sha256=o0JeFu77h9N8LWjlLDw55c8fRBrdcY5lWW_w0tGgnNA,413
|
|
1341
|
-
policyengine_uk/variables/input/rent.py,sha256=
|
|
1347
|
+
policyengine_uk/variables/input/rent.py,sha256=yurkmlodw9KB50FRGA0vCMS_hZ4hgNRjTgNg4IrVs5Q,296
|
|
1342
1348
|
policyengine_uk/variables/input/savings_interest_income.py,sha256=B8AXrGGPl4MI9nvBaOKI-QYdm35qwNSVQxtpNWEosHA,448
|
|
1343
1349
|
policyengine_uk/variables/input/self_employment_income.py,sha256=66eqP3jk3czOpmxA6wQOtsWM0Ll9lU2cw4_kuc7SgUA,492
|
|
1344
1350
|
policyengine_uk/variables/input/state_pension.py,sha256=o4LrBumOYadV-lZ6NC5-3lvafkLVJ_RNKjTrclQA0N4,957
|
|
@@ -1362,7 +1368,7 @@ policyengine_uk/variables/input/consumption/recreation_consumption.py,sha256=47I
|
|
|
1362
1368
|
policyengine_uk/variables/input/consumption/restaurants_and_hotels_consumption.py,sha256=plke30Xdy_zFvjqkXOhWtVdYqE8NfwMKnWaOD5n4IdM,464
|
|
1363
1369
|
policyengine_uk/variables/input/consumption/transport_consumption.py,sha256=5JfmRMpap6GOGZwl0PIRyUJvDaZrQyelEUE9z61GAfI,425
|
|
1364
1370
|
policyengine_uk/variables/input/consumption/property/README.md,sha256=IP9_pLLNXMHRMS5sEjRRqsM1nQMffQC2PJII-z-I6wI,11
|
|
1365
|
-
policyengine_uk/variables/input/consumption/property/council_tax.py,sha256=
|
|
1371
|
+
policyengine_uk/variables/input/consumption/property/council_tax.py,sha256=QtcI4JcufejJ-8MVqntcXYP5I_5YuhXeigo3eDkSmRA,291
|
|
1366
1372
|
policyengine_uk/variables/input/consumption/property/cumulative_non_residential_rent.py,sha256=rhqlRphsTMSx2Xij-B9RjSZeuLTjAyt3sx2VK66Nkf8,338
|
|
1367
1373
|
policyengine_uk/variables/input/consumption/property/cumulative_residential_rent.py,sha256=KMbISuubgfGaH34kJDe_tfOsKzVUHSJneDhyd-fLeI4,326
|
|
1368
1374
|
policyengine_uk/variables/input/consumption/property/employee_pension_contributions.py,sha256=J8Ead71hjCZ0vktrl9MbMMgsPCWsdPWSTbVPsVYkgcU,293
|
|
@@ -1380,7 +1386,7 @@ policyengine_uk/variables/misc/spi_imputed.py,sha256=iPVlBF_TisM0rtKvO-3-PQ2UYCe
|
|
|
1380
1386
|
policyengine_uk/variables/misc/uc_migrated.py,sha256=zFNcUJaO8gwmbL1iY9GKgUt3G6J9yrCraqBV_5dCvlM,306
|
|
1381
1387
|
policyengine_uk/variables/misc/categories/lower_middle_or_higher.py,sha256=C54tHYz2DmOyvQYCC1bF8RJwRZinhAq_e3aYC-9F5fM,157
|
|
1382
1388
|
policyengine_uk/variables/misc/categories/lower_or_higher.py,sha256=81NIbLLabRr9NwjpUZDuV8IV8_mqmp5NM-CZvt55TwE,129
|
|
1383
|
-
policyengine_uk-2.
|
|
1384
|
-
policyengine_uk-2.
|
|
1385
|
-
policyengine_uk-2.
|
|
1386
|
-
policyengine_uk-2.
|
|
1389
|
+
policyengine_uk-2.47.2.dist-info/METADATA,sha256=iKd-_31YEGeJA1CqRvD2CWN_36SR840qoYoPvFTLnrk,3965
|
|
1390
|
+
policyengine_uk-2.47.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
1391
|
+
policyengine_uk-2.47.2.dist-info/licenses/LICENSE,sha256=dql8h4yceoMhuzlcK0TT_i-NgTFNIZsgE47Q4t3dUYI,34520
|
|
1392
|
+
policyengine_uk-2.47.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|