def test_unidades_tiempo_mes_y_día(símismo): bf = ModeloPrueba(unid_tiempo='días') cnctd = Conectado(bf, símismo.mds) cnctd.conectar(var_mds='Aleatorio', var_bf='Escala', mds_fuente=False) res = cnctd.simular(10, vars_interés=['bf_Escala', 'mds_Aleatorio']) npt.assert_array_equal(res['mds_Aleatorio'], np.arange(11 * 30, step=30))
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)
def acción_bt_abrir(símismo): apli = símismo.apli archivo = diálogo.askopenfilename( filetypes=[(apli.Trads['ArchivoTinamit'], '*.tin')], title=apli.Trads['CargarModeloConectado']) if archivo: símismo.apli.ubic_archivo = archivo receta = cargar_json(archivo) if 'conv_tiempo' not in receta.keys( ) or 'conexiones' not in receta.keys(): Ctrl.CajaAviso(apli=símismo.apli, texto=apli.Trads['ArchivoCorrupto']) símismo.apli.Modelo = modelo = Conectado() símismo.apli.receta = receta try: modelo.estab_mds(receta['mds']) except KeyError: pass try: modelo.estab_bf(receta['bf']) except KeyError: pass l_mod = list(modelo.modelos) for conex in receta['conexiones']: mod_fuente = conex['modelo_fuente'] mod_recip = l_mod[(l_mod.index(mod_fuente) + 1) % 2] modelo.conectar_vars(dic_vars={ mod_fuente: conex['vars'][mod_fuente], mod_recip: conex['vars'][mod_recip] }, modelo_fuente=mod_fuente, conv=conex['conv']) if len(receta['conv_tiempo']): if receta['conv_tiempo'][l_mod[0]] == 1: modelo.estab_conv_unid_tiempo( mod_base=l_mod[0], conv=receta['conv_tiempo'][l_mod[1]]) else: modelo.estab_conv_unid_tiempo( mod_base=l_mod[1], conv=receta['conv_tiempo'][l_mod[0]]) receta['conexiones'] = modelo.conexiones receta['conv_tiempo'] = modelo.conv_tiempo símismo.pariente.ContCjEtapas.ir_a_caja(1) símismo.pariente.bloquear_cajas([2, 3, 4]) símismo.pariente.desbloquear_cajas([1])
def test_unidades_tiempo_definidas(símismo): bf = ModeloPrueba(unid_tiempo='દિવસ') cnctd = Conectado(bf, símismo.mds) cnctd.conectar(var_mds='Aleatorio', var_bf='Escala', mds_fuente=False) cnctd.estab_conv_tiempo(mod_base='mds', conv=30) res = cnctd.simular(10, vars_interés=['bf_Escala', 'mds_Aleatorio']) npt.assert_array_equal(res['mds_Aleatorio'], np.arange(11 * 30, step=30))
def acción_bt_nuevo(símismo): símismo.apli.Modelo = Conectado() símismo.apli.receta = { 'conexiones': símismo.apli.Modelo.conexiones, 'conv_tiempo': símismo.apli.Modelo.conv_tiempo } símismo.pariente.ContCjEtapas.ir_a_caja(1) símismo.pariente.desbloquear_cajas([1]) símismo.pariente.bloquear_cajas([2, 3, 4])
def test_generar_sin_submodelos(símismo): mds = generar_mds(archivo=arch_mds) bf = ModeloPrueba(unid_tiempo='mes') cnctd = Conectado() cnctd.estab_bf(bf) cnctd.estab_mds(mds) símismo.assertSetEqual(set(cnctd.modelos), {'mds', 'bf'})
def acción_bt_abrir(símismo): apli = símismo.apli archivo = diálogo.askopenfilename( filetypes=[(apli.Trads['ArchivoTinamit'], '*.tin')], title=apli.Trads['CargarModeloConectado']) if archivo: símismo.apli.ubic_archivo = archivo receta = cargar_json(archivo) if 'conv_tiempo' not in receta.keys( ) or 'conexiones' not in receta.keys(): Ctrl.CajaAviso(apli=símismo.apli, texto=apli.Trads['ArchivoCorrupto']) símismo.apli.Modelo = modelo = Conectado() símismo.apli.receta = receta try: modelo.estab_mds(receta['mds']) except KeyError: pass try: modelo.estab_bf(receta['bf']) except KeyError: pass for conex in receta['conexiones']: modelo.conectar_vars(**conex) if len(receta['conv_tiempo']): modelo.conv_tiempo_mods = receta['conv_tiempo'] receta['conexiones'] = modelo.conexiones receta['conv_tiempo'] = modelo.conv_tiempo_mods símismo.pariente.ContCjEtapas.ir_a_caja(1) símismo.pariente.bloquear_cajas([2, 3, 4]) símismo.pariente.desbloquear_cajas([1])
def __init__(símismo, pariente): tk.Frame.__init__(símismo, pariente) pariente.title('Tinamit') pariente.geometry('%ix%i' % (Fm.ancho_ventana, Fm.altura_ventana)) pariente.configure(background=Fm.col_fondo) # pariente.minsize(width=Fm.ancho_ventana, height=Fm.altura_ventana) símismo.Modelo = Conectado() símismo.DicLeng = Trad.Diccionario() símismo.Trads = símismo.DicLeng.trads_act símismo.receta = {'conexiones': símismo.Modelo.conexiones, 'conv_tiempo': símismo.Modelo.conv_tiempo_mods} símismo.ubic_archivo = None símismo.CajaInic = Cj.CajaInic(símismo) símismo.CajaCentral = Cj.CajaCentral(símismo) símismo.CajaLenguas = Cj.CajaLeng(símismo) símismo.CajaCentral.lift() símismo.CajaInic.lift() símismo.pack()
for ir in ops['Policy Irrigation improvement']: run_name = 'TC {}, Fw {}, CL {}, RW {}, II {}'.format( cp, fw, cl, rw, ir ) runs_complex[run_name] = { 'Capacity per tubewell': cp, 'Fw': fw, 'Policy Canal lining': cl, 'Policy RH': rw, 'Policy Irrigation improvement': ir } # 3. Now create the model # Create a coupled model instance modelo = Conectado() # Establish SDM and Biofisical model paths. The Biofisical model path must point to the Python wrapper for the model modelo.estab_mds(os.path.join(os.path.split(__file__)[0], 'Vensim', 'Tinamit_Rechna.vpm')) modelo.estab_bf(Envoltura) modelo.estab_conv_unid_tiempo(unid='season', unid_ref='mes', factor=6) # Couple models(Change variable names as needed) modelo.conectar(var_mds='Soil salinity Tinamit CropA', mds_fuente=False, var_bf="CrA - Root zone salinity crop A") modelo.conectar(var_mds='Soil salinity Tinamit CropB', mds_fuente=False, var_bf="CrB - Root zone salinity crop B") modelo.conectar(var_mds='Area fraction Tinamit CropA', mds_fuente=False, var_bf="Area A - Seasonal fraction area crop A") modelo.conectar(var_mds='Area fraction Tinamit CropB', mds_fuente=False, var_bf="Area B - Seasonal fraction area crop B") modelo.conectar(var_mds='Watertable depth Tinamit', mds_fuente=False, var_bf="Dw - Groundwater depth") modelo.conectar(var_mds='ECdw Tinamit', mds_fuente=False, var_bf='Cqf - Aquifer salinity')
import os from tinamit.Conectado import Conectado modelo = Conectado() directorio = os.path.dirname(__file__) modelo.estab_mds(os.path.join(directorio, "Prueba dll.mdl")) modelo.estab_bf(os.path.join(directorio, 'Prueba bf.py')) modelo.conectar(var_mds='Lluvia', var_bf='Lluvia', mds_fuente=False) modelo.conectar(var_mds='Bosques', var_bf='Bosques', mds_fuente=True) res = modelo.simular(paso=1, t_final=100, nombre_corrida='Corrida_Tinamit') print(res)
def run_model(name, switches): # Create a coupled model instance modelo = Conectado() # Establish SDM and Biofisical model paths. The Biofisical model path must point to the Python wrapper for the model modelo.estab_bf(os.path.join(os.path.split(__file__)[0], 'SAHYSMOD.py')) modelo.estab_mds( os.path.join(os.path.split(__file__)[0], 'Tinamit_sub_v2.vpm')) # Set appropriate switches for policy analysis modelo.mds.inic_vals_vars(switches) # Couple models(Change variable names as needed) modelo.conectar( var_mds='Soil salinity Tinamit CropA', mds_fuente=False, var_bf="Cr4 - Fully rotated land irrigated root zone salinity") modelo.conectar( var_mds='Soil salinity Tinamit CropB', mds_fuente=False, var_bf="Cr4 - Fully rotated land irrigated root zone salinity") modelo.conectar(var_mds='Watertable depth Tinamit', mds_fuente=False, var_bf="Dw - Groundwater depth") modelo.conectar(var_mds='ECdw Tinamit', mds_fuente=False, var_bf='Cqf - Aquifer salinity') modelo.conectar(var_mds='Lc', mds_fuente=True, var_bf='Lc - Canal percolation') modelo.conectar(var_mds='IaAS1', mds_fuente=True, var_bf='IaA - Crop A field irrigation') modelo.conectar(var_mds='IaBS1', mds_fuente=True, var_bf='IaB - Crop B field irrigation') modelo.conectar(var_mds='Gw', mds_fuente=True, var_bf='Gw - Groundwater extraction') modelo.conectar(var_mds='Irrigation efficiency', mds_fuente=True, var_bf='FsA - Water storage efficiency crop A') modelo.conectar(var_mds='Fw', mds_fuente=True, var_bf='Fw - Fraction well water to irrigation') # Simulate the coupled model modelo.simular( paso=1, t_final=240, nombre_corrida=name) # time step and final time are in months