Ë
    üÇ:j}  ã                   óª   — d dl mZ d dlmZ d dlmZ d dlmZ d dlZd dl	Z	d dl
m
Z
 d dl Z 	 d dlmZ d„ Z G d
„ de«      Zy# e$ r d dlmZ d	„ ZY Œw xY w)é    )ÚTestCase)Úutils)Úconvert)ÚreadsN)Úcopy)ÚEmptyc                 ó"   — t        | t        «      S ©N)Ú
isinstanceÚstr©Úss    úk/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/numba/testing/notebook.pyÚisstrr      s   € Ü˜!œSÓ!Ð!ó    c                 ó"   — t        | t        «      S r
   )r   Ú
basestringr   s    r   r   r      s   € Ü˜!œZÓ(Ð(r   c                   óT   — e Zd ZdZg d¢Zg d¢ZdZd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zy)ÚNotebookTestaV  Validate a notebook. All code cells are executed in order. The output is either checked
    for errors (if no reference output is present), or is compared against expected output.


    Useful references:
    http://nbformat.readthedocs.org/en/latest/format_description.html
    http://jupyter-client.readthedocs.org/en/latest/messaging.html
)Úexecute_requestÚexecute_inputÚstatusÚpyin)Úexecution_countÚ	tracebackÚprompt_numberÚsourceé   c                 ó’  — t        |«      5 }t        t        |j                  «       «      | j                  «      }d d d «       t        j                  «       \  }}t        j                  D �cg c]  }|j                  dk(  sŒ|‘Œ c}«      D ](  \  }}| j                  | j                  |«      |||«       Œ* y # 1 sw Y   ŒxY wc c}w )NÚcode)Úopenr   r   ÚreadÚNBFORMAT_VERSIONr   Ústart_new_kernelÚ	enumerateÚcellsÚ	cell_typeÚ_test_notebook_cellÚsanitize_cell)	ÚselfÚnotebookÚtestÚfÚnbÚ_ÚkernelÚcÚis	            r   Ú_test_notebookzNotebookTest._test_notebook(   sª   € ä�(‹^ð 	A˜qÜœ˜qŸv™v›x›¨$×*?Ñ*?Ó@ˆB÷	Aä×*Ñ*Ó,‰	ˆˆ6Ü¨"¯(©(ÖL Q°a·k±kÀVÓ6KšqÒLÓMò 	M‰DˆAˆqØ×$Ñ$ T×%7Ñ%7¸Ó%:¸A¸vÀtÕLñ	M÷	Að 	Aüò Ms   Œ.B8Á,CÂCÂ8Cc                 óÌ  ‡ — t        |d«      r|j                  }n|j                  }|j                  }|j	                  |«       g }d }d}	d}
d}‰ j                  |«      rº	 |j                  dd¬«      }|d   ‰ j                  vrƒ|d   dk(  r d	|d
   d   z   dz   |d
   d   z   }d}	|
dk(  r|}
t        |«      }|t        |j                  «      k  xr |j                  |   xs g }‰ j                  ||«      }|j                  |«       ‰ j                  |«      rŒº|dk(  r‰ j                  |	d|
|fz  «       y ˆ fd„} ||«      } ||j                  «      }y # t        $ r Y �Œw xY w)Nr   TéÿÿÿÿÚ é   )ÚblockÚtimeoutÚmsg_typeÚerrorz  ÚcontentÚenamez
  ÚevalueFÚcheck_errorz*Executing cell %d resulted in an error:
%sc                 óV   •— ‰j                  t        ‰j                  | «      «      «      S r
   )Údump_canonicalÚlistÚscrub_outputs)Úxr*   s    €r   ú<lambda>z2NotebookTest._test_notebook_cell.<locals>.<lambda>S   s"   ø€ ˜d×1Ñ1´$°t×7IÑ7IÈ!Ó7LÓ2MÓN€ r   )Úhasattrr   ÚinputÚiopub_channelÚexecuteÚshould_continueÚget_msgr   ÚIGNORE_TYPESÚlenÚoutputsÚtransform_messageÚappendÚ
assertTrue)r*   Úcellr2   r0   r,   r    ÚiopubrN   ÚmsgÚno_errorÚfirst_errorÚ	error_msgÚexpectedÚoÚscrubÚscrubbeds   `               r   r(   z NotebookTest._test_notebook_cell0   s�  ø€ ä�4˜Ô"Ø—;‘;‰Dà—:‘:ˆDØ×$Ñ$ˆØ�‰�tÔØˆØˆØˆØˆØˆ	Ø×"Ñ" 3Ô'ðØ—m‘m¨$¸�mÓ:�ð �:‰ d×&7Ñ&7Ñ7Ø�z‘? gÒ-Ø $ s¨9¡~°gÑ'>Ñ >ÀÑ GÈ#ÈiÉ.ÐYaÑJbÑ b�IØ$�HØ" bÒ(Ø&'˜Ü˜“L�Øœs 4§<¡<Ó0Ñ0ÒD°T·\±\À!±_ÒJÈ�Ø×*Ñ*¨3°Ó9�Ø—‘˜qÔ!ð ×"Ñ" 3Õ'ð  �MÒ!Ø�O‰O˜HÐ&SÐU`ÐbkÐTlÑ&lÕmó
 OˆEÙ˜W“~ˆHÙ˜TŸ\™\Ó*‰Høô+ ò Úðús   Á E Å	E#Å"E#c                 ó2   — t        j                  |dd¬«      S )Né   T)ÚindentÚ	sort_keys)ÚjsonÚdumps)r*   Úobjs     r   rA   zNotebookTest.dump_canonicalZ   s   € Ü�z‰z˜# a°4Ô8Ð8r   c              #   ó   ‡‡K  — |D ]ƒ  }t        |«      }dD ]m  \  ŠŠˆˆfd„}d|v r ||d   «      |d<   d|v sŒ#t        |d   t        «      r*|d   j                  «       D ]  \  }} ||«      |d   |<   Œ Œ` ||d   «      |d<   Œo |–— Œ… y­w)z=
        remove all scrubs from output data and text
        © c                 óœ   •— t        | «      rt        j                  ‰‰| «      S | D �cg c]  }t        j                  ‰‰|«      ‘Œ c}S c c}w r
   )r   ÚreÚsub)ÚlinesÚlinerZ   rg   s     €€r   Ú_scrubLinesz/NotebookTest.scrub_outputs.<locals>._scrubLinese   s>   ø€ Ü˜U”|Ü!Ÿv™v e¨S°%Ó8Ð8àEJÖK¸T¤§¡ u¨c°4Õ 8ÒKÐKùÒKs   ¨A	ÚtextÚdataN)r   r   ÚdictÚitems)	r*   rN   ÚoutputÚoutrj   Úmimerl   rZ   rg   s	          @@r   rC   zNotebookTest.scrub_outputs]   sº   ùè ø€ ð ò 	ˆFÜ�v“,ˆCà ò ?‘
��sõLð ˜S‘=Ù"-¨c°&©kÓ":�C˜‘Kà˜S’=Ü! # f¡+¬tÔ4Ø*-¨f©+×*;Ñ*;Ó*=ò B™J˜D $Ù0;¸DÓ0A˜C ™K¨Ò-ñBñ '2°#°f±+Ó&>˜˜Fšð?ð  ‹Iñ'	ùs   „5BºABc                 óL   — | j                   D ]  }|j                  |d«       Œ |S )zE
        remove keys from STRIP_KEYS to ensure comparability
        N)Ú
STRIP_KEYSÚpop)r*   ÚdÚkeys      r   Ú
strip_keyszNotebookTest.strip_keysv   s*   € ð —?‘?ò 	ˆCØ�E‰E�#�tÕð	àˆr   c                 óJ   — |j                   D ]  }| j                  |«       Œ |S )z0
        remove non-reproducible things
        )rN   rw   )r*   rR   ro   s      r   r)   zNotebookTest.sanitize_cell~   s(   € ð —l‘lò 	$ˆFØ�O‰O˜FÕ#ð	$àˆr   c                 óò   — ddddœi}d|d   i}|j                  |d   «       | j                  |«      }|j                  «       D ]  \  }}||v sŒ||   |v sŒ|||      ||<   Œ d|v rd|vr|d   |d<   |d= |S )	zF
        transform a message into something like the notebook
        Úoutput_typeÚexecute_resultr;   )ÚpyoutÚpyerrr:   r<   rl   rk   )Úupdaterw   rn   )r*   rT   rX   Ú	SWAP_KEYSro   rv   Úswapss          r   rO   zNotebookTest.transform_message†   s³   € ð
 Ø)Ø ñð
ˆ	ð ˜C 
™Oð
ˆð 	�‰�c˜)‘nÔ%à—‘ Ó(ˆØ#Ÿ/™/Ó+ò 	1‰JˆC�Ø�fŠ} ¨¡°Ò!5Ø# F¨3¡KÑ0��s’ð	1ð �VÑ ¨hÑ 6Ø# F™^ˆF�6‰NØ�v�àˆr   c                 ó4   — |€y|d   dk(  xr |d   d   dk(   S )zQ
        determine whether the current message is the last for this cell
        Tr:   r   r<   Úexecution_stateÚidlerd   )r*   rT   s     r   rJ   zNotebookTest.should_continue¡   s<   € ð ˆ;Øà˜
‘O xÑ/ò @Ø˜	‘NÐ#4Ñ5¸Ñ?ðAð 	Ar   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rL   rs   r#   r3   r(   rA   rC   rw   r)   rO   rJ   rd   r   r   r   r      sE   „ ñò J€LÚL€JØÐòMò%+òT9òò2òòó6Ar   r   )Úunittestr   Úipykernel.testsr   Únbformat.converterr   Únbformat.readerr   rf   r`   r   Úqueuer   r   ÚImportErrorÚQueuer   rd   r   r   ú<module>r�      sS   ðÝ å !Ý &Ý !ã 	Û Ý Û ð)åò"ôPA�8õ PAøð ò )åô)ð	)ús   ¬	A ÁAÁA