+
    *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;;==6tf =E F
 	
 
dW	%	%~~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s9~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      # )	zConverte 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<     WXt$WVt$WVt$WVt$	&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  qR<,          NK  	  upsB\         Uu/ uF#  qR<,          VP                  R=VR<,          4      bK%  	  upsC\         Uu/ uF  qR<,          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/  qR<,          \        VP                  R?^ 4      ;'       g    ^ 4      bK1  	  upsH\         Uu/ uF8  qR<,          \        VP                  R?^ 4      ;'       g    ^ 4      ^ 8  d   ^M^bK:  	  upsI\         Uu/ uF%  qR<,          \        VP                  R@. 4      4      bK'  	  upsK\         Uu/ uF%  qR<,          \        VP                  RA. 4      4      bK'  	  upsL\         Uu. uF%  qP                  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'   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   Nr@      NrB      NrD   
   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!OKUU0@BT!UI<<,L<<	*J,'C*%))+r:H e*C 	 	# 	#::>>)R(	# 	#swwub!" 
 8
 	

 w'GGBK(#gcl*;S=NGDM*,B3x=!F3z?#H>CFmLm"yq8|444mLJ v;Aqw<Bqw<B6D6D6D 55&,,"L55&,,"L'34|!U1X|4J'34|!U1X|4J$M$M}OQTUvuUJrNZ]:rAvFJK[^xx
"**5QUU6]))c*{{4a4!7<}xx
"**5{{4a4!7< g,A'
#Eaj/EQ}-.66{GLKQ}-.KQUU#35IJKG.w7
 aeeGU+,IaeeFU+,DaeeL%01J w<AAEE+r23]]rzz~~FXZ\7]AEE*b12N_N_./@'JegHQUU<12JQUU901G ''(B
C#''%%&C#''%'(G ''%
C
Y78LQ/0Ja01Mc23M#'',67N#'')67J I%./YF))Y/IFOPiF)QUU=!F)<<iPHGPQy!F)QUU7B//yQI GI '	"V*3s266&!,112A66  LMVWYy#aeeFA&6&;&;!"<<YWHW`aW`RSyAEE&O,@,@q(AA(E11LW`aHNWXiy$quuXB'?"@@iXJNWXiy$quu]B'?"@@iXO&/Ji5553I91V99iJKk"J  A 	
&	QUU6I.QUU6D)QUU6D)aeeHe,	
 	
 Ko M 54p 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-    (Cy!EE)T,BIAfIIy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    , 7c'lR&7	g	&	g	&	gbk	*	gcl	+	gcl	+	gdm	,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ww||D:udCC%&7AAww||,gz5$OO77<<((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 4b!X:Qs3DtDT	"4
bu}ee2[V{ZdEW "x"&7

	U7q*!-S]
	B	22y2y"x2jTU\	
su*Bk$Z&[|D
 F)6	M 	 		s   8D DD