
    sh}                         S SK Jr  S SKJr  S SKJr  S SKJr  S SKrS SK	r	S SK
J
r
  S SK r  S SKJr  S r " S
 S\5      rg! \ a    S SKJr  S	 r Nf = f)    )TestCase)utils)convert)readsN)copy)Emptyc                 "    [        U [        5      $ N)
isinstancestrss    j/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/testing/notebook.pyisstrr      s    !S!!    c                 "    [        U [        5      $ r
   )r   
basestringr   s    r   r   r      s    !Z((r   c                   \    \ rS rSrSr/ SQr/ SQrSrS rS r	S r
S	 rS
 rS rS rS rSrg)NotebookTest   aF  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                    [        U5       n[        [        UR                  5       5      U R                  5      nS S S 5        [
        R                  " 5       u  pV[        WR                   Vs/ s H  owR                  S:X  d  M  UPM     sn5       H'  u  pU R                  U R                  U5      XU5        M)     g ! , (       d  f       N= fs  snf )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_notebookNotebookTest._test_notebook(   s    (^qqvvx$*?*?@B **,	"((L(QkkV6Kq(LMDA$$T%7%7%:AtL N ^ Ms   .B<,CC<
C
c                   ^  [        US5      (       a  UR                  nOUR                  nUR                  nUR	                  U5        / nS nSn	Sn
SnT R                  U5      (       a   UR                  SSS9nUS   T R                  ;  a  US   S:X  a!  S	US
   S   -   S-   US
   S   -   nSn	U
S:X  a  Un
[        U5      nU[        UR                  5      :  =(       a    UR                  U   =(       d    / nT R                  X5      nUR                  U5        T R                  U5      (       a  M  US:X  a  T R                  U	SX4-  5        g U 4S jnU" U5      nU" UR                  5      ng ! [         a     GM,  f = f)Nr   T    )blocktimeoutmsg_typeerrorz  contentenamez
  evalueFcheck_errorz*Executing cell %d resulted in an error:
%sc                 V   > TR                  [        TR                  U 5      5      5      $ r
   )dump_canonicallistscrub_outputs)xr+   s    r   <lambda>2NotebookTest._test_notebook_cell.<locals>.<lambda>S   s     d11$t7I7I!7L2MNr   )hasattrr   inputiopub_channelexecuteshould_continueget_msgr   IGNORE_TYPESlenoutputstransform_messageappend
assertTrue)r+   cellr3   r1   r-   r!   iopubrQ   msgno_errorfirst_error	error_msgexpectedoscrubscrubbeds   `               r   r)    NotebookTest._test_notebook_cell0   s   4"";;D::D$$t	""3''mm$m: :d&7&77z?g- $s9~g'> > G#i.YaJb bI$H"b(&'Ls4<<00DT\\!_J**39q! ""3''  M!OOH&SU`Tl&lm
 OEW~HT\\*H+  s   *E1 1
F ?F c                 .    [         R                  " USSS9$ )N   T)indent	sort_keys)jsondumps)r+   objs     r   rC   NotebookTest.dump_canonicalZ   s    zz#a488r   c              #   B  ^^#    U H  n[        U5      nS H{  u  mmUU4S jnSU;   a  U" US   5      US'   SU;   d  M)  [        US   [        5      (       a,  US   R                  5        H  u  pVU" U5      US   U'   M     Mm  U" US   5      US'   M}     Uv   M     g7f)z-
remove all scrubs from output data and text
 c                    > [        U 5      (       a  [        R                  " TTU 5      $ U  Vs/ s H  n[        R                  " TTU5      PM     sn$ s  snf r
   )r   resub)linesliner]   rl   s     r   _scrubLines/NotebookTest.scrub_outputs.<locals>._scrubLinese   sD    U||!vveS%88EJKUTuc4 8UKKKs   "AtextdataN)r   r   dictitems)	r+   rQ   outputoutro   mimerr   r]   rl   s	          @@r   rE   NotebookTest.scrub_outputs]   s      Fv,C 
sL S="-c&k":CKS=!#f+t44*-f+*;*;*=JD0;D0ACK- +> '2#f+&>F !  I' s   8B ABc                 P    U R                    H  nUR                  US5        M     U$ )z5
remove keys from STRIP_KEYS to ensure comparability
N)
STRIP_KEYSpop)r+   dkeys      r   
strip_keysNotebookTest.strip_keysv   s%     ??CEE#t #r   c                 N    UR                    H  nU R                  U5        M     U$ )z 
remove non-reproducible things
)rQ   r~   )r+   rU   ru   s      r   r*   NotebookTest.sanitize_cell~   s#     llFOOF# #r   c                     SSSS.0nSUS   0nUR                  US   5        U R                  U5      nUR                  5        H  u  pVXT;   d  M  XE   U;   d  M  XdU      XE'   M!     SU;   a  SU;  a  US   US'   US	 U$ )	z6
transform a message into something like the notebook
output_typeexecute_resultr=   )pyoutpyerrr<   r>   rr   rq   )updater~   rt   )r+   rW   r[   	SWAP_KEYSru   r}   swapss          r   rR   NotebookTest.transform_message   s    
 ) 
	 C
O
 	c)n%(#//+JC}!5#3K0 , Vh 6#F^F6Nvr   c                 H    Uc  gUS   S:H  =(       a    US   S   S:H  (       + $ )zA
determine whether the current message is the last for this cell
Tr<   r   r>   execution_stateidleri   )r+   rW   s     r   rM   NotebookTest.should_continue   s<     ;
Ox/ @	N#45?A 	Ar   ri   N)__name__
__module____qualname____firstlineno____doc__rO   rz   r$   r4   r)   rC   rE   r~   r*   rR   rM   __static_attributes__ri   r   r   r   r      sE     JLLJM%+T926Ar   r   )unittestr   ipykernel.testsr   nbformat.converterr   nbformat.readerr   rk   rd   r   queuer   r   ImportErrorQueuer   ri   r   r   <module>r      sS     ! & ! 	   )"PA8 PA  ))	)s   	A AA