Пример #1
0
    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
Пример #2
0
    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
Пример #3
0
    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
Пример #4
0
    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
Пример #5
0
    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
Пример #6
0
    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
Пример #7
0
    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