Skip to content

Commit 3816876

Browse files
Test whether DEFAULT_TARGETS can be computed with create_synthetic_data output (#785)
Closes #733 I let the test run through the years 2017-2024. Extending further back does not work because the Unterhaltsvorschuss isn't implemented prior to 2017 (as discussed in #566). I also added a `NotImplementedError` for the Unterhaltsvorschuss until 2016. Related to #627 --------- Co-authored-by: Hans-Martin von Gaudecker <[email protected]>
1 parent ffbccf3 commit 3816876

File tree

3 files changed

+38
-2
lines changed

3 files changed

+38
-2
lines changed

CHANGES.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ releases are available on [Anaconda.org](https://anaconda.org/conda-forge/gettsi
66

77
## Unpublished
88

9+
- {gh}`785` Add NotImplementedError to Unterhaltsvorschuss and test whether output from
10+
`create_synthetic_data` is enough to compute default targets ({ghuser}`MImmesberger`).
911
- {gh}`772` Add Mindesteinkommen check to Wohngeld, calculate anz_eig_kind_bis_24
1012
instead of requiring it as an input variable ({ghuser}`MImmesberger`).
1113
- {gh}`771` Move SGB II Regelsatz calculation from BG to individual level

src/_gettsim/transfers/unterhaltsvors.py

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
}
1515

1616

17-
@policy_info(params_key_for_rounding="unterhaltsvors")
17+
@policy_info(start_date="2017-01-01", params_key_for_rounding="unterhaltsvors")
1818
def unterhaltsvors_m(
1919
kind_unterh_erhalt_m: float,
2020
_unterhaltsvors_anspruch_kind_m: float,
@@ -58,6 +58,20 @@ def unterhaltsvors_m(
5858
return out
5959

6060

61+
@policy_info(
62+
end_date="2016-12-31",
63+
name_in_dag="unterhaltsvors_m",
64+
params_key_for_rounding="unterhaltsvors",
65+
)
66+
def unterhaltsvors_not_implemented_m() -> float:
67+
raise NotImplementedError(
68+
"""
69+
Unterhaltsvorschuss is not implemented prior to 2017.
70+
https://github.com/iza-institute-of-labor-economics/gettsim/issues/566
71+
"""
72+
)
73+
74+
6175
@policy_info(skip_vectorization=True)
6276
def parent_alleinerz(
6377
p_id_kindergeld_empf: numpy.ndarray[int],
@@ -130,6 +144,7 @@ def _kindergeld_erstes_kind_gestaffelt_m(
130144
return kindergeld_params["kindergeld"][1]
131145

132146

147+
@policy_info(start_date="2017-01-01")
133148
def _unterhaltsvors_anspruch_kind_m(
134149
alter: int,
135150
_unterhaltsvorschuss_empf_eink_above_income_threshold: bool,
@@ -179,7 +194,7 @@ def _unterhaltsvors_anspruch_kind_m(
179194
return out
180195

181196

182-
@policy_info(skip_vectorization=True)
197+
@policy_info(start_date="2017-01-01", skip_vectorization=True)
183198
def _unterhaltsvorschuss_empf_eink_above_income_threshold(
184199
p_id_kindergeld_empf: numpy.ndarray[int],
185200
p_id: numpy.ndarray[int],
@@ -208,6 +223,7 @@ def _unterhaltsvorschuss_empf_eink_above_income_threshold(
208223
)
209224

210225

226+
@policy_info(start_date="2017-01-01")
211227
def _unterhaltsvorschuss_eink_above_income_threshold(
212228
unterhaltsvorschuss_eink_m: float,
213229
unterhaltsvors_params: dict,
@@ -228,6 +244,7 @@ def _unterhaltsvorschuss_eink_above_income_threshold(
228244
return unterhaltsvorschuss_eink_m >= unterhaltsvors_params["mindesteinkommen"]
229245

230246

247+
@policy_info(start_date="2017-01-01")
231248
def unterhaltsvorschuss_eink_m( # noqa: PLR0913
232249
bruttolohn_m: float,
233250
sonstig_eink_m: float,

src/_gettsim_tests/test_synthetic.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
import numpy
44
import pandas as pd
55
import pytest
6+
from _gettsim.config import DEFAULT_TARGETS
7+
from _gettsim.interface import compute_taxes_and_transfers
8+
from _gettsim.policy_environment import set_up_policy_environment
69
from _gettsim.synthetic import create_synthetic_data
710

811

@@ -286,3 +289,17 @@ def test_p_id_groups(fixture, expected, request):
286289
df = request.getfixturevalue(fixture)
287290
for col, values in expected.items():
288291
pd.testing.assert_series_equal(df[col], pd.Series(values, name=col))
292+
293+
294+
@pytest.mark.parametrize(
295+
"fixture, policy_date",
296+
[("synthetic_data_couple_with_children", y) for y in range(2017, 2024)],
297+
)
298+
def test_default_targets(fixture, policy_date, request):
299+
policy_params, policy_functions = set_up_policy_environment(policy_date)
300+
compute_taxes_and_transfers(
301+
data=request.getfixturevalue(fixture),
302+
targets=DEFAULT_TARGETS,
303+
params=policy_params,
304+
functions=policy_functions,
305+
)

0 commit comments

Comments
 (0)