B
    a4                 @   s   d Z ddlZddlZddlZddlmZ ddlmZmZm	Z	m
Z
 ddlmZmZ ddlmZmZmZmZ ddlmZ dd	lmZ dd
lmZ G dd deZG dd deZdS )z!The IPython kernel implementation    N)release)builtin_modPY3unicode_typesafe_unicode)token_at_cursorline_at_cursor)InstanceTypeAnyList   )CommManager)Kernel)ZMQInteractiveShellc            
       s  e Zd ZedddZeeZe Z	dd Z
eedddZdd	 Ze Ze Z fd
dZeddejdd  dddddddddddddddddddgjddZdZejZdej d d dejd d!d"erd#nd dd$d%Zed&d' Z fd(d)Z fd*d+Z  fd,d-Z!d.d/ Z"dHd1d2Z#d3d4 Z$ed5d6 Z%e%j&d7d6 Z%dId8d9Z'd:d; Z(dJd<d=Z)dKd>d?Z*d@dA Z+dBdC Z,dDdE Z-dFdG Z.  Z/S )LIPythonKernelz1IPython.core.interactiveshell.InteractiveShellABCT)
allow_nonec             C   s   | j d k	r|| j _d S )N)shelluser_module)selfnameoldnew r   6/tmp/pip-unpacked-wheel-4kvctoso/ipykernel/ipkernel.py_user_module_changed   s    
z"IPythonKernel._user_module_changedN)argsr   c             C   s    | j d k	r|| j _| j   d S )N)r   user_nsZinit_user_ns)r   r   r   r   r   r   r   _user_ns_changed   s    
zIPythonKernel._user_ns_changedc                s   t t| jf | | jj| | j| j| j| d| _| j	| jj
_	| j| jj
_| d| jj
_| j	| jj_	| j| jj_t| | d| _| jj| j dddg}x|D ]}t| j|| j|< qW d S )N)parentprofile_dirr   r   kernelZexecute_result)r   r!   Z	comm_openZcomm_msgZ
comm_close)superr   __init__shell_classinstancer    r   r   r   sessiondisplayhookiopub_socketZ
pub_socket_topicZtopicZdisplay_pubr   Zcomm_managerZconfigurablesappendgetattrZshell_handlers)r   kwargsZcomm_msg_typesZmsg_type)	__class__r   r   r#   &   s     


zIPythonKernel.__init__Pythonzhttp://docs.python.org/%i.%i   )texturlZIPythonz%http://ipython.org/documentation.htmlZNumPyz*http://docs.scipy.org/doc/numpy/reference/ZSciPyz*http://docs.scipy.org/doc/scipy/reference/Z
Matplotlibz#http://matplotlib.org/contents.htmlZSymPyz'http://docs.sympy.org/latest/index.htmlZpandasz,http://pandas.pydata.org/pandas-docs/stable/)configZipythonpythonr   ztext/x-python)r   versionz	ipython%d   z.py)r   r4   mimetypeZcodemirror_modeZpygments_lexerZnbconvert_exporterZfile_extensionc             C   s   | j jS )N)r   banner)r   r   r   r   r7   l   s    zIPythonKernel.bannerc                s   d| j _tt|   d S )NF)r   exit_nowr"   r   start)r   )r-   r   r   r9   p   s    zIPythonKernel.startc                s"   t t| || | j| dS )zmOverridden from parent to tell the display hook and output streams
        about the parent message.
        N)r"   r   
set_parentr   )r   identr   )r-   r   r   r:   t   s    zIPythonKernel.set_parentc                s&   t t| |}|d| jd |S )zVInitialize metadata.

        Run at the beginning of each execution request.
        T)dependencies_metZengine)r"   r   init_metadataupdater;   )r   r   Zmd)r-   r   r   r=   {   s
    zIPythonKernel.init_metadatac             C   s0   |d |d< |d dkr,|d dkr,d|d< |S )zXFinish populating metadata.

        Run after completing an execution request.
        statuserrorenameZUnmetDependencyFr<   r   )r   r   metadatareply_contentr   r   r   finish_metadata   s    zIPythonKernel.finish_metadataFc                sX   | _ trtj _ jt_n(tj _tj _ jt_d fdd	t_tj _ jt_dS )zZForward raw_input and getpass to the current frontend.

        via input_request
         c                s   t  | S )N)eval	raw_input)prompt)r   r   r   <lambda>       z.IPythonKernel._forward_input.<locals>.<lambda>N)rE   )	Z_allow_stdinr   r   input_sys_raw_inputrG   _sys_eval_inputgetpass_save_getpass)r   allow_stdinr   )r   r   _forward_input   s    
zIPythonKernel._forward_inputc             C   s*   t r| jt_n| jt_| jt_| jt_dS )zRestore raw_input, getpassN)r   rL   r   rK   rG   rM   rO   rN   )r   r   r   r   _restore_input   s
    
zIPythonKernel._restore_inputc             C   s   | j jS )N)r   execution_count)r   r   r   r   rS      s    zIPythonKernel.execution_countc             C   s   d S )Nr   )r   valuer   r   r   rS      s    c             C   s  | j }| | i }z|j|||d}W d |   X |jd k	rF|j}	n|j}	|jr\d|d< nHd|d< ||jppg t	t
|	jt|	d t| j| jdd}
|
|d< |jd	 |d
< d|kr| jdd|d  |d dkr||pi |d< ni |d< |j |d< |j  |S )N)store_historysilentokr?   r@   )	tracebackrA   evalueexecute)engine_uuid	engine_idmethodengine_infor   rS   rX   z Exception in execute request:
%s
user_expressionspayload)r   rQ   Zrun_cellrR   Zerror_before_execZerror_in_execsuccessr>   _last_tracebackr   type__name__r   dictr;   int_idrS   loginfojoinr`   Zpayload_managerZread_payloadZclear_payload)r   coderV   rU   r`   rP   r   rC   reserre_infor   r   r   
do_execute   s8    





zIPythonKernel.do_executec             C   sR   |d krt |}t||\}}|| }| jd||\}}|||t | i ddS )NrE   rW   )matchesZ
cursor_endZcursor_startrB   r?   )lenr   r   Zcomplete)r   rk   
cursor_poslineoffsetZline_cursortxtrp   r   r   r   do_complete   s    
zIPythonKernel.do_completec       	      C   sb   t ||}| j|}ddi}i  |d< }i |d< |d |d< |d r^| jj||d}||d< |S )Nr?   rW   datarB   found)detail_levelz
text/plain)r   r   Zobject_inspectZobject_inspect_text)	r   rk   rr   ry   r   ri   rC   rw   Z	info_textr   r   r   
do_inspect  s    
zIPythonKernel.do_inspectc
             C   sv   |dkr | j jj|||dd}
nH|dkrB| j jj|||||d}
n&|dkrd| j jj|||||	d}
ng }
dt|
d	S )
NtailT)rawoutputZinclude_latestrange)r|   r}   search)r|   r}   nuniquerW   )r?   history)r   Zhistory_managerZget_tailZ	get_ranger   list)r   Zhist_access_typer}   r|   r&   r9   stopr   patternr   histr   r   r   
do_history  s    
zIPythonKernel.do_historyc             C   s   d| j _td|dS )NTrW   )r?   restart)r   r8   rf   )r   r   r   r   r   do_shutdown.  s    zIPythonKernel.do_shutdownc             C   s2   | j j|\}}d|i}|dkr.d| |d< |S )Nr?   
incomplete indent)r   Zinput_transformer_managerZcheck_complete)r   rk   r?   Zindent_spacesrr   r   r   do_is_complete2  s
    zIPythonKernel.do_is_completec          
   C   s  ddl m}m} | j}y|j}dt|dd d }	|||dd\}
}}t|
dd	}|	d	 }|	d
 }|	d }|	d }||
|||||d i}|| d||||f }zt	||j
|j ||}W d x|D ]}|| qW X ||| jj| jjd}W n tk
r } z|  |jpg tt|jt|d}t| j| jdd}||d< | j| jd|| dd | jdd|d  g }d|d< W d d }~X Y n
X ddi}||fS )Nr   )serialize_objectunpack_apply_message_-rE   F)copyre   fr   r,   resultz%s = %s(*%s,**%s))buffer_thresholditem_threshold)rX   rA   rY   apply)r[   r\   r]   r^   r@   )r;   zException in apply request:
%sr_   rX   r?   rW   ) 	serializer   r   r   r   strreplacer+   r>   execZuser_global_nsgetpopr&   r   r   BaseExceptionZshowtracebackrc   r   rd   re   r   rf   r;   rg   Zsend_responser(   r)   rh   ri   rj   )r   contentZbufsZmsg_idZreply_metadatar   r   r   Zworkingprefixr   r   r,   fnameargnameZ	kwargnameZ
resultnamensrk   r   keyZ
result_buferC   rn   r   r   r   do_apply9  sH    


zIPythonKernel.do_applyc             C   s   | j d tddS )NFrW   )r?   )r   resetrf   )r   r   r   r   do_clearp  s    zIPythonKernel.do_clear)F)TNF)r   )r   r   NNNF)0re   
__module____qualname__r	   r   r
   r   r$   r   r   r   rf   r   r   rL   rM   r#   r   sysversion_infotagZ
help_linksimplementationr   r4   implementation_versionsplitr   Zlanguage_infopropertyr7   r9   r:   r=   rD   rQ   rR   rS   setterro   rv   rz   r   r   r   r   r   __classcell__r   r   )r-   r   r      sn   

 
;
 
7r   c                   s   e Zd Z fddZ  ZS )r   c                s*   dd l }|dt tt| j|| d S )Nr   z@Kernel is a deprecated alias of ipykernel.ipkernel.IPythonKernel)warningswarnDeprecationWarningr"   r   r#   )r   r   r,   r   )r-   r   r   r#   x  s    zKernel.__init__)re   r   r   r#   r   r   r   )r-   r   r   w  s   r   )__doc__rN   r   rX   ZIPython.corer   Zipython_genutils.py3compatr   r   r   r   ZIPython.utils.tokenutilr   r   Z	traitletsr	   r
   r   r   Zcommr   Z
kernelbaser   Z
KernelBaseZzmqshellr   r   r   r   r   r   <module>   s     h