§
    ¢Wi«/  ã                  ó$  — d dl mZ d dlZd dlmc mZ d dlmZ d dl	m
Z
mZmZmZmZ d dlZd dlZd dlZ G d„ d¦  «        Z G d„ d¦  «        Zej        dd
„¦   «         Zej        dd„¦   «         Zej        d„ ¦   «         Zej        d„ ¦   «         ZdS )é    )ÚannotationsN)Údatetime)ÚAnyÚDictÚListÚOptionalÚSequencec                  óN   — e Zd ZdZ	 d ddddddd	œd!d„Zd"d„Zd#d„Zd"d„Zd$d„ZdS )%Ú_RadBackendTablesu‚  
    Fake backend p/ **radiance** com superfÃ­cie igual ao reader pÃºblico:
    - get_file_info()
    - get_channels()
    - get_data_frame()
    - get_table(name)

    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ÚpathÚstrr   r   r   Úintr   r   r   úOptional[datetime]Ú_r   ÚreturnÚNonec               ó¤  — || _         |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¦  «        }|||
|||d1œd2œ| _        | j         d3| j        ||t          |
j        d4         ¦  «        t          |j        d4         ¦  «        d5œ| _        t-          |	                     ¦   «         ¦  «        | _        d S )6Néé  é   é   ©Ú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Ú
cldpORtpwc©Úcolumnsg      >Àg      >@r0   g      NÀg      DÀr1   r3   )Útb_obsÚomfÚomf_nbcÚerrinvÚidqcÚemissÚtlachÚtsc                ó   — g | ]}d |› �‘ŒS )Úpred© )Ú.0Úis     ú=/home/caroline.viezel/readDiagGerd/tests/readdiag/conftest.pyú
<listcomp>z._RadBackendTables.__init__.<locals>.<listcomp>K   s   € Ð=Ð=Ð= A�Z˜A�Z�ZÐ=Ð=Ð=ó    r   Úch)ÚspreadÚend_errÚoma)ÚindexrK   r$   g      i@g       Àg       @rL   g      ð¿rM   gš™™™™™é?rN   ç      à?g{®Gáz„?rO   rP   çÍÌÌÌÌÌì?rQ   rR   g      r@rS   r]   r^   r_   Úextra1)Ú
channel_dfÚ
diagbuf_dfÚdiagbufchan_dfÚdiagbufex_df)r   r   Ú
dataframesÚradr   )Ú	file_nameÚ	data_typer   r   r   r   r   )Ú_pathr   Ú_dateÚnpÚaranger   ÚpdÚ	DataFrameÚlinspaceÚfloatÚzerosÚonesÚlenÚrangeÚreplaceÚnanrK   ÚastypeÚappendÚ_storeÚshapeÚ_metaÚlistÚtolistÚ	_channels)Úselfr   r   r   r   r   r   r   r   r/   rd   Úheader_colsre   Úch_headÚ	pred_colsÚcolsrf   r\   ÚdfcÚcÚinvrg   s                         rY   Ú__init__z_RadBackendTables.__init__   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ˆð Ø à",Ø",Ø"0Ø".ð	ð ð	'
ð 	'
ˆŒð  œ:Ø Øœ:Ø!Ø#Ý˜zÔ/°Ô2Ñ3Ô3Ý˜zÔ/°Ô2Ñ3Ô3ð&
ð &
ˆŒ
õ %)¨¯ª©¬Ñ$6Ô$6ˆŒˆˆr[   úDict[str, Any]c                ó*   — t          | j        ¦  «        S ©N©Údictr~   ©r‚   s    rY   Úget_file_infoz_RadBackendTables.get_file_info€   ó   € Ý�D”JÑÔÐr[   ú	List[int]c                ó*   — t          | j        ¦  «        S r�   )r   r�   r�   s    rY   Úget_channelsz_RadBackendTables.get_channelsƒ   s   € Ý�D”NÑ#Ô#Ð#r[   c                ó   — | j         S )z!Retorna o 'store' com as tabelas.)r|   r�   s    rY   Úget_dataframez_RadBackendTables.get_dataframe†   s
   € àŒ{Ðr[   Únamec                ót   — | j         d         }|dk    r|d         S ||v r||         S t          d|›�¦  «        ‚)z Acessa uma das tabelas por nome.rh   rf   zTabela desconhecida: )r|   ÚKeyError)r‚   r˜   Údfss      rY   Ú	get_tablez_RadBackendTables.get_tableŠ   sP   € àŒk˜,Ô'ˆØÐ#Ò#Ð#ØÐ'Ô(Ð(Ø�3ˆ;ˆ;Ø�t”9ÐÝÐ7¨tÐ7Ð7Ñ8Ô8Ð8r[   )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   )	Ú__name__Ú
__module__Ú__qualname__Ú__doc__rŠ   r‘   r•   r—   rœ   rV   r[   rY   r   r      s²   € € € € € ðð ð  3ð`7ð ØØØØØ#'ð`7ð `7ð `7ð `7ð `7ð `7ðF ð  ð  ð  ð$ð $ð $ð $ðð ð ð ð9ð 9ð 9ð 9ð 9ð 9r[   r   c                  óT   — e Zd ZdZ	 d&ddddddœd'd„Zd(d„Zd)d„Zd*d „Zd+d#„Z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   é‚   éƒ   r"   TN)ÚvarsÚkx_listÚn_obs_per_kxÚadd_qc_flag_aliasr   r   r   r­   úSequence[str]r®   úSequence[int]r¯   r   r°   Úboolr   r   r   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 )9Nr    r!   r"   )ÚkxÚksubr0   r1   r2   ÚprsÚhgtr3   ÚiqcÚqc_setupr-   Úanalysis_useÚrwgtÚ
errinv_inpÚ
errinv_adjÚ
errinv_finÚobsrM   Ú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      €rY   Ú	make_colsz._ConvBackendTables.__init__.<locals>.make_cols±   sS   ø€ Ø�dŠ{ˆ{ØPÐPÐP�Ø˜c˜r˜c”{ TÑ)Ð)Ø�eŠ|ˆ|Ø—{’{‘}”}�Ø"��R‘Ø�ØˆMr[   é*   r#   r   iìÿÿÿé   r   iÄÿÿÿiÎÿÿÿr   g     @@é   g     à…@g      I@é   g      Y@g      $@é   r'   r   é	   r%   é
   é   é   g{®Gáz”?é   g¸…ëQ¸ž?é   g{®Gáz¤?é   r¨   rË   ra   é   rb   é   r©   r&   é   rJ   r¹   Úqc_flagT)ÚdropÚconv)rj   rk   r   Ún_varsr­   Úkx_allÚn_obs_total)rÂ   r   r   rÃ   )rl   r   rm   r   Ú_varsÚ_kxr   Ú_nÚ_datarn   ÚrandomÚdefault_rngrt   rv   rs   rr   Únormalrp   rq   rK   Úreset_indexÚtupler~   )r‚   r   r­   r®   r¯   r°   r   r   rÑ   ÚrngÚvr†   Úv_maprµ   ÚmÚarrÚdfrÐ   s                    @rY   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                ó*   — t          | j        ¦  «        S r�   rŽ   r�   s    rY   r‘   z _ConvBackendTables.get_file_infoí   r’   r[   rÃ   c                ó*   — t          | j        ¦  «        S r�   )r   rç   r�   s    rY   Úget_variablesz _ConvBackendTables.get_variablesð   r’   r[   rÂ   r“   c                ó’   — || j         vrt          d|› d�¦  «        ‚t          | j         |                              ¦   «         ¦  «        S )Nz
Variable 'z' not found.)rê   Ú
ValueErrorÚsortedÚkeys)r‚   rÂ   s     rY   Úget_kx_listz_ConvBackendTables.get_kx_listó   sI   € Ø�d”jÐ Ð ÝÐ;¨#Ð;Ð;Ð;Ñ<Ô<Ð<Ý�d”j ”o×*Ò*Ñ,Ô,Ñ-Ô-Ð-r[   rµ   ú"Dict[str, Dict[int, pd.DataFrame]]c                ó(   — | j         |         |         S r�   )rê   ©r‚   rÂ   rµ   s      rY   r—   z _ConvBackendTables.get_dataframeø   s   € ØŒz˜#Œ˜rÔ"Ð"r[   úpd.DataFramec                ó„   — || j         vs|| j         |         vrt          d|›d|›d�¦  «        ‚| j         |         |         S )NzTable for var=z kx=z
 not found)rê   rš   r   s      rY   rœ   z_ConvBackendTables.get_tableû   sR   € Ø�d”jÐ Ð  B¨d¬j¸¬oÐ$=Ð$=ÝÐG¨CÐGÐG°rÐGÐGÐGÑHÔHÐHØŒz˜#Œ˜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œ   rV   r[   rY   r£   r£   ”   sÃ   € € € € € ðð ð .ðR
ð <Ø!0ØØ"&Ø#'ðR
ð R
ð R
ð R
ð R
ð R
ðh ð  ð  ð  ð ð  ð  ð  ð.ð .ð .ð .ð
#ð #ð #ð #ð#ð #ð #ð #ð #ð #r[   r£   r   c                 ó   — t          ¦   «         S )u0   InstÃ¢ncia pronta do backend de radiÃ¢ncia fake.)r   rV   r[   rY   Úrad_backend_faker    s   € õ ÑÔÐr[   c                 ó   — t          ¦   «         S )u>   InstÃ¢ncia pronta do backend convencional fake (split por kx).)r£   rV   r[   rY   Úconv_backend_faker  
  s   € õ ÑÔÐr[   c           	     óž   ‡‡— ddˆfd„}|                       d|d¬¦  «         d	ddd
dd
d
d	dœdˆfd„}|                       d|d¬¦  «         ‰‰dœS )uh  
    Monkeys que substituem os readers reais por versÃµes em memÃ³ria.

    - readDiag.rad_reader.read_radiance(path, use_memmap=True)
      deve retornar (idate, data_frame) como no facade.  # reader usa isso
    - readDiag.conv_reader.read_conv_file(file, ..., set_date_cb=cb)
      deve retornar {var -> {kx -> DF}} e invocar set_date_cb(date).  # idem
    Tr   ústr | bytesÚ
use_memmapr³   c                ód   •— ‰}|                      ¦   «         d         |                     ¦   «         fS ©Nr   )r‘   r—   )r   r	  Úbr  s      €rY   Ú_fake_read_radiancez*patch_readers.<locals>._fake_read_radiance  s,   ø€ ØˆØ—’Ñ!Ô! &Ô)¨1¯?ª?Ñ+<Ô+<Ð=Ð=r[   z!readDiag.rad_reader.read_radiance)ÚraisingNF)rÂ   ÚfastÚbase20_onlyÚ	read_sidsÚcompat_legacyÚ	raw_numpyÚcompactÚset_date_cbrj   r   rÂ   úOptional[str]r  r  r  r  r  r  c               óº   •— ‰}	|�5	  ||	                      ¦   «         d         ¦  «         n# t          $ r Y nw xY w|	                     ¦   «         }
|�
||
|         i}
|
S r  )r‘   Ú	Exceptionr—   )rj   rÂ   r  r  r  r  r  r  r  r  Údatar  s              €rY   Ú_fake_read_conv_filez+patch_readers.<locals>._fake_read_conv_file!  s~   ø€ ð ˆØÐ"ðØ�˜AŸOšOÑ-Ô-¨fÔ5Ñ6Ô6Ð6Ð6øÝð ð ð Ø�ðøøøà�ŠÑ Ô ˆØˆ?Ø˜˜cœÐ#ˆDàˆs   ‡#+ «
8·8z#readDiag.conv_reader.read_conv_file)ri   rã   )T)r   r  r	  r³   )rj   r   rÂ   r  r  r³   r  r³   r  r³   r  r³   r  r³   r  r³   )Úsetattr)Úmonkeypatchr  r  r  r  s    ``  rY   Úpatch_readersr    s¸   øø€ ð>ð >ð >ð >ð >ð >ð >ð ×ÒÐ;Ð=PÐZ^ÐÑ_Ô_Ð_ð "ØØ ØØ"ØØØðð ð ð ð ð ð ð ð0 ×ÒÐ=Ð?SÐ]aÐÑbÔbÐbà#Ð->Ð?Ð?Ð?r[   c                ó    ‡— ddl mŠ dˆfd„}|S )ui   
    Factory que retorna uma funÃ§Ã£o para construir diagAccess jÃ¡ com
    os readers fakes ativos.
    r   )Ú
diagAccessr   r   c                ó   •—  ‰| fi |¤ŽS r�   rV   )r   Úkwargsr  s     €rY   Ú_factoryz$diagAccess_patched.<locals>._factoryF  s   ø€ Øˆz˜$Ð)Ð) &Ð)Ð)Ð)r[   )r   r   )ÚreadDiag.readerr  )r  r"  r  s     @rY   ÚdiagAccess_patchedr$  ?  s:   ø€ ð +Ð*Ð*Ð*Ð*Ð*ð*ð *ð *ð *ð *ð *à€Or[   )r   r   )r   r£   )Ú
__future__r   ÚbuiltinsÚ@py_builtinsÚ_pytest.assertion.rewriteÚ	assertionÚrewriteÚ
@pytest_arr   Útypingr   r   r   r   r	   Únumpyrn   Úpandasrp   Úpytestr   r£   Úfixturer  r  r  r$  rV   r[   rY   ú<module>r1     s}  ðà "Ð "Ð "Ð "Ð "Ð "à  € € € € € € € € € € € € Ð Ð Ð Ð Ð Ð Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6à Ð Ð Ð Ø Ð Ð Ð Ø €€€ð
C9ð C9ð C9ð C9ð C9ñ C9ô C9ð C9ðLj#ð j#ð j#ð j#ð j#ñ j#ô j#ð j#ðb „ðð ð ñ „ðð „ð ð  ð  ñ „ð ð „ð+@ð +@ñ „ð+@ð^ „ðð ñ „ðð ð r[   