示例#1
0
    def test_conexión_horizontal(símismo):
        """
        Comprobar que la conexión de variables se haga correctamente con 3 submodelos conectados directamente
        en el mismo :class:`SuperConectado`.
        """

        # Crear los 3 modelos
        bf = EnvolturaBF(arch_bf, nombre='bf')
        tercio = ModeloPySD(arch_mod_vacío, nombre='tercio')
        mds = ModeloPySD(arch_mds, nombre='mds')

        # El Conectado
        conectado = SuperConectado()
        for m in [bf, mds, tercio]:
            conectado.agregar_modelo(m)

        # Conectar variables entre dos de los modelos por el intermediario del tercero.
        conectado.conectar_vars(var_fuente='Aleatorio',
                                modelo_fuente='bf',
                                var_recip='Aleatorio',
                                modelo_recip='tercio')
        conectado.conectar_vars(var_fuente='Aleatorio',
                                modelo_fuente='tercio',
                                var_recip='Aleatorio',
                                modelo_recip='mds')

        # Simular
        res = conectado.simular(100,
                                vars_interés=['bf_Aleatorio', 'mds_Aleatorio'])

        # Comprobar que los resultados son iguales.
        npt.assert_allclose(res['bf_Aleatorio'],
                            res['mds_Aleatorio'],
                            rtol=0.001)
示例#2
0
    def setUpClass(cls):
        """
        Preparar los modelos genéricos necesarios para las pruebas.
        """

        # Generar las instancias de los modelos individuales y conectados
        cls.mods_mds = generar_modelos_prueba()
        cls.mod_bf = EnvolturaBF(arch_bf)

        cls.modelos = {ll: Conectado()
                       for ll in cls.mods_mds}  # type: dict[str, Conectado]

        # Agregar traducciones necesarias.
        trads.agregar_trad('year', 'año', leng_trad='es', leng_orig='en')
        trads.agregar_trad('month', 'mes', leng_trad='es', leng_orig='en')

        # Conectar los modelos
        for mds, mod_con in cls.modelos.items():
            mod_con.estab_bf(cls.mod_bf)
            mod_con.estab_mds(cls.mods_mds[mds])

            mod_con.conectar(var_mds='Lluvia',
                             var_bf='Lluvia',
                             mds_fuente=False)
            mod_con.conectar(var_mds='Lago', var_bf='Lago', mds_fuente=True)
            mod_con.conectar(var_mds='Aleatorio',
                             var_bf='Aleatorio',
                             mds_fuente=False)
示例#3
0
    def test_conexión_jerárquica(símismo):
        """
        Comprobar que 3 modelos conectados de manera jerárquica a través de 2 :class:`SuperConectados` funcione
        bien. No es la manera más fácil o directa de conectar 3+ modelos, pero es importante que pueda funcionar
        esta manera también.
        """

        # Los tres modelos
        bf = EnvolturaBF(arch_bf, nombre='bf')
        tercio = ModeloPySD(arch_mod_vacío, nombre='tercio')
        mds = ModeloPySD(arch_mds, nombre='mds')

        # El primer Conectado
        conectado_sub = SuperConectado(nombre='sub')
        conectado_sub.agregar_modelo(tercio)
        conectado_sub.agregar_modelo(mds)
        conectado_sub.conectar_vars(
            var_fuente='Aleatorio', modelo_fuente='tercio',
            var_recip='Aleatorio', modelo_recip='mds'
        )

        # El segundo Conectado
        conectado = SuperConectado()
        conectado.agregar_modelo(bf)
        conectado.agregar_modelo(conectado_sub)
        conectado.conectar_vars(
            var_fuente='Aleatorio', modelo_fuente='bf',
            var_recip='tercio_Aleatorio', modelo_recip='sub'
        )

        # Correr la simulación
        res = conectado.simular(100, vars_interés=['bf_Aleatorio', 'sub_mds_Aleatorio'])

        # Verificar que los resultados sean iguales.
        npt.assert_allclose(res['bf_Aleatorio'], res['sub_mds_Aleatorio'], rtol=0.001)
示例#4
0
    def test_nombre_inválido(símismo):
        """
        Asegurarse que nombres inválidos para modelos se corrijan automáticamente.
        """

        mod = EnvolturaBF(arch_bf, nombre='Nombre_inválido')

        símismo.assertNotIn('_', mod.nombre)
示例#5
0
    def setUpClass(cls):
        # Generar la Envoltura BF
        cls.envltmodelo = EnvolturaBF(arch_bf)

        # Información sobre los variables del modelo de prueba
        cls.info_vars = {
            'Lluvia': {'unidades': 'm3/año', 'líms': (0, None), 'val_inic': 2.3},
            'Lago': {'unidades': 'm3', 'líms': (0, None)},
            'Escala': {'unidades': '', 'líms': (0, None)},
            'Vacío': {'unidades': 'm3/año', 'líms': (0, None), 'val_inic': 15}
        }  # type: dict[str, dict]

        # Iniciar variables
        vals_inic = {vr: d['val_inic'] for vr, d in cls.info_vars.items() if 'val_inic' in d}

        # Correr el modelo para 200 pasos, guardando los egresos del variable "Lago"
        cls.envltmodelo.simular(t_final=200, vals_inic=vals_inic, vars_interés=['Escala', 'Lluvia'])
示例#6
0
    def estab_bf(símismo, bf):
        """
        Establece el modelo biofísico (:class:`~tinamit.BF.EnvolturasBF`).

        :param bf: El fuente con la clase del modelo biofísico. **Debe** ser un fuente de Python.
        :type bf: str | EnvolturaBF

        """

        # Creamos una instancia de la Envoltura BF con este modelo.
        if isinstance(bf, str) or isinstance(bf, ModeloBF) or callable(bf):
            modelo_bf = EnvolturaBF(modelo=bf)
        elif isinstance(bf, EnvolturaBF):
            modelo_bf = bf
        else:
            raise TypeError(_('Debes dar o un modelo BF, o la dirección hacia el fuente de uno.'))

        # Conectamos el modelo biofísico.
        símismo.agregar_modelo(modelo=modelo_bf)

        # Y guardamos la referencia rápida.
        símismo.bf = modelo_bf
示例#7
0
 def test_crear_desde_modelobf(símismo):
     # Comprobar creación de la envoltura directamente desde un modelo BF.
     modelo_bf = ModeloPrueba()
     envlt = EnvolturaBF(modelo_bf)
     símismo.assertIsInstance(envlt, EnvolturaBF)
示例#8
0
 def test_crear_desde_clase(símismo):
     # Comprobar creación de la envoltura desde una clase de modelo BF.
     envlt = EnvolturaBF(ModeloPrueba)
     símismo.assertIsInstance(envlt, EnvolturaBF)
示例#9
0
 def test_crear_desde_archivo(símismo):
     # Comprobar creación de la envoltura desde un fuente que contiene un modelo BF.
     envlt = EnvolturaBF(arch_bf)
     símismo.assertIsInstance(envlt, EnvolturaBF)
示例#10
0
 def setUpClass(cls):
     cls.mod = EnvolturaBF(arch_bf_flexible)