
)Ί]c           @   s   d  Z  d d l Z d d l j Z d d l Z d d l Z d d l m Z e j	 d d k Z
 d d d d	 d
 g Z d Z d e f d     YZ d S(   s   
Spyder kernel for Jupyter
iN(   t   IPythonKerneli    t   2t   Int   Outt   exitt   get_ipythont   quiti   t   SpyderKernelc           B   s  e  Z d  Z d   Z e d    Z e d    Z d   Z d   Z d) d) d  Z
 d   Z d   Z d	   Z d
   Z d   Z d   Z d   Z d   Z e d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z e d  Z d   Z d   Z d   Z d   Z  d   Z! d   Z" d   Z# d   Z$ d    Z% d!   Z& d"   Z' d#   Z( d$   Z) e d%  Z* d&   Z+ d'   Z, d(   Z- RS(*   s   Spyder kernel for Jupyterc         O   sJ   t  t |   j | |   i  |  _ d  |  _ d  |  _ t |  _ d  |  _	 d  S(   N(
   t   superR   t   __init__t   namespace_view_settingst   Nonet   _pdb_objt	   _pdb_stept   Truet   _do_publish_pdb_statet   _mpl_backend_error(   t   selft   argst   kwargs(    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyR	   $   s    				c         C   s/   |  j  d k	 r+ |  j  j d k	 r+ |  j  j Sd S(   s(   Return current Pdb frame if there is anyN(   R   R   t   curframe(   R   (    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyt
   _pdb_frame.   s    !c         C   s   |  j  r |  j j Si  Sd S(   sl   
        Return current Pdb frame locals if available. Otherwise
        return an empty dictionary
        N(   R   R   t   curframe_locals(   R   (    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyt   _pdb_locals4   s    	
c         C   sU   d d l  m } |  j } | rG |  j   } t | | | t   } | St d  Sd S(   s  
        Return the namespace view

        This is a dictionary with the following structure

        {'a': {'color': '#800000', 'size': 1, 'type': 'str', 'view': '1'}}

        Here:
        * 'a' is the variable name
        * 'color' is the color used to show it
        * 'size' and 'type' are self-evident
        * and'view' is its value or the text shown in the last column
        i(   t   make_remote_viewN(   t   spyder_kernels.utils.nsviewR   R
   t   _get_current_namespacet   reprt   EXCLUDED_NAMESR   (   R   R   t   settingst   nst   view(    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyt   get_namespace_viewA   s    	c         C   s'  d d l  m } |  j } | r|  j   } | | | d d d t } i  } x t | j    D] \ } } i	 t | t t f  d 6t | t	  d 6|  j
 |  d 6|  j |  d	 6|  j |  d
 6|  j |  d 6|  j |  d 6|  j |  d 6|  j |  d 6| | <q_ Wt |  St d  Sd S(   sW   
        Get some properties of the variables in the current
        namespace
        i(   t   get_remote_datat   modet   editablet   more_excluded_namest   is_listt   is_dictt   lent   is_arrayt   is_imaget   is_data_framet	   is_seriest   array_shapet
   array_ndimN(   R   R!   R
   R   R   t   listt   itemst
   isinstancet   tuplet   dictt   _get_lent	   _is_arrayt	   _is_imaget   _is_data_framet
   _is_seriest   _get_array_shapet   _get_array_ndimR   R   (   R   R!   R   R   t   datat
   propertiest   namet   value(    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyt   get_var_propertiesY   s(    		
c      
   C   s~   d d l  } | d k r! i  } n  | | d <|  j j |  j d d | d | j | d t g d |  j } |  j j	 |  d S(	   s  
        Publish custom messages to the Spyder frontend.

        Parameters
        ----------

        spyder_msg_type: str
            The spyder message type
        content: dict
            The (JSONable) content of the message
        data: any
            Any object that is serializable by cloudpickle (should be most
            things). Will arrive as cloudpickled bytes in `.buffers[0]`.
        iNt   spyder_msg_typet
   spyder_msgt   contentt   bufferst   protocolt   parent(
   t   cloudpickleR   t   sessiont   sendt   iopub_sockett   dumpst   PICKLE_PROTOCOLt   _parent_headert   logt   debug(   R   R?   RA   R:   RE   t   msg(    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyt   send_spyder_msgx   s    	
	c         C   sW   |  j    } | | } y |  j d d | Wn |  j d d d n Xt |  _ d S(   s   Get the value of a variableR:   N(   R   RO   R   t   FalseR   (   R   R<   R   R=   (    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyt	   get_value   s    
c         C   sq   d d l  } |  j |  } | d } | rD t rD t | d  } n  | j |  } | | | <|  j j |  d S(   s   Set the value of a variableiNi    s   latin-1(   RE   t   _get_reference_namespacet   PY2t   bytest   loadsRL   RM   (   R   R<   R=   t   PY2_frontendRE   R   t   svaluet   dvalue(    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyt	   set_value   s    

c         C   s    |  j  |  } | j |  d S(   s   Remove a variableN(   RR   t   pop(   R   R<   R   (    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyt   remove_value   s    c         C   s!   |  j  |  } | | | | <d S(   s   Copy a variableN(   RR   (   R   t	   orig_namet   new_nameR   (    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyt
   copy_value   s    c         C   s   d d l  m } d d l m } |  j   } | j | } | |  \ } } | rU | SxZ t | j    D]F }	 | |	 d t | j    }
 |
 |	 k rh | j |	  | |
 <qh qh Wy | j	 |  Wn t
 k
 r } t |  SXd S(   s   Load data from filenamei(   t   iofunctions(   t   fix_reference_namet	   blacklistN(   t   spyder_kernels.utils.iofuncsR_   t   spyder_kernels.utils.miscR`   t	   _mglobalst
   load_funcsR.   t   keysRZ   t   updatet	   Exceptiont   strR   (   R   t   filenamet   extR_   R`   t   glbst	   load_funcR:   t   error_messaget   keyt   new_keyt   error(    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyt	   load_data   s     c         C   sf   d d l  m } d d l m } |  j   } |  j } | | | d d d t j   } | j | |  S(   s   Save namespace into filenamei(   R!   (   R_   R"   t	   picklableR$   (	   R   R!   Rb   R_   R   R
   R   t   copyt   save(   R   Rj   R!   R_   R   R   R:   (    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyt   save_namespace   s    	c         C   sf   |  j  rY |  j rY t d |  j   d |  j   d |  j  } |  j d d i | d 6n  t |  _ d S(   s_   
        Publish Variable Explorer state and Pdb step through
        send_spyder_msg.
        t   namespace_viewt   var_propertiest   stept	   pdb_stateRA   N(   R   R   R2   R    R>   R   RO   R   (   R   t   state(    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyt   publish_pdb_state   s    c         C   s   |  j  r |  j d  n  d S(   s   
        Tell the console to run 'continue' after entering a
        Pdb session to get to the first breakpoint.

        Fixes issue 2034
        t   pdb_continueN(   R   RO   (   R   (    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyR}      s    	c         C   s8   d d l  m } |  j d t  } | | d | d | S(   s5   Return True if object is defined in current namespacei(   t	   isdefinedt   with_magicst   force_importt	   namespace(   t   spyder_kernels.utils.dochelpersR~   R   R   (   R   t   objR   R~   R   (    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyt
   is_defined   s    c         C   s`   y d d l  } t | j d <Wn n Xd d l m } |  j |  \ } } | r\ | |  Sd S(   s#   Get object documentation dictionaryiNs   docstring.hardcopy(   t   getdoc(   t
   matplotlibR   t   rcParamsR   R   t   _eval(   R   t   objtxtR   R   R   t   valid(    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyt   get_doc  s    c         C   s9   d d l  m } |  j |  \ } } | r5 | |  Sd S(   s   Get object sourcei(   t	   getsourceN(   R   R   R   (   R   R   R   R   R   (    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyt
   get_source  s    c         C   s   t  j |  d S(   s   Set current working directory.N(   t   ost   chdir(   R   t   dirname(    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyt   set_cwd  s    c         C   s
   t  j   S(   s   Get current working directory.(   R   t   getcwd(   R   (    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyt   get_cwd  s    c         C   s   t  j S(   s   Return sys.path contents.(   t   syst   path(   R   (    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyt   get_syspath"  s    c         C   s   t  j j   S(   s   Get environment variables.(   R   t   environRt   (   R   (    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyt   get_env&  s    c         C   s1   y# d d l  j } | j d  ~ Wn n Xd S(   s   Close all Matplotlib figures.iNt   all(   t   matplotlib.pyplott   pyplott   close(   R   t   plt(    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyt   close_all_mpl_figures*  s    c         C   s   i  } |  j    } |  j d k r1 | j |  n | j |  | j |  j  | r |  j j j d } |  j j j d } | j |  | j |  n  | S(   s   
        Return current namespace

        This is globals() if not debugging, or a dictionary containing
        both locals() and globals() for current frame when debugging
        t   linet   cellN(   Rd   R   R   Rg   R   t   shellt   magics_managert   magics(   R   R   R   Rl   t   line_magicst   cell_magics(    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyR   5  s    c         C   s@   |  j    } |  j d k r | S|  j } | | k r8 | S| Sd S(   s   
        Return namespace where reference name is defined

        It returns the globals() if reference has not yet been defined
        N(   Rd   R   R   R   (   R   R<   Rl   t   lcls(    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyRR   O  s    	c         C   s'   |  j  d k	 r |  j  j S|  j j Sd S(   s,   Return current globals -- handles Pdb framesN(   R   R   t	   f_globalsR   t   user_ns(   R   (    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyRd   _  s    
c         C   s   y t  |  SWn d SXd S(   s   Return sequence lengthN(   R'   R   (   R   t   var(    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyR3   f  s    c         C   s/   y  d d l  } t | | j  SWn t SXd S(   s(   Return True if variable is a NumPy arrayiN(   t   numpyR0   t   ndarrayRP   (   R   R   R   (    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyR4   m  s
    c         C   s3   y$ d d l  m } t | | j  SWn t SXd S(   s,   Return True if variable is a PIL.Image imagei(   t   ImageN(   t   PILR   R0   RP   (   R   R   R   (    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyR5   u  s
    c         C   s0   y! d d l  m } t | |  SWn t SXd S(   s&   Return True if variable is a DataFramei(   t	   DataFrameN(   t   pandasR   R0   RP   (   R   R   R   (    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyR6   }  s
    c         C   s0   y! d d l  m } t | |  SWn t SXd S(   s#   Return True if variable is a Seriesi(   t   SeriesN(   R   R   R0   RP   (   R   R   R   (    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyR7     s
    c         C   s-   y |  j  |  r | j Sd SWn d SXd S(   s   Return array's shapeN(   R4   t   shapeR   (   R   R   (    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyR8     s    c         C   s-   y |  j  |  r | j Sd SWn d SXd S(   s   Return array's ndimN(   R4   t   ndimR   (   R   R   (    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyR9     s    c         C   s   | |  _  d S(   s$   Register Pdb session to use it laterN(   R   (   R   t   pdb_obj(    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyt   _register_pdb_session  s    c         C   s:   |  j  s d S| d } t j |  } |  j  j |  d S(   s3   Set all Spyder breakpoints in an active pdb sessionNi    (   R   t   pickleRU   t   set_spyder_breakpoints(   R   t   breakpointst   serialized_breakpoints(    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyt   _set_spyder_breakpoints  s
    	
c         C   s   |  j  r |  j d  n  d  S(   Nt   set_breakpoints(   R   RO   (   R   (    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyt   _ask_spyder_for_breakpoints  s    	c         C   s`   d d l  m } | |  s" t  |  j d t  } y t | |  t f SWn d t f SXd S(   s   
        Evaluate text and return (obj, valid)
        where *obj* is the object represented by *text*
        and *valid* is True if object evaluation did not raise any exception
        i(   t   is_text_stringR   N(   t   spyder_kernels.py3compatR   t   AssertionErrorR   R   t   evalR   RP   (   R   t   textR   R   (    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyR     s    c         C   s  d d l  } d d l m } d d d d d d d } | rF d	 n d
 } d } y |   j | |  Wn t k
 r } d t |  k r d d l }	 |	 j   }
 | |
 j	   k r d j
 |
  } n  ~	 q| j
 | j    } n& t k
 r| j
 | j    } n X| |  _ d S(   s   
        Set a backend for Matplotlib.

        backend: A parameter that can be passed to %matplotlib
                 (e.g. 'inline' or 'tk').
        iN(   R   s   
t   =iI   sK   
NOTE: The following error appeared when setting your Matplotlib backend!!
s   

{0}t   pylabR   s   GUI eventloopss   
NOTE: Spyder *can't* set your selected Matplotlib backend because there is a previous backend already in use.

Your backend will be {0}(   t	   tracebackt   IPython.core.getipythonR   R   t   run_line_magict   RuntimeErrorRi   R   t   get_backendt   lowert   formatt
   format_excRh   R   (   R   t   backendR   R   R   t   generic_errort   magicRq   t   errR   t   previous_backend(    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyt   _set_mpl_backend  s&    c         C   s   |  j  d k	 r |  j  GHn  d S(   s9   Show Matplotlib backend errors after the prompt is ready.N(   R   R   (   R   (    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyt   _show_mpl_backend_errors  s    c         C   sR   d d l  m } y* |   j d d  |   j d d  Wn t k
 rM n Xd S(   s   Load %autoreload magic.i(   R   t
   reload_extt
   autoreloadR   N(   R   R   R   Rh   (   R   R   (    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyt   _load_autoreload_magic  s    c         C   sQ   t  j d k sM d d l m } y |   j d d  WqM t k
 rI qM Xn  d S(   s   Load wurlitzer extension.t   nti(   R   R   t	   wurlitzerN(   R   R<   R   R   R   Rh   (   R   R   (    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyt   _load_wurlitzer  s    N(.   t   __name__t
   __module__t   __doc__R	   t   propertyR   R   R    R>   R   RO   RQ   RY   R[   R^   Rr   Rv   R|   R}   RP   R   R   R   R   R   R   R   R   R   RR   Rd   R3   R4   R5   R6   R7   R8   R9   R   R   R   R   R   R   R   R   (    (    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyR   !   sR   	
																										
					0			(   R   R   t   os.pathR   t   ospR   R   t   ipykernel.ipkernelR    t   versionRS   R   RJ   R   (    (    (    s<   lib/python2.7/site-packages/spyder_kernels/console/kernel.pyt   <module>   s   