B
    U[
                 @   sf   d Z ddl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 G dd	 d	eZee d
S )z(A kernel manager for in-process kernels.    )InstanceDottedObjectNamedefault)KernelManagerABC)KernelManager)Session   )INPROCESS_KEYc                   s   e Zd ZdZedddZedZeddd Z	ed	d
d Z
dd Zdd ZdddZedd Zdd Zdd Zdd Zdd Z fddZ  ZS ) InProcessKernelManagera*  A manager for an in-process kernel.

    This class implements the interface of
    `jupyter_client.kernelmanagerabc.KernelManagerABC` and allows
    (asynchronous) frontends to be used seamlessly with an in-process kernel.

    See `jupyter_client.kernelmanager.KernelManager` for docstrings.
    z,ipykernel.inprocess.ipkernel.InProcessKernelT)Z
allow_nonez1ipykernel.inprocess.BlockingInProcessKernelClientZblocking_classc             C   s   ddl m} |S )Nr   )BlockingInProcessKernelClient)Zblockingr   )selfr    r   :lib/python3.7/site-packages/ipykernel/inprocess/manager.py_default_blocking_class   s    z.InProcessKernelManager._default_blocking_classsessionc             C   s   t t| dS )N)keyparent)r   r	   )r   r   r   r   _default_session#   s    z'InProcessKernelManager._default_sessionc             K   s    ddl m} || | jd| _d S )Nr   )InProcessKernel)r   r   )Zipykernel.inprocess.ipkernelr   r   kernel)r   kwdsr   r   r   r   start_kernel,   s    z#InProcessKernelManager.start_kernelc             C   s   | j j  |   d S )N)r   Ziopub_threadstop_kill_kernel)r   r   r   r   shutdown_kernel0   s    z&InProcessKernelManager.shutdown_kernelFc             K   s   |    | jf | d S )N)r   r   )r   Znowr   r   r   r   restart_kernel4   s    z%InProcessKernelManager.restart_kernelc             C   s
   | j d k	S )N)r   )r   r   r   r   
has_kernel8   s    z!InProcessKernelManager.has_kernelc             C   s
   d | _ d S )N)r   )r   r   r   r   r   <   s    z#InProcessKernelManager._kill_kernelc             C   s   t dd S )Nz#Cannot interrupt in-process kernel.)NotImplementedError)r   r   r   r   interrupt_kernel?   s    z'InProcessKernelManager.interrupt_kernelc             C   s   t dd S )Nz Cannot signal in-process kernel.)r   )r   Zsignumr   r   r   signal_kernelB   s    z$InProcessKernelManager.signal_kernelc             C   s
   | j d k	S )N)r   )r   r   r   r   is_aliveE   s    zInProcessKernelManager.is_alivec                s   | j |d< tt| jf |S )Nr   )r   superr
   client)r   kwargs)	__class__r   r   r"   H   s    
zInProcessKernelManager.client)F)__name__
__module____qualname____doc__r   r   r   Zclient_classr   r   r   r   r   r   propertyr   r   r   r   r    r"   __classcell__r   r   )r$   r   r
      s   	
r
   N)r(   Z	traitletsr   r   r   Zjupyter_client.managerabcr   Zjupyter_client.managerr   Zjupyter_client.sessionr   Z	constantsr	   r
   registerr   r   r   r   <module>   s   C