
    xdE_                     *   U d 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 ddlmZ ddlZddlmZ ddlmZmZ ddlmZmZmZmZmZmZ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&m'Z' d	dl(m)Z) d	dl*m+Z, d	dl*m-Z- d	dl.m/Z/ 	 ddl0m1Z1 n# e2$ r dZ1Y nw xY w	 ddl3m4Z5 ddl3m6Z7 dZ8n# e2$ r dZ8Y nw xY wdZ9d Z: ej;                    Z<da=e	j>        e"         e?d<   d Z@e:e_A        e@e_B         G d de,          ZC G d deC          Z+dS )z!The IPython kernel implementation    N)contextmanager)partial)release)line_at_cursortoken_at_cursor)AnyBool	HasTraitsInstanceListTypeobserveobserve_compat)	ZMQStream   BaseComm)CommManager)XCachingCompiler)Debugger_is_debugpy_available)_use_appnope)Kernel)_accepts_cell_id)ZMQInteractiveShell)_asyncio_runner)provisionalcompleter)rectify_completionsTF_jupyter_types_experimentalc                      t          | i |S )zCreate a new Comm.r   argskwargss     2lib/python3.11/site-packages/ipykernel/ipkernel.py_create_commr%   .   s    T$V$$$    _comm_managerc                      t           2t          5  t           t          | i |a ddd           n# 1 swxY w Y   t           S )zCreate a new CommManager.N)r'   
_comm_lockr   r!   s     r$   _get_comm_managerr*   8   s      	= 	=$ +T <V < <	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= s   /33c                       e Zd ZdZ edd          Z ee          Z e	dd          
                    d          Zer eed          ndZ e            Z ed	          ed
                         Z eedd          Z ed          ed                         Z e            Z e            Z fdZ eddej        dd         z  dddddddddddddddddddg          
                    d          ZdZej         Z!d ej         "                                d!         d"dej        d!         d#d$d%z  d d&d'Z#d( Z$e%d)             Z&d* Z' fd+Z(dB fd-	Z) fd.Z*d/ Z+dCd1Z,d2 Z-e%d3             Z.e.j/        d4             Z.e0d5             Z1	 	 	 dDdd6d7Z2d8 Z3d9 Z4d: Z5dEd<Z6	 	 	 	 	 	 dFd=Z7d> Z8d? Z9d@ Z:dA Z; xZ<S )GIPythonKernelzThe IPython Kernel class.z1IPython.core.interactiveshell.InteractiveShellABCT)
allow_nonezUSet this flag to False to deactivate the use of experimental IPython completion APIs.)help)configNuser_modulec                 <    | j         |d         | j         _        d S d S Nnew)shellr0   selfchanges     r$   _user_module_changedz"IPythonKernel._user_module_changedU   s(     :!%+E]DJ""" "!r&   )r"   r-   user_nsc                 n    | j         -|d         | j         _        | j                                          d S d S r2   )r4   r9   init_user_nsr5   s     r$   _user_ns_changedzIPythonKernel._user_ns_changed]   s<     :!!'DJJ##%%%%% "!r&   c                     t                      j        di | t          r7t          | j        | j        | j        | j        | j        | j	                  | _
        | j                            | | j        | j        | j        | t                     | _        | j        | j        j        _        t&          j                            d          }|r|| j        j        d<   | j        | j        j        _        |                     d          | j        j        _        | j        | j        j        _        | j        | j        j        _        t7          j                    | _        t=          | j        t>                    sJ | j        j         !                    | j                   g d}|D ]}tE          | j        |          | j#        |<    tI                      r!| j%        rddl&}|'                                 dS dS dS )	zInitialize the kernel.)parentprofile_dirr0   r9   kernelcompiler_classJPY_SESSION_NAME__session__execute_result)	comm_opencomm_msg
comm_closer   N )(super__init__r   r   logdebugpy_stream_publish_debug_eventdebug_shell_socketsessiondebug_just_my_codedebuggershell_classinstancer?   r0   r9   r   r4   displayhookosenvirongetiopub_socket
pub_socket_topictopicdisplay_pubcommget_comm_managercomm_manager
isinstancer
   configurablesappendgetattrshell_handlersr   _darwin_app_napappnopenope)r6   r#   jupyter_session_namecomm_msg_typesmsg_typerf   	__class__s         r$   rJ   zIPythonKernel.__init__i   s   ""6""" ! 	$#)'' DM %..((L+ / 
 

 *.
&!z~~.@AA 	E0DDJ}-,0,=
)'+{{3C'D'D
$)-
&,0,=
) 133$+Y77777
 ''(9:::@@@& 	Q 	QH,3D4Ex,P,PD))>> 	d2 	NNNLLNNNNN		 	 	 	r&   zPython Referencezhttps://docs.python.org/%i.%i   )texturlzIPython Referencez&https://ipython.org/documentation.htmlzNumPy Referencez+https://docs.scipy.org/doc/numpy/reference/zSciPy Referencez+https://docs.scipy.org/doc/scipy/reference/zMatplotlib Referencez$https://matplotlib.org/contents.htmlzSymPy Referencez'http://docs.sympy.org/latest/index.htmlzpandas Referencez-https://pandas.pydata.org/pandas-docs/stable/ipythonpythonr   ztext/x-python)nameversionz	ipython%d   z.py)rq   rr   mimetypecodemirror_modepygments_lexernbconvert_exporterfile_extensionc                     t           r\|d         j                            d          }| j                            d|           | j        j                            |           d S d S )Nr   zutf-8zDebugpy received: %s)r   bytesdecoderK   debugrQ   
tcp_clientreceive_dap_frame)r6   msgframes      r$   dispatch_debugpyzIPythonKernel.dispatch_debugpy   sc      	>FL''00EHNN15999M$66u=====		> 	>r&   c                     | j         j        S N)r4   bannerr6   s    r$   r   zIPythonKernel.banner   s    z  r&   c                 H   K   	 | j                                          d{V   )zPoll the stopped queue.TN)rQ   handle_stopped_eventr   s    r$   poll_stopped_queuez IPythonKernel.poll_stopped_queue   s6      	7-44666666666	7r&   c                 d   d| j         _        | j        | j                            d           n!| j                            | j        d           t                                                       | j        r8t          j
        |                                 | j        j        j                   dS dS )zStart the kernel.FNz7debugpy_stream undefined, debugging will not be enabledcopy)r4   exit_nowrL   rK   warningon_recvr   rI   startasynciorun_coroutine_threadsafer   control_threadio_loopasyncio_loop)r6   rk   s    r$   r   zIPythonKernel.start   s    #
&HVWWWW''(=E'JJJ 	,''))4+>+F+S    	 	r&   r4   c                     t                                          |||           |dk    r| j                            |           dS dS )zmOverridden from parent to tell the display hook and output streams
        about the parent message.
        r4   N)rI   
set_parentr4   )r6   identr>   channelrk   s       r$   r   zIPythonKernel.set_parent   sP     	5&'222gJ!!&))))) r&   c                     t                                          |          }|                    d| j        d           |S )zVInitialize metadata.

        Run at the beginning of each execution request.
        T)dependencies_metengine)rI   init_metadataupdater   )r6   r>   mdrk   s      r$   r   zIPythonKernel.init_metadata   sM    
 WW""6** 			$(* 	
 	
 	
 	r&   c                 V    |d         |d<   |d         dk    r|d         dk    rd|d<   |S )zXFinish populating metadata.

        Run after completing an execution request.
        statuserrorenameUnmetDependencyFr   rH   )r6   r>   metadatareply_contents       r$   finish_metadatazIPythonKernel.finish_metadata   sC     +84"g---2HL]2]2]+0H'(r&   Fc                     || _         t          j        | _        | j        t          _        t
          j        | _        | j        t
          _        dS )zZForward raw_input and getpass to the current frontend.

        via input_request
        N)_allow_stdinbuiltinsinput_sys_raw_input	raw_inputgetpass_save_getpass)r6   allow_stdins     r$   _forward_inputzIPythonKernel._forward_input
  s6    
 (&n$_,r&   c                 J    | j         t          _        | j        t          _        dS )zRestore raw_input, getpassN)r   r   r   r   r   r   s    r$   _restore_inputzIPythonKernel._restore_input  s    ,,r&   c                     | j         j        S r   )r4   execution_countr   s    r$   r   zIPythonKernel.execution_count  s    z))r&   c                     d S r   rH   )r6   values     r$   r   zIPythonKernel.execution_count!  s	     	r&   c              #      K   t          j                    d }                    t          ||                     |                    t          |                      fd}t	          j        t          j        |          }	 dV  t	          j        t          j        |           dS # t	          j        t          j        |           w xY w)aP  ContextManager for capturing SIGINT and cancelling a future

        SIGINT raises in the event loop when running async code,
        but we want it to halt a coroutine.

        Ideally, it would raise KeyboardInterrupt,
        but this turns it into a CancelledError.
        At least it gets a decent traceback to the user.
        c                     |                                  s|                                 rd S |                                  d S r   )	cancelleddonecancel)f_ignoreds     r$   cancel_unless_donez;IPythonKernel._cancel_on_sigint.<locals>.cancel_unless_done6  s7    {{}}  HHJJJJJr&   c                  F    fd}j                             |           d S )Nc                                                        s                                 rd S                      d           d S )Nr   )r   r   
set_result)sigint_futures   r$   set_sigint_resultzQIPythonKernel._cancel_on_sigint.<locals>.handle_sigint.<locals>.set_sigint_resultC  sI     **,, 0B0B0D0D F((+++++r&   )r   add_callback)r"   r   r6   r   s     r$   handle_sigintz6IPythonKernel._cancel_on_sigint.<locals>.handle_sigintB  s;    , , , , , L%%&788888r&   N)r   Futureadd_done_callbackr   signalSIGINT)r6   futurer   r   save_sigintr   s   `    @r$   _cancel_on_sigintzIPythonKernel._cancel_on_sigint'  s       .5^-=-=	 	 	 	''0BF(K(KLLL 	  );]!K!KLLL	9 	9 	9 	9 	9 	9 mFM=AA	6EEE M&-55555FM&-5555s   B, ,!C)cell_idc                  K   | j         |                     |           i }t          d          r.t          d          rj        }j        }	t          |          }
nd }	fd}t          j                  }
	 d}	 | j                             |          }n%# t          $ r |}t          j
                    }Y nw xY wt          r(j        t          u rt          j                                                    r |	|||          r|
r |||||||          }n ||||||          }t          j        |          }|                     |          5  d}	 | d{V }j                            d	           |sj                            d
|           n=# j                            d	           |sj                            d
|           w w xY wddd           n# 1 swxY w Y   n4|
r                    ||||          }n                    |||          }|                                  n# |                                  w xY w|j        |j        n|j        }|j        rd|d<   nrd|d<   |                    j        pg t5          t7          |          j                  t5          |          d           t;          | j        | j        d          }||d<   j         dz
  |d<   d|v r4| j!        "                    dd#                    |d                              |d         dk    r$                    |pi           |d<   ni |d<   j%        &                                |d<   j%        '                                 |S )zHandle code execution.run_cell_asyncshould_run_asyncc                     dS )NFrH   )cells    r$   <lambda>z*IPythonKernel.do_execute.<locals>.<lambda>h  s    E r&   c                  "   K    j         | i |S r   )run_cell)r"   r#   r4   s     r$   r   z*IPythonKernel.do_execute.<locals>.run_celll  s      %u~t6v666r&   N)transformed_cellpreprocessing_exc_tuple)store_historysilentr   r   r   )r   r   r   r   post_executepost_run_cell)r   r   r   )r   r   okr   r   	tracebackr   evalueexecuteengine_uuid	engine_idmethodengine_infor   r   r   z Exception in execute request:
%s
user_expressionspayload)(r4   r   hasattrr   r   r   r   transform_cell	Exceptionsysexc_infor   loop_runnerr   get_event_loop
is_runningensure_futurer   eventstriggerr   error_before_execerror_in_execsuccessr   _last_tracebackstrtype__name__dictr   int_idr   rK   infojoinr   payload_managerread_payloadclear_payload)r6   coder   r   r   r   r   r   r   r   with_cell_idr   r   corocoro_futurereserre_infor4   s                     @r$   
do_executezIPythonKernel.do_executeS  s      
K(((,.5*++ 	<?Q0R0R 	<+H$5+H55LL117 7 7 7 7 ,EN;;L?	" '+#9#':#<#<T#B#B   9 9 9#' *-,..'''9
  2[%88*,,7799 9$$%5,C   9   #8&3%)90G '  DD $8&3%)90G  D &3D99++K88 G GCG$///////,,^<<<% G!L00#FFF ,,^<<<% G!L00#FFFFGG G G G G G G G G G G G G G G   [..&3% '	 )  CC  ..]SY.ZZC!!!!D!!!!'*'<'Hc##cN_; 	2&*M(##&-M(#  !&!6!<" c!344!#hh    djDKPYZZZF+1M-( ,1+@1+D'(-''HMM3		-455   "d**050F0FGWG][]0^0^M,-- 13M,-
 $)#8#E#E#G#Gi  	++---sm   =H9  B H9 B=:H9 <B==BH9 G$F#8G$:GG$H9 $G((H9 +G(,8H9 9Ic                 
   t           r| j        r|                     ||          S |t          |          }t	          ||          \  }}||z
  }| j                            d||          \  }}|||t          |          z
  i ddS )zHandle code completion.N r   matches
cursor_endcursor_startr   r   )_use_experimental_60_completionuse_experimental_completions_experimental_do_completelenr   r4   complete)r6   r  
cursor_poslineoffsetline_cursortxtr  s           r$   do_completezIPythonKernel.do_complete  s    * 	Dt/P 	D11$
CCC
 TJ%dJ77f 6)z**2t[AAW$&S1
 
 	
r&   c                 X   K   t           r | j                            |           d{V S dS )zHandle a debug request.N)r   rQ   process_request)r6   r   s     r$   do_debug_requestzIPythonKernel.do_debug_request  s@        	<66s;;;;;;;;;	< 	<r&   c                    |t          |          }t                      5  | j        j                            ||          }t          t          ||                    }g }|D ]B}|                    t          |j	        |j
        |j        |j        |j                             C	 ddd           n# 1 swxY w Y   |r'|d         j	        }|d         j
        }d |D             }	n|}|}g }	|	||t          |iddS )zD
        Experimental completions from IPython, using Jedi.
        N)r   endrm   r   	signaturer   c                     g | ]	}|j         
S rH   )rm   ).0cs     r$   
<listcomp>z;IPythonKernel._experimental_do_complete.<locals>.<listcomp>  s    333!qv333r&   r   r  )r  _provisionalcompleterr4   	Completercompletionslist_rectify_completionsrb   r   r   r  rm   r   r   _EXPERIMENTAL_KEY_NAME)
r6   r  r  raw_completionsr'  compscompser  s
             r$   r  z'IPythonKernel._experimental_do_complete  sr    TJ"$$ 	 	"j2>>tZPPO3D/JJKKKE# 	 	"j H!Y!Y"&.     		 	 	 	 	 	 	 	 	 	 	 	 	 	 	   	A$AA"A33{333GGAAG /7
 
 	
s   BB22B69B6rH   c                    t          ||          }ddi}i |d<   i |d<   	 t          j        dk    r| j                            |||          }n| j                            ||          }|d                             |           | j        j        s|d                             d           d	|d
<   n# t          $ r d|d
<   Y nw xY w|S )zHandle code inspection.r   r   datar   )   )detail_levelomit_sections)r3  z	text/htmlTfoundF)	r   r   version_infor4   object_inspect_mimer   enable_html_pagerpopKeyError)r6   r  r  r3  r4  rq   r   bundles           r$   
do_inspectzIPythonKernel.do_inspect   s   tZ00-5t,< "f$&j!	+#t++ 77!-"/ 8   77<7XX&!((000:/ 7f%))+666%)M'"" 	+ 	+ 	+%*M'"""	+ s   BB2 2CCc
                 *   |dk    r$| j         j                            |||d          }
nX|dk    r%| j         j                            |||||          }
n-|dk    r%| j         j                            |||||	          }
ng }
dt          |
          d	S )
zHandle code history.tailT)rawoutputinclude_latestrange)r?  r@  search)r?  r@  nuniquer   )r   history)r4   history_managerget_tail	get_rangerC  r(  )r6   hist_access_typer@  r?  rO   r   stoprD  patternrE  hists              r$   
do_historyzIPythonKernel.do_history;  s     v%%:-66s6$ 7  DD ((:-77#f 8  DD )):-44S1V 5  DD D Dzz
 
 	
r&   c                 <    d| j         _        t          d|          S )zHandle kernel shutdown.Tr   )r   restart)r4   r   r   )r6   rP  s     r$   do_shutdownzIPythonKernel.do_shutdown^  s    "
41111r&   c                     t          | j        dd          }|| j        j        }|                    |          \  }}d|i}|dk    rd|z  |d<   |S )zHandle an is_complete request.input_transformer_managerNr   
incomplete indent)rc   r4   input_splittercheck_complete)r6   r  transformer_managerr   indent_spacesrs         r$   do_is_completezIPythonKernel.do_is_completec  sh    %dj2MtTT&"&*"; 3 B B4 H Hv\!!-AhKr&   c           	         	 ddl m}m} n# t          $ r ddlm}m} Y nw xY w| j        }	 |j        }dt          |                              dd          z   dz   }	 |||d          \  }
}}t          |
d	d
          }|	d
z   }|	dz   }|	dz   }|	dz   }||
|||||di}|
                    |           | d| d| d| d}	 t          ||j        |j                   |                    |          }|D ]}|                    |           n# |D ]}|                    |           w xY w ||| j        j        | j        j                  }ddi}n# t$          $ r}|                                 |j        pg t          t+          |          j                  t          |          d}t/          | j        | j        d          }||d<   |                     | j        d||                     d                     | j                            dd                    |d                              g }d|d<   Y d}~nd}~ww xY w||fS )zHandle an apply request.r   )serialize_objectunpack_apply_messager   _-r  Fr   r   r   r"   r#   resultNz = z(*z,**))buffer_thresholditem_thresholdr   r   r   applyr   r   r   )r   zException in apply request:
%sr   r   ) ipyparallel.serializer^  r_  ImportError	serializer4   r9   r   replacerc   r   execuser_global_nsrW   r9  rO   rd  re  BaseExceptionshowtracebackr   r   r   r   r   r   send_responserX   rZ   rK   r   r   )r6   contentbufsmsg_idreply_metadatar^  r_  r4   workingprefixr   r"   r#   fnameargname	kwargname
resultnamensr  rb  key
result_bufr   r/  r  s                            r$   do_applyzIPythonKernel.do_applyo  s   	JTTTTTTTTT 	J 	J 	JIIIIIIIIII	J 
4	-mG3v;;..sB777#=F224uMMMOAtVAz3//ESLEvoG)I(*JGT9fj$OBNN2 FFUFFgFF)FFFD%T5/??? Z00 % %CKK$$$$%2 % %CKK$$$$% *)!%!>#|:  J8 &t,MM-  	. 	. 	.!!!"28bT!WW-..a&& M djDKPWXXXF+1M-(!kk'**	     HMM;TYY}U`Ga=b=bcccJ&-M(######)	.0 j((s=      BE  0D 0E D''%E 
H?CH::H?c                 V    | j                             d           t          d          S )zClear the kernel.Fr   )r   )r4   resetr   r   s    r$   do_clearzIPythonKernel.do_clear  s)    
4    r&   )r4   )F)TNF)r   rH   )r   r   NNNF)=r   
__module____qualname____doc__r   r4   r   r   rR   r	   tagr  r   r   rL   r   r0   r   r   r8   r   r9   r<   r   _sys_eval_inputrJ   r   r   r6  
help_linksimplementationr   rr   implementation_versionsplitlanguage_infor   propertyr   r   r   r   r   r   r   r   r   setterr   r   r	  r  r  r  r<  rN  rQ  r\  r}  r  __classcell__rk   s   @r$   r,   r,   F   sP       ##HHUYZZZE$*++K#'4d$ $ $ 
cc !
 >S\XXiD9999X\N#%%KW]3 3 ^ 3 ht$4888GWY& & ^ & SUUNceeO/ / / / /b  +69I"1"9MM 
 ,? 
 *D 
 *D 
 /= 
 *@ 
 +F 3	
 > 
cc? D N$_;$$&&q)#$-#:J1:MNN%/& M> > > ! ! X!7 7 7
    * * * * * *       ' ' ' '- - - * * X*   
 )6 )6 ^)6^ J J J J J JX
 
 
*< < <
%
 %
 %
N   @ 
!
 !
 !
 !
F2 2 2

 
 
>) >) >)@! ! ! ! ! ! !r&   r,   c                   "     e Zd ZdZ fdZ xZS )r   z3DEPRECATED.  An alias for the IPython kernel class.c                 |    ddl }|                    dt          d            t                      j        |i | dS )zDEPRECATED.r   Nz@Kernel is a deprecated alias of ipykernel.ipkernel.IPythonKernelrl   )
stacklevel)warningswarnDeprecationWarningrI   rJ   )r6   r"   r#   r  rk   s       r$   rJ   zKernel.__init__  sT    N 	 	
 	
 	

 	$)&)))))r&   )r   r  r  r  rJ   r  r  s   @r$   r   r     s>        ==	* 	* 	* 	* 	* 	* 	* 	* 	*r&   r   )Dr  r   r   r   rU   r   r   	threadingtypingt
contextlibr   	functoolsr   r]   IPython.corer   IPython.utils.tokenutilr   r   	traitletsr   r	   r
   r   r   r   r   r   zmq.eventloop.zmqstreamr   	comm.commr   comm.managerr   compilerr   rQ   r   r   
eventloopsr   
kernelbaser   
KernelBaser   zmqshellr   IPython.core.interactiveshellr   rh  IPython.core.completerr   r%  r   r)  r  r*  r%   Lockr)   r'   Optional__annotations__r*   create_commr^   r,   rH   r&   r$   <module>r     s   ' ' '    				  



         % % % % % %                    C C C C C C C C Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y - - - - - -       % % % % % % & & & & & & 5 5 5 5 5 5 5 5 $ $ $ $ $ $ , , , , , , ( ( ( ( ( ( ) ) ) ) ) )=======   OOO,TTTTTTRRRRRR&*## , , ,&+###, 7 % % % Y^
)-qz+& - - -     ) l	! l	! l	! l	! l	!J l	! l	! l	!d* * * * *] * * * * *s$   B B B $B3 3B=<B=