ó
Û¤[c           @   s@  d  Z  d d l Z e j d e ƒ d d l Z d d l Z d d l m Z y d d l a	 Wn e
 k
 ry d d l	 a	 n Xd d l m Z d d l m Z d d l m Z m Z m Z m Z y d d l m Z Wn! e
 k
 ró d d l m Z n Xd d	 l m Z e j re Z e Z n d d
 l m Z e e f Z y t	 j Z  Wn e! k
 rat	 j" Z  n Xd d „ Z$ e$ ƒ  Z% d „  Z& d „  Z' d „  Z( d e) f d „  ƒ  YZ* d e* f d „  ƒ  YZ+ d e* f d „  ƒ  YZ, d e* f d „  ƒ  YZ- d e* f d „  ƒ  YZ. d e* f d „  ƒ  YZ/ d e* f d „  ƒ  YZ0 d e0 f d „  ƒ  YZ1 d e0 f d  „  ƒ  YZ2 d d! „ Z3 d" „  Z4 d# „  Z5 d$ „  Z6 d% „  Z7 e8 e9 e: f Z; d& „  Z< d d' „ Z= d d( „ Z> d d) „ Z? i e/ d* 6e- e 6e0 e@ 6e2 e 6e, e% 6e6 e 6ZA e e k	 re1 eA e <n  i d+ „  e* 6e> eB 6ZC eA j ƒ  ZD eC j ƒ  ZE d S(,   s>   Pickle related utilities. Perhaps this should be called 'can'.iÿÿÿÿNs@   ipykernel.pickleutil is deprecated. It has moved to ipyparallel.(   t   FunctionType(   t	   py3compat(   t   import_item(   t   string_typest	   iteritemst   buffer_to_bytest   buffer_to_bytes_py2(   t   codeutil(   t
   get_logger(   t	   ClassTypec            s&   ‡  f d †  } t  t j | ƒ d ƒ S(   sU   the type of a closure cell doesn't seem to be importable,
    so just create one
    c              s   ˆ  S(   N(    (    (   t   a(    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyt   inner1   s    i    (   t   typeR   t   get_closure(   R
   R   (    (   R
   s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyt   _get_cell_type-   s    c         C   sL   t  |  t ƒ r? t d ƒ } t |  j | j |  j |  j ƒ }  n  d |  _ |  S(   s³   decorator for making functions appear as interactively defined.
    This results in the function being linked to the user_ns as globals()
    instead of the module globals().
    t   __main__(   t
   isinstanceR    t
   __import__t   __code__t   __dict__t   __name__t   __defaults__t
   __module__(   t   ft   mainmod(    (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyt   interactive<   s    	c          C   sW   d d l  }  |  a y d d l m } Wn t k
 r9 n
 X|  | _ t j t d ƒ d S(   su   use dill to expand serialization support
    
    adds support for object methods and closures to serialization.
    iÿÿÿÿN(   t	   serialize(	   t   dillt   picklet	   ipykernelR   t   ImportErrort   can_mapt   popR    t   None(   R   R   (    (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyt   use_dillN   s    	c          C   sW   d d l  }  |  a y d d l m } Wn t k
 r9 n
 X|  | _ t j t d ƒ d S(   s|   use cloudpickle to expand serialization support
    
    adds support for object methods and closures to serialization.
    iÿÿÿÿN(   R   (	   t   cloudpickleR   R   R   R   R   R    R    R!   (   R#   R   (    (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyt   use_cloudpicklef   s    	t   CannedObjectc           B   s#   e  Z g  d d  „ Z d d „ Z RS(   c         C   sj   | |  _  t j | ƒ |  _ t | ƒ |  _ x0 | D]( } t |  j | t t | | ƒ ƒ ƒ q1 Wg  |  _ d S(   sø  can an object for safe pickling
        
        Parameters
        ==========
        
        obj:
            The object to be canned
        keys: list (optional)
            list of attribute names that will be explicitly canned / uncanned
        hook: callable (optional)
            An optional extra callable,
            which can do additional processing of the uncanned object.
        
        large data may be offloaded into the buffers list,
        used for zero-copy transfers.
        N(   t   keyst   copyt   objt   cant   hookt   setattrt   getattrt   buffers(   t   selfR(   R&   R*   t   key(    (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyt   __init__   s    	&c         C   sŒ   | d  k r i  } n  |  j } x3 |  j D]( } t | | t t | | ƒ | ƒ ƒ q( W|  j r… t |  j | ƒ |  _ |  j | | ƒ n  |  j S(   N(   R!   R(   R&   R+   t   uncanR,   R*   (   R.   t   gR(   R/   (    (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyt
   get_objectš   s    		&	N(   R   R   R!   R0   R3   (    (    (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyR%   €   s   t	   Referencec           B   s,   e  Z d  Z d „  Z d „  Z d d „ Z RS(   s/   object for wrapping a remote reference by name.c         C   s8   t  | t ƒ s" t d | ƒ ‚ n  | |  _ g  |  _ d  S(   Ns   illegal name: %r(   R   R   t	   TypeErrort   nameR-   (   R.   R6   (    (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyR0   ©   s    	c         C   s   d |  j  S(   Ns   <Reference: %r>(   R6   (   R.   (    (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyt   __repr__¯   s    c         C   s%   | d  k r i  } n  t |  j | ƒ S(   N(   R!   t   evalR6   (   R.   R2   (    (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyR3   ²   s    	N(   R   R   t   __doc__R0   R7   R!   R3   (    (    (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyR4   §   s   		t
   CannedCellc           B   s#   e  Z d  Z d „  Z d d „ Z RS(   s   Can a closure cellc         C   s   t  | j ƒ |  _ d  S(   N(   R)   t   cell_contents(   R.   t   cell(    (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyR0   »   s    c            s2   t  |  j | ƒ ‰  ‡  f d †  } t j | ƒ d S(   Nc              s   ˆ  S(   N(    (    (   R;   (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyR   À   s    i    (   R1   R;   R   R   (   R.   R2   R   (    (   R;   s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyR3   ¾   s    N(   R   R   R9   R0   R!   R3   (    (    (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyR:   ¹   s   	t   CannedFunctionc           B   s&   e  Z d  „  Z d „  Z d d „ Z RS(   c         C   s¸   |  j  | ƒ | j |  _ | j rJ g  | j D] } t | ƒ ^ q, |  _ n	 d  |  _ t j | ƒ } | r„ t	 d „  | Dƒ ƒ |  _
 n	 d  |  _
 | j p™ d |  _ | j |  _ g  |  _ d  S(   Nc         s   s   |  ] } t  | ƒ Vq d  S(   N(   R)   (   t   .0R<   (    (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pys	   <genexpr>Ñ   s    R   (   t   _check_typeR   t   codeR   R)   t   defaultsR!   R   R   t   tuplet   closureR   t   moduleR   R-   (   R.   R   t   fdRC   (    (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyR0   Ç   s    	(		c         C   s   t  | t ƒ s t d ƒ ‚ d  S(   Ns   Not a function type(   R   R    t   AssertionError(   R.   R(   (    (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyR?   Ù   s    c            sÎ   |  j  j d ƒ s5 t |  j  ƒ t j |  j  j ‰  n  ˆ  d  k rJ i  ‰  n  |  j ru t ‡  f d †  |  j Dƒ ƒ } n d  } |  j	 r¦ t ‡  f d †  |  j	 Dƒ ƒ } n d  } t
 |  j ˆ  |  j | | ƒ } | S(   Nt   __c         3   s   |  ] } t  | ˆ  ƒ Vq d  S(   N(   R1   (   R>   t   cfd(   R2   (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pys	   <genexpr>å   s    c         3   s   |  ] } t  | ˆ  ƒ Vq d  S(   N(   R1   (   R>   R<   (   R2   (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pys	   <genexpr>é   s    (   RD   t
   startswithR   t   syst   modulesR   R!   RA   RB   RC   R    R@   R   (   R.   R2   RA   RC   t   newFunc(    (   R2   s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyR3   Ü   s    		"	"N(   R   R   R0   R?   R!   R3   (    (    (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyR=   Å   s   		t   CannedClassc           B   s&   e  Z d  „  Z d „  Z d d „ Z RS(   c         C   sÈ   |  j  | ƒ | j |  _ t | t ƒ |  _ i  |  _ x? | j j ƒ  D]. \ } } | d k rE t	 | ƒ |  j | <qE qE W|  j r‰ g  } n | j
 ƒ  } g  | d D] } t	 | ƒ ^ q  |  _ g  |  _ d  S(   Nt   __weakref__R   i   (   RN   R   (   R?   R   R6   R   R   t	   old_stylet   _canned_dictR   t   itemsR)   t   mrot   parentsR-   (   R.   t   clst   kt   vRR   t   c(    (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyR0   ñ   s    			&c         C   s   t  | t ƒ s t d ƒ ‚ d  S(   Ns   Not a class type(   R   t
   class_typeRF   (   R.   R(   (    (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyR?     s    c            sA   t  ‡  f d †  |  j Dƒ ƒ } t |  j | t |  j d ˆ  ƒƒ S(   Nc         3   s   |  ] } t  | ˆ  ƒ Vq d  S(   N(   R1   (   R>   t   p(   R2   (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pys	   <genexpr>  s    R2   (   RB   RS   R   R6   t
   uncan_dictRP   (   R.   R2   RS   (    (   R2   s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyR3     s    N(   R   R   R0   R?   R!   R3   (    (    (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyRM   ï   s   		t   CannedArrayc           B   s   e  Z d  „  Z d d „ Z RS(   c         C   s  d d l  m } | j |  _ | j j r4 | j j n	 | j j |  _ t |  _ t	 | j ƒ d k rm t
 |  _ nU | j d k rˆ t
 |  _ n: | j j rÂ t d „  | j j j ƒ  Dƒ ƒ rÂ t
 |  _ n  |  j ræ t j | t ƒ g |  _ n$ | | d d  ƒ} t | ƒ g |  _ d  S(   Niÿÿÿÿ(   t   ascontiguousarrayi    t   Oc         s   s!   |  ] \ } } | d  k Vq d S(   R]   N(    (   R>   t   dtt   sz(    (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pys	   <genexpr>  s    t   dtype(   t   numpyR\   t   shapeR`   t   fieldst   descrt   strt   Falset   pickledt   sumt   Truet   anyt   valuesR   t   dumpst   PICKLE_PROTOCOLR-   R!   t   buffer(   R.   R(   R\   (    (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyR0   	  s    '	.	c         C   sŠ   d d l  m } |  j d } |  j r9 t j t | ƒ ƒ St j rg t	 | t
 ƒ rg t | j ƒ  ƒ } n  | | d |  j ƒj |  j ƒ Sd  S(   Niÿÿÿÿ(   t
   frombufferi    R`   (   Ra   Ro   R-   Rg   R   t   loadsR   R   t   PY3R   t
   memoryviewRn   t   tobytesR`   t   reshapeRb   (   R.   R2   Ro   t   data(    (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyR3     s    	N(   R   R   R0   R!   R3   (    (    (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyR[     s   	t   CannedBytesc           B   s)   e  Z e e ƒ Z d  „  Z d d „ Z RS(   c         C   s   | g |  _  d  S(   N(   R-   (   R.   R(   (    (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyR0   .  s    c         C   s   |  j  d } |  j | ƒ S(   Ni    (   R-   t   wrap(   R.   R2   Ru   (    (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyR3   1  s    N(   R   R   t   staticmethodR   Rw   R0   R!   R3   (    (    (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyRv   +  s   	t   CannedBufferc           B   s   e  Z e Z RS(    (   R   R   Rn   Rw   (    (    (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyRy   5  s   t   CannedMemoryViewc           B   s   e  Z e Z RS(    (   R   R   Rr   Rw   (    (    (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyRz   8  s   c         C   s¾   t  ƒ  } | j d ƒ x¡ t |  j ƒ  ƒ D] \ } } t | t ƒ r) y t | ƒ } WnI t k
 rŸ | r | | k r | j d | d t	 ƒn  |  j
 | ƒ q¶ X|  j
 | ƒ |  | <q) q) Wd S(   s2   import any string-keys in a type mapping
    
    s   Importing canning maps    canning class not importable: %rt   exc_infoN(   R   t   debugt   listRQ   R   R   R   t	   Exceptiont   errorRi   R    (   t   mappingt   originalt   logR/   t   valueRT   (    (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyt   _import_mapping?  s    	c         C   sN   t  | t ƒ r: x$ | D] } t |  ƒ | k r t Sq Wt St |  ƒ | k Sd S(   sR   like isinstance(obj, check), but strict
    
    This won't catch subclasses.
    N(   R   RB   R   Ri   Rf   (   R(   t   checkRT   (    (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyt   istypeQ  s    c         C   sv   t  } xL t t ƒ D]> \ } } t | t ƒ r8 t } Pq t |  | ƒ r | |  ƒ Sq W| rr t t t ƒ t	 |  ƒ S|  S(   s   prepare an object for pickling(
   Rf   R   R   R   R   Ri   R†   R„   t   _original_can_mapR)   (   R(   t   import_neededRT   t   canner(    (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyR)   ^  s    
c         C   s0   t  |  t ƒ r( |  j d k r( t |  ƒ S|  Sd  S(   NR   (   R   RX   R   RM   (   R(   (    (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyt	   can_classr  s    
c         C   sN   t  |  t ƒ rF i  } x* t |  ƒ D] \ } } t | ƒ | | <q" W| S|  Sd S(   s   can the *values* of a dictN(   R†   t   dictR   R)   (   R(   t   newobjRU   RV   (    (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyt   can_dictx  s    c         C   sF   t  |  t ƒ r> t |  ƒ } | g  |  D] } t | ƒ ^ q% ƒ S|  Sd S(   s   can the elements of a sequenceN(   R†   t   sequence_typesR   R)   (   R(   t   tt   i(    (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyt   can_sequence„  s    #c         C   s|   t  } xO t t ƒ D]A \ } } t | t ƒ r8 t } Pq t |  | ƒ r | |  | ƒ Sq W| rx t t t ƒ t |  | ƒ S|  S(   s   invert canning(	   Rf   R   t	   uncan_mapR   R   Ri   R„   t   _original_uncan_mapR1   (   R(   R2   Rˆ   RT   t   uncanner(    (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyR1   Œ  s    c         C   sQ   t  |  t ƒ rI i  } x- t |  ƒ D] \ } } t | | ƒ | | <q" W| S|  Sd  S(   N(   R†   R‹   R   R1   (   R(   R2   RŒ   RU   RV   (    (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyRZ   Ÿ  s    c         C   sI   t  |  t ƒ rA t |  ƒ } | g  |  D] } t | | ƒ ^ q% ƒ S|  Sd  S(   N(   R†   RŽ   R   R1   (   R(   R2   R   R   (    (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyt   uncan_sequence¨  s    &s   numpy.ndarrayc         C   s   |  j  | ƒ S(   N(   R3   (   R(   R2   (    (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyt   <lambda>Á  s    (F   R9   t   warningst   warnt   DeprecationWarningR'   RJ   t   typesR    t   cPickleR   R   t   ipython_genutilsR   t   ipython_genutils.importstringR   t   ipython_genutils.py3compatR   R   R   R   t   ipyparallel.serializeR   R   t   traitlets.logR   Rq   Rr   Rn   R   RX   R	   t   DEFAULT_PROTOCOLRm   t   AttributeErrort   HIGHEST_PROTOCOLR!   R   t	   cell_typeR   R"   R$   t   objectR%   R4   R:   R=   RM   R[   Rv   Ry   Rz   R„   R†   R)   RŠ   R   R}   RB   t   setRŽ   R‘   R1   RZ   R•   t   bytesR   R‹   R’   R‡   R“   (    (    (    s3   lib/python2.7/site-packages/ipykernel/pickleutil.pyt   <module>   s€   "						'*#
				
		


