o
    C$j/                     @   s   d Z ddlZddlZddlZddlmZmZmZ e	e
j ZejZed Zed Zdd Zdded	ed
efddZdddZded
efddZddeded
efddZdddZze  W dS  eyj   Y dS w )u  
config.py — Carrega configuracao de config.yaml e variables.yaml

Os arquivos YAML ficam na raiz do projeto (um nivel acima de scripts/).
Para usar arquivos alternativos, chame init_config() antes de importar
qualquer outro modulo do projeto:

    import config
    config.init_config("/caminho/para/meu_config.yaml",
                       "/caminho/para/minhas_variaveis.yaml")

Ordem de busca dos arquivos padrao:
  1. Variavel de ambiente CONFIG_FILE / VARIABLES_FILE
  2. <PROJECT_ROOT>/config.yaml e <PROJECT_ROOT>/variables.yaml
    N)datetime	timedeltadatezconfig.yamlzvariables.yamlc                 C   s   zddl }W n ty   tdw t| } |  s#td|  dt| dd}||W  d   S 1 s9w   Y  dS )zCCarrega um arquivo YAML; lanca FileNotFoundError com mensagem util.r   NzYPyYAML e necessario para ler os arquivos de configuracao.
Instale com: pip install pyyamlz(Arquivo de configuracao nao encontrado: z7
Crie o arquivo ou passe --config / --vars-file no CLI.zutf-8)encoding)yamlImportErrorpathlibPathexistsFileNotFoundErroropenZ	safe_load)pathr   f r   =/dados/sismom/SisMOM/sismom_fig/Figuras_Eta/scripts/config.py
_load_yaml"   s   

$r   	run_inputref_datereturnc                 C   sl   t |  } t| dkr|  r| S |  r.t| dkr.| d}|p&t }|d| S td|  d)u^  
    Resolve o identificador da rodada para o formato completo YYYYMMDDHH.

    Formatos aceitos
    ----------------
    "2026060600"  -> "2026060600"   (YYYYMMDDHH, 10 digitos)
    "00"          -> hoje + "00"    (HH, 2 digitos — usa data do sistema ou ref_date)
    "0"           -> hoje + "00"    (H, 1 digito  — completado com zero)
    "12"          -> hoje + "12"

    Parameters
    ----------
    run_input : tag completo ou apenas a hora (HH)
    ref_date  : data de referencia (padrao: hoje, datetime.date.today())

    Raises
    ------
    ValueError se o formato nao for reconhecido.
    
      z%Y%m%dzFormato de rodada invalido: 'z8'.
Use YYYYMMDDHH (ex: 2026060600) ou HH (ex: 00 ou 12).)	strstriplenisdigitzfill_datetodaystrftime
ValueError)r   r   hourr   r   r   r   resolve_run_tag9   s   

r!   c                 C   s  | pt jdt} |pt jdt}t| at|at	t}t	tdg }|d }|p<t jddp<t
|dd}|sCtdt|atttd	d
 ttd
d ttdd ttdd at|d at|d add ttD a|d }t|d at|d at|d at|d at|d at|d attttd t  tattttd t  ta|d }t|d a t
|d a!t
|d "dta#t
|d a$|d i }	|	d!d}
t jd"|
a%t&|	d#d$a't&|	d%d&a(t&|	d'd(a)t&|	d)d*a*t+ta,|d+i }t|d,d-a-t
|d.d/a.d0d |D a/d1d |D a0d2d3 |D a1d4d3 |D a2d5d3 t3|D a4d6d3 |D a5|d7i }t6|d8g d9a7t8t7a9d	S ):a*  
    Inicializa (ou reinicializa) todas as constantes a partir dos arquivos YAML.

    Chamado automaticamente na importacao do modulo com os arquivos padrao.
    Pode ser chamado novamente pelo main.py quando o usuario passa --config
    ou --vars-file, ANTES de importar reader, export_cog etc.

    Parameters
    ----------
    config_file : str | Path | None
        Caminho para config.yaml (None = usa padrao ou env CONFIG_FILE)
    vars_file   : str | Path | None
        Caminho para variables.yaml (None = usa padrao ou env VARIABLES_FILE)
    ZCONFIG_FILEZVARIABLES_FILE	variablesrunRUN_TAG tagzTag da rodada nao definido.
Use --run YYYYMMDDHH ou --run HH (ex: --run 00 usa hoje 00Z),
ou defina a variavel de ambiente RUN_TAG.N         r   ZntimesZdt_hoursc                 S   s   g | ]}t t|t d  qS ))Zhours)T0r   DT_HOURS).0ir   r   r   
<listcomp>   s    zinit_config.<locals>.<listcomp>ZgridZnxnyZlon0Zlat0ZdlonZdlat   ZmodelZundefZdtypeZfile_prefixz	{run_tag}Zfile_suffixpaths	data_baseSISMOM_DATA_BASE
output_dirzfiguras/campos	accum_dirzfiguras/acumuladoscog_dircoglog_dirZlogsZfigureZdpix   extZpngc                 S   s"   g | ]}|d  |d |d fqS )namedescriptionunitsr   r,   vr   r   r   r.      s   " c                 S   s   g | ]}|d  qS r;   r   r>   r   r   r   r.      s    c                 S      i | ]	}|d  |d qS )r;   r<   r   r>   r   r   r   
<dictcomp>       zinit_config.<locals>.<dictcomp>c                 S   rA   )r;   r=   r   r>   r   r   r   rB      rC   c                 S   s   i | ]	\}}|d  |qS r@   r   )r,   r-   r?   r   r   r   rB      rC   c                 S   s0   i | ]}|d  | dd| d| dfqS )r;   ZcmapZviridisZvminZvmaxgetr>   r   r   r   rB      s    "ZaccumulationZprecip_vars)ZPRECZPRCVZPRGE):osenvironrE   _DEFAULT_CONFIG_DEFAULT_VARIABLESr   r	   _CONFIG_FILE
_VARS_FILEr   r   r   r!   r$   r   intr*   NTIMESr+   rangeZ
TIMESTAMPSZNXZNYfloatZLON0ZLAT0ZDLONZDLATnpZlinspaceZLONSZLATSZUNDEFZDTYPEreplaceFILE_PREFIXFILE_SUFFIXr3   _resolve
OUTPUT_DIR	ACCUM_DIRCOG_DIRLOG_DIRbuild_data_dirZDATA_DIRZDPIFIG_EXTZ	VARIABLES	VAR_NAMESZVAR_DESCZ	VAR_UNITS	enumerateZ	VAR_INDEXZCMAP_CONFIGlistPRECIP_VARSsetZ
PRECIP_SET)Zconfig_file	vars_filerun_tagZcfgZvars_rawr#   Zraw_taggmpZdata_base_yamlZfigZaccumr   r   r   init_config]   sv   

,re   
rel_or_absc                 C   s$   t | }t| r|S t| S )zIRetorna caminho absoluto: absoluto se comecar com /, relativo ao projeto.)r   r	   r   Zis_absolutePROJECT_ROOT)rf   rd   r   r   r   rT      s   
rT   r%   r#   basec                 C   sH   |pt jdd}|st dd}|rt j|| dddS ttd S )a  
    Constroi o caminho completo para os arquivos .bin de um run.

    Prioridade:
      1. Argumento `base` (CLI --data_base)
      2. Variavel de ambiente SISMOM_DATA_BASE
      3. Campo paths.data_base em config.yaml
      4. Diretorio local data/ do projeto

    Exemplos:
      build_data_dir("2026060400", "/dados/sismom/SisMOM/sismom_forecast")
      -> "/dados/sismom/SisMOM/sismom_forecast/2026060400/regional/eta/2D"
    r3   r%   ZregionaletaZ2Ddata)rF   rG   rE   globalsr   joinr   rg   )r#   rh   Z	effectiver   r   r   rY      s   rY   c                 C   s,   t | pt}t|dg }dd |D S )z
    Retorna a lista de nomes de variaveis com enabled=true no YAML.
    Util para filtrar quais variaveis processar por padrao.
    r"   c                 S   s    g | ]}| d dr|d qS )enabledTr;   rD   r>   r   r   r   r.      s     z enabled_vars.<locals>.<listcomp>)r   r	   rK   r   rE   )r`   Zvfrawr   r   r   enabled_vars   s   ro   )N)NNN)r%   )__doc__rF   r   ZnumpyrP   r   r   r   r   r	   __file__parentZresolveZSCRIPTS_DIRrg   rH   rI   r   r   r!   re   rT   rY   ro   r   r   r   r   r   <module>   s(    
$m

