Skip to content

Commit

Permalink
Arreglos
Browse files Browse the repository at this point in the history
  • Loading branch information
julienmalard committed Jun 10, 2020
1 parent ca18bbc commit ae892df
Show file tree
Hide file tree
Showing 7 changed files with 49 additions and 31 deletions.
13 changes: 10 additions & 3 deletions tinamit/calibs/valid.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,10 +69,10 @@ def validar(símismo, t, datos, paráms=None, funcs=None, vars_extern=None, corr
vals_extern = datos[list({_resolver_var(v, corresp_vars) for v in vars_extern}) + [_('fecha')]]

# Para hacer: inter y extrapolación como opción en todas simulaciones, y extrapolación con función según líms
if not pd.to_datetime(t.f_inic) in vals_extern[_('fecha')]:
if not np.datetime64(t.f_inic) in vals_extern[_('fecha')].values:
vals_extern = vals_extern.append({_('fecha'): pd.to_datetime(t.f_inic)}, ignore_index=True)
vals_extern = vals_extern.sort_values(_('fecha'))
vals_extern = vals_extern.interpolate().bfill()
vals_extern = vals_extern.sort_values(_('fecha'))
vals_extern = vals_extern.interpolate(limit_area='inside').bfill()

vals_extern = vals_extern.set_index(_('fecha'))
extern = {vr: vals_extern[_resolver_var(vr, corresp_vars)].dropna() for vr in vars_extern}
Expand All @@ -81,7 +81,14 @@ def validar(símismo, t, datos, paráms=None, funcs=None, vars_extern=None, corr
res = símismo.mod.simular(t=t, extern={**paráms, **extern}, vars_interés=vars_valid, clima=clima)

vals_calib = datos[list({_resolver_var(v, corresp_vars) for v in vars_valid}) + [_('fecha')]]
# Para hacer: inter y extrapolación como opción en todas simulaciones, y extrapolación con función según líms
if not np.datetime64(t.f_inic) in vals_calib[_('fecha')].values:
vals_calib = vals_calib.append({_('fecha'): pd.to_datetime(t.f_inic)}, ignore_index=True)
vals_calib = vals_calib.sort_values(_('fecha'))
vals_calib_interp = vals_calib.interpolate(limit_area='inside').set_index(_('fecha'))
vals_calib = vals_calib.set_index(_('fecha'))
vals_calib.loc[t.f_inic] = vals_calib_interp.loc[t.f_inic]

# Para hacer: si implementamos Dataset en ResultadosSimul este se puede combinar en una línea
valid = {}
for r in res:
Expand Down
8 changes: 7 additions & 1 deletion tinamit/datos/bd.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import os
from warnings import warn as avisar

import numpy as np
import pandas as pd
Expand Down Expand Up @@ -131,7 +132,12 @@ def _gen_fuente(fnt, nombre=None, lugares=None, fechas=None):
def _interpolar_xr(m, fechas=None):
if fechas is not None:
raise ValueError
return m.unstack().interpolate(limit_area='inside').stack()
interpolado = m.unstack().interpolate(limit_area='inside').stack()
if len(interpolado.dropna()):
return interpolado
avisar('Extrapolando por falta de datos.')
return m.unstack().interpolate().stack()

if m.sizes[_('fecha')] > 1:

m = m.interpolate_na(_('fecha')).fillna(m)
Expand Down
35 changes: 18 additions & 17 deletions tinamit/geog/mapa.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,18 @@
import os

import matplotlib.pyplot as dib
import numpy as np
import shapefile as sf
from matplotlib import colors, cm
from matplotlib.axes import Axes
from matplotlib.backends.backend_agg import FigureCanvasAgg as TelaFigura
from matplotlib.figure import Figure as Figura
from matplotlib.axes import Axes
import matplotlib.pyplot as dib
from tinamit.config import _
from tinamit.cositas import detectar_codif

from tinamit.config import _
from ..mod import ResultadosSimul, ResultadosGrupo


def dibujar_mapa(formas, archivo=None, título=None, fig=None):
def dibujar_mapa(formas, archivo=None, título=None, fig=None, args_color=None):
"""
Dibuja un mapa.
Expand Down Expand Up @@ -43,7 +42,7 @@ def dibujar_mapa(formas, archivo=None, título=None, fig=None):
ejes.set_aspect('equal')

for frm in formas:
frm.dibujar(ejes, fig)
frm.dibujar(ejes, fig, args_color=args_color)
if título is not None:
ejes.set_title(título)
if archivo:
Expand Down Expand Up @@ -124,13 +123,14 @@ class Forma(object):
"""
Clase pariente para todas las formas que se pueden dibujar.
"""
def __init__(símismo, archivo, llenar, alpha):

def __init__(símismo, archivo, llenar, alpha, **argsll):
# codif = detectar_codif(os.path.splitext(archivo)[0] + '.dbf')
símismo.forma = sf.Reader(archivo) #, encoding=codif)
símismo.forma = sf.Reader(archivo, **argsll) # , encoding=codif)
símismo.llenar = llenar
símismo.alpha = alpha

def dibujar(símismo, ejes, fig):
def dibujar(símismo, ejes, fig, args_color=None):
"""
Agrega la forma a la figura.
Expand Down Expand Up @@ -179,7 +179,7 @@ def __init__(símismo, archivo, color, llenar, alpha):
símismo.color = color
super().__init__(archivo, llenar=llenar, alpha=alpha)

def dibujar(símismo, ejes, fig):
def dibujar(símismo, ejes, fig, args_color=None):
símismo._dibujar_frm(ejes, color=símismo.color)


Expand All @@ -188,7 +188,7 @@ class FormaDinámica(Forma):
Forma cuyos colores se asignan según valores numéricos.
"""

def __init__(símismo, archivo, escala_colores=None, llenar=True, alpha=1):
def __init__(símismo, archivo, escala_colores=None, llenar=True, alpha=1, **argsll):
"""
Parameters
Expand All @@ -203,7 +203,7 @@ def __init__(símismo, archivo, escala_colores=None, llenar=True, alpha=1):
alpha: float or int
La opacidad del interior de la forma. Solamente aplica si ``llenar`` est ``False``.
"""
super().__init__(archivo, llenar=llenar, alpha=alpha)
super().__init__(archivo, llenar=llenar, alpha=alpha, **argsll)

símismo.escala_colores = símismo._resolver_colores(escala_colores)
símismo.valores = np.full(len(símismo.forma.shapes()), np.nan)
Expand Down Expand Up @@ -237,7 +237,8 @@ def estab_valores(símismo, valores, escala_valores=None, unidades=None):

símismo.escala = escala_valores

def dibujar(símismo, ejes, fig):
def dibujar(símismo, ejes, fig, args_color=None):
args_color = args_color or {}
vals_norm = (símismo.valores - símismo.escala[0]) / (símismo.escala[1] - símismo.escala[0])

d_clrs = _gen_d_mapacolores(colores=símismo.escala_colores)
Expand All @@ -253,9 +254,9 @@ def dibujar(símismo, ejes, fig):
símismo._dibujar_frm(ejes=ejes, color=v_cols)

if símismo.unidades is not None:
fig.colorbar(cpick, label=símismo.unidades)
fig.colorbar(cpick, label=símismo.unidades, **args_color)
else:
fig.colorbar(cpick)
fig.colorbar(cpick, extend='both')

@staticmethod
def _resolver_colores(colores):
Expand Down Expand Up @@ -322,7 +323,7 @@ class FormaDinámicaNombrada(FormaDinámica):
valores.
"""

def __init__(símismo, archivo, col_id, escala_colores=None, llenar=True, alpha=1):
def __init__(símismo, archivo, col_id, escala_colores=None, llenar=True, alpha=1, **argsll):
"""
Parameters
Expand All @@ -339,7 +340,7 @@ def __init__(símismo, archivo, col_id, escala_colores=None, llenar=True, alpha=
alpha: float or int
La opacidad del interior de la forma. Solamente aplica si ``llenar`` est ``False``.
"""
super().__init__(archivo, escala_colores, llenar, alpha)
super().__init__(archivo, escala_colores, llenar, alpha, **argsll)
símismo.ids = [str(x) for x in símismo._extraer_col(col_id)]

def _llenar_valores(símismo, valores):
Expand Down
4 changes: 3 additions & 1 deletion tinamit/mod/clima.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import xarray as xr
from tinamit.config import _
from tinamit.tiempo.tiempo import TiempoCalendario
from تقدیر.ذریعہ import ذریعہ
from تقدیر.مقام import مقام


Expand Down Expand Up @@ -59,7 +60,8 @@ def inicializar(símismo, t):

def _obt_datos_de_taqdir(símismo, f_inic, f_final):
return símismo._lugar.کوائف_پانا(
f_inic, f_final, ذرائع=(símismo.fuentes,), خاکے=símismo.escenario
f_inic, f_final, ذرائع=(símismo.fuentes,) if isinstance(símismo.fuentes, ذریعہ) else símismo.fuentes,
خاکے=símismo.escenario
).روزانہ()

def obt_datos(símismo, f_inic, f_final=None):
Expand Down
6 changes: 4 additions & 2 deletions tinamit/mod/modelo.py
Original file line number Diff line number Diff line change
Expand Up @@ -213,11 +213,13 @@ def incrementar(símismo, rebanada):
"""
if símismo.corrida.extern:
símismo.cambiar_vals(símismo.corrida.obt_extern_act())
símismo.cambiar_vals({
vr: vl for vr, vl in símismo.corrida.obt_extern_act().items() if vr in símismo.variables
})

if símismo.corrida.clima and símismo.vars_clima:
t = símismo.corrida.t
símismo._act_vals_clima(t.fecha(), t.fecha_próxima() - 1 * t.fecha().freq)
símismo._act_vals_clima(t.fecha(), t.fecha_próxima() - ft.timedelta(days=1))

def cerrar(símismo):
"""
Expand Down
12 changes: 6 additions & 6 deletions tinamit/mod/res.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from matplotlib.backends.backend_agg import FigureCanvasAgg as TelaFigura
from matplotlib.figure import Figure as Figura
from tinamit.config import _
from tinamit.cositas import valid_nombre_arch, guardar_json
from tinamit.cositas import valid_nombre_arch, guardar_json, jsonificar

from .var import Variable

Expand Down Expand Up @@ -36,7 +36,7 @@ def actualizar(símismo):
for v in símismo:
v.actualizar()

def guardar(símismo, frmt='json', l_vars=None):
def guardar(símismo, frmt='json', l_vars=None, arch=None):
"""
Guarda los resultados en un archivo.
Expand All @@ -55,18 +55,18 @@ def guardar(símismo, frmt='json', l_vars=None):

if frmt[0] != '.':
frmt = '.' + frmt
arch = valid_nombre_arch(símismo.nombre + frmt)
arch = arch + frmt if arch else valid_nombre_arch(símismo.nombre + frmt)

if frmt == '.json':
contenido = símismo.a_dic()
guardar_json(contenido, arch=arch)
guardar_json(jsonificar(contenido), arch=arch)

elif frmt == '.csv':

with open(arch, 'w', encoding='UTF-8', newline='') as a:
escr = csv.writer(a)

escr.writerow([_('fecha')] + símismo.t)
escr.writerow([_('fecha')] + list(símismo.t.eje()))
for var in l_vars:
vals = símismo[var].values
if len(vals.shape) == 1:
Expand Down Expand Up @@ -141,7 +141,7 @@ def a_dic(símismo):
def interpolar(símismo, fechas):
eje_ant = símismo.vals[_('fecha')]
nuevas_fechas = fechas.values[~np.isin(fechas.values, eje_ant.values)]
vals = símismo.vals
vals = símismo.vals.copy(deep=True)
if nuevas_fechas.size:
vals = vals.reindex(fecha=np.concatenate((eje_ant.values, nuevas_fechas)))
vals = vals.sortby(_('fecha'))
Expand Down
2 changes: 1 addition & 1 deletion tinamit/tiempo/tiempo.py
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ def eje(símismo):
return eje
return pd.date_range(
símismo.f_inic, periods=símismo.n_pasos // símismo.guardar_cada + 1,
freq=str(paso) + _a_unid_pandas[símismo.unid_paso]
freq=str(paso) + _a_unid_pandas[símismo.unid_paso] + 'S'
)

def pasos_avanzados(símismo, unid):
Expand Down

0 comments on commit ae892df

Please sign in to comment.