+
    §Á*j8@  ã                   ó  € R t ^ RIt^ RIt^ RIt^ RIHtHtHt ]P                  ! ]
4      P                  P                  4       t]P                  t]R,          t]R,          tR tRR R lltRsRs^ s^s. s^ s^ sR	sR	sR
sR
s. s. s. s . s!Rs"Rs#Rs$Rs%Rs&Rs'Rs(Rs)Rs*Rs+Rs,Rs-Rs.^xs/Rs0Rs1^s2^s3Rs4Rs5Rs6. s7. s8/ s9/ s:/ s;/ s</ s=/ s>/ s?^ s@RsARsB. sC]D! 4       sE/ sFRsGRsHR R ltIRR ltJR tKR R ltLRR R lltM ]J! 4        R#   ]N d     R# i ; i) 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                ó@  €  ^ RI p\        P                  ! T 4      p T P	                  4       '       g   \        RT  R24      h\        T RR7      ;_uu_ 4       pTP                  T4      uuRRR4       #   \         d    \        R4      hi ; i  + '       g   i     R# ; i)zCCarrega um arquivo YAML; lanca FileNotFoundError com mensagem util.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   ‚A2 ÁBÁ2B	ÂB	c                ó<   € V ^8„  d   QhR\         R\        R\         /# )é   Ú	run_inputÚref_dateÚreturn)ÚstrÚ_date)Úformats   "r   Ú__annotate__r   9   s!   € ÷ !ñ !œsð !¬eð !¼sñ !ó    c                ó~  € \        V 4      P                  4       p \        V 4      ^
8X  d   V P                  4       '       d   V # V P                  4       '       dY   \        V 4      ^8:  dI   V P	                  ^4      pT;'       g    \
        P                  ! 4       pVP                  R4      V,           # \        RV  R24      h)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).)	r   ÚstripÚlenÚisdigitÚzfillr   ÚtodayÚstrftimeÚ
ValueError)r   r   Úhourr"   s   &&  r   Úresolve_run_tagr&   9   s¥   € ô( �I“×$Ñ$Ó&€Iä
ˆ9ƒ~˜Ô 	× 1Ñ 1× 3Ò 3ØÐà×Ñ×Òœs 9›~°Ô2Ø—?‘? 1Ó%ˆØ×,Ð,œuŸ{š{›}ˆØ�~‰~˜hÓ'¨$Õ.Ð.ä
Ø
'¨	 {ð 3@ð 	Aóð r   Ú ç        g¸…ëQ¸ž?Fg@Œµx¯Dz>f4z.binz%Y%m%d%HÚsaidaÚlogsÚpngÚDEFLATEé   c                ó0   € V ^8„  d   QhR\         R\         /# )r   Útemplater   ©r   )r   s   "r   r   r   u   s   € ÷ &ñ &¤Cð &¬Cñ &r   c                ó†   € V P                  RR4      P                  RR4      P                  RR4      P                  RR4      # )	zú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_strftimer7   u   s<   € ð ß‰W�X˜tÓ$ß‰W�V˜tÓ$ß‰W�V˜tÓ$ß‰W�V˜tÓ$ð	&r   c                ó  € T ;'       g%    \         P                  P                  R\        4      p T;'       g%    \         P                  P                  R\        4      p\
        P                  ! V 4      s\
        P                  ! V4      s\        \        4      p\        \        4      P                  R. 4      pVR,          pT;'       gD    \         P                  P                  RR4      ;'       g    \        VP                  RR4      4      pV'       g   \        R4      h\        V4      s\        \        \        R	,          4      \        \        R
,          4      \        \        R,          4      \        \        R,          4      4      s\        VR,          4      s\        VR,          4      s\'        \"        4       Uu. uF%  p\         \)        V\$        ,          R7      ,           NK'  	  upsVR,          p\        VR,          4      s\        VR,          4      s\1        VR,          4      s\1        VR,          4      s\1        VR,          4      sVP                  R4      ;'       g    . p	VP                  R4      ;'       g    . p
V	 Uu. uF  p\1        V4      NK  	  upsV
 Uu. uF  p\1        V4      NK  	  ups\=        \8        4      s\=        \:        4      s \>        '       d}   \.        ^8”  dE   \1        \C        \8        RH,          \8        ^ ,          ,
          \.        ^,
          ,          ^4      4      MRs"\F        PH                  ! \8        \F        PJ                  R7      s&Me\1        VP                  R4      ;'       g    R4      s"\F        PN                  ! \4        \4        \.        ^,
          \D        ,          ,           \.        4      s&\@        '       d,   \F        PH                  ! \:        \F        PJ                  R7      s(MA\F        PN                  ! \2        \2        \,        ^,
          \6        ,          ,           \,        4      s(VR,          p\1        VR,          4      s)\        VR,          4      s*\        VR,          4      PW                  R\        4      s,\        VR ,          4      s-\        VP                  R!R"4      4      p\]        V4      s/\=        VP                  R#R$4      4      s0\=        VP                  R%R$4      4      s1\=        VP                  R&R$4      4      s2VR',          p\        VP                  R(R4      4      ;'       g!    \         P                  P                  R)R4      s3\        VP                  R*R4      4      s4\h        '       d   \k        \h        \        4      MRs6\        VP                  R+R,4      4      s7\        VP                  R-R.4      4      s8VP                  R// 4      p\        VP                  R0^x4      4      s9\        VP                  R1R24      4      s:VP                  R3/ 4      p\        VP                  R4R54      4      s;\        VP                  R6^4      4      s<\        VP                  R7^4      4      s=\        VP                  R8R94      4      s>\=        VP                  R:R$4      4      s?\=        VP                  R;R$4      4      s@VsA\‚         Uu. uF  q»R<,          NK  	  upsB\‚         Uu/ uF#  q»R<,          VP                  R=VR<,          4      bK%  	  upsC\‚         Uu/ uF  q»R<,          VP                  R>R4      bK  	  upsD^ p/ sE\‚         FI  pV\Š        VR<,          &   T\�        \        VP                  R?^ 4      ;'       g    ^ 4      ^4      ,          pKK  	  VsG\‚         Uu/ uF/  q»R<,          \        VP                  R?^ 4      ;'       g    ^ 4      bK1  	  upsH\‚         Uu/ uF8  q»R<,          \        VP                  R?^ 4      ;'       g    ^ 4      ^ 8”  d   ^M^bK:  	  upsI\‚         Uu/ uF%  q»R<,          \•        VP                  R@. 4      4      bK'  	  upsK\‚         Uu/ uF%  q»R<,          \•        VP                  RA. 4      4      bK'  	  upsL\‚         Uu. uF%  q»P                  RBR$4      '       g   K  VR<,          NK'  	  upsM\�        \š        4      sO\‚         Uu/ uFU  pVR<,          RCVP                  RCRD4      REVP                  RERF4      RGVP                  RGRF4      RBVP                  RBR$4      /bKW  	  upsPRF# u upi u upi u upi u upi u upi u upi u upi u upi u upi u upi u upi u upi )Iaþ  
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é   Nºr@   é   NºrB   é   NºrD   é
   NÚntimesÚdt_hours)ÚhoursÚgridÚnxÚnyÚlon0Úlat0ÚdlonÚ
lat_levelsÚ
lon_levelsr(   )ÚdtypeÚdlatÚmodelÚundefrR   Ú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ÚdpiÚextr+   ÚcogÚcompressr,   ÚzlevelÚ	predictorÚ	tile_sizer-   Ú
fill_undefÚlon_180ÚnameÚdescriptionÚunitsÚnlevÚlevelsÚplot_levelsÚprecipÚcmapÚviridisÚvminNÚvmaxéÿÿÿÿ)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ÚDTYPEr6   ÚFILE_PREFIXÚFILE_SUFFIXr7   ÚFILE_TIMESTAMP_FMTÚ	FIXED_RUNÚYREVÚ
SEQUENTIALr_   Ú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Úfigrf   Ú_offsetÚ_vs   &&&                r   Úinit_configrÏ   „   sS  € ð@ ×OÐO¤§¡§¡°¼Ó!O€KØ×UÐU¤§¡§¡Ð0@ÔBTÓ!U€IÜ—<’< Ó,€LÜ—<’< 	Ó*€Jäœ,Ó'€CÜœ*Ó%×)Ñ)¨+°rÓ:€Hð ˆe�*€Cð 	÷ 	#ð 	#Ü�:‰:�>‰>˜) RÓ(÷	#ð 	#äˆs�w‰w�u˜bÓ!Ó"ð ÷
 Üð8ó
ð 	
ô
 ˜wÓ'€GÜœœG B�KÓ(¬#¬g°c­lÓ*;¼SÄÈÅÓ=NÜœG D�MÓ*ó,€Bä�3�x•=Ó!€FÜ�3�z•?Ó#€HÜ>CÄF¼mÓL¹m¸”"”y q¬8¥|Ô4×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_Ó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Ð1°Ó2°AÓ6Õ6Šñ ð €LÝMVÓWÉYÈ˜•y¤# a§e¡e¨F°AÓ&6×&;Ð&;¸!Ó"<Ò<ÉYÑW€HÝW`ÓaÑW`ÐRS˜•y¬¨A¯E©E°&¸«O×,@Ð,@¸qÓ(AÀAÔ(E¡1È1ÒLÑW`Ña€HÝNWÓXÉiÈ˜•y¤$ q§u¡u¨X¸BÓ'?Ó"@Ò@ÉiÑX€JÝNWÓXÉiÈ˜•y¤$ q§u¡u¨]¸BÓ'?Ó"@Ò@ÉiÑX€OÝ&/ÓJ¡i ·5±5¸À5×3I”9�1�V—9�9¡iÑJ€KÜ”kÓ"€Jõ óñ ˆAð 	
ˆ&�	Ø�Q—U‘U˜6 IÓ.Ø�Q—U‘U˜6 DÓ)Ø�Q—U‘U˜6 DÓ)Ø�a—e‘e˜H eÓ,ð	
ò 	
ñ ñ‚Kùòo Mùò 5ùÚ4ùòp 0ùÚPùÚQùò XùÚaùÚXùÚXùÚJùòs[   Æ>+eÊ	eÊ$eÛeÛ;)e#Ü/"e(Þ5)e-ße-ß5)e2àe2à>+e7á4+e<â*fãfã/Afc                 óx   € \          U u. uF%  q P                  RR4      '       g   K  V R,          NK'  	  up # u up i )zGRetorna lista de nomes de variaveis com enabled=true em variables.yaml.ÚenabledTrm   )r®   r{   )rÈ   s    r   Úenabled_varsrÒ   "  s-   € å(ÓC™y˜!¯E©E°)¸T×,BŒIˆAˆf�IˆI™yÑCÐCùÒCs   ‰7§7c                ó<   € V ^8„  d   QhR\         R\         R\         /# )r   r/   rÀ   r   r0   )r   s   "r   r   r   '  s!   € ÷  ñ  ¤Sð  ´3ð  ¼3ñ  r   c                óB  € V '       d   V'       d   \        V4      ^
8  d   V # V P                  RV4      P                  RV4      P                  RVR,          4      P                  RVR,          4      P                  RVR,          4      P                  R	VR
,          4      # )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"
z{data}rW   r2   r?   r3   rA   r4   rC   r5   rE   )r   r6   )r/   rÀ   s   &&r   r¢   r¢   '  sy   € ÷, Ÿ7¤c¨'£l°RÔ&7Øˆàß	‰�˜gÓ	&ß	‰�˜gÓ	&ß	‰�˜g b�kÓ	*ß	‰�˜g c�lÓ	+ß	‰�˜g c�lÓ	+ß	‰�˜g d�mÓ	,ðr   c                ó<   € V ^8„  d   QhR\         R\         R\         /# )r   rÀ   Úbaser   r0   )r   s   "r   r   r   J  s!   € ÷ )ñ )œCð )¤sð )´Cñ )r   c                óX  € V'       d5   RV9   d   \        W4      # \        P                  P                  WRRR4      # \        '       d   \        \        V 4      # \
        '       d(   \        P                  P                  \
        V RRR4      # \        P                  P                  RV 4      # )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¢   ry   r   Újoinr¡   r_   )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'   )OÚ__doc__ry   r	   Únumpyr“   r   r   r   r   r
   Ú__file__ÚparentÚresolveÚSCRIPTS_DIRÚPROJECT_ROOTr|   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£   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~   r   r7   rÏ   rÒ   r¢   rÞ   Ú	Exception© r   r   Ú<module>rè      s’  ðñó  
Û Û ß 7Ñ 7ð �|Š|˜HÓ%×,Ñ,×4Ñ4Ó6€Ø×!Ñ!€à! MÕ1€Ø!Ð$4Õ4Ð ò!÷.!ð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õ&ô[ò|Dõ
 ÷F)ð6	Ù†MøØô 	ò 	ð	ús   Ã8D ÄDÄD