§
    Á^iI/  ã                  ó  — d dl mZ d dlZd dlmc mZ d dlZ	d dl
Z
d dlZd dlmZ d dlmZmZmZmZmZmZ d dlZd dlZd dlZd dlZdd„Ze	j                             d¦  «        €
 e¦   «          e	j                             d	¦  «        €E ej        d	¦  «        Z G d
„ dej        ¦  «        Z e e_         e
j!         "                    d	e¦  «         d dl#Z# e#j$        dd¬¦  «          G d„ d¦  «        Z% G d„ d¦  «        Z& ej'        d¬¦  «        dd„¦   «         Z( ej'        d¬¦  «        d d„¦   «         Z) ej'        d¬¦  «        d!d„¦   «         Z* ej'        d¬¦  «        d"d„¦   «         Z+ ej'        ¦   «         d#d„¦   «         Z,dS )$é    )ÚannotationsN)Údatetime)ÚAnyÚDictÚListÚOptionalÚSequenceÚTupleÚreturnÚNonec                 ó  — t          j        d¦  «        } t          j        d¦  «        }t          j        d¦  «        }t          j        d¦  «        }dd
„}d dœdd„}||_        ||_        ||_        || _        || _        t          j         	                    d| ¦  «         t          j         	                    d|¦  «         t          j         	                    d|¦  «         t          j         	                    d|¦  «         d S )NÚreadDiagzreadDiag.readerzreadDiag.schemazreadDiag.schema.namingÚ_argsr   Ú_kwargsr   úDict[str, Any]c                 ó
   — ddiS )NÚdummyT© )r   r   s     ú</home/caroline.viezel/readDiagGerd/tests/gsidiag/conftest.pyÚ_fake_diagAccessz1_install_readDiag_stubs.<locals>._fake_diagAccess   s   € à˜ˆÐó    )ÚdefaultÚdfúpd.DataFrameÚaliasesÚstrr   úOptional[str]c               ó*   — |D ]}|| j         v r|c S Œ|S ©N©Úcolumns)r   r   r   Úks       r   Ú_fake_resolve_col_in_dfz8_install_readDiag_stubs.<locals>._fake_resolve_col_in_df   s/   € Øð 	ð 	ˆAØ�B”JˆˆØ���ð àˆr   )r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )
ÚtypesÚ
ModuleTypeÚ
diagAccessÚresolve_col_in_dfÚnamingÚreaderÚschemaÚsysÚmodulesÚ
setdefault)r   r)   r*   r(   r   r#   s         r   Ú_install_readDiag_stubsr.      s  € ÝÔ 
Ñ+Ô+€HÝÔÐ/Ñ0Ô0€FÝÔÐ/Ñ0Ô0€FÝÔÐ6Ñ7Ô7€Fðð ð ð ð [_ð ð ð ð ð ð ð )€FÔØ6€FÔØ€F„MØ€H„OØ€H„Oå„K×Ò˜: xÑ0Ô0Ð0Ý„K×ÒÐ,¨fÑ5Ô5Ð5Ý„K×ÒÐ,¨fÑ5Ô5Ð5Ý„K×ÒÐ3°VÑ<Ô<Ð<Ð<Ð<r   r   Ú	geopandasc                  ó   — e Zd ZdZdS )ÚGeoDataFramer/   N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r1   r1   3   s   € € € € € Ø ˆ
ˆ
ˆ
r   r1   ÚAggT)Úforcec                  ó^   — e Zd ZdZ	 dddddddd	œdd„Zedd„¦   «         Zedd„¦   «         ZdS )Ú_RadBackendTableszÞ
    dataframes = {
      "channel_df":      (n_channels, ...),
      "diagbuf_df":      (n_obs, ...),
      "diagbufchan_df":  list de len n_channels, cada DF (n_obs, ...),
      "diagbufex_df":    (n_obs, ...)
    }
    údiag_amsua_n15_03.2025010106ÚamsuaÚn15é   é   é   N)ÚsensorÚplatformÚ
n_channelsÚn_obsÚnpredÚdateÚpathr   r?   r@   rA   ÚintrB   rC   rD   úOptional[datetime]Ú_r   r   r   c               óø  — || _         |pt          dddd¦  «        | _        t          j        d|dz   t
          ¬¦  «        }	t          j        t          j        dd|t          ¬¦  «        t          j
        |t          ¬¦  «        t          j        dd|t          ¬¦  «        t          j        d	d
|t          ¬¦  «        t          j        dd|t          ¬¦  «        t          j        |t
          ¬¦  «        |	|	dœ¦  «        }
g d¢}t          j        t          j
        |t          |¦  «        ft          ¬¦  «        |¬¦  «        }t          j        dd|t          ¬¦  «        |d<   t          j        dd|t          ¬¦  «        |d<   t          j        dd|t          ¬¦  «        |d<   g d¢}d„ t          d|dz   ¦  «        D ¦   «         }dg|z   |z   g d¢z   }g }t          d|dz   ¦  «        D �]?}t          j        t          |¦  «        |t          ¬¦  «        }t          |¦  «        |d<   d|z   t          j        dd|t          ¬¦  «        z   |d<   t          j        d d|t          ¬¦  «        |d!<   |d!         d"z  |d#<   d$d%|z  z   |d&<   d|d'<   d(|d)<   d|d*<   d+|d,<   |D ]}d||<   Œd	|d-<   |d&                              dt          j        ¦  «        }d|z  |d.<   t          j        |d/<   |j        D ]%}||                              t          ¦  «        ||<   Œ&|                     |¦  «         �ŒAt          j        d0t          j
        |t          ¬¦  «        i¦  «        }| j         d1| j        ||||d2œ| _        |||
|||d3œd4œ| _        d S )5Néé  é   é   ©ÚdtypegÍÌÌÌÌÌ7@gÍÌÌÌÌÌL@ç      ð?g      @çš™™™™™¹?g333333Ó?ç        )ÚfreqÚpolÚwaveÚvarchÚtlapÚiuseÚnuchanÚich)ÚlatÚlonÚelevÚtimeÚiscanpÚzasatÚilaziÚpangsÚisaziÚsgaglÚsfcwcÚsfclcÚsfcicÚsfcscÚsfcwtÚsfcltÚsfcitÚsfcstÚsfcstpÚsfcsmcÚsfcltpÚsfcvfÚsfcsdÚsfcwsÚclsORclwÚ
cldpORtpwcr    g      >Àg      >@rZ   g      NÀg      DÀr[   r]   )Útb_obsÚomfÚomf_nbcÚerrinvÚidqcÚemissÚtlachÚtsc                ó   — g | ]}d |› �‘ŒS )Úpredr   )Ú.0Úis     r   ú
<listcomp>z._RadBackendTables.__init__.<locals>.<listcomp>v   s   € Ð=Ð=Ð= A�Z˜A�Z�ZÐ=Ð=Ð=r   r<   Úch)ÚspreadÚend_errÚoma)Úindexr!   rN   g      i@g       Àg       @rt   g      ð¿ru   gš™™™™™é?rv   ç      à?g{®Gáz„?rw   rx   çÍÌÌÌÌÌì?ry   rz   g      r@r{   r‚   rƒ   r„   Úextra1Úrad)Ú	file_nameÚ	data_typerD   r?   r@   rA   rB   )Ú
channel_dfÚ
diagbuf_dfÚdiagbufchan_dfÚdiagbufex_df)r?   r@   Ú
dataframes)Ú_pathr   Ú_dateÚnpÚarangerF   ÚpdÚ	DataFrameÚlinspaceÚfloatÚzerosÚonesÚlenÚrangeÚreplaceÚnanr!   ÚastypeÚappendÚ_metaÚ_store)ÚselfrE   r?   r@   rA   rB   rC   rD   rH   rY   rŒ   Úheader_colsr�   Úch_headÚ	pred_colsÚcolsrŽ   r�   ÚdfcÚcÚinvr�   s                         r   Ú__init__z_RadBackendTables.__init__H   sº  € ð ˆŒ
ØÐ4�X d¨A¨q°!Ñ4Ô4ˆŒ
õ Œi˜˜:¨™>µÐ5Ñ5Ô5ˆÝ”\åœ+ d¨D°*ÅEÐJÑJÔJÝœ( :µUÐ;Ñ;Ô;Ýœ+ c¨3°
Å%ÐHÑHÔHÝœ+ c¨3°
Å%ÐHÑHÔHÝœ+ c¨3°
Å%ÐHÑHÔHÝœ' *µCÐ8Ñ8Ô8ØØð	ð 	ñ
ô 
ˆ
ð
ð 
ð 
ˆõ
 ”\ÝŒH�e�S Ñ-Ô-Ð.µeÐ<Ñ<Ô<Øð
ñ 
ô 
ˆ
õ  œ[¨°°eÅ5ÐIÑIÔIˆ
�5ÑÝœ[¨°°uÅEÐJÑJÔJˆ
�5ÑÝœ[¨¨c°UÅ%ÐHÑHÔHˆ
�6Ñð TÐSÐSˆØ=Ð=­¨q°%¸!±)Ñ)<Ô)<Ð=Ñ=Ô=ˆ	Ø�F˜WÑ$ yÑ0Ð3OÐ3OÐ3OÑOˆà-/ˆÝ˜˜:¨™>Ñ*Ô*ð 	'ñ 	'ˆBÝ”,¥U¨5¡\¤\¸4ÅuÐMÑMÔMˆCÝ" 2™YœYˆC�‰IØ" R™Z­"¬+°d¸CÀÍeÐ*TÑ*TÔ*TÑTˆC�‰MÝœ[¨¨s°EÅÐGÑGÔGˆC�‰JØ  œZ¨#Ñ-ˆC�	‰NØ  4¨"¡9™_ˆC�‰MØ ˆC�‰KØ ˆC�‰LØ ˆC�‰LØ"ˆC�‰IØð ð �Ø��A‘�Ø ˆC�‰MØ�h”-×'Ò'¨­R¬VÑ4Ô4ˆCØ  3™YˆC�	‰NÝœVˆC�‰Jà”[ð .ð .�Ø˜QœŸš¥uÑ-Ô-��A‘�Ø×!Ò! #Ñ&Ô&Ð&Ñ&õ ”| X­r¬x¸ÅUÐ/KÑ/KÔ/KÐ$LÑMÔMˆð œØØ”JØØ Ø$Øð&
ð &
ˆŒ
ð Ø à",Ø",Ø"0Ø".ð	ð ð	'
ð 	'
ˆŒˆˆr   r   c                ó   — | j         S r   ©r¡   ©r£   s    r   Úmetaz_RadBackendTables.meta¨   ó
   € àŒzÐr   c                ó   — | j         d         S )Nr�   )r¢   r®   s    r   r�   z_RadBackendTables.dataframes¬   s   € àŒ{˜<Ô(Ð(r   )r9   )rE   r   r?   r   r@   r   rA   rF   rB   rF   rC   rF   rD   rG   rH   r   r   r   ©r   r   )r2   r3   r4   Ú__doc__r«   Úpropertyr¯   r�   r   r   r   r8   r8   ?   s¢   € € € € € ðð ð 3ð^
ð ØØØØØ#'ð^
ð ^
ð ^
ð ^
ð ^
ð ^
ð@ ðð ð ñ „Xðð ð)ð )ð )ñ „Xð)ð )ð )r   r8   c                  ó\   — e Zd ZdZ	 dddddddœdd„Zed d„¦   «         Zed!d„¦   «         ZdS )"Ú_ConvBackendTablesu�   
    Fake backend p/ **convencional** no formato split:
    {var -> {kx -> DataFrame}} com colunas base-20 (e variaÃ§Ãµes de 'uv' e 'wst').
    údiag_conv_01.2025010106)ÚtÚqÚpsÚuvÚwst)éx   é‚   éƒ   rL   TN)ÚvarsÚkx_listÚn_obs_per_kxÚadd_qc_flag_aliasrD   rE   r   rÀ   úSequence[str]rÁ   úSequence[int]rÂ   rF   rÃ   ÚboolrD   rG   rH   r   r   r   c          
     óP  ‡— || _         |pt          dddd¦  «        | _        t          |¦  «        | _        t          |¦  «        | _        t          |¦  «        | _        g d¢Šd8ˆfd	„}i | _        t          j
                             d
¦  «        }	| j        D �]}
 ||
¦  «        }i }| j        D �]î}| j        }t          j        |t          |¦  «        ft          ¬¦  «        }||d d …df<   d|d d …df<   t          j        dd|¦  «        |d d …df<   t          j        dd|¦  «        |d d …df<   d|d d …df<   |	                     dd|¦  «        |d d …df<   |	                     dd|¦  «        |d d …df<   t          j        dd|¦  «        |d d …df<   d|d d …df<   d|d d …df<   d|d d …df<   d|d d …d f<   d|d d …d!f<   d"|d d …d#f<   d$|d d …d%f<   d&|d d …d'f<   |
d(k    rc|	                     dd|¦  «        |d d …d)f<   |	                     dd*|¦  «        |d d …d+f<   |d d …d+f         d,z  |d d …d-f<   |
d.k    rd/nd|d d …d0f<   t#          j        ||¬1¦  «        }|rd2|j        v rd3|j        vr|d2         |d3<   |                     d4¬5¦  «        |t          |¦  «        <   �Œð|| j        |
<   �Œ| j         d6| j        t          | j        ¦  «        t+          | j        ¦  «        t+          | j        ¦  «        t          | j        ¦  «        t          | j        ¦  «        z  | j        z  d7œ| _        d S )9NrJ   rK   rL   )ÚkxÚksubrZ   r[   r\   ÚprsÚhgtr]   ÚiqcÚqc_setuprW   Úanalysis_useÚrwgtÚ
errinv_inpÚ
errinv_adjÚ
errinv_finÚobsru   Úomf_wobr‚   Úvarr   r   ú	List[str]c                óx   •— | dk    rg d¢}‰d d…         |z   S | dk    r‰                      ¦   «         }d|d<   |S ‰S )Nr»   )Úobs_uÚomf_uÚ	omf_wob_uÚobs_vÚomf_vÚ	omf_wob_vé   r¼   Úfactwéÿÿÿÿ)Úcopy)rÕ   Útailr§   Úbase20s      €r   Ú	make_colsz._ConvBackendTables.__init__.<locals>.make_colsÎ   sS   ø€ Ø�dŠ{ˆ{ØPÐPÐP�Ø˜c˜r˜c”{ TÑ)Ð)Ø�eŠ|ˆ|Ø—{’{‘}”}�Ø"��R‘Ø�ØˆMr   é*   rM   r   iìÿÿÿé   r>   iÄÿÿÿiÎÿÿÿr<   g     @@é   g     à…@g      I@é   g      Y@g      $@é   rQ   r=   é	   rO   é
   é   é   g{®Gáz”?é   g¸…ëQ¸ž?é   g{®Gáz¤?é   r»   rÞ   r†   é   r‡   é   r¼   rP   é   r    rÌ   Úqc_flagT)ÚdropÚconv)rŠ   r‹   rD   Ún_varsrÀ   Úkx_allÚn_obs_total)rÕ   r   r   rÖ   )r‘   r   r’   ÚlistÚ_varsÚ_kxrF   Ú_nÚ_datar“   ÚrandomÚdefault_rngr™   r›   r˜   r—   Únormalr•   r–   r!   Úreset_indexÚtupler¡   )r£   rE   rÀ   rÁ   rÂ   rÃ   rD   rH   rä   ÚrngÚvr§   Úv_maprÈ   ÚmÚarrr   rã   s                    @r   r«   z_ConvBackendTables.__init__¶   s«  ø€ ð ˆŒ
ØÐ4�X d¨A¨q°!Ñ4Ô4ˆŒ
Ý˜$‘Z”ZˆŒ
Ý˜‘=”=ˆŒÝ�lÑ#Ô#ˆŒð
ð 
ð 
ˆð	ð 	ð 	ð 	ð 	ð 	ð :<ˆŒ
ÝŒi×#Ò# BÑ'Ô'ˆØ”ð #	"ñ #	"ˆAØ�9˜Q‘<”<ˆDØ-/ˆEØ”hð ;ñ ;�Ø”G�Ý”h ¥3 t¡9¤9˜~µUÐ;Ñ;Ô;�Ø��A�A�A�q�D‘	Ø��A�A�A�q�D‘	ÝœK¨¨R°Ñ3Ô3��A�A�A�q�D‘	ÝœK¨¨S°!Ñ4Ô4��A�A�A�q�D‘	Ø!��A�A�A�q�D‘	ØŸJšJ u¨d°AÑ6Ô6��A�A�A�q�D‘	ØŸJšJ u¨d°AÑ6Ô6��A�A�A�q�D‘	ÝœK¨¨1¨aÑ0Ô0��A�A�A�q�D‘	Ø��A�A�A�q�D‘	Ø ��A�A�A�q�D‘	Ø ��A�A�A�r�E‘
Ø ��A�A�A�r�E‘
Ø ��A�A�A�r�E‘
à!��A�A�A�r�E‘
Ø!��A�A�A�r�E‘
Ø!��A�A�A�r�E‘
à˜’9�9Ø!$§¢¨C°°aÑ!8Ô!8�C˜˜˜˜2˜‘JØ!$§¢¨C°°aÑ!8Ô!8�C˜˜˜˜2˜‘JØ!$ Q Q Q¨ U¤¨cÑ!1�C˜˜˜˜2˜‘JØ()¨Uª
¨
  ¸�C˜˜˜˜2˜‘Jå”\ #¨tÐ4Ñ4Ô4�Ø$ð .¨°"´*Ð)<Ð)<ÀÐRTÔR\ÐA\ÐA\Ø$& u¤I�B�y‘Mà!#§¢°T Ñ!:Ô!:�•c˜"‘g”g‘‘Ø!ˆDŒJ�q‰M‰Mð œØØ”JÝ˜$œ*‘o”oÝ˜$œ*Ñ%Ô%Ý˜DœH‘o”oÝ˜tœz™?œ?­S°´©]¬]Ñ:¸T¼WÑDð&
ð &
ˆŒ
ˆ
ˆ
r   r   c                ó   — | j         S r   r­   r®   s    r   r¯   z_ConvBackendTables.meta	  r°   r   ú"Dict[str, Dict[int, pd.DataFrame]]c                ó   — | j         S )z#Retorna {var -> {kx -> DataFrame}}.)rþ   r®   s    r   Ú	split_mapz_ConvBackendTables.split_map  s   € ð ŒzÐr   )r·   )rE   r   rÀ   rÄ   rÁ   rÅ   rÂ   rF   rÃ   rÆ   rD   rG   rH   r   r   r   r²   ©r   r
  )r2   r3   r4   r³   r«   r´   r¯   r  r   r   r   r¶   r¶   ±   sŸ   € € € € € ðð ð .ðQ
ð <Ø!0ØØ"&Ø#'ðQ
ð Q
ð Q
ð Q
ð Q
ð Q
ðf ðð ð ñ „Xðð ðð ð ñ „Xðð ð r   r¶   Úsession)Úscopec                 ó   — t          ¦   «         S r   )r8   r   r   r   Úrad_backendr    s   € åÑÔÐr   c                 ó   — t          ¦   «         S r   )r¶   r   r   r   Úconv_backendr    s   € åÑÔÐr   r   c                ó   — | j         S r   )r�   )r  s    r   Úrad_dataframesr    s   € àÔ!Ð!r   r
  c                ó   — | j         S r   )r  )r  s    r   Úconv_data_mapr  #  s   € àÔ!Ð!r   Útmp_pathÚPathc                óŠ   — t          j        d¦  «                             ¦   «         }| dz  }|                     |d¬¦  «         |S )zICreate a minimal table.yml with one conventional and one satellite entry.aÐ  
        observations:
          - kx: "120"
            details:
              - var: ps
                abbreviation: ADPUPA
                instrument: Radiosonde
                color: "#1f77b4"
                symbol: s
                iuse: "1"
              - var: t
                abbreviation: ADPUPA
                instrument: Radiosonde
                color: "#B25809"
                symbol: "*"
                iuse: "1"

          - kx: n19
            details:
              - var: amsua
                abbreviation: AMSU-A NOAA-19
                instrument: ""     # empty to force fallback for instrument
                color: "#ff0000"
                symbol: x
                iuse: "1"
        z	table.ymlzutf-8)Úencoding)ÚtextwrapÚdedentÚstripÚ
write_text)r  Ú	yaml_textÚps      r   Úminimal_yamlr"  &  sO   € õ ”ð	ñô ÷6 ‚e�g„gð7 ð8 	�;Ñ€AØ‡L‚L� W€LÑ-Ô-Ð-Ø€Hr   )r   r   )r   r8   )r   r¶   r²   r  )r  r  r   r  )-Ú
__future__r   ÚbuiltinsÚ@py_builtinsÚ_pytest.assertion.rewriteÚ	assertionÚrewriteÚ
@pytest_arÚimportlib.utilÚ	importlibr+   r$   r   Útypingr   r   r   r   r	   r
   r  Únumpyr“   Úpandasr•   Úpytestr.   ÚutilÚ	find_specr%   Úgpdr–   r1   r,   r-   Ú
matplotlibÚuser8   r¶   Úfixturer  r  r  r  r"  r   r   r   ú<module>r6     sç  ðà "Ð "Ð "Ð "Ð "Ð "à  € € € € € € € € € € € € Ð Ð Ð Ð Ø 
€
€
€
Ø €€€Ø Ð Ð Ð Ð Ð Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =à €€€Ø Ð Ð Ð Ø Ð Ð Ð Ø €€€ð
=ð =ð =ð =ð6 „>×Ò˜JÑ'Ô'Ð/ØÐÑÔÐð „>×Ò˜KÑ(Ô(Ð0Ø
ˆ%Ô
˜;Ñ
'Ô
'€Cð!ð !ð !ð !ð !�r”|ñ !ô !ð !à#€CÔØ„K×Ò˜;¨Ñ,Ô,Ð,ð Ð Ð Ð Ø €
„ˆu˜DÐ !Ñ !Ô !Ð !ð
o)ð o)ð o)ð o)ð o)ñ o)ô o)ð o)ðd_ð _ð _ð _ð _ñ _ô _ð _ðJ €„�iÐ Ñ Ô ðð ð ñ !Ô ðð €„�iÐ Ñ Ô ð ð  ð  ñ !Ô ð ð €„�iÐ Ñ Ô ð"ð "ð "ñ !Ô ð"ð €„�iÐ Ñ Ô ð"ð "ð "ñ !Ô ð"à€„ÑÔð ð  ð  ñ Ôð ð  ð  r   