
    oif                       U d Z ddlm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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- d
dl.m/Z/ 	 ddl0m1Z1 	 ddl3m4Z5 ddl3m6Z7 dZ8dZ9d Z: e	jv                         Z<da=de>d<   d Z?e:e_@        e?e_A         G d de,      ZB G d deB      Z+y# e2$ r dZ1Y ]w xY w# e2$ r dZ8Y [w xY w) z!The IPython kernel implementation    )annotationsN)contextmanager)partial)release)line_at_cursortoken_at_cursor)	AnyBool	HasTraitsInstanceListTypedefaultobserveobserve_compat)	ZMQStream   BaseComm)CommManager)XCachingCompiler)_use_appnope)Kernel)_accepts_parameters)ZMQInteractiveShell)_asyncio_runner)provisionalcompleter)rectify_completionsTF_jupyter_types_experimentalc                     t        | i |S )zCreate a new Comm.r   argskwargss     Z/home/ubuntu/docker-apps/notebooks/venv/lib/python3.12/site-packages/ipykernel/ipkernel.py_create_commr%   /   s    T$V$$    zCommManager | None_comm_managerc                     t         &t        5  t         t        | i |a ddd       t         S t         S # 1 sw Y   t         S xY w)zCreate a new CommManager.N)r'   
_comm_lockr   r!   s     r$   _get_comm_managerr*   9   sG      	=$ +T <V <	= =	= s	   3Ac                  r    e Zd ZdZ edd      Z ee      Z ed      Z	 ee
      Z edd      j                  d      Z eed      Z e       Z ed	      ed
               Z edd      Z 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      j                  d      Z d!Z!e"jF                  Z$d"ejF                  jK                         d#   d$d!ej>                  d#   d%d&d'z  d"d(d)Z&d* Z'e(d+        Z)d, Z* fd-Z+dC fd.	Z, fd/Z-d0 Z.dDd1Z/d2 Z0e(d3        Z1e1jd                  d4        Z1e3d5        Z4e3d6        Z5 fd7Z6	 	 	 dEddd8d9Z7d: Z8d; Z9d< Z:dFd=Z;	 	 	 	 	 	 dGd>Z<d? Z=d@ Z>dA Z?dB Z@ xZAS )HIPythonKernelzThe IPython Kernel class.z1IPython.core.interactiveshell.InteractiveShellABCT)
allow_nonezipykernel.debugger.DebuggerzUSet this flag to False to deactivate the use of experimental IPython completion APIs.)help)configuser_modulec                F    | j                   |d   | j                   _        y y Nnew)shellr0   selfchanges     r$   _user_module_changedz"IPythonKernel._user_module_changed\   s#     ::!%+E]DJJ" "r&   zcollections.abc.Mappinguser_nsc                    t               S N)dictr6   s    r$   _default_user_nszIPythonKernel._default_user_nsd   s	    vr&   c                z    | j                   /|d   | j                   _        | j                   j                          y y r2   )r4   r9   init_user_nsr5   s     r$   _user_ns_changedzIPythonKernel._user_ns_changedh   s3     ::!!'DJJJJ##% "r&   c                   t        |   d
i | ddlm} |rW| j	                  | j
                  | j                  | j                  | j                  | j                  | j                        | _        | j                  j                  | | j                  | j                  | j                  | | j                         | _        | j                  | j"                  j$                  _	        t&        j(                  j+                  d      }|r|| j"                  j                  d<   | j,                  | j"                  j$                  _        | j1                  d      | j"                  j$                  _        | j                  | j"                  j4                  _	        | j,                  | j"                  j4                  _        t7        j8                         | _        t=        | j:                  t>              sJ | j"                  j@                  jC                  | j:                         g d}|D ]%  }tE        | j:                  |      | jF                  |<   ' tI               r"| jJ                  rdd	l&}|jO                          y	y	y	)zInitialize the kernel.r   _is_debugpy_available)parentprofile_dirr0   r9   kernelcompiler_classJPY_SESSION_NAME__session__execute_result)	comm_opencomm_msg
comm_closer   N )(super__init__debuggerrD   debugger_classlogdebugpy_stream_publish_debug_eventdebug_shell_socketsessiondebug_just_my_codeshell_classinstancerF   r0   r9   rH   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#   rD   jupyter_session_namecomm_msg_typesmsg_typern   	__class__s          r$   rQ   zIPythonKernel.__init__t   s   "6"3 ! //##))''''DM %%..((((LL.. / 

 *.

&!zz~~.@A0DDJJ}-,0,=,=

)'+{{3C'D

$)-

&,0,=,=

) 113$++Y777

  ''(9(9:@& 	QH,3D4E4Ex,PD)	Q >d22LLN	 3>r&   zPython Referencezhttps://docs.python.org/%i.%iN   )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)ry   rz   mimetypecodemirror_modepygments_lexernbconvert_exporterfile_extensionc                    ddl m} |r`|d   j                  j                  d      }| j                  j                  d|       | j                   j                  j                  |       y y )Nr   rC   zutf-8zDebugpy received: %s)rR   rD   bytesdecoderT   debug
tcp_clientreceive_dap_frame)r6   msgrD   frames       r$   dispatch_debugpyzIPythonKernel.dispatch_debugpy   sP    3 FLL''0EHHNN159MM$$66u=	 !r&   c                H    | j                   r| j                   j                  S y r;   )r4   bannerr=   s    r$   r   zIPythonKernel.banner   s    ::::$$$r&   c                V   K   	 | j                   j                          d{    #7 w)zPoll the stopped queue.N)rR   handle_stopped_eventr=   s    r$   poll_stopped_queuez IPythonKernel.poll_stopped_queue   s'     --44666 6s   )')c                   | j                   rd| j                   _        | j                  | j                  j	                  d       n'| j                  j                  | j                  d       t        | !          | j                  rCt        j                  | j                         | j                  j                  j                         yy)zStart the kernel.FNz7debugpy_stream undefined, debugging will not be enabledcopy)r4   exit_nowrU   rT   warningon_recvr   rP   startasynciorun_coroutine_threadsafer   control_threadio_loopasyncio_loop)r6   rs   s    r$   r   zIPythonKernel.start   s    ::"'DJJ&HHVW''(=(=E'J,,'')4+>+>+F+F+S+S r&   c                    t         |   |||       |dk(  r)| j                  r| j                  j                  |       yyy)zmOverridden from parent to tell the display hook and output streams
        about the parent message.
        r4   N)rP   
set_parentr4   )r6   identrE   channelrs   s       r$   r   zIPythonKernel.set_parent   s>     	5&'2g$**JJ!!&) #-r&   c                b    t         |   |      }|j                  d| j                  d       |S )zVInitialize metadata.

        Run at the beginning of each execution request.
        T)dependencies_metengine)rP   init_metadataupdater   )r6   rE   mdrs   s      r$   r   zIPythonKernel.init_metadata   s8    
 W"6* 			$(**	
 	r&   c                @    |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   rO   )r6   rE   metadatareply_contents       r$   finish_metadatazIPythonKernel.finish_metadata  s=     +84"g--2HL]2]+0H'(r&   c                    || _         t        j                  | _        | j                  t        _        t
        j
                  | _        | j
                  t
        _        y)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  s:    
 (&nn$__,,r&   c                X    | j                   t        _        | j                  t        _        y)zRestore raw_input, getpassN)r   r   r   r   r   r=   s    r$   _restore_inputzIPythonKernel._restore_input)  s    ,,,,r&   c                H    | j                   r| j                   j                  S y r;   )r4   execution_countr=   s    r$   r   zIPythonKernel.execution_count/  s    ::::---r&   c                     y r;   rO   )r6   values     r$   r   zIPythonKernel.execution_count5  s     	r&   c              #     K   t        j                         d }j                  t        ||             |j                  t        |              fd}t	        j                  t        j
                  |      }	 d t	        j                  t        j
                  |       y# t	        j                  t        j
                  |       w xY w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                f    | j                         s| j                         ry | j                          y r;   )	cancelleddonecancel)f_ignoreds     r$   cancel_unless_donez;IPythonKernel._cancel_on_sigint.<locals>.cancel_unless_doneJ  s    {{}HHJr&   c                 F    fd}j                   j                  |       y )Nc                 j     j                         s j                         ry  j                  d       y )Nr   )r   r   
set_result)sigint_futures   r$   set_sigint_resultzQIPythonKernel._cancel_on_sigint.<locals>.handle_sigint.<locals>.set_sigint_resultW  s+     **,0B0B0D((+r&   )r   add_callback)r"   r   r6   r   s     r$   handle_sigintz6IPythonKernel._cancel_on_sigint.<locals>.handle_sigintV  s    , LL%%&7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L 	  );]!KL	9 mmFMM=A	6 MM&--5FMM&--5s   A8C=B& %C&&CCc              '     K   d  y wr;   rO   )r6   r"   s     r$   _dummy_context_managerz$IPythonKernel._dummy_context_managerg  s      	s   c                D   K   t         |   |||       d{    y7 w)z/Override for cell output - cell reconciliation.N)rP   execute_request)r6   streamr   rE   rs   s       r$   r   zIPythonKernel.execute_requestl  s     g%feV<<<s     )	cell_metacell_idc                 K   | j                   J | j                  |       i }t        d      r2t        d      r&j                  }	j                  }
t        |	dg      }nd }
fd}	t        j                  dg      }	 d}	 j                  |      }t        rj                  t        u rt        j                         j                         r |
|||      r|d   r |	||||||      }n |	|||||	      }t        j                   |      }t#        j$                         | j&                  j(                  k(  r| j*                  n| j,                  } ||      5  d}	 | d{   }j.                  j1                  d
       |sj.                  j1                  d|       	 ddd       n/|d   rj                  ||||      }nj                  |||      }| j3                          j4                  |j4                  n|j6                  }|j8                  rd|d<   ntd|d<   |j;                  j<                  xs g t?        tA        |      jB                        t?        |      d       tE        | jF                  | jH                  d      }||d<   jJ                  dz
  |d<   d|v r.| jL                  jO                  ddjQ                  |d                |d   dk(  rjS                  |xs i       |d<   ni |d<   jT                  jW                         |d<   jT                  jY                          |S # t        $ r |}t        j                         }Y w xY w7 # j.                  j1                  d
       |sj.                  j1                  d|       w w xY w# 1 sw Y   xY w# | j3                          w xY ww)zHandle code execution.Nrun_cell_asyncshould_run_asyncr   c                     y)NFrO   )cells    r$   <lambda>z*IPythonKernel.do_execute.<locals>.<lambda>  s    r&   c                 0   K    j                   | i |S wr;   )run_cell)r"   r#   r4   s     r$   r   z*IPythonKernel.do_execute.<locals>.run_cell  s     %u~~t6v66s   )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_future	threadingcurrent_threadshell_channel_threadparent_threadr   r   eventstriggerr   error_before_execerror_in_execsuccessr   _last_tracebackstrtype__name__r<   r   int_idr   rT   infojoinr   payload_managerread_payloadclear_payload)r6   coder   r   r   r   r   r   r   r   r   accepts_paramsr   r   corocoro_futurecmreserre_infor4   s                       @r$   
do_executezIPythonKernel.do_executep  s     

   K(*,5*+?Q0R++H$550I;GN17 1)MND	" '+#9#(#7#7#=   %%8**,779$%5,C "),#&3%)90G 'D $&3%)90GD &33D9 !//1T5N5N5\5\\ **44 
 _ GCG$//,,^<%!LL00#FG G "),..&3% '	 ) C  ..]SY.ZC!'*'<'<'Hc##cN_N_;;&*M(#&-M(#  !&!6!6!<" c!3!34!#h djjDKKPYZF+1M-( ,1+@+@1+D'(-'HHMM3		-45 "d*050F0FGWG][]0^M,- 13M,-
 $)#8#8#E#E#Gi  	++-W  9#' *-,,.'9T 0,,^<%!LL00#F  &G G, !s   BON2 L= CN2  N%$M&)M#*M&.:N%(8N2  EO=M N2 M  N2 #M&&<N""N%%N/*N2 2OOc                   t         r| j                  r| j                  ||      S |t        |      }t	        ||      \  }}||z
  }| j
                  J | j
                  j                  d||      \  }}|||t        |      z
  i ddS )zHandle code completion. 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    *t/P/P11$
CC
 TJ%dJ7f 6)zz%%%zz**2t[AW$&S1
 	
r&   c                f   K   ddl m} |r#| j                   j                  |       d{   S y7 w)zHandle a debug request.r   rC   N)rR   rD   process_request)r6   r   rD   s      r$   do_debug_requestzIPythonKernel.do_debug_request  s,     3 66s;;; <s   '1/1c                H   |t        |      }t               5  | j                  J | j                  j                  j	                  ||      }t        t        ||            }g }|D ]S  }|j                  t        |j                  |j                  |j                  |j                  |j                               U 	 ddd       r8|d   j                  }|d   j                  }|D 	cg c]  }	|	j                   }
}	n|}|}g }
|
||t        iddS # 1 sw Y   WxY wc c}	w )zD
        Experimental completions from IPython, using Jedi.
        N)r   endru   r	  	signaturer   r   r  )r#  _provisionalcompleterr4   	Completercompletionslist_rectify_completionsrj   r<   r   r/  ru   r	  r0  _EXPERIMENTAL_KEY_NAME)r6   r  r%  raw_completionsr3  compscompsecr  s              r$   r"  z'IPythonKernel._experimental_do_complete!  s$    TJ"$ 	::)))"jj22>>tZPO3D/JKKE# 	"jj HH!YY!YY"&..		" A$$AA""A'23!qvv3G3AAG /7
 	
5	 	( 4s   B$D)DDc                   t        ||      }ddi}i |d<   i |d<   | j                  J 	 t        j                  dk\  r| j                  j	                  |||      }n| j                  j	                  ||      }|d   j                  |       | j                  j                  s|d   j                  d       d	|d
<   |S # t        $ r	 d|d
<   Y |S w xY w)zHandle code inspection.r   r   datar   )   )detail_levelomit_sections)r@  z	text/htmlTfoundF)	r   r4   r   version_infoobject_inspect_mimer   enable_html_pagerpopKeyError)r6   r  r%  r@  rA  ry   r   bundles           r$   
do_inspectzIPythonKernel.do_inspectI  s    tZ0+3T*: "f$&j!zz%%%	+##t+ 77!-"/ 8  77<7X&!((0:://f%))+6%)M'"   	+%*M'"	+s   BB> >CCc
                \   | j                   J |dk(  r*| j                   j                  j                  |||d      }
nb|dk(  r+| j                   j                  j                  |||||      }
n2|dk(  r+| j                   j                  j	                  |||||	      }
ng }
dt        |
      d	S )
zHandle code history.tailT)rawoutputinclude_latestrange)rL  rM  search)rL  rM  nuniquer   )r   history)r4   history_managerget_tail	get_rangerP  r4  )r6   hist_access_typerM  rL  rX   r   stoprQ  patternrR  hists              r$   
do_historyzIPythonKernel.do_historye  s     zz%%%v%::--66s6$ 7 D (::--77#f 8 D )::--44S1V 5 D D Dz
 	
r&   c                V    | j                   rd| j                   _        t        d|      S )zHandle kernel shutdown.Tr   )r   restart)r4   r   r<   )r6   r]  s     r$   do_shutdownzIPythonKernel.do_shutdown  s"    ::"&DJJ411r&   c                    t        | j                  dd      }|$| j                  J | j                  j                  }|j                  |      \  }}d|i}|dk(  rd|z  |d<   |S )zHandle an is_complete request.input_transformer_managerNr   
incomplete indent)rk   r4   input_splittercheck_complete)r6   r  transformer_managerr   indent_spacesrs         r$   do_is_completezIPythonKernel.do_is_complete  sv    %djj2MtT&::)))"&**";"; 3 B B4 Hv\!-AhKr&   c           	        	 ddl m}m} | j
                  }|J 	 |j                  }dt        |      j                  dd      z   dz   }	 |||d	      \  }
}}t        |
d
d      }|	dz   }|	dz   }|	dz   }|	dz   }||
|||||di}|j                  |       | d| d| d| d}	 t        ||j                  |j                         |j                  |      }|D ]  }|j                  |        	 | j                  J  ||| j                  j                   | j                  j"                        }ddi}||fS # t        $ r ddlm}m} Y @w xY w# |D ]  }|j                  |        w xY w# t$        $ r}|j'                          |j(                  xs g t        t+        |      j,                        t        |      d}t/        | j0                  | j2                  d      }||d<   | j5                  | j6                  d|| j9                  d             | j:                  j=                  ddj?                  |d                g }d|d<   Y d}~||fS d}~ww xY w)zHandle an apply request.r   )serialize_objectunpack_apply_messager   N_-r  Fr   r
  r   r"   r#   resultz = z(*z,**))buffer_thresholditem_thresholdr   r   r   applyr   r   r   )r   zException in apply request:
%sr   r   ) ipyparallel.serializerk  rl  ImportError	serializer4   r9   r  replacerk   r   execuser_global_nsr_   rF  rX   rq  rr  BaseExceptionshowtracebackr  r	  r
  r<   r   r  send_responser`   rb   rT   r  r  )r6   contentbufsmsg_idreply_metadatark  rl  r4   workingprefixr   r"   r#   fnameargname	kwargname
resultnamensr  ro  key
result_bufr   r;  r  s                            r$   do_applyzIPythonKernel.do_apply  s   	JT 

   5	-mmG3v;..sB77#=F24uMOAtVAz3/ESLEvoG)I(*JGT9fj$OBNN2 \UG2gYc)AFD%T5//? Z0 %CKK$% <<+++)!%!>!>#||::J8 &t,Mj((y  	JII	J4  %CKK$%  	.!"228bT!W--.a&M djjDKKPWXF+1M-(!!kk'*	   HHMM;TYY}U`Ga=bcJ&-M(# j((1	.sC   D6 BE+ "2E AE+ 6E
EE((E+ +	I4CIIc                h    | j                   r| j                   j                  d       t        d      S )zClear the kernel.Fr   )r   )r4   resetr<   r=   s    r$   do_clearzIPythonKernel.do_clear  s&    ::JJU#4  r&   )r4   )F)TNF)r   rO   )r   r   NNNF)Br
  
__module____qualname____doc__r   r4   r   r   rZ   rS   r   rH   r
   tagr!  r   rU   r	   r0   r   r   r8   r9   r   r>   rA   r   _sys_eval_inputrQ   r   r   rC  
help_linksimplementationr   rz   implementation_versionsplitlanguage_infor   propertyr   r   r   r   r   r   r   r   r   setterr   r   r   r   r  r*  r-  r"  rI  r[  r^  ri  r  r  __classcell__rs   s   @r$   r,   r,   G   s   #HUYZE*+K 78N*+N#'d$ 
cc !
 iD9N%K]3  3 0TBGY  Y&  & UNeO1f  +69I9I"19MM
 ,?
 *D
 *D
 /=
 *@
 +F3	
> 
cc? D N$__;;$$&q)#$-#:J:J1:MN%/&M>  
7
* '-  
  
 )6 )6V  = Q Qf
,&
PB 
"
H2@)D!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 }|j                  dt        d       t        |   |i | y)zDEPRECATED.r   Nz@Kernel is a deprecated alias of ipykernel.ipkernel.IPythonKernelrt   )
stacklevel)warningswarnDeprecationWarningrP   rQ   )r6   r"   r#   r  rs   s       r$   rQ   zKernel.__init__  s4    N 	 	

 	$)&)r&   )r
  r  r  r  rQ   r  r  s   @r$   r   r     s    =	* 	*r&   r   )Cr  
__future__r   r   r   r   r]   r   r   r   typingt
contextlibr   	functoolsr   re   IPython.corer   IPython.utils.tokenutilr   r   	traitletsr	   r
   r   r   r   r   r   r   r   zmq.eventloop.zmqstreamr   	comm.commr   comm.managerr   compilerr   
eventloopsr   
kernelbaser   
KernelBaser   zmqshellr   IPython.core.interactiveshellr   ru  IPython.core.completerr   r1  r   r5  r   r6  r%   Lockr)   r'   __annotations__r*   create_commrf   r,   rO   r&   r$   <module>r     s    ' "    	  
   %     C b b b -  % & $ , + )=,TR&*#
 7 % Y^^
$(! (   ) [
!J [
!B*] *Q  O  ,&+#,s$   C) C6 )C32C36D ?D 