def test_sens_linear(símismo): líms_paráms = {'A': (0, 2), 'B': (0, 1)} mod = ModeloLinear() for m in métodos: if m == 'morris': with símismo.subTest(método='morris'): res = anlzr_sens(mod, método=m, mapa_paráms=None, líms_paráms=líms_paráms, t_final=5, var_egr=['y'], ops_método={ 'num_levels': 4, 'grid_jump': 2 }, tipo_egr="linear") mu_star = res['linear']['y']['mu_star'] símismo.assertGreaterEqual(mu_star['A']['slope'], 0.1) npt.assert_allclose(mu_star['A']['intercept'], mu_star['Ficticia']['intercept'], rtol=0.5) símismo.assertGreaterEqual(mu_star['B']['intercept'], 0.1) npt.assert_allclose(mu_star['B']['slope'], mu_star['Ficticia']['slope'], rtol=0.5) elif m == 'fast': with símismo.subTest(método='fast'): res = anlzr_sens(mod, método='fast', mapa_paráms=None, líms_paráms=líms_paráms, t_final=5, var_egr=['y'], tipo_egr="linear") si = res['linear']['y']['Si'] st_si = res['linear']['y']['St-Si'] símismo.assertGreaterEqual(si['A']['slope'], 0.01) símismo.assertTrue(si['A']['intercept'] <= 0.01 and st_si['A']['intercept'] <= 0.1) símismo.assertGreaterEqual(si['B']['intercept'], 0.01) símismo.assertTrue(si['B']['slope'] <= 0.01 and st_si['B']['slope'] <= 0.1) símismo.assertTrue( si['Ficticia']['intercept'] <= 0.01 and st_si['Ficticia']['intercept'] <= 0.1) símismo.assertTrue(si['Ficticia']['slope'] <= 0.01 and st_si['Ficticia']['slope'] <= 0.1) else: raise NotImplementedError
def test_sens_expo(símismo): líms_paráms = {'A': (0.1, 1), 'B': (1.7, 2)} mod = ModeloExpo() for m in métodos: if m == 'morris': with símismo.subTest(método='morris'): res = anlzr_sens(mod, método=m, mapa_paráms=None, líms_paráms=líms_paráms, t_final=5, var_egr=['y'], ops_método={ 'num_levels': 4, 'grid_jump': 2 }, tipo_egr="exponencial") mu_star = res['exponencial']['y']['mu_star'] símismo.assertGreaterEqual(mu_star['A']['y_intercept'], 0.1) símismo.assertLessEqual(mu_star['A']['g_d'], 0.1) símismo.assertLessEqual(mu_star['B']['y_intercept'], 0.1) símismo.assertGreaterEqual(mu_star['B']['g_d'], 0.1) símismo.assertLessEqual(mu_star['Ficticia']['y_intercept'], 0.1) símismo.assertLessEqual(mu_star['Ficticia']['g_d'], 0.1) elif m == 'fast': with símismo.subTest(método='fast'): res = anlzr_sens(mod, método='fast', mapa_paráms=None, líms_paráms=líms_paráms, t_final=5, var_egr=['y'], tipo_egr="exponencial") si = res['exponencial']['y']['Si'] st_si = res['exponencial']['y']['St-Si'] símismo.assertGreaterEqual(si['A']['y_intercept'], 0.01) símismo.assertTrue(si['A']['g_d'] < 0.01 and st_si['A']['g_d'] < 0.1) símismo.assertGreaterEqual(si['B']['g_d'], 0.01) símismo.assertTrue(si['B']['y_intercept'] < 0.01 and st_si['B']['y_intercept'] < 0.1) símismo.assertTrue(si['Ficticia']['g_d'] < 0.01 and st_si['Ficticia']['g_d'] < 0.1) símismo.assertTrue( si['Ficticia']['y_intercept'] < 0.01 and st_si['Ficticia']['y_intercept'] < 0.1) else: raise NotImplementedError
def test_sens_paso(símismo): líms_paráms = {'A': (0, 1), 'B': (2, 3)} mod = ModeloLinear() for m in métodos: if m == 'morris': with símismo.subTest(método='morris'): res = anlzr_sens(mod, método=m, mapa_paráms=None, líms_paráms=líms_paráms, t_final=5, var_egr=['A', 'B'], ops_método={ 'num_levels': 4, 'grid_jump': 2 }, tipo_egr="paso_tiempo") # =100 npt.assert_array_less( 0.1, np.asarray( list(res['paso_tiempo']['A']['mu_star'] ['A'].values()))) npt.assert_array_less( np.asarray( list(res['paso_tiempo']['A']['mu_star'] ['B'].values())), 0.1) npt.assert_array_less( np.asarray( list(res['paso_tiempo']['A']['mu_star'] ['Ficticia'].values())), 0.1) elif m == 'fast': with símismo.subTest(método='fast'): res = anlzr_sens(mod, método='fast', mapa_paráms=None, líms_paráms=líms_paráms, t_final=3, var_egr=['A', 'B'], tipo_egr="paso_tiempo") # num_samples=195 npt.assert_array_less( 0.01, np.asarray( list(res['paso_tiempo']['A']['Si']['A'].values()))) símismo.assertTrue( res['paso_tiempo']['A']['Si']['B']['paso_0'] < 0.01 and res['paso_tiempo']['A']['St-Si']['B']['paso_0'] < 0.1) símismo.assertTrue( res['paso_tiempo']['A']['Si']['Ficticia']['paso_0'] < 0.01 and res['paso_tiempo']['A']['St-Si']['Ficticia']['paso_0'] < 0.1) else: raise NotImplementedError
def test_sens_log(símismo): líms_paráms = {'A': (0.5, 2), 'B': (2, 5)} mod = ModeloLog() for m in métodos: if m == 'morris': with símismo.subTest(método='morris'): res = anlzr_sens(mod, método=m, mapa_paráms=None, líms_paráms=líms_paráms, t_final=10, var_egr=['y'], ops_método={ 'num_levels': 4, 'grid_jump': 2 }, tipo_egr="log") # b_params = {'g_d': params[0], 'phi': params[1]} mu_star = res['log']['y']['mu_star'] símismo.assertGreaterEqual(mu_star['A']['g_d'], 0.1) símismo.assertLessEqual(mu_star['A']['phi'], 0.1) símismo.assertLessEqual(mu_star['B']['phi'], 0.1) símismo.assertGreaterEqual(mu_star['B']['g_d'], 0.1) símismo.assertLessEqual(mu_star['Ficticia']['g_d'], 0.1) símismo.assertLessEqual(mu_star['Ficticia']['phi'], 0.1) elif m == 'fast': with símismo.subTest(método='fast'): res = anlzr_sens(mod, método='fast', mapa_paráms=None, líms_paráms=líms_paráms, t_final=10, var_egr=['y'], tipo_egr="log") si = res['log']['y']['Si'] st_si = res['log']['y']['St-Si'] símismo.assertGreaterEqual(si['A']['g_d'], 0.01) símismo.assertTrue(si['A']['phi'] < 0.01 and st_si['A']['phi'] < 0.1) símismo.assertGreaterEqual(si['B']['phi'], 0.01) símismo.assertTrue(si['B']['g_d'] < 0.01 and st_si['B']['g_d'] < 0.1) símismo.assertTrue(si['Ficticia']['g_d'] < 0.01 and st_si['Ficticia']['g_d'] < 0.1) símismo.assertTrue(si['Ficticia']['phi'] < 0.01 and st_si['Ficticia']['phi'] < 0.1) else: raise NotImplementedError
def test_sens_promedio(símismo): líms_paráms = {'A': (0, 1), 'B': (2, 3)} mod = ModeloLinear() for m in métodos: if m == 'morris': with símismo.subTest(método='morris'): res = anlzr_sens(mod, método=m, mapa_paráms=None, líms_paráms=líms_paráms, t_final=5, var_egr=['A', 'B'], ops_método={ 'num_levels': 4, 'grid_jump': 2 }, tipo_egr="promedio") símismo.assertGreaterEqual( res['promedio']['A']['mu_star']['A'], 0.1) símismo.assertLessEqual( res['promedio']['A']['mu_star']['B'], 0.1) símismo.assertLessEqual( res['promedio']['A']['mu_star']['Ficticia'], 0.1) elif m == 'fast': with símismo.subTest(método='fast'): res = anlzr_sens(mod, método='fast', mapa_paráms=None, líms_paráms=líms_paráms, t_final=3, var_egr=['A', 'B'], tipo_egr="promedio") símismo.assertGreaterEqual(res['promedio']['A']['Si']['A'], 0.01) símismo.assertTrue( res['promedio']['A']['Si']['B'] < 0.01 and res['promedio']['A']['St-Si']['B'] < 0.1) símismo.assertTrue( res['promedio']['A']['Si']['Ficticia'] < 0.01 and res['promedio']['A']['St-Si']['Ficticia'] < 0.1) else: raise NotImplementedError
def test_sens_ocilación_aten(símismo): líms_paráms = { 'A': (0.01, 0.2), 'B': (0.7, 1), 'C': (0.6, 0.8), 'D': (1.1, 1.4) } mod = ModeloOcilación_aten() for m in métodos: if m == 'morris': with símismo.subTest(método='morris'): res = anlzr_sens(mod, método=m, mapa_paráms=None, líms_paráms=líms_paráms, t_final=10, var_egr=['y'], ops_método={ 'num_levels': 4, 'grid_jump': 2 }, tipo_egr="oscilación_aten") # b_params = {'g_d': params[0], 'amplitude': params[1], 'period': params[2], 'phi': params[3]} # should be more sensitive to B than A (B-rate of growth and decay, A Y-intercept) mu_star = res['oscilación_aten']['y']['mu_star'] símismo.assertGreaterEqual(mu_star['A']['g_d'], 0.1) símismo.assertLessEqual(mu_star['A']['period'], 0.1) símismo.assertLessEqual(mu_star['A']['phi'], 0.1) símismo.assertGreaterEqual(mu_star['B']['amplitude'], 0.1) símismo.assertLessEqual(mu_star['B']['period'], 0.1) símismo.assertLessEqual(mu_star['B']['phi'], 0.1) símismo.assertLessEqual(mu_star['Ficticia']['amplitude'], 0.1) símismo.assertLessEqual(mu_star['Ficticia']['period'], 0.1) símismo.assertLessEqual(mu_star['Ficticia']['phi'], 0.1) elif m == 'fast': with símismo.subTest(método='fast'): res = anlzr_sens(mod, método='fast', mapa_paráms=None, líms_paráms=líms_paráms, t_final=10, var_egr=['y'], tipo_egr="oscilación_aten") si = res['oscilación_aten']['y']['Si'] st_si = res['oscilación_aten']['y']['St-Si'] símismo.assertGreaterEqual(si['A']['g_d'], 0.01) símismo.assertTrue(si['A']['amplitude'] < 0.01 and st_si['A']['amplitude'] < 0.1) símismo.assertTrue(si['A']['period'] < 0.01 and st_si['A']['period'] < 0.1) símismo.assertGreaterEqual(si['B']['amplitude'], 0.01) símismo.assertTrue(si['B']['g_d'] < 0.01 and st_si['B']['g_d'] < 0.1) símismo.assertTrue(si['B']['period'] < 0.01 and st_si['B']['period'] < 0.1) símismo.assertGreaterEqual(si['C']['period'], 0.01) símismo.assertTrue(si['C']['g_d'] < 0.01 and st_si['C']['g_d'] < 0.1) símismo.assertTrue(si['C']['amplitude'] < 0.01 and st_si['C']['amplitude'] < 0.1) símismo.assertTrue(si['Ficticia']['period'] < 0.01 and st_si['Ficticia']['period'] < 0.1) símismo.assertTrue(si['Ficticia']['g_d'] < 0.01 and st_si['Ficticia']['g_d'] < 0.1) símismo.assertTrue( si['Ficticia']['amplitude'] < 0.01 and st_si['Ficticia']['amplitude'] < 0.1) else: raise NotImplementedError
def test_sens_logistic(símismo): líms_paráms = {'A': (3, 10), 'B': (0.5, 2), 'C': (3, 5)} mod = ModeloLogistic() for m in métodos: if m == 'morris': with símismo.subTest(método='morris'): res = anlzr_sens(mod, método=m, mapa_paráms=None, líms_paráms=líms_paráms, t_final=5, var_egr=['y'], ops_método={ 'num_levels': 4, 'grid_jump': 2 }, tipo_egr="logístico") mu_star = res['logístico']['y']['mu_star'] símismo.assertGreaterEqual(mu_star['A']['maxi_val'], 0.1) símismo.assertLessEqual(mu_star['A']['g_d'], 0.1) símismo.assertLessEqual(mu_star['A']['mid_point'], 0.1) símismo.assertGreaterEqual(mu_star['B']['g_d'], 0.1) símismo.assertLessEqual(mu_star['B']['maxi_val'], 0.1) símismo.assertLessEqual(mu_star['B']['mid_point'], 0.1) símismo.assertLessEqual(mu_star['Ficticia']['maxi_val'], 0.1) símismo.assertLessEqual(mu_star['Ficticia']['g_d'], 0.1) símismo.assertLessEqual(mu_star['Ficticia']['mid_point'], 0.1) elif m == 'fast': with símismo.subTest(método='fast'): res = anlzr_sens(mod, método='fast', mapa_paráms=None, líms_paráms=líms_paráms, t_final=5, var_egr=['y'], tipo_egr="logístico") si = res['logístico']['y']['Si'] st_si = res['logístico']['y']['St-Si'] símismo.assertGreaterEqual(si['A']['maxi_val'], 0.01) símismo.assertTrue(si['A']['g_d'] < 0.01 and st_si['A']['g_d'] < 0.1) símismo.assertTrue(si['A']['mid_point'] < 0.01 and st_si['A']['mid_point'] < 0.1) símismo.assertGreaterEqual(si['B']['g_d'], 0.01) símismo.assertTrue(si['B']['maxi_val'] < 0.01 and st_si['B']['maxi_val'] < 0.1) símismo.assertTrue(si['B']['mid_point'] < 0.01 and st_si['B']['mid_point'] < 0.1) símismo.assertGreaterEqual(si['C']['mid_point'], 0.01) símismo.assertTrue(si['C']['g_d'] < 0.01 and st_si['C']['g_d'] < 0.1) símismo.assertTrue(si['C']['maxi_val'] < 0.01 and st_si['C']['maxi_val'] < 0.1) símismo.assertTrue(si['Ficticia']['maxi_val'] < 0.01 and st_si['Ficticia']['maxi_val'] < 0.1) símismo.assertTrue(si['Ficticia']['g_d'] < 0.01 and st_si['Ficticia']['g_d'] < 0.1) símismo.assertTrue( si['Ficticia']['mid_point'] < 0.01 and st_si['Ficticia']['mid_point'] < 0.1) else: raise NotImplementedError