
     Ce                       d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlmZmZ d dlmZ d dlmZ d dlmZ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 d dlmZ d d	lmZ d d
l m!Z! d dlm"Z" d dl#m$Z$ d dl%m&Z& d dl'm(Z(m)Z) d dl*m+Z+ ddl,m-Z-  ej.        d          Z/ej0        1                    e2          Z3 ej.        d          Z4 ej.        d          Z5dej6        d<   g dZ7d^dZ8ddiddddZ9ddidd id!d"d!id#Z: G d$ d%e          Z;d&ed'e j<        fd(Z=d) Z>d_d*Z?d+ Z@d_d,ZAdd-d.ZBd/ ZCd0 ZDd1 ZEd2 ZFejG        H                    d3d4gd5d6d7ifd8d6d7ifd9d6d7ifd:d6d7ifd;d6d7ifd<d6d7ifd=d7d>d?d?d@fdAd6d7ifdBd6d7ifdCd7d?dDfdEd6d7ifdFd6d7ifdGd6d7ifdHd6d7ifdId6d7ifdJd6d7ifg          dK             ZIdL ZJejG        K                    ejL        dMk    dNO          dP             ZMdQ ZNdR ZOdS ZPdT ZQdU ZRdV ZSejG        K                     eTed                    dWk     dXO          dY             ZU G dZ d[e-          ZV G d\ d]e-          ZWdS )`    N)	b64decode	b64encodeEmpty)Any)	MagicMockMock)flaky)KernelClientKernelManager)version_info)KernelSpecManager)
strip_ansi)NotebookNode)modified_env)
TraitError)NotebookClientexecute)CellExecutionError   )NBClientTestsBasez0x[0-9a-f]{7,9}zM(<ipython-input-\d+-[0-9a-f]+>|<IPY-INPUT>) in (<module>|<cell line: \d>\(\))zU((Cell|Input) In\s?\[\d+\]|<IPY-INPUT>), (in )?(line \d|<module>|<cell line: \d>\(\))1PYDEVD_DISABLE_FILE_VALIDATION)on_cell_starton_cell_executeon_cell_completeon_cell_executedon_cell_erroron_notebook_starton_notebook_completeon_notebook_errorFc                     |rd t           D             }nd t           D             }|  |t          d          t          |           }|                                D ]\  }}t	          |||           ||fS )Nc                 ,    i | ]}|t                      S  	AsyncMock.0keys     :lib/python3.11/site-packages/nbclient/tests/test_client.py
<dictcomp>z+get_executor_with_hooks.<locals>.<dictcomp>>       :::cikk:::    c                 ,    i | ]}|t                      S r$   )r   r'   s     r*   r+   z+get_executor_with_hooks.<locals>.<dictcomp>@   r,   r-   z,Cannot pass nb and executor at the same time)hook_methodsRuntimeErrorr   itemssetattr)nbexecutorasync_hookshookskvs         r*   get_executor_with_hooksr9   <   s     ;::\:::::\:::	~MNNN!"%%    1!QU?r-   msg_idfake_idokstatusexecution_countparent_headercontentr>   errorexecute_replymsg_type)rA   rB   rE   headerc                       e Zd ZdS )r&   N)__name__
__module____qualname__r$   r-   r*   r&   r&   V   s        Dr-   r&   objreturnc                     	 t          j                    }n7# t          $ r* t          j                    }t          j        |           Y nw xY wt          j        |          }|                    |            |S )N)loop)asyncioget_running_loopr0   new_event_loopset_event_loopFuture
set_result)rK   rN   futures      r*   make_futurerV   Z   s    %')) % % %%''t$$$$$% %^666F
cMs    1A
	A
c                     	 t          t          |                     d                                                  d          S # t          t
          f$ r | cY S w xY w)Nascii)r   r   encodedecode
ValueError	TypeError)b64_texts    r*   normalize_base64r^   e   s`    8??7#;#;<<==DDWMMM	"   s   AA AAc                    t          |           5 }t          j        |d          }ddd           n# 1 swxY w Y   t          j        |          }|j        D ]}d|v r|d= g |d<   |rd|i|}t          |fi |}t          j                    5  t          j	        dt                     t          dd	d
          5  |                                }ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   ||fS )uLoads and runs a notebook, returning both the version prior to
    running it and the version after running it.

       Nr?   outputs	resourcesignoreactioncategory8024COLUMNSLINES)opennbformatreadcopydeepcopycellsr   warningscatch_warningssimplefilterFutureWarningr   r   	filenameoptsrc   finput_nbcleaned_input_nbcellr4   	output_nbs	            r*   run_notebookr   n   s   
 
h '1=A&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' }X.. &  $$&'Y 0Y/$/.77$77H		 	"	" + +XFFFFdT::;; 	+ 	+ ((**I	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+	+ + + + + + + + + + + + + + + YsB   266.C5=CC5C"	"C5%C"	&C55C9<C9c                     t          |  S N)r   )argss    r*   run_notebook_wrapperr      s     r-   c                   K   t          |           5 }t          j        |d          }ddd           n# 1 swxY w Y   t          j        |          }|j        D ]}d|v r|d= g |d<   |rd|i|}t          |fi |}t          ddd          5  |                                 d{V }ddd           n# 1 swxY w Y   ||fS )	r`   ra   Nr?   rb   rc   rh   ri   rj   )	rm   rn   ro   rp   rq   rr   r   r   async_executerw   s	            r*   async_run_notebookr      s     
 
h '1=A&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' }X.. &  $$&'Y 0Y/$/.77$77H 
$66	7	7 3 3"0022222222	3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 Ys   488B77B;>B;	reply_msgc                      dt          |                              dddid            fdfdfd}|S )	aE  
    This function prepares a executor object which has a fake kernel client
    to mock the messages sent over zeromq. The mock kernel client will return
    the messages passed into this wrapper back from ``preproc.kc.iopub_channel.get_msg``
    callbacks. It also appends a kernel idle message to the end of messages.
    r;   r>   execution_stateidle)rE   rB   c            
      x    t          t          t          j        d iddddpi                               S )Nr:   r<   r   r=   r@   return_value)r&   rV   r   merge_dicts)	parent_idr   s   r*   shell_channel_message_mockz6prepare_cell_mocks.<locals>.shell_channel_message_mock   s_     $!-*2I)>.2q#I#I  O  

 

 

 
	
r-   c                  <    t          fd D                       S )Nc           	      \    g | ](}t          t          j        d dii|                    )S )rA   r:   )rV   r   r   )r(   msgr   s     r*   
<listcomp>zCprepare_cell_mocks.<locals>.iopub_messages_mock.<locals>.<listcomp>   sP       
  %1?XyDY2Z\_``   r-   )side_effectr%   )messagesr   s   r*   iopub_messages_mockz/prepare_cell_mocks.<locals>.iopub_messages_mock   sD        
 $  
 
 
 	
r-   c                 N     t          j                    fd            }|S )Nc           
         t          di dg           } G d dt                    }t          j                                        } ||          }|g|j        _                     }t          t          |          t           	                      t                    t          t          d                    	          |_	        |_
         | |||          S )
aV  
            This inner function wrapper populates the executor object with
            the fake kernel client. This client has its iopub and shell
            channels mocked so as to fake the setup handshake and return
            the messages passed into prepare_cell_mocks as the execute_cell loop
            processes them.
            "foo" = "bar"codesourcemetadata	cell_typerb   c                       e Zd ZU eed<   dS )kprepare_cell_mocks.<locals>.prepared_wrapper.<locals>.test_mock_wrapper.<locals>.NotebookClientWithParentIDr   N)rH   rI   rJ   str__annotations__r$   r-   r*   NotebookClientWithParentIDr      s         r-   r   )get_msgr   T)iopub_channelshell_channelr   is_alive)r   r   rn   v4new_notebookr3   rr   r   rV   kcr   )
self	cell_mockr   r3   r4   message_mockfuncr   r   r   s
         r*   test_mock_wrapperzGprepare_cell_mocks.<locals>.prepared_wrapper.<locals>.test_mock_wrapper   s    %&vr  I    ^    ))++B11"55H!*HK /.00L#'==='0J0J0L0LMMM!y999"D0A0ABBB	  HK "+H4h	<@@@r-   )	functoolswraps)r   r   r   r   r   s   ` r*   prepared_wrapperz,prepare_cell_mocks.<locals>.prepared_wrapper   sQ    				A 	A 	A 	A 	A 	A 	A 
		A< ! r-   )listappend)r   messages_inputr   r   r   r   r   s   `  @@@@r*   prepare_cell_mocksr      s     IN##HOO7H&6QRRSSS
 
 
 
 
 

 
 
 
 
 
 !  !  !  !  !  !  !D r-   c                    t          |           } d| v r| d= d| v r$t          j        t          d| d                   | d<   d|                     di           v r0t          j        t          d| d         d                   | d         d<   d|                     di           v rd| d         d         d<   d	|                     di           v r)t          j        | d         d	                   | d         d	<   |                     di                                           D ]2\  }}t          |t                    rt          |          | d         |<   3d
| v rwg }| d
         D ]g}t          j        t          dt          |                    }t          j        t          dt          |                    }|                    |           h|| d
<   | S )z,
    Normalizes outputs for comparison.
    r   textz	<HEXADDR>z
text/plaindata(application/vnd.jupyter.widget-view+jsonz
<MODEL_ID>model_idzimage/svg+xml	tracebackz<IPY-INPUT>)dictresubaddr_patget	xmltodictparser1   
isinstancer   r^   ipython_input_patr   ipython8_input_patr   )outputr)   valuetblines        r*   normalize_outputr      s    &\\FV:+vf~FFvvzz&"----')vhVF^T`Ea'b'bv|$1VZZ5K5KKKQ]vAB:N&**VR0000*3/&.:Y*Z*Zv'jj,,2244 : :
UeS!! 	:"25"9"9F6N3f;' 	 	D6+]Jt<L<LMMD6,mZ=M=MNNDIIdOOOO {Mr-   c                    | d         }|d         }t          |          t          |          k    sJ t          ||          D ]\  }}|                    dg           }|                    dg           }t          t	          t
          |                    }t          t	          t
          |                    }	||	k    sJ |                    dd           }
|                    dd           }|
|k    sJ d S )Nrr   rb   r?   )lenzipr   r   mapr   )expectedactualexpected_cellsactual_cellsexpected_cellactual_cellexpected_outputsactual_outputsnormalized_expected_outputsnormalized_actual_outputsexpected_execution_countactual_execution_counts               r*   assert_notebooks_equalr     s   g&N'?L~#l"3"33333&).,&G&G B B"{
 ),,Y;;$B77&*3/?AQ+R+R&S&S#$(-=~)N)N$O$O!*.GGGGG#0#4#45F#M#M !,1BD!I!I'+AAAAAAB Br-   c                  T    ddt           j                            t          d          iiS )zk
    Prepare a notebook resources dictionary for executing test
    notebooks in the ``files`` folder.
    r   pathfiles)osr   joincurrent_dirr$   r-   r*   notebook_resourcesr   (  s$    
 k7!C!CDEEr-   c                     dgfd|                                  D             }t          j                            |          S )NzO[IPKernelApp] WARNING | debugpy_stream undefined, debugging will not be enabledc                     g | ]}|v|	S r$   r$   )r(   r   allowed_liness     r*   r   z3filter_messages_on_error_output.<locals>.<listcomp>5  s#    ]]]4}C\C\tC\C\C\r-   )
splitlinesr   linesepr   )
err_outputfiltered_resultr   s     @r*   filter_messages_on_error_outputr   0  sL     	ZM ^]]]
(=(=(?(?]]]O:???+++r-   
input_namery   zOther Comms.ipynbkernel_namepythonzClear Output.ipynbzEmpty Cell.ipynbzFactorials.ipynbHelloWorld.ipynbzInline Image.ipynbInterrupt.ipynb   T)r   timeoutinterrupt_on_timeoutallow_errorsJupyterWidgets.ipynb$Skip Exceptions with Cell Tags.ipynbSkip Exceptions.ipynb)r   r   z"Skip Execution with Cell Tag.ipynbz	SVG.ipynbzUnicode.ipynbUnicodePy3.ipynbzupdate-display-id.ipynbzCheck History in Memory.ipynbc                     t           j                            t          d|           }t	          ||t                                \  }}t          ||           dS )zHRuns a series of test notebooks and compares them to their actual outputr   N)r   r   r   r   r   r   r   )r   ry   
input_filer{   r~   s        r*   test_run_all_notebooksr   :  sN    > k7J??J&z49K9M9MNNHi8Y/////r-   c                    ddid}t           j                            t          d|          t	                      t          dt          |          i          5  fddD             }|D ]}|                                 |D ]}|                    d	           	 d
d
d
           n# 1 swxY w Y   |                                 }t          |j
                  dk    sJ d
S )Two notebooks should be able to be run simultaneously without problems.

    The two notebooks spawned here use the filesystem to check that the other notebook
    wrote to the filesystem.r   r   Parallel Execute {label}.ipynbr   NBEXECUTE_TEST_PARALLEL_TMPDIRc                 t    g | ]4}t          j        t                              |           f          5S )label)targetr   )	threadingThreadr   formatr(   r  r   ry   ress     r*   r   z+test_parallel_notebooks.<locals>.<listcomp>j  sT     
 
 
 L
8I8IPU8I8V8VX\^a7bccc
 
 
r-   AB   r   N )r   r   r   r   r   r   r   start
readouterrr   err)	capfdtmpdirr   threadstcapturedr   ry   r
  s	         @@@r*   test_parallel_notebooksr  ^  sX    8$D1Jk7J??J


C	7VE	F	F  
 
 
 
 
 
#
 
 
  	 	AGGIIII 	 	AFF1F	               !!H*8<88B>>>>>>s   AB..B25B2ntz!warns about event loop on Windowsreasonc           	         dddd}t           j                            t          d|          t	                                                      t           j                            t          d          d         d<   t          j                    5  t          j        dt          	           t                     t          j                            d
          5 }|                    t          fdt!          d          D                        ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   |                                 }t%          |j                  dk    sJ dS )Ensure that when many IPython kernels are run in parallel, nothing awful happens.

    Specifically, many IPython kernels when run simultaneously would encounter errors
    due to using the same SQLite history database.
    r      r   r   r   r   r   r   rd   re   r  )max_workersc                     g | ]}fS r$   r$   r(   ir   ry   r
  s     r*   r   z0test_many_parallel_notebooks.<locals>.<listcomp>  s     /Z/Z/ZAT30G/Z/Z/Zr-      Nr  )r   r   r   r   r   build_resourcesrs   rt   ru   rv   r   
concurrentfuturesProcessPoolExecutorr   r   ranger  r   r  )r  r   r4   r  r   ry   r
  s       @@@r*   test_many_parallel_notebooksr+  w  s    $22D#Jk7J??J



-
-
/
/C gll;@@C
OF		 	"	" \ \XFFFF 	Zs+++333BB 	\hLL-/Z/Z/Z/Z/Z/ZQVWXQYQY/Z/Z/Z[[[	\ 	\ 	\ 	\ 	\ 	\ 	\ 	\ 	\ 	\ 	\ 	\ 	\ 	\ 	\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ !!H*8<88B>>>>>>s7   AD97D"D9"D&	&D9)D&	*D99D= D=c                    ddid}t           j                            t          d|          t	                      t          dt          |          i          5  fd}t          j         |                       ddd           n# 1 swxY w Y   | 	                                }t          |j                  dk    sJ dS )	r   r   r   r   r   r  c                  T   K   fddD             } t          j        |   d {V  d S )Nc                 Z    g | ]'}t                              |                     (S )r  )r   r  r	  s     r*   r   zDtest_async_parallel_notebooks.<locals>.run_tasks.<locals>.<listcomp>  sF        #:#4#45#4#A#A4MM  r-   r  )rO   gathertasksr   ry   r
  s    r*   	run_tasksz0test_async_parallel_notebooks.<locals>.run_tasks  s`           '  E .%((((((((((r-   Nr  )r   r   r   r   r   r   r   rO   runr  r   r  )r  r  r   r2  r  r   ry   r
  s        @@@r*   test_async_parallel_notebooksr4    s    8$D1Jk7J??J


C	7VE	F	F 	! 	!	) 	) 	) 	) 	) 	) 	) 	IIKK   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! !!H*8<88B>>>>>>s   $BBBc                    dddd}t           j                            t          d|          t	                                                      t           j                            t          d          d         d<   t                     fd}t          j         |                       | 	                                }t          |j                  d	k    sJ d
S )r  r   r  r   r   r   r   r   c                  n   K   fdt          d          D             } t          j        |   d {V  d S )Nc                 2    g | ]}t                    S r$   )r   r#  s     r*   r   zItest_many_async_parallel_notebooks.<locals>.run_tasks.<locals>.<listcomp>  s&    MMMq#Jc::MMMr-   ra   )r*  rO   r/  r0  s    r*   r2  z5test_many_async_parallel_notebooks.<locals>.run_tasks  sQ      MMMMMME!HHMMMne$$$$$$$$$$r-   r  N)r   r   r   r   r   r&  r   rO   r3  r  r   r  )r  r   r2  r  r   ry   r
  s       @@@r*   "test_many_async_parallel_notebooksr8    s     $22D#Jk7J??J



-
-
/
/C gll;@@C
OF T3'''% % % % % % % K		!!H*8<88B>>>>>>r-   c                     ddi} d}t           j                            t          d|          }t	                      }t          || |          \  }}d }|d         d         d         d	         } ||d
                   } ||d                   }	 ||d                   }
 ||d                   } ||d         d         d         d         d                   } ||d         d         d         d         d                   }t          j        d          }||z
  |k     sJ |	|z
  |k     sJ |
|z
  |k     sJ ||z
  |k     sJ dS )zCompare the execution timing information stored in the cell with the
    actual time it took to run the cell. Also check for the cell timing string
    format.r   r   zSleep1s.ipynbr   c                 F    d}t           j                             | |          S )Nz%Y-%m-%dT%H:%M:%S.%fZ)datetimestrptime)stime_formats     r*   get_time_from_strz0test_execution_timing.<locals>.get_time_from_str  s     - ))![999r-   rr   r   r   	executionziopub.status.busyziopub.execute_inputzshell.execute_replyziopub.status.idler  rb   r   r   r   d   )millisecondsN)r   r   r   r   r   r   r;  	timedelta)ry   r   r   r
  r{   r~   r?  execution_timingstatus_busyexecute_inputrD   status_idle
cell_startcell_enddeltas                  r*   test_execution_timingrK    s    8$D Jk7J??J


C&z4==Hi: : : !)!,Z8E##$45H$IJJK%%&67L&MNNM%%&67L&MNNM##$45H$IJJK""9W#5a#8#CA#Fv#NOOJ  7!3A!6y!A!!DV!LMMHC000E#e++++:%----8#e++++!E))))))r-   c                      t           j                                        } t          |           }|                                5  |j        J 	 d d d            n# 1 swxY w Y   |j        J d S r   )rn   r   r   r   setup_kernelr   )r3   r4   s     r*   test_synchronous_setup_kernelrN    s    		!	!	#	#Bb!!H				 	  ' '{&&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ;s   
AA Ac                  P   t           j                                        } t                      }t	          | |          }|                                 |                                }|J |                                 |                                 |	                                 d S )Nkm)
rn   r   r   r   r   start_new_kernelstart_new_kernel_clientshutdowncleanup_resourcesstop_channelsr3   rQ  r4   r   s       r*   &test_startnewkernel_with_kernelmanagerrX    s    		!	!	#	#B	BbR(((H		)	)	+	+B>>> KKMMMr-   c                     t           j                                        } t                      }t	          | |          }|                                }|j        g k    sJ |                                 |j        dgk    sJ |                                 |j        dgk    sJ |                                 |	                                 |
                                 d S )NrP  z#--HistoryManager.hist_file=:memory:)rn   r   r   r   r   clientextra_argumentsrR  rT  rU  rV  rW  s       r*   *test_start_new_kernel_history_file_settingr\    s    		!	!	#	#B	BbR(((H	B #r))))#(M'NNNNN#(M'NNNNN KKMMMr-      zrequires client 7+c                  
    G d dt                     } t          j                                        }t	                      }| |_        t          ||          }|                                 |j        sJ |j	        J t          j        t                    5 }|                                 d d d            n# 1 swxY w Y   t          |j        j        d                   dk    sJ |j        J |j	        J |j        rJ d S )Nc                   B    e Zd Z	 	 	 	 	 ddedededededdfd	Zdd
ZdS )Ltest_start_new_kernel_client_cleans_up_kernel_on_failure.<locals>.FakeClientTshelliopubstdinhbcontrolrL   Nc                      t          d          )N	Any error)	Exception)r   ra  rb  rc  rd  re  s         r*   start_channelsz[test_start_new_kernel_client_cleans_up_kernel_on_failure.<locals>.FakeClient.start_channels  s     K(((r-   c                     d S r   r$   r   s    r*   rV  zZtest_start_new_kernel_client_cleans_up_kernel_on_failure.<locals>.FakeClient.stop_channels  s    Dr-   )TTTTT)rL   N)rH   rI   rJ   boolri  rV  r$   r-   r*   
FakeClientr`    s          	) 	)	) 	) 		)
 	) 	) 	) 	) 	) 	)	 	 	 	 	 	r-   rm  rP  r   rg  )r   rn   r   r   r   client_factoryr   rR  
has_kernelrQ  pytestraisesrh  rS  r   r   r   r   )rm  r3   rQ  r4   r  s        r*   8test_start_new_kernel_client_cleans_up_kernel_on_failurerr    sZ       \    
	!	!	#	#B	B"BbR(((H=;"""	y	!	! +S((***+ + + + + + + + + + + + + + + sy~a !![0000;;}s   B88B<?B<c                   ,   e Zd ZdZdZd Zd Zd Zej	        
                    d e                                            vd          d	             Zd
 Zd Zd Zd Zed             Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!dS )TestExecutez&Contains test functions for execute.pyNc                 \    t          t          j                                                   d S r   )r   rn   r   r   rk  s    r*   test_constructorzTestExecute.test_constructor8  s$    x{//1122222r-   c                     t           j                                        }t          |d          }|                                }d|j        v sJ d S )Nr   )r   language_info)rn   r   r   r   r   r   )r   r3   r4   s      r*   test_populate_language_infoz'TestExecute.test_populate_language_info;  sQ    [%%''!"(;;;"+------r-   c                     t           j                            t          dd          }|                                 }d|d         d<   t          |i |          \  }}t          ||           dS )z1Can the kernel be started when the path is empty?r   r   r  r   r   N)r   r   r   r   r&  r   r   r   rx   r
  r{   r~   s        r*   test_empty_pathzTestExecute.test_empty_pathA  se    7<<W6HII""$$"$J*8R==)x33333r-   python3zrequires a python3 kernelspecr  c                 V   t           j                            t          dd          }|                                 }t          |ddi|          \  }}t          ||           t          j        t                    5  t          |ddi|          \  }}ddd           dS # 1 swxY w Y   dS )zCan kernel in nb metadata be found when an empty string is passed?

        Note: this pattern should be discouraged in practice.
        Passing in no kernel_name to NotebookClient is recommended instead.
        r   r   r   r  N)
r   r   r   r   r&  r   r   rp  rq  r   r{  s        r*   test_empty_kernel_namez"TestExecute.test_empty_kernel_nameI  s     7<<W6HII""$$*8mR5H#NN)x333]:&& 	U 	U".x-9NPS"T"THi	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	Us   :BB"%B"c                    t           j                            t          dd          }|                                 }t           j                            |          |d         d<   t          |ddi|          \  }}|                     t          |d                   d           |                     t          |d         d	         d
                   d           |d         d	         d
         d	         }|                     |d         d           |                     |d         d           |                     |d         d           dS )zTest disabling standard inputr   zDisable Stdin.ipynbr   r   r   Trr   r   r   rb   output_typerC   enameStdinNotImplementedErrorevaluezHraw_input was called, but this frontend does not support input requests.N)	r   r   r   r   r&  dirnamer   assertEqualr   )r   rx   r
  r{   r~   r   s         r*   test_disable_stdinzTestExecute.test_disable_stdinZ  s0   7<<W6KLL""$$"$'//(";";J*8nd5KSQQ) 	Yw/00!444Yw/29=>>BBB7#A&y1!4.888*DEEE8V	
 	
 	
 	
 	
r-   c                    t           j                            t          dd          }|                                 }t           j                            |          |d         d<   t          j        t                    5 }t          |ddi|           ddd           n# 1 swxY w Y   | 
                    t          |j        j        d                   d	           dS )
:Check that an error is raised when a computation times outr   r   r   r   r   r   Nr   zA cell timed out while it was being executed, after 1 seconds.
The message was: Cell execution timed out.
Here is a preview of the cell contents:
-------------------
while True: continue
-------------------
)r   r   r   r   r&  r  rp  rq  TimeoutErrorr   r  r   r   r   )r   rx   r
  r  s       r*   test_timeoutzTestExecute.test_timeouto  s    7<<W6GHH""$$"$'//(";";J]<(( 	8CIq>3777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8	q!""		
 		
 		
 		
 		
   <BB #B c                 Z   t           j                            t          dd          }|                                 }t           j                            |          |d         d<   d }t          j        t                    5  t          |d|i|           ddd           dS # 1 swxY w Y   dS )r  r   r   r   r   c                     dS )N
   r$   )r   s    r*   timeout_funcz3TestExecute.test_timeout_func.<locals>.timeout_func  s    2r-   r  N)
r   r   r   r   r&  r  rp  rq  r  r   )r   rx   r
  r  s       r*   test_timeout_funczTestExecute.test_timeout_func  s    7<<W6GHH""$$"$'//(";";J	 	 	 ]<(( 	H 	HNL#A3GGG	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	Hs   ?B  B$'B$c                    t           j                                        }t          |dt                    }|                                }d|j        v sJ |                                5  |j        J |	                    |j        
                                          }|J d|d         d         v sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   )r   kernel_manager_classrx  namerB   )rn   r   r   r   r   r   r   rM  r   wait_for_replykernel_info)r   r3   r4   info_msgs       r*   test_sync_kernel_managerz$TestExecute.test_sync_kernel_manager  s1   [%%''!"(Q^___"+----""$$ 	B 	B;***..x{/F/F/H/HIIH'''Xi0AAAAAA		B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	Bs   )ACC
Cc                    t           j                            t          dd          }t	          |          5 }t          j        |d          }ddd           n# 1 swxY w Y   |                                 }t           j                            |          |d         d<   t          |d          }t          j        t                    5  |                                 ddd           n# 1 swxY w Y   |                                }d	 }||_        t          j        t           t          f          5  |                                \  }}ddd           dS # 1 swxY w Y   dS )
zVCheck that an error is raised when the kernel is_alive is false after a cell timed outr   r   ra   Nr   r   r   r  c                  
   K   dS )NFr$   r$   r-   r*   r   z=TestExecute.test_kernel_death_after_timeout.<locals>.is_alive  s      5r-   )r   r   r   r   rm   rn   ro   r&  r  r   rp  rq  r  r   create_kernel_managerr   r0   )	r   rx   rz   r{   r
  r4   rQ  r   r~   s	            r*   test_kernel_death_after_timeoutz+TestExecute.test_kernel_death_after_timeout  s    7<<W6GHH(^^ 	+q}Q**H	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+""$$"$'//(";";J!(A666]<(( 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	++--	 	 	  ]L,788 	5 	5"*"2"2"4"4Hi	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5s5   AAA	C**C.1C.3EEEc                 t   t           j                            t          dd          }t	          |          5 }t          j        |d          }ddd           n# 1 swxY w Y   t          |          }t          j	        t                    5  |                                 ddd           dS # 1 swxY w Y   dS )ziCheck that an error is raised when the kernel is_alive is false during a cell
        execution.
        r   Autokill.ipynbra   N)r   r   r   r   rm   rn   ro   r   rp  rq  r0   r   r   rx   rz   r{   r4   s        r*   "test_kernel_death_during_executionz.TestExecute.test_kernel_death_during_execution  s     7<<W6FGG(^^ 	+q}Q**H	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ "(++]<(( 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s#   AAAB--B14B1c                 4   t           j                            t          dd          }|                                 }t           j                            |          |d         d<   t          j        t                    5 }t          |ddi|           ddd           n# 1 swxY w Y   t          t          |j                  t                    sJ t          t          |j                            }t          j                            d          sd	|v sJ dS dS )
zK
        Check that conversion halts if ``allow_errors`` is False.
        r   r   r   r   r   FNwin   # üñîçø∂é)r   r   r   r   r&  r  rp  rq  r   r   r   r   r   r   sysplatform
startswithr   rx   r
  excexc_strs        r*   test_allow_errorszTestExecute.test_allow_errors  sC    7<<W6MNN""$$"$'//(";";J]-.. 	A#NE#:C@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A #ci..#.....S^^,, |&&u-- 	2&'1111	2 	211r  c                    t           j                            t          dd          }|                                 }t           j                            |          |d         d<   t          j        t                    5 }t          |ddi|           ddd           n# 1 swxY w Y   t          t          |j                            }d|v sJ t          j                            d	          sd
|v sJ d|v sJ d|v sJ d|v sJ d|v sJ d                    g d          |v sJ d                    g d          |v sJ dS )z~
        Check that conversion halts if the ``force_raise_errors`` traitlet on
        NotebookClient is set to True.
        r   r   r   r   force_raise_errorsTNzException: messager  r  stderrstdoutzhello
z	errorred

)r  z----- stdout -----hello---)r  z----- stderr -----errorredr  )r   r   r   r   r&  r  rp  rq  r   r   r   r   r   r  r  r  r  s        r*   test_force_raise_errorsz#TestExecute.test_force_raise_errors  s   
 7<<W6\]]""$$"$'//(";";J]-.. 	F#$8$#?EEE	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F S^^,, $w.... |&&u-- 	2&'11117""""7""""G####w&&&&yyCCCDDOOOOyyFFFGG7RRRRRRr  c                    t           j                            t          dd          }t	          |          5 }t          j        |d          }d d d            n# 1 swxY w Y   t          ||                                           }|	                    d           |j
        }|J |	                    d           ||j
        k    sJ |	                    dd           ||j
        k    sJ d S )	Nr   r   ra   rc   F
cleanup_kcT)reset_kcr  r   r   r   r   rm   rn   ro   r   r&  r   r   )r   rx   rz   r{   r4   r   s         r*   test_reset_kernel_clientz$TestExecute.test_reset_kernel_client  s8   7<<W6HII(^^ 	+q}Q**H	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ "**,,
 
 

 	E***[~~~E***X[    $5999 X[         AAAc                    t           j                            t          dd          }t	          |          5 }t          j        |d          }d d d            n# 1 swxY w Y   t          ||                                           }|	                                 |j
        J |	                    d           |j
        J d S )Nr   r   ra   r  Fr  r  r  s        r*   test_cleanup_kernel_clientz&TestExecute.test_cleanup_kernel_client  s    7<<W6HII(^^ 	+q}Q**H	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ "**,,
 
 

 	{"""E*** {&&&&&r  c                 d   ddl m} t          j                            t
          dd          }t          |          5 }t          j        |d          }d d d            n# 1 swxY w Y   t          j
        |          }|j        D ]}d|v r|d= g |d<   t          ||                                 |          }t          d	d
d          5  |                                 d d d            n# 1 swxY w Y   |j                                        }|D ]\  }	}
|                     |
d|	 d            d S )Nr   )FakeCustomKernelManagerr   r   ra   r?   rb   )rc   r  rh   ri   rj   r   z was called)fake_kernelmanagerr  r   r   r   r   rm   rn   ro   rp   rq   rr   r   r&  r   r   expected_methodsr1   assertNotEqual)r   r  rx   rz   r{   r|   r}   r4   r   method
call_counts              r*   test_custom_kernel_managerz&TestExecute.test_custom_kernel_manager  s   ??????7<<W6HII(^^ 	+q}Q**H	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+  =22$* 	! 	!D D((*+ DOO!**,,!8
 
 
 dT::;; 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 +;AACC"* 	G 	GFJ
A&/E/E/EFFFF	G 	Gs#   AA"%A"	C**C.1C.c                   	 g 	 G 	fddt                     }t          j                            t                    }t          j                            |dd          }t          |          5 }t          j        |d          }d d d            n# 1 swxY w Y   t          j
        |          } ||          }|                                }	dddd	gk    sJ t          ||           d S )
Nc                   "     e Zd Z fdZ xZS )@TestExecute.test_process_message_wrapper.<locals>.WrappedPreProcc                 |    t                                          |||          }|r                    |           |S r   )superprocess_messager   )r   r   r}   
cell_indexresult	__class__rb   s        r*   r  zPTestExecute.test_process_message_wrapper.<locals>.WrappedPreProc.process_message:  s=    00dJGG +NN6***r-   )rH   rI   rJ   r  __classcell__)r  rb   s   @r*   WrappedPreProcr  9  s>                 r-   r  r   r   ra   r  streamzHello World
)r  r  r   )r   r   r   r  __file__r   rm   rn   ro   rp   rq   r   r   )
r   r  r   rx   rz   r{   originalwppexecutedrb   s
            @r*   test_process_message_wrapperz(TestExecute.test_process_message_wrapper6  s9   	 	 	 	 	 	 	^ 	 	 	 gooh//7<<W6HII(^^ 	+q}Q**H	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ =**nX&&;;==HX__`````x22222s   -BBBc                 l   t           j                            t          dd          }t	          |          5 }t          j        |d          }d d d            n# 1 swxY w Y   t          j        |          }t          |t           j        
                    |                    }t          ||           d S )Nr   r   ra   )r   r   r   r   rm   rn   ro   rp   rq   r   r  r   )r   rx   rz   r{   r  r  s         r*   test_execute_functionz!TestExecute.test_execute_functionL  s    7<<W6HII(^^ 	+q}Q**H	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ =**8RW__X%>%>??x22222r  c                    t           j                            t          dd          }ddi}|                                 }t           j                            |          |d         d<   t          |||          \  }}d |d         D             }d	 |D             }|d         d
         d         }|D ]"}	|d         |	         }
d|
v sJ d|
v sJ d|
v sJ #d|v sJ d|v sJ dS )zGRuns a test notebook with widgets and checks the widget state is saved.r   r   r   r   r   r   c                 P    g | ]#}|d          D ]}|                     di           $S )rb   r   )r   )r(   r}   r   s      r*   r   z,TestExecute.test_widgets.<locals>.<listcomp>_  sN     
 
 
'+PTU^P_
 
FLFJJvr""
 
 
 
r-   rr   c                 2    g | ]}d |v |d          d         S )r   r   r$   )r(   r   s     r*   r   z,TestExecute.test_widgets.<locals>.<listcomp>c  s8     
 
 
9TAA ;<ZHAAAr-   widgetsz)application/vnd.jupyter.widget-state+jsonstate
model_namemodel_moduleversion_majorversion_minorN)r   r   r   r   r&  r  r   )r   r   ry   r
  r{   r~   output_data	model_idswdatar7   ds              r*   test_widgetszTestExecute.test_widgetsW  s5   W\\+w8NOO
x(""$$"$'//*"="=J*:tSAA)
 
/8/A
 
 

 
#
 
 
	 *%i01\] 	  	 Agq!A1$$$$!Q&&&&a<<<<<%''''%''''''r-   c                    t           j                            t          dd          }t	          |          5 }t          j        |d          }d d d            n# 1 swxY w Y   t          |          \  }}|                                 |d         	                                 |d         	                                 |d         	                                 |d         	                                 |d	         
                                 |d
         	                                 |d         	                                 |d         
                                 d S Nr   r   ra   r3   r   r   r   r   r   r   r    r!   r   r   r   r   rm   rn   ro   r9   r   assert_called_onceassert_not_calledr   rx   rz   r{   r4   r6   s         r*   test_execution_hookzTestExecute.test_execution_hookr  s   7<<W6HII(^^ 	+q}Q**H	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+1X>>>%o11333 33555 !44666 !44666o00222!"55777$%88:::!"4466666r  c                    t           j                            t          dd          }t	          |          5 }t          j        |d          }d d d            n# 1 swxY w Y   t          |          \  }}t          j	        t                    5  |                                 d d d            n# 1 swxY w Y   |d                                          |d                                          |d                                          |d                                          |d	                                          |d
                                          |d                                          |d                                          d S Nr   zError.ipynbra   r  r   r   r   r   r   r   r    r!   r   r   r   r   rm   rn   ro   r9   rp  rq  r   r   r  r  r  s         r*   test_error_execution_hook_errorz+TestExecute.test_error_execution_hook_error     7<<WmDD(^^ 	+q}Q**H	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+1X>>>%]-.. 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	o11333 33555 !44666 !44666o11333!"55777$%88:::!"4466666#   AAAB00B47B4c                    t           j                            t          dd          }t	          |          5 }t          j        |d          }d d d            n# 1 swxY w Y   t          |          \  }}t          j	        t                    5  |                                 d d d            n# 1 swxY w Y   |d                                          |d                                          |d                                          |d                                          |d	                                          |d
                                          |d                                          |d                                          d S )Nr   r  ra   r  r   r   r   r   r   r   r    r!   )r   r   r   r   rm   rn   ro   r9   rp  rq  r0   r   r  r  r  s         r*   test_error_notebook_hookz$TestExecute.test_error_notebook_hook  s   7<<W6FGG(^^ 	+q}Q**H	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+1X>>>%]<(( 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	o11333 33555 !44666 !33555o00222!"55777$%88:::!"5577777r  c                    t           j                            t          dd          }t	          |          5 }t          j        |d          }d d d            n# 1 swxY w Y   t          |          \  }}|                                 |d         	                                 |d         	                                 |d         	                                 |d         	                                 |d	         
                                 |d
         	                                 |d         	                                 |d         
                                 d S r  r  r  s         r*   test_async_execution_hookz%TestExecute.test_async_execution_hook  r  r  c                    t           j                            t          dd          }t	          |          5 }t          j        |d          }d d d            n# 1 swxY w Y   t          |          \  }}t          j	        t                    5  |                                 d d d            n# 1 swxY w Y   |d                                          |d                                          |d                                          |d                                          |d	                                          |d
                                          |d                                          |d                                          d S r  r  r  s         r*   test_error_async_execution_hookz+TestExecute.test_error_async_execution_hook  r  r  )"rH   rI   rJ   __doc__maxDiffrv  ry  r|  rp  markxfailr   find_kernel_specsr  r  r  r  r  r
   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r$   r-   r*   rt  rt  3  s       00G3 3 3. . .4 4 4 [**,,>>@@@.   U U	 U
 
 
*
 
 
&
H 
H 
H	B 	B 	B 5 5 U50  2 2 2"S S S8! ! !2' ' '(G G G:3 3 3,	3 	3 	3( ( (67 7 77 7 7 8 8 8 7 7 77 7 7 7 7r-   rt  c                      e Zd ZdZ e            d             Z edddiddidd	d
d          d             Z edddiddid          d             Z edddidd	d
ddddiddd
d          d             Z e            d             Z	 edddidd	d
ddddiddd
d          d             Z
 edddii d          d             Z edddidd	d
ddddiddd
d          d             Z edddidd	d
ddddii d          d             Z edddidd	d
ddddiddid          d             Z edddidd	d
ddddiddiddddiddd
d          d             Z edddidd	d
ddddiddidd dd id!d"id	did#d          d$             Z edddid%d&id          d'             Z edddid%d&id          d(             Z edddid&dd	d)d          d*             Z ed+dd+id,d-d	diid.d          d/             Z ed+dd+id0gd,d	did1ggd2d.d3          d4             Z ed+dd+id0gd,d	did1ggd2d.d3d+dd+id0gd,d5d6id7ggd2d.d3          d8             Z ed+dd+id,d	did.d          d9             Z ed:dd:id!d"id	did&d;d          d<             Z ed:dd:id=d,id!d"id	did&d>d          d?             Z ed@dd@id!d"id	did#d          dA             Z ed@dd@id=d,id!d"id	didBd          dC             Z ed@dd@id=d,id!d"id	didBdd@dd@id=dDidEdFid	dGidBdd@dd@id=d,idHdIid6dJdKdBd          dL             Z ed dd id!d"id	did#d          dM             Z ed@dd@id=d,idHdIid6dJdKdBdd dd id=dNidHdIid6dJdKdBd          dO             Z ed@dd@id=d,id!d"id	didBdd dd id=d,idHdIid6dJdKdBd          dP             Z edQddQid	ddRgdSd          dT             Z  edQddQid	ddRgdSddddiddQidU          dV             Z! edQddQid	ddRgdSddddiddWidU          dX             Z" edddiddQidU          dY             Z# edddidQdZd[dU          d\             Z$ edddiddQidU          d]             Z% edddiddQidU          d^             Z& edddiddQidU          d_             Z' e            d`             Z( edQddQid	ddRgdSddddiddQidU          da             Z) edddiddQidU          db             Z* e            dc             Z+ edQddQid	ddRgdSddddiddQidU          dd             Z, edddidded
ddddiddfd
ddddidd5d
ddddidd6d
d          dg             Z-dhS )iTestRunCellz7Contains test functions for NotebookClient.execute_cellc                 f    |                     |d           |j        dk    sJ |j        g k    sJ d S )Nr   r   execute_cellr  rb   r   r4   r   r   s       r*   test_idle_messagezTestRunCell.test_idle_message  sF    i+++&!++++ B&&&&&&r-   r  rE   rD   r:   wrong_parentr  foo)r  r   )rE   rF   rA   rB   c                 f    |                     |d           |j        dk    sJ |j        g k    sJ d S Nr   r  r  r  s       r*   test_message_for_wrong_parentz)TestRunCell.test_message_for_wrong_parent  H     	i+++&!++++ B&&&&&&r-   r>   r   busy)rE   rF   rB   c                 f    |                     |d           |j        dk    sJ |j        g k    sJ d S r  r  r  s       r*   test_busy_messagezTestRunCell.test_busy_message  sH     	i+++&!++++ B&&&&&&r-   r  barc                 .   d }||j         j        _        d|_        t	          j        t                    5  |                    |d           d d d            n# 1 swxY w Y   |j        dk    sJ | 	                    |j
        dddddd	d
dg           d S )Nc                 H   K   t          j        |            d {V  t          r   )rO   sleepr   r  s    r*   r   z5TestRunCell.test_deadline_exec_reply.<locals>.get_msg  s-      -(((((((((Kr-   r   r   r   r  r  r	  r  r  r   r  r  )r   r   r   r   rp  rq  r  r  r  assertListEqualrb   )r   r4   r   r   r   s        r*   test_deadline_exec_replyz$TestRunCell.test_deadline_exec_reply  s    	 	 	 -4!)]<(( 	0 	0!!)Q///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 &!++++ ((EJJ ((EJJ	
 	
 	
 	
 	
s   AAAc                     t                      |_        d|_        t          j        t
                    5  |                    |d           d d d            d S # 1 swxY w Y   d S )NTr   )r   r   raise_on_iopub_timeoutrp  rq  r  r  r  s       r*   test_deadline_iopubzTestRunCell.test_deadline_iopub  s     $)77 *.']<(( 	0 	0!!)Q///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s   AAAc                    d } |t          |j                  d d                   |_        t          t          dd|j        ii                    |j        j        _        d|_        t          j
        t                    5  |                    |d           d d d            n# 1 swxY w Y   |j        dk    sJ |                     |j        d	d
ddd	dddg           d S )Nc              3   :   K   | E d {V  	 t                      V  r   r   )r   s    r*   message_seqz=TestRunCell.test_eventual_deadline_iopub.<locals>.message_seq"  s5      ggr-   rA   r:   r   Tr   r   r  r  r	  r  r  r  )r   r   r	   rV   r   r   r   r   r  rp  rq  r  r  r  r  rb   )r   r4   r   r   r  s        r*   test_eventual_deadline_iopubz(TestRunCell.test_eventual_deadline_iopub  sO   	 	 	
 $/;tL4L/M/Mcrc/R#S#S ,0$o(BT7U%VWW-
 -
 -
!) +/']<(( 	0 	0!!)Q///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 &!++++ ((EJJ ((EJJ	
 	
 	
 	
 	
s   B&&B*-B*rF  c                 f    |                     |d           |j        dk    sJ |j        g k    sJ d S r  r  r  s       r*   test_execute_input_messagez&TestRunCell.test_execute_input_message:  sH     	i+++&!++++ B&&&&&&r-   c                     |                     |d           |j        dk    sJ |                     |j        ddddddddg           d S )	Nr   r   r  r  r	  r  r  r  )r  r  r  rb   r  s       r*   test_stream_messagesz TestRunCell.test_stream_messagesD  su     	i+++&!++++ ((EJJ ((EJJ	
 	
 	
 	
 	
r-   clear_outputc                 f    |                     |d           |j        dk    sJ |j        g k    sJ d S )Nr   r   r  r  s       r*   test_clear_output_messagez%TestRunCell.test_clear_output_message]  r  r-   waitTc                     |                     |d           |j        dk    sJ |                     |j                   |j        ddddgk    sJ d S )Nr   r   r  r  r	  r  )r  r  
assertTrueclear_before_next_outputrb   r  s       r*   test_clear_output_wait_messagez*TestRunCell.test_clear_output_wait_messagel  sk     	i+++&!++++9::: XxY^%_%_$```````r-   c                     |                     |d           |j        dk    sJ |j        rJ |j        ddddgk    sJ d S )Nr   ra   r  r  r  r  r  r  r*  rb   r  s       r*   +test_clear_output_wait_then_message_messagez7TestRunCell.test_clear_output_wait_then_message_message  se    $ 	i+++&!++++4444 XxY^%_%_$```````r-   update_display_datametafoometabar)r   r   c                     |                     |d           |j        dk    sJ |j        sJ |j        ddddgk    sJ d S )Nr   ra   r  r  r	  r  r-  r  s       r*   2test_clear_output_wait_then_update_display_messagez>TestRunCell.test_clear_output_wait_then_update_display_message  se    $ 	i+++&!++++0000 XxY^%_%_$```````r-   r?   *   c                     |                     |d           |j        dk    sJ |j        dk    sJ |j        g k    sJ d S )Nr   r  r4  r  r  r?   rb   r  s       r*   test_execution_count_messagez(TestRunCell.test_execution_count_message  s\     	i+++&!++++(B.... B&&&&&&r-   c                     |                     |dd           |j        dk    sJ |j        dk    sJ |j        g k    sJ d S )Nr      )r?   r  r6  r  s       r*   0test_execution_count_message_ignored_on_overridez<TestRunCell.test_execution_count_message_ignored_on_override  sa     	iB???&!++++(B.... B&&&&&&r-   )r?   r  r   c                     |                     |d           |j        dk    sJ |j        dk    sJ |j        ddddgk    sJ d S )Nr   r  r4  r  r  r	  r  r6  r  s       r*   (test_execution_count_with_stream_messagez4TestRunCell.test_execution_count_with_stream_message  sj     	i+++&!++++(B.... XxY^%_%_$```````r-   commfoobarr  )comm_idr   c                     |                     |d           |j        dk    sJ |                     |j        dddii           |j        rJ |j        g k    sJ d S )Nr   r  r>  r	  r  )r  r  r  widget_statewidget_buffersrb   r  s       r*   test_widget_comm_messagez$TestRunCell.test_widget_comm_message  sy     	i+++&!++++.E5>0JKKK**** B&&&&&&r-   s   123r   )r  buffer_paths)rE   rF   buffersrB   c                     |                     |d           |j        dk    sJ |j        dddiik    sJ |j        ddddd	gd
iik    sJ |j        g k    sJ d S )Nr   r  r>  r	  r  r   MTIzbase64r   r   encodingr   r  r  rA  rB  rb   r  s       r*   &test_widget_comm_buffer_message_singlez2TestRunCell.test_widget_comm_buffer_message_single  s     	i+++&!++++$E5>(BBBBB&y6xRXQY"Z"Z[+
 
 
 
 
  B&&&&&&r-   foo2bar2path2c                     |                     |d           |j        dk    sJ |j        ddddik    sJ |j        dddd	gd
dddgd
dik    sJ |j        g k    sJ d S )Nr   r   r>  r  rO  )r	  rN  rH  rI  r   rJ  rP  )rG  )rP  rL  r  s       r*    test_widget_comm_buffer_messagesz,TestRunCell.test_widget_comm_buffer_messages	  s    * 	i+++&!++++$5&3Q3Q(RRRRR&$*6(SS%+G9UU +
 
 
 
 
  B&&&&&&r-   c                     |                     |d           |j        dk    sJ |j        rJ |j        rJ |j        g k    sJ d S r  rL  r  s       r*   test_unknown_comm_messagez%TestRunCell.test_unknown_comm_message+  sf     	i+++&!++++((((**** B&&&&&&r-   execute_result)r   r   r?   c                     |                     |d           |j        dk    sJ |j        dk    sJ |j        dddiddidd	gk    sJ |j        rJ d S )
Nr   r  r4  rU  r0  r1  r	  r  r  r   r   r?   r  r  r?   rb   _display_id_mapr  s       r*   test_execute_result_messagez'TestRunCell.test_execute_result_message@  s     	i+++&!++++(B.... /&	2#%	 %
 
 
 
 
 ++++++r-   
display_id)	transientr   r   r?   c                     |                     |d           |j        dk    sJ |j        dk    sJ |j        dddiddidd	gk    sJ d
|j        v sJ d S )Nr   r  r4  rU  r0  r1  r	  r  rW  r>  rX  r  s       r*   (test_execute_result_with_display_messagez4TestRunCell.test_execute_result_with_display_message\  s     	i+++&!++++(B.... /&	2#%	 %
 
 
 
 
 83333333r-   display_datac                     |                     |d           |j        dk    sJ |j        dddiddidgk    sJ |j        rJ d S )	Nr   r  r_  r0  r1  r	  r  r  r   r   r  r  rb   rY  r  s       r*   $test_display_data_without_id_messagez0TestRunCell.test_display_data_without_id_messagex  s     	i+++&!++++ -&	2 %
 
 
 
 
 ++++++r-   )r\  r   r   c                     |                     |d           |j        dk    sJ |j        dddiddidgk    sJ d	|j        v sJ d S )
Nr   r  r_  r0  r1  r	  r  ra  r>  rb  r  s       r*   test_display_data_messagez%TestRunCell.test_display_data_message  s     	i+++&!++++ -&	2 %
 
 
 
 
 83333333r-   foobar_othermetafoo_othermetabar_other	bar_othermetafoo2metabar2	foobarbazr	  bazc                     |                     |d           |j        dk    sJ |j        dddidddd	dd
diddid	dddidddd	gk    sJ d|j        v sJ d S )Nr   ra   r_  rj  rk  rO  rl  rm  ra  rg  rh  r	  ri  r>  rb  r  s       r*   !test_display_data_same_id_messagez-TestRunCell.test_display_data_same_id_message  s    < 	i+++&!++++ -'4 &{;;   .,o>,   .'4 &{;; %
 
 
 
 
" 83333333r-   c                 x    |                     |d           |j        dk    sJ |j        g k    sJ |j        rJ d S r  rb  r  s       r*   +test_update_display_data_without_id_messagez7TestRunCell.test_update_display_data_without_id_message  sW     	i+++&!++++ B&&&&++++++r-   foobar2c                     |                     |d           |j        dk    sJ |j        dddidddd	gk    sJ d
|j        v sJ d S Nr   r   r_  rj  rk  rO  rl  rm  ra  r>  rb  r  s       r*   ,test_update_display_data_mismatch_id_messagez8TestRunCell.test_update_display_data_mismatch_id_message      * 	i+++&!++++ -'4 &{;; %
 
 
 
 
 83333333r-   c                     |                     |d           |j        dk    sJ |j        dddidddd	gk    sJ d
|j        v sJ d S ru  rb  r  s       r*    test_update_display_data_messagez,TestRunCell.test_update_display_data_message  rw  r-   rC   Boom)r  r  r   c                 t    |                     |d           |j        dk    sJ |j        ddddgdgk    sJ d S Nr   r  rC   r	  r  rz  )r  r  r  r   r  r  s       r*   test_error_messagezTestRunCell.test_error_message0  sj     	i+++&!++++ #euTZS[\\%
 
 
 
 
 
 
r-   r   c                     |                      t                    5  |                    |d           d d d            n# 1 swxY w Y   |j        dk    sJ |j        ddddgdgk    sJ d S r|  )assertRaisesr   r  r  rb   r  s       r*   $test_error_and_error_status_messagesz0TestRunCell.test_error_and_error_status_messages@  s     122 	0 	0!!)Q///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 &!++++ #euTZS[\\%
 
 
 
 
 
 
s   >AAr<   c                 t    |                     |d           |j        dk    sJ |j        ddddgdgk    sJ d S r|  r  r  s       r*   test_error_message_onlyz#TestRunCell.test_error_message_onlyX  sl     	i+++ &!++++ #euTZS[\\%
 
 
 
 
 
 
r-   c                 t    d|_         |                    |d           |j        dk    sJ |j        g k    sJ d S )NTr   r   )r   r  r  rb   r  s       r*   r  zTestRunCell.test_allow_errorsp  sR     !%i+++ &!++++ B&&&&&&r-   NotImplementedError)r>   r  c                 v    dg|_         |                    |d           |j        dk    sJ |j        g k    sJ d S )Nr  r   r   )allow_error_namesr  r  rb   r  s       r*   test_allow_error_namesz"TestRunCell.test_allow_error_names  sU     '<%<"i+++ &!++++ B&&&&&&r-   c                 |    dg|j         d<   |                    |d           |j        dk    sJ |j        g k    sJ d S )Nzraises-exceptiontagsr   r   )r   r  r  rb   r  s       r*   test_raises_exception_tagz%TestRunCell.test_raises_exception_tag  sZ     '9%9	6"i+++ &!++++ B&&&&&&r-   c                     t          di dg           }|                    |d           |j        dk    sJ |j        g k    sJ d S )Nr   rawr   r   r   r  r  rb   r  s       r*   test_non_code_cellzTestRunCell.test_non_code_cell  sb     !"PU_abbb	i+++ &!++++ B&&&&&&r-   c                     t          di dg           }|                    |d           |j        dk    sJ |j        g k    sJ d S )Nz     r   r   r   r  r  s       r*   test_no_sourcezTestRunCell.test_no_source  sl     !
 
 
	 	i+++ &!++++ B&&&&&&r-   c                    t          |          \  }}|                    |d           |d                             |d           |d                             |d           |d                             |d           |d                             |dt                     |d	                                          |d
                                          |d                                          |d                                          d S Nr4   r   r   r}   r  r   r   r   r}   r  rD   r   r   r    r!   r9   r  assert_called_once_withEXECUTE_REPLY_OKr  r   r4   r   r   r6   s        r*   test_cell_hookszTestRunCell.test_cell_hooks  s   18DDD%i+++o66IRS6TTT 88iTU8VVV !99yUV9WWW !99q8H 	: 	
 	
 	
 	o00222!"44666$%77999!"4466666r-   c                    t          |          \  }}|                     t                    5  |                    |d           d d d            n# 1 swxY w Y   |d                             |d           |d                             |d           |d                             |d           |d                             |dt
                     |d	                             |dt
                     |d
                                          |d                                          |d                                          d S r  r9   r  r   r  r  EXECUTE_REPLY_ERRORr  r  s        r*   test_error_cell_hooksz!TestRunCell.test_error_cell_hooks  s    28DDD%122 	0 	0!!)Q///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0o66IRS6TTT 88iTU8VVV !99yUV9WWW !99q8K 	: 	
 	
 	
 	o66q8K 	7 	
 	
 	
 	!"44666$%77999!"4466666s   AAAc                 $   t          di dg           }t          |          \  }}|                    |d           |d                             |d           |d                                          |d	                                          |d
                                          |d                                          |d                                          |d                                          |d                                          d S )Nr   r  r   r  r   r   r  r   r   r   r   r   r    r!   )r   r9   r  r  r  r  s        r*   test_non_code_cell_hooksz$TestRunCell.test_non_code_cell_hooks  s    !"PU_abbb	18DDD%i+++o66IRS6TTT 22444 !33555 !33555o00222!"44666$%77999!"4466666r-   c                    t          |d          \  }}|                    |d           |d                             |d           |d                             |d           |d                             |d           |d                             |dt          	           |d
                                          |d                                          |d                                          |d                                          d S NT)r4   r5   r   r   r  r   r   r   r  r   r   r    r!   r  r  s        r*   test_async_cell_hooksz!TestRunCell.test_async_cell_hooks  s    18QUVVV%i+++o66IRS6TTT 88iTU8VVV !99yUV9WWW !99q8H 	: 	
 	
 	
 	o00222!"44666$%77999!"4466666r-   c                    t          |d          \  }}|                     t                    5  |                    |d           d d d            n# 1 swxY w Y   |d                             |d           |d                             |d           |d                             |d           |d                             |dt
          	           |d
                             |dt
          	           |d                                          |d                                          |d                                          d S r  r  r  s        r*   test_error_async_cell_hooksz'TestRunCell.test_error_async_cell_hooks!  s    28QUVVV%122 	0 	0!!)Q///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0o66IRS6TTT 88iTU8VVV !99yUV9WWW !99q8K 	: 	
 	
 	
 	o66q8K 	7 	
 	
 	
 	!"44666$%77999!"4466666s   AAAfoo1bar1c                 n    d|_         |                    |d           |j        ddddddddgk    sJ d S )	NTr   r  r  foo1foo2r  r  bar1bar2)coalesce_streamsr  rb   r  s       r*   test_coalesce_streamsz!TestRunCell.test_coalesce_streams?  se    . %)!i+++ $h
KK$h
KK%
 
 
 
 
 
 
r-   N).rH   rI   rJ   r  r   r  r  r  r  r  r  r!  r#  r&  r+  r.  r3  r7  r:  r<  rC  rM  rR  rT  rZ  r^  rc  re  rp  rr  rv  ry  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r$   r-   r*   r  r    s       AA' ' '  !?3&7 (%88		
 	
 ' ' '  !8,)62	
 	
 ' ' '  !8, (%88	
 	
 !!8, (%88	
 	
 
 
 
, 0 0 0  !8, (%88	
 	
 !!8, (%88	
 	
 
 
 
4 $_0MZ\]] ' ' '  !8, (%88	
 	
 !!8, (%88	
 	
 
 
 
  !?3 (%88	
 	

 $
N/KXZ[[ ' ' '  !8, (%88	
 	
 '!>2~	
 	
 a a a  !8, (%88	
 	
 '!>2~	
 	
 !!8, (%88	
 	
 "a a# "a  !8, (%88	
 	
 '!>2~	
 	
 .!#89%.	$:UENSS	
 	
 "a a# "a '!?3)2.	
 	
 ' ' ' '!?3)2.	
 	
 ' ' '  !8,+-xOO	
 	
 a a a !6*#+gu~5NOO	
 	
 ' ' ' !6*x##(%.F8*MM 		
 	

 
	' 	'
 
	' !6*x##(%.F8*MM 		
 	
 !6*x##)6"2gYKPP 		
 	
 (' ') (' !6*# 	
 	

 
' '
 
' (!#34&	2#% 	
 	

 
, ,
 
," (!#34*H5&	2#%	 		
 		
 4 4 4  &!>2%.	$:UENSS	
 	
 , , , &!>2*H5&	2 	
 	

 
4 4
 
4 &!>2*H5&	2 	
 	
 '!>2*N;,o>, 	
 	
 '!>2*H5'4 &{;; 	
 	
' :4 4; :40 -!#89%.	$:UENSS	
 	
 , , , &!>2*H5'4 &{;; 	
 	
 .!#89*I6'4 &{;; 	
 	
 (4 4) (4 &!>2*H5&	2 	
 	
 .!#89*H5'4 &{;; 	
 	
 (4 4) (4 !7+!&%vhOO	
 	
 
 
 
 !7+!&%vhOO	
 	
 (!?3 '*	
 
  	
 	
 	
 !7+!&%vhOO	
 	
 (!?3 $'	
 
  	
 	
 	
 '!?3 '*	
 
  ' ' ' '!?3")4IJJ	
 
  ' ' ' '!?3 '*	
 
  ' ' ' '!?3 '*	
 
  ' ' ' '!?3 '*	
 
  ' ' '  7 7 7 !7+!&%vhOO	
 	
 (!?3 '*	
 
  7 7 7" '!?3 '*	
 
  7 7 7 7 7 7 !7+!&%vhOO	
 	
 (!?3 '*	
 
  7 7 7"  !8, (&99	
 	
 !!8, (&99	
 	
 !!8, (&99	
 	
 !!8, (&99	
 	
! ,
 
- ,
 
 
r-   r  )NNFr   )XrO   concurrent.futuresr'  rp   r;  r   r   r   r  r  rs   rI  r   r   queuer   typingr   unittest.mockr   r	   rn   rp  r   r
   jupyter_clientr   r   jupyter_client._versionr   jupyter_client.kernelspecr   nbconvert.filtersr   r   testpathr   	traitletsr   nbclientr   r   nbclient.exceptionsr   baser   compiler   r   r  r  r   r   r   environr/   r9   r  r  r&   rS   rV   r^   r   r   r   r   r   r   r   r   r  parametrizer   r  skipifr  r+  r4  r8  rK  rN  rX  r\  intrr  rt  r  r$   r-   r*   <module>r     s              				 				 



      ' ' ' ' ' ' ' '             ) ) ) ) ) ) ) )             6 6 6 6 6 6 6 6 0 0 0 0 0 0 7 7 7 7 7 7 ( ( ( ( ( ( ! ! ! ! ! ! ! ! ! ! ! !             , , , , , , , , 2 2 2 2 2 2 # # # # # #2:())gooh''BJT  
  RZ\   03
+ ,	 	 	    	*155  
 	*'"?+	  	 	 	 	 	 	 	 	S W^         8     2 37 J J J J JZ  :B B B*F F F, , , 6	}h78	x89	mX67	mX67	mX67	x89'(, $	 	
 
 -!:;	/-1JK	 (D"Q"QR	-x/HI	}h/0	=(34	mX67	"]H$=>	(=(*CD1 :0 0; :0? ? ?2 BGtO,OPP? ? QP?4? ? ?4? ? ?2* * *<      , CCQ((1,5IJJ  KJ@K7 K7 K7 K7 K7# K7 K7 K7\[
 [
 [
 [
 [
# [
 [
 [
 [
 [
r-   