Ë
    §Á*j8@  ã                   ó  — d Z ddlZddlZddlZddlmZmZmZ  ej                  e
«      j                  j                  «       Zej                  Zedz  Zedz  Zd„ Zd#deded	efd
„Zdadadadag adadadadadadag ag a g a!g a"da#da$da%da&da'da(da)da*da+da,da-da.da/da0da1da2da3da4da5da6da7g a8g a9i a:i a;i a<i a=i a>i a?i a@daAdaBdaCg aD eE«       aFi aGdaHdaIded	efd„ZJd$d„ZKd„ ZLdeded	efd „ZMd%ded!ed	efd"„ZN	  eK«        y# eO$ r Y yw xY 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                 ó  — 	 ddl }t        j                  | «      } | j	                  «       st        d| › d�«      ‚t        | d¬«      5 }|j                  |«      cddd«       S # t        $ r t        d«      ‚w xY w# 1 sw Y   yxY w)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ÚopenÚ	safe_load)Úpathr   Úfs      úB/pesq/dados/sismom/SisMOM/sismom_fig/Figuras_Eta/scripts/config.pyÚ
_load_yamlr   "   s‘   € ð
Ûô �<‰<˜Ó€DØ�;‰;Œ=ÜØ6°t°fð =Eð Fó
ð 	
ô 
ˆd˜WÕ	%¨Ø�~‰~˜aÓ ÷ 
&Ñ	%øô ò 
Üð.ó
ð 	
ð
ú÷ 
&Ð	%ús   ‚A" ÁA:Á"A7Á:BÚ	run_inputÚref_dateÚreturnc                 óH  — t        | «      j                  «       } t        | «      dk(  r| j                  «       r| S | j                  «       rKt        | «      dk  r=| j	                  d«      }|xs t        j                  «       }|j                  d«      |z   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    s       r   Úresolve_run_tagr$   9   sœ   € ô( �I“×$Ñ$Ó&€Iä
ˆ9ƒ~˜Ò 	× 1Ñ 1Ô 3ØÐà×ÑÔœs 9›~°Ò2Ø—?‘? 1Ó%ˆØÒ,œuŸ{™{›}ˆØ�~‰~˜hÓ'¨$Ñ.Ð.ä
Ø
'¨	 {ð 3@ð 	Aóð ó    Ú é   ç        g¸…ëQ¸ž?Fg@Œµx¯Dz>f4z.binz%Y%m%d%HÚsaidaÚlogséx   ÚpngÚDEFLATEr   é   Útemplatec                 ó†   — | j                  dd«      j                  dd«      j                  dd«      j                  dd«      S )	a  Converte placeholders {yyyy}{mm}{dd}{hh} para formato strftime.

    Exemplos:
      {yyyy}{mm}{dd}{hh}  ->  %Y%m%d%H   (10 chars, padrao 2D)
      {yyyy}{dd}{hh}      ->  %Y%d%H     (8 chars, 3D sem mes)
      {yyyy}{mm}{dd}      ->  %Y%m%d     (8 chars, sem hora)
    ú{yyyy}z%Yú{mm}z%mú{dd}z%dú{hh}z%H)Úreplace)r/   s    r   Ú_template_to_strftimer6   u   s<   € ð ß‰W�X˜tÓ$ß‰W�V˜tÓ$ß‰W�V˜tÓ$ß‰W�V˜tÓ$ð	&r%   c                 ó´  — | xs$ t         j                  j                  dt        «      } |xs$ t         j                  j                  dt        «      }t        j                  | «      at        j                  |«      at        t        «      }t        t        «      j                  dg «      }|d   }|xs= t         j                  j                  dd«      xs t        |j                  dd«      «      }|st        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t'        t"        «      D �cg c]  }t         t)        |t$        z  ¬«      z   ‘Œ c}a|d   }t        |d   «      at        |d   «      at1        |d   «      at1        |d   «      at1        |d   «      a|j                  d«      xs g }	|j                  d«      xs g }
|	D �cg c]  }t1        |«      ‘Œ c}a|
D �cg c]  }t1        |«      ‘Œ c}at=        t8        «      at=        t:        «      a t>        ret.        dkD  r0t1        tC        t8        d   t8        d   z
  t.        dz
  z  d«      «      nda"tG        jH                  t8        tF        jJ                  ¬«      a&nRt1        |j                  d«      xs d«      a"tG        jN                  t4        t4        t.        dz
  tD        z  z   t.        «      a&t@        r*tG        jH                  t:        tF        jJ                  ¬«      a(n4tG        jN                  t2        t2        t,        dz
  t6        z  z   t,        «      a(|d   }t1        |d    «      a)t        |d!   «      a*t        |d"   «      jW                  d#t        «      a,t        |d$   «      a-t        |j                  d%d&«      «      }t]        |«      a/t=        |j                  d'd(«      «      a0t=        |j                  d)d(«      «      a1t=        |j                  d*d(«      «      a2|d+   }t        |j                  d,d«      «      xs  t         j                  j                  d-d«      a3t        |j                  d.d«      «      a4th        rtk        th        t        «      nda6t        |j                  d/d0«      «      a7t        |j                  d1d2«      «      a8|j                  d3i «      }t        |j                  d4d5«      «      a9t        |j                  d6d7«      «      a:|j                  d8i «      }t        |j                  d9d:«      «      a;t        |j                  d;d«      «      a<t        |j                  d<d=«      «      a=t        |j                  d>d?«      «      a>t=        |j                  d@d(«      «      a?t=        |j                  dAd(«      «      a@|aAt‚        D �cg c]  }|dB   ‘Œ	 c}aBt‚        D �ci c]  }|dB   |j                  dC|dB   «      “Œ c}aCt‚        D �ci c]  }|dB   |j                  dDd«      “Œ c}aDd}i aEt‚        D ]:  }|tŠ        |dB   <   |t�        t        |j                  dEd«      xs d«      d«      z  }Œ< |aGt‚        D �ci c]%  }|dB   t        |j                  dEd«      xs d«      “Œ' c}aHt‚        D �ci c],  }|dB   t        |j                  dEd«      xs d«      dkD  rdFnd=“Œ. c}aIt‚        D �ci c]!  }|dB   t•        |j                  dGg «      «      “Œ# c}aKt‚        D �ci c]!  }|dB   t•        |j                  dHg «      «      “Œ# c}aLt‚        D �cg c]  }|j                  dId(«      sŒ|dB   ‘Œ c}aMt�        tš        «      aOt‚        D �ci c]M  }|dB   |j                  dJdK«      |j                  dLd	«      |j                  dMd	«      |j                  dId(«      dNœ“ŒO c}aPy	c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w )Oa*  
    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)
    ÚCONFIG_FILEÚVARIABLES_FILEÚ	variablesÚrunÚRUN_TAGr&   ÚtagzƒTag 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   ÚntimesÚdt_hours)ÚhoursÚgridÚnxÚnyÚlon0Úlat0ÚdlonÚ
lat_levelsÚ
lon_levelsr'   éÿÿÿÿr   r(   )ÚdtypeÚdlatÚmodelÚundefrM   Úfile_prefixú	{run_tag}Úfile_suffixÚfile_timestampz{yyyy}{mm}{dd}{hh}ÚfixedFÚyrevÚ
sequentialÚpathsÚ	data_baseÚSISMOM_DATA_BASEÚdata_dirÚ
output_dirr)   Úlog_dirr*   ÚfigureÚdpir+   Úextr,   ÚcogÚcompressr-   ÚzlevelÚ	predictorr   Ú	tile_sizer.   Ú
fill_undefÚlon_180ÚnameÚdescriptionÚunitsÚnlevé   ÚlevelsÚplot_levelsÚprecipÚcmapÚviridisÚvminÚvmax)rp   rr   rs   ro   )QÚosÚenvironÚgetÚ_DEFAULT_CONFIGÚ_DEFAULT_VARIABLESr
   r   Ú_CONFIG_FILEÚ
_VARS_FILEr   r   r"   r$   r<   r   ÚintÚT0ÚNTIMESÚDT_HOURSÚranger   Ú
TIMESTAMPSÚNXÚNYÚfloatÚLON0ÚLAT0ÚDLONÚ
LAT_LEVELSÚ
LON_LEVELSÚboolÚIRREGULAR_LATÚIRREGULAR_LONÚroundÚDLATÚnpÚarrayÚfloat64ÚLATSÚlinspaceÚLONSÚUNDEFÚDTYPEr5   ÚFILE_PREFIXÚFILE_SUFFIXr6   ÚFILE_TIMESTAMP_FMTÚ	FIXED_RUNÚYREVÚ
SEQUENTIALrZ   ÚDATA_DIR_TEMPLATEÚ_resolve_path_templateÚDATA_DIRÚ
OUTPUT_DIRÚLOG_DIRÚDPIÚFIG_EXTÚCOG_COMPRESSÚ
COG_ZLEVELÚCOG_PREDICTORÚCOG_TILE_SIZEÚCOG_FILL_UNDEFÚ
COG_LON180Ú	VARIABLESÚ	VAR_NAMESÚVAR_DESCÚ	VAR_UNITSÚ	VAR_INDEXÚmaxÚNVARS_FIELDSÚVAR_NLEVÚVAR_NDIMÚlistÚ
VAR_LEVELSÚVAR_PLOT_LEVELSÚPRECIP_VARSÚsetÚ
PRECIP_SETÚCMAP_CONFIG)Úconfig_fileÚ	vars_fileÚrun_tagÚcfgÚvars_rawr;   Úraw_tagÚiÚgÚ_lat_lev_rawÚ_lon_lev_rawÚvÚmÚ_ts_tplÚpÚfigra   Ú_offsetÚ_vs                      r   Úinit_configrÊ   „   s.  € ð@ ÒO¤§¡§¡°¼Ó!O€KØÒU¤§¡§¡Ð0@ÔBTÓ!U€IÜ—<‘< Ó,€LÜ—<‘< 	Ó*€Jäœ,Ó'€CÜœ*Ó%×)Ñ)¨+°rÓ:€Hð ˆe‰*€Cð 	ò 	#Ü�:‰:�>‰>˜) RÓ(ò	#äˆs�w‰w�u˜bÓ!Ó"ð ñ
 Üð8ó
ð 	
ô
 ˜wÓ'€GÜœœG B Q˜KÓ(¬#¬g°a¸¨lÓ*;¼SÄÈÈ1ÀÓ=NÜœG A b˜MÓ*ó,€Bä�3�x‘=Ó!€FÜ�3�z‘?Ó#€HÜ>CÄF¼mÓL¹m¸”"”y q¬8¡|Ô4Ó4¸mÑL€Jð ˆv‰;€AÜˆq�‰w‹<€BÜˆq�‰w‹<€BÜ��6‘Ó€DÜ��6‘Ó€DÜ��6‘Ó€Dð —5‘5˜Ó&Ò,¨"€LØ—5‘5˜Ó&Ò,¨"€LÙ'3Ó4¡| !”U˜1•X |Ñ4€JÙ'3Ó4¡| !”U˜1•X |Ñ4€JÜœÓ$€MÜœÓ$€MåÜOQÐTUÊvŒu”UœJ r™N¬Z¸©]Ñ:¼rÀA¹vÑFÈÓJÔKÐ[^ˆÜ�x‰xœ
¬"¯*©*Ô5‰ä�Q—U‘U˜6“]Ò) cÓ*ˆÜ�{‰{œ4¤¬¨a©´4©Ñ!7¼Ó<ˆåÜ�x‰xœ
¬"¯*©*Ô5‰ä�{‰{œ4¤¬¨a©´4©Ñ!7¼Ó<ˆð �g‘,€AÜ˜˜'™
Ó#€EÜ�a˜‘j“/€EÜ˜Q˜}Ñ-Ó.×6Ñ6°{ÄGÓL€KÜ˜Q˜}Ñ-Ó.€KÜ˜QŸU™UÐ#3Ð5IÓJÓK€GÜ.¨wÓ7Ðô
 �a—e‘e˜G UÓ+Ó,€IÜ�a—e‘e˜F UÓ+Ó,€DÜ�a—e‘e˜L¨%Ó0Ó1€Jð ˆw‰<€AÜ˜AŸE™E +¨rÓ2Ó3Ò]´r·z±z·~±~ÐFXÐZ\Ó7]ÐÜ˜AŸE™E *¨bÓ1Ó2ÐÝN_Ô.Ô/@Ä'ÔJÐeg€HÜ�Q—U‘U˜<¨Ó1Ó2€JÜ�Q—U‘U˜9¨Ó0Ó1€Gð �'‰'�(˜BÓ
€CÜ�#—'‘'˜% Ó%Ó&€CÜ�#—'‘'˜% Ó'Ó(€Gð �'‰'�%˜Ó
€CÜ˜Ÿ™ 
¨YÓ7Ó8€LÜ˜Ÿ™ ¨QÓ/Ó0€JÜ˜Ÿ™ ¨aÓ0Ó1€MÜ˜Ÿ™ ¨cÓ2Ó3€MÜ˜#Ÿ'™' ,°Ó6Ó7€NÜ˜#Ÿ'™' )°Ó6Ó7€Jð €IÝ%.Ó/¡Y �!�F“) YÑ/€IÝFOÓPÁiÀ�!�F‘)˜QŸU™U =°!°F±)Ó<Ñ<ÀiÑP€HÝGPÓQÁyÀ!�!�F‘)˜QŸU™U 7¨BÓ/Ñ/ÀyÑQ€Ið €GØ€IßˆØ 'Œ	�"�V‘*ÑØ”3”s˜2Ÿ6™6 &¨!Ó,Ò1°Ó2°AÓ6Ñ6‰ð ð €LÝMVÓWÉYÈ�q˜‘y¤# a§e¡e¨F°AÓ&6Ò&;¸!Ó"<Ñ<ÈYÑW€HÝW`ÓaÑW`ÐRS�q˜‘y¬¨A¯E©E°&¸«OÒ,@¸qÓ(AÀAÒ(E¡1È1ÑLÐW`Ña€HÝNWÓXÉiÈ�q˜‘y¤$ q§u¡u¨X¸BÓ'?Ó"@Ñ@ÈiÑX€JÝNWÓXÉiÈ�q˜‘y¤$ q§u¡u¨]¸BÓ'?Ó"@Ñ@ÈiÑX€OÝ&/ÓJ¡i °1·5±5¸À5Õ3I�1�V“9 iÑJ€KÜ”kÓ"€Jõ óñ ˆAð 	
ˆ&‰	Ø—U‘U˜6 IÓ.Ø—U‘U˜6 DÓ)Ø—U‘U˜6 DÓ)Ø—e‘e˜H eÓ,ñ	
ñ 	
ð ñ�Kùòo Mùò 5ùÚ4ùòp 0ùÚPùÚQùò XùÚaùÚXùÚXùÚJùòsO   Æ!`È`#È8`(Ø	`-Ø  `2Ù`7Ú<*`<Û11aÜ-&aÝ&aÞaÞ'aßAac                  ó`   — t         D � cg c]  } | j                  dd«      sŒ| d   ‘Œ c} S c c} w )zGRetorna lista de nomes de variaveis com enabled=true em variables.yaml.ÚenabledTrh   )r©   rv   )rÃ   s    r   Úenabled_varsrÍ   "  s+   € å(ÓC™y˜!¨A¯E©E°)¸TÕ,BˆAˆf‹I˜yÑCÐCùÒCs   ‰+¡+r»   c                 ó  — | r|rt        |«      dk  r| S | j                  d|«      j                  d|«      j                  d|dd «      j                  d|dd «      j                  d	|dd
 «      j                  d|d
d «      S )aÆ  
    Substitui variaveis de template em um caminho de dados.

    Variaveis suportadas
    --------------------
    {data}     -> YYYYMMDDHH  (run_tag completo)
    {run_tag}  -> YYYYMMDDHH  (alias de {data})
    {yyyy}     -> YYYY (ano 4 digitos)
    {mm}       -> MM   (mes 2 digitos)
    {dd}       -> DD   (dia 2 digitos)
    {hh}       -> HH   (hora 2 digitos)

    Exemplos
    --------
    template = "/dados/sismom/sismom_forecast/{data}/regional/eta/2D"
    run_tag  = "2026060600"
    -> "/dados/sismom/sismom_forecast/2026060600/regional/eta/2D"

    template = "/dados/sismom/sismom_forecast/{yyyy}{mm}{dd}{hh}/regional/eta/2D"
    -> "/dados/sismom/sismom_forecast/2026060600/regional/eta/2D"
    r   z{data}rR   r1   Nr>   r2   r?   r3   r@   r4   )r   r5   )r/   r»   s     r   r�   r�   '  s�   € ñ, ™7¤c¨'£l°RÒ&7Øˆàß	‰�˜gÓ	&ß	‰�˜gÓ	&ß	‰�˜g b q˜kÓ	*ß	‰�˜g a¨˜lÓ	+ß	‰�˜g a¨˜lÓ	+ß	‰�˜g a¨˜mÓ	,ðr%   Úbasec                 ó2  — |r3d|v rt        || «      S t        j                  j                  || ddd«      S t        rt        t        | «      S t
        r't        j                  j                  t
        | ddd«      S t        j                  j                  d| «      S )uk  
    Resolve o caminho dos dados para uma rodada.

    Prioridade
    ----------
    1. --data_base CLI  (base != "")  â€” retrocompat ou template
    2. data_dir no config.yaml        â€” suporta template ou caminho fixo
    3. SISMOM_DATA_BASE env            â€” base fixa (retrocompat)
    4. data/ local                    â€” fallback de desenvolvimento
    Ú{ÚregionalÚetaÚ2DÚdata)r�   rt   r   Újoinrœ   rZ   )r»   rÏ   s     r   Úbuild_data_dirr×   J  s{   € ñ à�$‰;Ü)¨$°Ó8Ð8Ü�w‰w�|‰|˜D '¨:°u¸dÓCÐCÝÜ%Ô&7¸ÓAÐAÝÜ�w‰w�|‰|Ô,¨g°zÀ5È$ÓOÐOÜ�7‰7�<‰<˜ Ó(Ð(r%   )N)NNN)r&   )PÚ__doc__rt   r
   ÚnumpyrŽ   r   r   r   r   r   Ú__file__ÚparentÚresolveÚSCRIPTS_DIRÚPROJECT_ROOTrw   rx   r   r   r$   r<   r|   r}   r~   r€   r�   r‚   r„   r…   r†   r�   r“   r‘   r‡   rˆ   rŠ   r‹   rš   r”   r•   r–   r—   r˜   rZ   rž   rœ   rŸ   r    r¡   r¢   r£   r¤   r¥   r¦   r§   r¨   r©   rª   r«   r¬   r­   r°   r±   r³   r´   r¯   r™   r›   rµ   r¶   r·   r¸   ry   rz   r6   rÊ   rÍ   r�   r×   Ú	Exception© r%   r   Ú<module>rá      sá  ðñó  
Û Û ß 7Ñ 7ð ˆw�|‰|˜HÓ%×,Ñ,×4Ñ4Ó6€Ø×!Ñ!€à! MÑ1€Ø!Ð$4Ñ4Ð ò!ñ.!˜sð !¨eð !¸só !ðJ €�4ˆb !˜° XÀ°:Ø€ˆQˆ�s� 3˜D¨t¨¸D°TØ	€�"ˆ4Ø€
˜b�Ø€ u�}Ø€Ø€�eˆe¨2˜[¸V¨{ÐZdÐEWØÐ  "�x¸"Ð&7à€
Ø
€Ø	€�Uˆ7Ø€ q˜*¸!¨-ÈS¸]Ø€Ø€
Ø€	˜B�	¨2 ¸2¨yÈ2¸yØ€˜"ˆx¨2˜jÀ¨ÐTUÀ\Ø€	Ø€
Ø€™s›u�*°B kØ€ $�Zð& Cð &¨Có &ó[ò|Dð
  Sð  °3ð  ¸3ó  ñF)˜Cð ) sð )°Có )ð6	Ù…MøØò 	ñ 	ð	ús   Ã;D ÄDÄ
D