Skip to content

Commit 28d4afd

Browse files
committed
more tests
1 parent 7916656 commit 28d4afd

File tree

2 files changed

+75
-28
lines changed

2 files changed

+75
-28
lines changed

ogcore/pensions.py

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -279,13 +279,13 @@ def NDC_amount(w, e, n, r, Y, j, p):
279279
w_S = np.append((p.w_preTP * np.ones(p.S))[:(-per_rmn)], w)
280280
n_S = np.append(p.n_preTP[:(-per_rmn), j], n)
281281

282-
NDC_s = np.zeros(p.S_ret)
282+
NDC_s = np.zeros(p.retire)
283283
NDC = np.zeros(p.S)
284284
NDC = NDC_1dim_loop(
285285
w_S,
286286
p.emat[:, j],
287287
n_S,
288-
p.S_ret,
288+
p.retire,
289289
p.S,
290290
p.g_y,
291291
p.tau_p,
@@ -298,13 +298,13 @@ def NDC_amount(w, e, n, r, Y, j, p):
298298

299299
else:
300300
if np.ndim(n) == 1:
301-
NDC_s = np.zeros(p.S_ret)
301+
NDC_s = np.zeros(p.retire)
302302
NDC = np.zeros(p.S)
303303
NDC = NDC_1dim_loop(
304304
w,
305305
e,
306306
n,
307-
p.S_ret,
307+
p.retire,
308308
p.S,
309309
p.g_y,
310310
p.tau_p,
@@ -314,13 +314,13 @@ def NDC_amount(w, e, n, r, Y, j, p):
314314
NDC,
315315
)
316316
elif np.ndim(n) == 2:
317-
NDC_sj = np.zeros((p.S_ret, p.J))
317+
NDC_sj = np.zeros((p.retire, p.J))
318318
NDC = np.zeros((p.S, p.J))
319319
NDC = NDC_2dim_loop(
320320
w,
321321
e,
322322
n,
323-
p.S_ret,
323+
p.retire,
324324
p.S,
325325
p.g_y,
326326
p.tau_p,
@@ -342,13 +342,13 @@ def PS_amount(w, e, n, j, factor, p):
342342
per_rmn = n.shape[0]
343343
w_S = np.append((p.w_preTP * np.ones(p.S))[:(-per_rmn)], w)
344344
n_S = np.append(p.n_preTP[:(-per_rmn), j], n)
345-
L_inc_avg_s = np.zeros(p.S_ret)
345+
L_inc_avg_s = np.zeros(p.retire)
346346
PS = np.zeros(p.S)
347347
PS = PS_1dim_loop(
348348
w_S,
349349
p.emat[:, j],
350350
n_S,
351-
p.S_ret,
351+
p.retire,
352352
p.S,
353353
p.g_y,
354354
p.vpoint,
@@ -360,13 +360,13 @@ def PS_amount(w, e, n, j, factor, p):
360360

361361
else:
362362
if np.ndim(n) == 1:
363-
L_inc_avg_s = np.zeros(p.S_ret)
363+
L_inc_avg_s = np.zeros(p.retire)
364364
PS = np.zeros(p.S)
365365
PS = PS_1dim_loop(
366366
w,
367367
e,
368368
n,
369-
p.S_ret,
369+
p.retire,
370370
p.S,
371371
p.g_y,
372372
p.vpoint,
@@ -376,13 +376,13 @@ def PS_amount(w, e, n, j, factor, p):
376376
)
377377

378378
elif np.ndim(n) == 2:
379-
L_inc_avg_sj = np.zeros((p.S_ret, p.J))
379+
L_inc_avg_sj = np.zeros((p.retire, p.J))
380380
PS = np.zeros((p.S, p.J))
381381
PS = PS_2dim_loop(
382382
w,
383383
e,
384384
n,
385-
p.S_ret,
385+
p.retire,
386386
p.S,
387387
p.J,
388388
p.g_y,
@@ -418,7 +418,7 @@ def deriv_NDC(r, w, e, Y, per_rmn, p):
418418
"""
419419
if per_rmn == 1:
420420
d_theta = 0
421-
elif per_rmn < (p.S - p.S_ret + 1):
421+
elif per_rmn < (p.S - p.retire + 1):
422422
d_theta = np.zeros(per_rmn)
423423
else:
424424
d_theta_empty = np.zeros(per_rmn)
@@ -429,7 +429,7 @@ def deriv_NDC(r, w, e, Y, per_rmn, p):
429429
e,
430430
per_rmn,
431431
p.S,
432-
p.S_ret,
432+
p.retire,
433433
p.g_y,
434434
p.tau_p,
435435
g_ndc_amount,
@@ -466,12 +466,12 @@ def deriv_PS(w, e, per_rmn, factor, p):
466466
Change in points system pension benefits for another unit of labor supply
467467
"""
468468

469-
if per_rmn < (p.S - p.S_ret + 1):
469+
if per_rmn < (p.S - p.retire + 1):
470470
d_theta = np.zeros(p.S)
471471
else:
472472
d_theta_empty = np.zeros(p.S)
473473
d_theta = deriv_PS_loop(
474-
w, e, p.S, p.S_ret, per_rmn, p.g_y, d_theta_empty, p.vpoint, factor
474+
w, e, p.S, p.retire, per_rmn, d_theta_empty, p.vpoint, factor
475475
)
476476
d_theta = d_theta[-per_rmn:]
477477

@@ -538,10 +538,10 @@ def delta_ret(self, r, Y, p):
538538
Compute conversion coefficient for the NDC pension amount
539539
"""
540540
surv_rates = 1 - p.mort_rates_SS
541-
dir_delta_s_empty = np.zeros(p.S - p.S_ret + 1)
541+
dir_delta_s_empty = np.zeros(p.S - p.retire + 1)
542542
g_dir_value = g_dir(r, Y, p.g_n_SS, p.g_y)
543543
dir_delta = delta_ret_loop(
544-
p.S, p.S_ret, surv_rates, g_dir_value, dir_delta_s_empty
544+
p.S, p.retire, surv_rates, g_dir_value, dir_delta_s_empty
545545
)
546546
delta_ret = 1 / (dir_delta - p.k_ret)
547547

tests/test_pensions.py

Lines changed: 57 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -237,8 +237,7 @@ def test_deriv_PS_loop(args, deriv_PS_loop_expected):
237237
e_ddb1 = np.array([1.1, 1.11, 0.9, 0.87, 0.87, 0.7, 0.6])
238238
per_rmn = n_ddb1.shape[0]
239239
d_theta_empty = np.zeros_like(per_rmn)
240-
deriv_DB_expected1 = np.array(
241-
[0.352, 0.3256, 0.2904, 0.232, 0.0, 0.0, 0.0])
240+
deriv_DB_expected1 = np.array([0.352, 0.3256, 0.2904, 0.232, 0.0, 0.0, 0.0])
242241
args_ddb1 = (w_ddb1, e_ddb1, per_rmn, p)
243242

244243
#############non-zero d_theta: case 2############
@@ -254,22 +253,70 @@ def test_deriv_PS_loop(args, deriv_PS_loop_expected):
254253
e_ddb1 = np.array([1.11, 0.9, 0.87, 0.87, 0.7, 0.6])
255254
per_rmn = n_ddb2.shape[0]
256255
d_theta_empty = np.zeros_like(per_rmn)
257-
deriv_DB_expected2 = np.array(
258-
[0.6105, 0.5445, 0.435, 0.43935, 0.0, 0.0])
256+
deriv_DB_expected2 = np.array([0.6105, 0.5445, 0.435, 0.43935, 0.0, 0.0])
259257
args_ddb2 = (w_ddb1, e_ddb1, per_rmn, p2)
260258

261-
test_data = [(args_ddb1, deriv_DB_expected1),
262-
(args_ddb2, deriv_DB_expected2)]
259+
test_data = [(args_ddb1, deriv_DB_expected1), (args_ddb2, deriv_DB_expected2)]
263260

264261

265-
@pytest.mark.parametrize('args,deriv_DB_expected', test_data,
266-
ids=['non-zero d_theta: case 1',
267-
'non-zero d_theta: case 2'])
262+
@pytest.mark.parametrize(
263+
"args,deriv_DB_expected",
264+
test_data,
265+
ids=["non-zero d_theta: case 1", "non-zero d_theta: case 2"],
266+
)
268267
def test_deriv_DB(args, deriv_DB_expected):
269268
"""
270269
Test of the pensions.deriv_DB() function.
271270
"""
272271
(w, e, per_rmn, p) = args
273272
deriv_DB = pensions.deriv_DB(w, e, per_rmn, p)
274273

275-
assert (np.allclose(deriv_DB, deriv_DB_expected))
274+
assert np.allclose(deriv_DB, deriv_DB_expected)
275+
276+
277+
#############PS deriv SS or complete lifetimes############
278+
p = Specifications()
279+
p.S = 7
280+
p.retire = 4
281+
p.vpoint = 0.4
282+
omegas = 1 / (p.S) * np.ones(p.S)
283+
p.omega_SS = omegas
284+
p.g_y = 0.03
285+
per_rmn_dps1 = p.S
286+
factor = 2
287+
w = np.array([1.2, 1.1, 1.21, 1, 1.01, 0.99, 0.8])
288+
e = np.array([1.1, 1.11, 0.9, 0.87, 0.87, 0.7, 0.6])
289+
deriv_PS_expected1 = np.array(
290+
[0.003168, 0.0029304, 0.0026136, 0.002088, 0, 0, 0]
291+
)
292+
args_dps1 = (w, e, per_rmn_dps1, factor, p)
293+
294+
##############PS deriv incomplete lifetimes############
295+
p2 = Specifications()
296+
p2.S = 7
297+
p2.retire = 4
298+
p2.vpoint = 0.4
299+
omegas = 1 / (p2.S) * np.ones(p2.S)
300+
p2.omega_SS = omegas
301+
p2.g_y = 0.03
302+
per_rmn_dps2 = 5
303+
factor = 2
304+
w = np.array([1.2, 1.1, 1.21, 1, 1.01, 0.99, 0.8])
305+
e = np.array([1.1, 1.11, 0.9, 0.87, 0.87, 0.7, 0.6])
306+
deriv_PS_expected2 = np.array([0.0026136, 0.002088, 0, 0, 0])
307+
args_dps2 = (w, e, per_rmn_dps2, factor, p2)
308+
test_data = [(args_dps1, deriv_PS_expected1), (args_dps2, deriv_PS_expected2)]
309+
310+
311+
@pytest.mark.parametrize(
312+
"args,deriv_PS_expected", test_data, ids=["SS/Complete", "Incomplete"]
313+
)
314+
def test_deriv_S(args, deriv_PS_expected):
315+
"""
316+
Test of the pensions.deriv_PS() function.
317+
"""
318+
(w, e, per_rmn, factor, p) = args
319+
320+
deriv_PS = pensions.deriv_PS(w, e, per_rmn, factor, p)
321+
322+
assert np.allclose(deriv_PS, deriv_PS_expected)

0 commit comments

Comments
 (0)