o
    Zh                     @   s   d 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    N)contextmanager)InteractiveShellABC)AnyEnumInstanceListTypedefault)IPythonKernel)
json_clean)ZMQInteractiveShell   )BackgroundSocketIOPubThread	OutStream   )INPROCESS_KEY)DummySocketc                       sJ  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eed	< eedZed	d
d ZeeZeed< eddd ZeedZ fddZ fddZdd Zdd Zdd Zd/d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,d-d. Z(  Z)S )0InProcessKernelzAn in-process kernel.z0ipykernel.inprocess.client.InProcessKernelClientT
allow_none)ZtkZgtkZwxZqtZqt4inliner   )default_value iopub_threadc                 C   s   t | j}|  |S N)r   _underlying_iopub_socketstart)selfthreadr   r   S/var/www/html/lang_env/lib/python3.10/site-packages/ipykernel/inprocess/ipkernel.py_default_iopub_thread8   s   
z%InProcessKernel._default_iopub_threadiopub_socketc                 C   s   | j jS r   )r   Zbackground_socketr   r   r   r    _default_iopub_socket@   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.Zmessage_sent)namesNr   )super__init__r   Zobserve_io_dispatchshellkernel)r   Ztraits	__class__r   r    r'   F   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parentr+   r   r    r.   N   s   
"zInProcessKernel.execute_requestc                 C   s   | j r	d| j _dS dS )z1Override registration of dispatchers for streams.FN)r)   Zexit_nowr#   r   r   r    r   S   s   zInProcessKernel.startc                 C   s   dS )z-The in-process kernel doesn't abort requests.Nr   r#   r   r   r    _abort_queuesX   s    zInProcessKernel._abort_queuesc                    s   dS )z.No need to flush control queues for in-processNr   r#   r   r   r    _flush_control_queue[   s    z$InProcessKernel._flush_control_queueFc                 C   s   d | _ tj  tj  tt||d}| jd usJ | jd||}| j	D ]}|d us/J |jj|d d krA|j
|  nq'td dS | j d u rX|j
  | j d u sN| j S )N)promptpasswordZinput_requestheadersessionz'No frontend found for raw_input request )raw_input_strsysstderrflushstdoutr   dictr7   msg	frontendsZstdin_channelcall_handlersloggingerrorZprocess_events)r   r4   r0   r1   r5   contentr?   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)r:   r=   r;   )r   Z
sys_stdoutZ
sys_stderrr   r   r    r-   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"   Z	io_threadr7   recvsocketr@   Ziopub_channelrA   )r   Zchanger0   r?   rE   r   r   r    r(      s   
zInProcessKernel._io_dispatchlogc                 C   s
   t tS r   )rB   	getLogger__name__r#   r   r   r    _default_log   s   
zInProcessKernel._default_logr7   c                 C   s   ddl m} || tdS )Nr   )Session)r1   key)Zjupyter_client.sessionrN   r   )r   rN   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_classr=   c                 C      t | j| jdddS )Nr=   FZwatchfdr   r7   r   r#   r   r   r    _default_stdout      zInProcessKernel._default_stdoutr;   c                 C   rT   )Nr;   FrU   rV   r#   r   r   r    _default_stderr   rX   zInProcessKernel._default_stderr)F)*rL   
__module____qualname____doc__r   r   r@   r   guir   r9   r=   r;   r   rQ   r   r   r   r   __annotations__Zshell_streamr	   r!   r   r"   r$   Zstdin_socketr'   r.   r   r2   r3   rF   r   r-   r(   rM   rP   rS   rW   rY   __classcell__r   r   r+   r    r      sH   
 











r   c                       sP   e Zd ZU dZedddZeed< dddZd fd	d
	Z	d fdd	Z
  ZS )rR   z An in-process interactive shell.z,ipykernel.inprocess.ipkernel.InProcessKernelTr   r*   Nc                 C   s   |s| j j}|| _dS )z&Enable GUI integration for the kernel.N)r*   r]   Zactive_eventloopr   r]   r   r   r    
enable_gui   s   
z$InProcessInteractiveShell.enable_guic                    s   |s| j j}t |S )z-Enable matplotlib integration for the kernel.)r*   r]   r&   enable_matplotlibr`   r+   r   r    rb      s   z+InProcessInteractiveShell.enable_matplotlibFc                    s   |s| j j}t |||S )z"Activate pylab support at runtime.)r*   r]   r&   enable_pylab)r   r]   Z
import_allZwelcome_messager+   r   r    rc      s   z&InProcessInteractiveShell.enable_pylabr   )NTF)rL   rZ   r[   r\   r   r*   r   r^   ra   rb   rc   r_   r   r   r+   r    rR      s   
 
rR   )r\   rB   r:   
contextlibr   ZIPython.core.interactiveshellr   Z	traitletsr   r   r   r   r   r	   Zipykernel.ipkernelr
   Zipykernel.jsonutilr   Zipykernel.zmqshellr   Ziostreamr   r   r   	constantsr   rI   r   r   rR   registerr   r   r   r    <module>   s       