o
    i}                     @   s   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 zd dlmZ dd	 ZW n eyI   d dlmZ d
d	 ZY nw G dd deZdS )    )TestCase)utils)convert)readsN)copy)Emptyc                 C   
   t | tS N)
isinstancestrs r   S/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/numba/testing/notebook.pyisstr      
r   c                 C   r   r	   )r
   
basestringr   r   r   r   r      r   c                   @   sd   e Zd ZdZg dZg dZdZdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd ZdS )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           	      C   s   t |}tt| | j}W d    n1 sw   Y  t \}}tdd |jD D ]\}}| 	| 
|||| q.d S )Nc                 S   s   g | ]	}|j d kr|qS )code)	cell_type).0cr   r   r   
<listcomp>-       z/NotebookTest._test_notebook.<locals>.<listcomp>)openr   r   readNBFORMAT_VERSIONr   start_new_kernel	enumeratecells_test_notebook_cellsanitize_cell)	selfnotebooktestfnb_kernelir    r   r   r   _test_notebook(   s   
zNotebookTest._test_notebookc                    s<  t |dr	|j}n|j}|j}|| g }d }d}	d}
d} |r}z	|jddd}W n	 ty5   Y qw |d  jvrx|d dkr[d	|d
 d  d |d
 d  }d}	|
dkr[|}
t	|}|t	|j
k rk|j
| plg } ||}||  |s#|dkr |	d|
|f  d S  fdd}||}||j
}d S )Nr   T    )blocktimeoutmsg_typeerrorz  contentenamez
  evalueFcheck_errorz*Executing cell %d resulted in an error:
%sc                    s     t | S r	   )dump_canonicallistscrub_outputs)xr+   r   r   <lambda>S   s    z2NotebookTest._test_notebook_cell.<locals>.<lambda>)hasattrr   inputiopub_channelexecuteshould_continueget_msgr   IGNORE_TYPESlenoutputstransform_messageappend
assertTrue)r+   cellr2   r1   r-   r   iopubrM   msgno_errorfirst_error	error_msgexpectedoscrubscrubbedr   rC   r   r)   0   s@   


 

z NotebookTest._test_notebook_cellc                 C   s   t j|dddS )N   T)indent	sort_keys)jsondumps)r+   objr   r   r   r?   Z   s   zNotebookTest.dump_canonicalc                 #   s    |D ]J}t |}dD ]>\  fdd}d|v r"||d |d< d|v rIt|d trA|d  D ]\}}|||d |< q3q||d |d< q|V  qdS )z=
        remove all scrubs from output data and text
        r   c                    s*   t | rt | S  fdd| D S )Nc                    s   g | ]	}t  |qS r   )resub)r   linerY   rb   r   r   r!   i   r"   zCNotebookTest.scrub_outputs.<locals>._scrubLines.<locals>.<listcomp>)r   ra   rb   )linesrd   r   r   _scrubLinese   s   z/NotebookTest.scrub_outputs.<locals>._scrubLinestextdataN)r   r
   dictitems)r+   rM   outputoutrf   mimerh   r   rd   r   rA   ]   s    zNotebookTest.scrub_outputsc                 C   s   | j D ]}||d q|S )zE
        remove keys from STRIP_KEYS to ensure comparability
        N)
STRIP_KEYSpop)r+   dkeyr   r   r   
strip_keysv   s   
zNotebookTest.strip_keysc                 C   s   |j D ]}| | q|S )z0
        remove non-reproducible things
        )rM   rr   )r+   rQ   rk   r   r   r   r*   ~   s   
zNotebookTest.sanitize_cellc                 C   s   ddddi}d|d i}| |d  | |}| D ]\}}||v r3|| |v r3|||  ||< qd|v rEd|vrE|d |d< |d= |S )	zF
        transform a message into something like the notebook
        output_typeexecute_resultr:   )pyoutpyerrr9   r;   rh   rg   )updaterr   rj   )r+   rS   rW   	SWAP_KEYSrk   rq   swapsr   r   r   rN      s"   
zNotebookTest.transform_messagec                 C   s*   |du rdS |d dko|d d dk S )zQ
        determine whether the current message is the last for this cell
        NTr9   r   r;   execution_stateidler   )r+   rS   r   r   r   rI      s
   zNotebookTest.should_continueN)__name__
__module____qualname____doc__rK   rn   r%   r3   r)   r?   rA   rr   r*   rN   rI   r   r   r   r   r      s    
*r   )unittestr   ipykernel.testsr   nbformat.converterr   nbformat.readerr   ra   r^   r   queuer   r   ImportErrorQueuer   r   r   r   r   <module>   s     