o
    i                     @  s   d Z ddlmZ ddlZddlZddlmZ ddlmZ ddl	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mZmZ ddlmZ ddlmZ G dd deZG dd deZe e dS )zAn in-process kernel    )annotationsN)contextmanager)InteractiveShellABC)AnyEnumInstanceListTypedefault)IPythonKernel)
json_clean)ZMQInteractiveShell   )BackgroundSocketIOPubThread	OutStream   )INPROCESS_KEY)DummySocketc                      sF  e Zd ZU dZeedddZedddZe	 Z
e	 Ze	 ZeddZeedZeeZd	ed
< eedZed
dd ZeeZded< eddd ZeedZ fddZ fddZdd Zd2d3ddZd4ddZe dd  Z!d!d" Z"ed#d$d% Z#ed&d'd( Z$ed)d*d+ Z%ed,d-d. Z&ed/d0d1 Z'  Z(S )5InProcessKernelzAn in-process kernel.z0ipykernel.inprocess.client.InProcessKernelClientT
allow_none)tkgtkwxqtqt4inliner   )default_value r   iopub_threadc                 C  s   t | j}|  |S N)r   _underlying_iopub_socketstart)selfthreadr   r   W/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/ipykernel/inprocess/ipkernel.py_default_iopub_thread9   s   
z%InProcessKernel._default_iopub_threadr   iopub_socketc                 C  s   | j jS r!   )r    background_socketr$   r   r   r&   _default_iopub_socketA   s   z%InProcessKernel._default_iopub_socketc                   s<   t  jdi | | jj| jdgd | jr| | j_dS dS )zInitialize the kernel.message_sent)namesNr   )super__init__r"   observe_io_dispatchshellkernel)r$   traits	__class__r   r&   r/   G   s
   zInProcessKernel.__init__c                   sF   |    t |||I dH  W d   dS 1 sw   Y  dS )z&Override for temporary IO redirection.N)_redirected_ior.   execute_request)r$   streamidentparentr5   r   r&   r8   O   s   
"zInProcessKernel.execute_requestc                 C  s   | j r	d| j _dS dS )z1Override registration of dispatchers for streams.FN)r2   exit_nowr*   r   r   r&   r#   T   s   zInProcessKernel.start.subshell_id
str | Nonec                 C  s   dS )z-The in-process kernel doesn't abort requests.Nr   )r$   r=   r   r   r&   _abort_queuesY   s    zInProcessKernel._abort_queuesFc                 C  s   d | _ tjd urtj  tjd urtj  tt||d}| jd us&J | jd||}| j	D ]}|d us9J |jj|d d krK|j
|  nq1td dS | j d u rb|j
  | j d u sX| j S )N)promptpasswordinput_requestheadersessionz'No frontend found for raw_input request )raw_input_strsysstdoutflushstderrr   dictrD   msg	frontendsstdin_channelcall_handlersloggingerrorprocess_events)r$   r@   r:   r;   rA   contentrL   frontendr   r   r&   _input_request\   s(   








zInProcessKernel._input_requestc              	   c  sN    t jt j}}z| j| jt _t _dV  W ||t _t _dS ||t _t _w )z&Temporarily redirect IO to the kernel.N)rG   rH   rJ   )r$   
sys_stdout
sys_stderrr   r   r&   r7   z   s   "zInProcessKernel._redirected_ioc                 C  s`   | j jdusJ | jdusJ | jj| j jjdd\}}| jD ]}|dus'J |j| qdS )z/Called when a message is sent to the IO socket.NF)copy)r(   	io_threadrD   recvsocketrM   iopub_channelrO   )r$   change_identrL   rT   r   r   r&   r1      s   
zInProcessKernel._io_dispatchlogc                 C  s
   t tS r!   )rP   	getLogger__name__r*   r   r   r&   _default_log   s   
zInProcessKernel._default_logrD   c                 C  s   ddl m} || tdS )Nr   )Session)r;   key)jupyter_client.sessionrc   r   )r$   rc   r   r   r&   _default_session   s   z InProcessKernel._default_sessionshell_classc                 C  s   t S r!   )InProcessInteractiveShellr*   r   r   r&   _default_shell_class   s   z$InProcessKernel._default_shell_classrH   c                 C     t | j| jdddS )NrH   Fwatchfdr   rD   r    r*   r   r   r&   _default_stdout      zInProcessKernel._default_stdoutrJ   c                 C  rj   )NrJ   Frk   rm   r*   r   r   r&   _default_stderr   ro   zInProcessKernel._default_stderr).)r=   r>   )F))ra   
__module____qualname____doc__r   r   rM   r   guir   rF   rH   rJ   r	   rg   r   r"   r   r    __annotations__shell_streamr
   r'   r   r(   r+   stdin_socketr/   r8   r#   r?   rU   r   r7   r1   rb   rf   ri   rn   rp   __classcell__r   r   r5   r&   r      sF   
 











r   c                      sP   e Zd ZU dZedddZded< ddd	Zd fd
d	Zd fdd	Z	  Z
S )rh   z An in-process interactive shell.z,ipykernel.inprocess.ipkernel.InProcessKernelTr   r   r3   Nc                 C  s   |s| j j}|| _dS )z&Enable GUI integration for the kernel.N)r3   rt   active_eventloopr$   rt   r   r   r&   
enable_gui   s   
z$InProcessInteractiveShell.enable_guic                   s   |s| j j}t |S )z-Enable matplotlib integration for the kernel.)r3   rt   r.   enable_matplotlibrz   r5   r   r&   r|      s   z+InProcessInteractiveShell.enable_matplotlibc                   s   |s| j j}t ||S )z"Activate pylab support at runtime.)r3   rt   r.   enable_pylab)r$   rt   
import_allr5   r   r&   r}      s   z&InProcessInteractiveShell.enable_pylabr!   )NT)ra   rq   rr   rs   r   r3   ru   r{   r|   r}   rx   r   r   r5   r&   rh      s   
 
rh   )!rs   
__future__r   rP   rG   
contextlibr   IPython.core.interactiveshellr   	traitletsr   r   r   r   r	   r
   ipykernel.ipkernelr   ipykernel.jsonutilr   ipykernel.zmqshellr   iostreamr   r   r   	constantsr   r[   r   r   rh   registerr   r   r   r&   <module>   s"      