policyengine 3.1.4__py3-none-any.whl → 3.1.6__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.
@@ -1,5 +1,6 @@
1
1
  from uuid import uuid4
2
2
 
3
+ import numpy as np
3
4
  import pandas as pd
4
5
  from microdf import MicroDataFrame
5
6
  from pydantic import BaseModel, ConfigDict, Field
@@ -100,7 +101,7 @@ def map_to_entity(
100
101
  target_entity: str,
101
102
  person_entity: str = "person",
102
103
  columns: list[str] | None = None,
103
- values: list | None = None,
104
+ values: np.ndarray | None = None,
104
105
  how: str = "sum",
105
106
  ) -> MicroDataFrame:
106
107
  """Map data from source entity to target entity using join keys.
@@ -143,6 +144,9 @@ def map_to_entity(
143
144
  # Get source data (convert to plain DataFrame to avoid weighted operations during mapping)
144
145
  source_df = pd.DataFrame(entity_data[source_entity])
145
146
 
147
+ # Track if we should return a MicroSeries (values is a numpy array, not a list)
148
+ return_series = values is not None
149
+
146
150
  # Handle values parameter - create a temporary column with the provided values
147
151
  if values is not None:
148
152
  if len(values) != len(source_df):
@@ -166,7 +170,10 @@ def map_to_entity(
166
170
 
167
171
  # Same entity - return as is
168
172
  if source_entity == target_entity:
169
- return MicroDataFrame(source_df, weights=target_weight)
173
+ result = MicroDataFrame(source_df, weights=target_weight)
174
+ if return_series:
175
+ return result["__mapped_value"]
176
+ return result
170
177
 
171
178
  # Get target data and key
172
179
  target_df = entity_data[target_entity]
@@ -225,7 +232,10 @@ def map_to_entity(
225
232
  # Fill NaN with 0 for groups with no members in source entity
226
233
  result[agg_cols] = result[agg_cols].fillna(0)
227
234
 
228
- return MicroDataFrame(result, weights=target_weight)
235
+ result_df = MicroDataFrame(result, weights=target_weight)
236
+ if return_series:
237
+ return result_df["__mapped_value"]
238
+ return result_df
229
239
 
230
240
  # Group entity to person: expand group-level data to person level
231
241
  if source_entity != person_entity and target_entity == person_entity:
@@ -284,7 +294,10 @@ def map_to_entity(
284
294
  f"Unsupported aggregation method for group->person: {how}. Use 'project' or 'divide'."
285
295
  )
286
296
 
287
- return MicroDataFrame(result, weights=target_weight)
297
+ result_df = MicroDataFrame(result, weights=target_weight)
298
+ if return_series:
299
+ return result_df["__mapped_value"]
300
+ return result_df
288
301
 
289
302
  # Group to group: go through person table
290
303
  if source_entity != person_entity and target_entity != person_entity:
@@ -408,7 +421,10 @@ def map_to_entity(
408
421
  # Fill NaN with 0
409
422
  result[agg_cols] = result[agg_cols].fillna(0)
410
423
 
411
- return MicroDataFrame(result, weights=target_weight)
424
+ result_df = MicroDataFrame(result, weights=target_weight)
425
+ if return_series:
426
+ return result_df["__mapped_value"]
427
+ return result_df
412
428
 
413
429
  raise ValueError(
414
430
  f"Unsupported mapping from {source_entity} to {target_entity}"
@@ -2,6 +2,7 @@ from uuid import uuid4
2
2
 
3
3
  from pydantic import BaseModel, Field
4
4
 
5
+ from .parameter_value import ParameterValue
5
6
  from .tax_benefit_model_version import TaxBenefitModelVersion
6
7
 
7
8
 
@@ -13,3 +14,4 @@ class Parameter(BaseModel):
13
14
  data_type: type | None = None
14
15
  tax_benefit_model_version: TaxBenefitModelVersion
15
16
  unit: str | None = None
17
+ parameter_values: list["ParameterValue"] = Field(default_factory=list)
@@ -177,6 +177,9 @@ class PolicyEngineUKLatest(TaxBenefitModelVersion):
177
177
  value=param_at_instant.value,
178
178
  )
179
179
  self.parameter_values.append(parameter_value)
180
+ self.get_parameter(parameter.name).parameter_values.append(
181
+ parameter_value
182
+ )
180
183
 
181
184
  def run(self, simulation: "Simulation") -> "Simulation":
182
185
  from policyengine_uk import Microsimulation
@@ -167,6 +167,9 @@ class PolicyEngineUSLatest(TaxBenefitModelVersion):
167
167
  value=param_at_instant.value,
168
168
  )
169
169
  self.parameter_values.append(parameter_value)
170
+ self.get_parameter(parameter.name).parameter_values.append(
171
+ parameter_value
172
+ )
170
173
 
171
174
  def run(self, simulation: "Simulation") -> "Simulation":
172
175
  from policyengine_us import Microsimulation
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: policyengine
3
- Version: 3.1.4
3
+ Version: 3.1.6
4
4
  Summary: A package to conduct policy analysis using PolicyEngine tax-benefit models.
5
5
  Author-email: PolicyEngine <hello@policyengine.org>
6
6
  License: GNU AFFERO GENERAL PUBLIC LICENSE
@@ -1,11 +1,11 @@
1
1
  policyengine/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- policyengine/__pycache__/__init__.cpython-313.pyc,sha256=37QsU34QzZ56-bY7bRgKUcPPwi-onLZ481cHrbg3PDU,175
2
+ policyengine/__pycache__/__init__.cpython-313.pyc,sha256=uYQXIlDDDMSRk17xgnGViCXX-MefhsWgf4kL0hHrVaQ,175
3
3
  policyengine/core/__init__.py,sha256=KBVhkqzkvjWLDDwk96vquQKL63ZFuLen5AzBOBnO9pg,912
4
- policyengine/core/dataset.py,sha256=SFicjsZgMeKgJjlt8z98fOUWG2dfod0Q9NBy_m9PSc8,15506
4
+ policyengine/core/dataset.py,sha256=iJr9-J6w11uMRYy3EEJO9Gveku1m71AA1yzeo-0SiCs,16094
5
5
  policyengine/core/dataset_version.py,sha256=6KeFCRGQto_Yyl4QY4Vo2JFythjaXrNAOHQiwRGESyM,378
6
6
  policyengine/core/dynamic.py,sha256=ng9BjDzxdwjJ0e7zoqXFmq33E1SRbaaPYfW7pjRSSzI,1641
7
7
  policyengine/core/output.py,sha256=cCW4vbzkLdQaT_nJTyDJBl7Hubm7nZeRuR7aVG1dKvg,643
8
- policyengine/core/parameter.py,sha256=5nBCw-6-BCfW-_uFqvAN5zcP_Vfz1mAmQsi3peWAbZA,407
8
+ policyengine/core/parameter.py,sha256=wePNpoeSEwI2NLE1gENKvS4pqWd-GpN8f8-iZzxNHlo,526
9
9
  policyengine/core/parameter_value.py,sha256=b0ts1kbWcwjPSYnZm2rlCylmTLPJRLxDL8z3RmxM5OI,377
10
10
  policyengine/core/policy.py,sha256=ExMrUDMvNk_uuOL0cSm0UCzDyGka0t_yk6x4U0Kp6Ww,1635
11
11
  policyengine/core/simulation.py,sha256=yvvved75XMcGP3Bj9E2tmKRxvI-DQVZv7k4uTETwBm0,1134
@@ -21,19 +21,19 @@ policyengine/tax_benefit_models/us.py,sha256=G51dAmHo8NJLb2mnbne6iO5eNaatCGUd_2u
21
21
  policyengine/tax_benefit_models/uk/__init__.py,sha256=AiA74iED5FEryvUCMfVZi6pYDYuTfQcj9B01h8J5xFA,1105
22
22
  policyengine/tax_benefit_models/uk/analysis.py,sha256=O4eYJYF7tsgiuLuiWMU0OXq7ss6U8-vzlg6nC2U8sgU,3175
23
23
  policyengine/tax_benefit_models/uk/datasets.py,sha256=-lmj4eG2my2GGmMMkxI1iXobGQW5irBgylEwyV0xU6c,8039
24
- policyengine/tax_benefit_models/uk/model.py,sha256=HNdqsAKErDw9nruOdj4SiGF2KMopccaGDJ4RTXkdJ1U,9612
24
+ policyengine/tax_benefit_models/uk/model.py,sha256=djCLLBeik9ZGFqe5WXUNVcu1JXjh0U8MXakvncasUj0,9754
25
25
  policyengine/tax_benefit_models/uk/outputs.py,sha256=2mYLwQW4QNvrOHtHfm_ACqE9gbmuLxvcCyldRU46s0o,3543
26
26
  policyengine/tax_benefit_models/us/__init__.py,sha256=zP-UUQqOc9g0ymyHkweJdi4RVXQDKSR6SUxavUKvV0s,1101
27
27
  policyengine/tax_benefit_models/us/analysis.py,sha256=Xf-DT0QjVySs0QG_koCwgvOeWI_scLtv3S3SP8u8ZWc,3253
28
28
  policyengine/tax_benefit_models/us/datasets.py,sha256=UwY5GcrVRl7zdmtqKE5TykYRNtOsGzyDm8kRkc98hyw,14708
29
- policyengine/tax_benefit_models/us/model.py,sha256=lhffJLnE4tr-ch_tHiyH2zP4IMX9_swWomUllb9WdbM,16421
29
+ policyengine/tax_benefit_models/us/model.py,sha256=x3xRoIpXV2idVr0IwPJzujLHqu3qeO-iWN2Sv7Tuj9Q,16563
30
30
  policyengine/tax_benefit_models/us/outputs.py,sha256=GT8Eur8DfB9cPQRbSljEl9RpKSNHW80Fq_CBXCybvIU,3519
31
31
  policyengine/utils/__init__.py,sha256=1X-VYAWLyB9A0YRHwsGWrqQHns1WfeZ7ISC6DMU5myM,140
32
32
  policyengine/utils/dates.py,sha256=HnAqyl8S8EOYp8ibsnMTmECYoDWCSqwL-7A2_qKgxSc,1510
33
33
  policyengine/utils/parametric_reforms.py,sha256=4P3U39-4pYTU4BN6JjgmVLUkCkBhRfZJ6UIWTlsjyQE,1155
34
34
  policyengine/utils/plotting.py,sha256=ZAzTWz38vIaW0c3Nt4Un1kfrNoXLyHCDd1pEJIlsRg4,5335
35
- policyengine-3.1.4.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
36
- policyengine-3.1.4.dist-info/METADATA,sha256=ED5nMhV3Tg6uymV-_I6DYvuqbsqiFnccRHNSSUZcOXc,45889
37
- policyengine-3.1.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
38
- policyengine-3.1.4.dist-info/top_level.txt,sha256=_23UPobfkneHQkpJ0e0OmDJfhCUfoXj_F2sTckCGOH4,13
39
- policyengine-3.1.4.dist-info/RECORD,,
35
+ policyengine-3.1.6.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
36
+ policyengine-3.1.6.dist-info/METADATA,sha256=Sdl_MCwOgD_eSUaXhrD7J2BmUK0Pgt2pSKXdEVuDak4,45889
37
+ policyengine-3.1.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
38
+ policyengine-3.1.6.dist-info/top_level.txt,sha256=_23UPobfkneHQkpJ0e0OmDJfhCUfoXj_F2sTckCGOH4,13
39
+ policyengine-3.1.6.dist-info/RECORD,,