ó
&9_[c           @   s  d  Z  d d l Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l m	 Z	 d d „ Z d d „ Z d d „ Z d d „ Z d d	 „ Z d
 „  Z d „  Z d „  Z e j e j Bd d „ Z e j d d k ràe Z d d „ Z d Z d d l Z e Z e Z e Z e Z  e Z! e Z" e Z# e$ f Z% e$ Z& e j' Z' e( d „ Z) e* Z+ d „  Z, d „  Z- e j. Z. e j/ Z/ d d d „ Z0 e j1 d e j2 ƒ Z3 d „  Z4 e d „  ƒ Z5 e d „  ƒ Z6 d „  Z7 ne( Z d d „ Z d Z d d l8 Z e Z e Z e Z e Z  e Z! e Z" e Z# e$ e9 f Z% e9 Z& d d l Z e j1 d ƒ Z: e( d „ Z) e+ Z+ d  „  Z, d! „  Z- e j; Z. d" „  Z/ d# „  Z5 d$ „  Z7 e Z' e d% „  ƒ Z6 e j d& k rÜd d d d' „ Z0 n d d d d( „ Z0 e Z< e j= ƒ  d) k Z> d* „  Z? d+ „  Z@ d S(,   s=   Compatibility tricks for Python 3. Mainly to do with unicode.iÿÿÿÿNi   (   t   DEFAULT_ENCODINGc         C   s   |  S(   N(    (   t   xt   encoding(    (    s6   lib/python2.7/site-packages/IPython/utils/py3compat.pyt   no_code   s    c         C   s   | p	 t  } |  j | d ƒ S(   Nt   replace(   R    t   decode(   t   sR   (    (    s6   lib/python2.7/site-packages/IPython/utils/py3compat.pyR      s    c         C   s   | p	 t  } |  j | d ƒ S(   NR   (   R    t   encode(   t   uR   (    (    s6   lib/python2.7/site-packages/IPython/utils/py3compat.pyR      s    c         C   s    t  |  t ƒ r t |  | ƒ S|  S(   N(   t
   isinstancet   bytesR   (   R   R   (    (    s6   lib/python2.7/site-packages/IPython/utils/py3compat.pyt   cast_unicode   s    c         C   s    t  |  t ƒ s t |  | ƒ S|  S(   N(   R	   R
   R   (   R   R   (    (    s6   lib/python2.7/site-packages/IPython/utils/py3compat.pyt
   cast_bytes   s    c         C   s"   t  |  t ƒ s t |  ƒ }  n  |  S(   s   Cast a buffer object to bytes(   R	   R
   (   t   buf(    (    s6   lib/python2.7/site-packages/IPython/utils/py3compat.pyt   buffer_to_bytes#   s    c            s"   t  j ˆ  ƒ ‡  f d †  ƒ } | S(   Nc            s_   t  |  t ƒ r d  } |  } n |  } | j } | d  k	 rH ˆ  | ƒ } n  | r[ | | _ | S| S(   N(   R	   t   string_typest   Nonet   __doc__(   t   func_or_strt   funct   doc(   t   str_change_func(    s6   lib/python2.7/site-packages/IPython/utils/py3compat.pyt   wrapper*   s    			(   t	   functoolst   wraps(   R   R   (    (   R   s6   lib/python2.7/site-packages/IPython/utils/py3compat.pyt   _modify_str_or_docstring)   s    c         C   sv   y t  |  ƒ SWn t k
 r! n Xy t t |  ƒ ƒ SWn t k
 rI n Xy t t |  ƒ ƒ SWn t k
 rq n Xd S(   sl   unicode(e) with various fallbacks. Used for exceptions, which may not be
    safe to call unicode() on.
    u   Unrecoverably corrupt evalue(   t   unicode_typet   UnicodeErrort   str_to_unicodet   strt   repr(   t   e(    (    s6   lib/python2.7/site-packages/IPython/utils/py3compat.pyt   safe_unicode=   s    c            s   d „  } t  j j ˆ  ƒ r2 | ˆ  | ƒ r. ˆ  Sd S| d k rY t  j j d t  j ƒ } n  | sc d S| j t  j ƒ } t	 j
 d k rt  j | k r© | j d t  j ƒ n  t  j j d d ƒ j t  j ƒ } t ‡  f d †  | Dƒ ƒ rò ˆ  g } qg  | D] } ˆ  | ^ qù } n	 ˆ  g } t ƒ  } xu | D]m } t  j j | ƒ }	 |	 | k r+| j |	 ƒ x9 | D]. }
 t  j j | |
 ƒ } | | | ƒ rc| SqcWq+q+Wd S(	   sn  Given a command, mode, and a PATH string, return the path which
    conforms to the given mode on the PATH, or None if there is no such
    file.

    `mode` defaults to os.F_OK | os.X_OK. `path` defaults to the result
    of os.environ.get("PATH"), or can be overridden with a custom search
    path.
    
    This is a backport of shutil.which from Python 3.4
    c         S   s5   t  j j |  ƒ o4 t  j |  | ƒ o4 t  j j |  ƒ S(   N(   t   ost   patht   existst   accesst   isdir(   t   fnt   mode(    (    s6   lib/python2.7/site-packages/IPython/utils/py3compat.pyt   _access_checka   s    $t   PATHt   win32i    t   PATHEXTt    c         3   s*   |  ]  } ˆ  j  ƒ  j | j  ƒ  ƒ Vq d  S(   N(   t   lowert   endswith(   t   .0t   ext(   t   cmd(    s6   lib/python2.7/site-packages/IPython/utils/py3compat.pys	   <genexpr>~   s    N(   R!   R"   t   dirnameR   t   environt   gett   defpatht   splitt   pathsept   syst   platformt   curdirt   insertt   anyt   sett   normcaset   addt   join(   R1   R'   R"   R(   t   pathextt   filesR0   t   seent   dirt   normdirt   thefilet   name(    (   R1   s6   lib/python2.7/site-packages/IPython/utils/py3compat.pyt   _shutil_whichS   s8    	! 		i    i   R,   c         C   s   t  j |  ƒ S(   N(   t   builtin_modt   input(   t   prompt(    (    s6   lib/python2.7/site-packages/IPython/utils/py3compat.pyRJ   —   s    t   builtinsc         C   s-   | r# t  d „  |  j d ƒ Dƒ ƒ S|  j ƒ  S(   Nc         s   s   |  ] } t  | ƒ Vq d  S(   N(   t   isidentifier(   R/   t   a(    (    s6   lib/python2.7/site-packages/IPython/utils/py3compat.pys	   <genexpr>¬   s    t   .(   t   allR6   RM   (   R   t   dotted(    (    s6   lib/python2.7/site-packages/IPython/utils/py3compat.pyRM   ª   s    c         C   s   t  |  j ƒ  ƒ S(   N(   t   itert   items(   t   d(    (    s6   lib/python2.7/site-packages/IPython/utils/py3compat.pyt	   iteritems°   s    c         C   s   t  |  j ƒ  ƒ S(   N(   RR   t   values(   RT   (    (    s6   lib/python2.7/site-packages/IPython/utils/py3compat.pyt
   itervalues±   s    c         B   s\   | d  k	 r | n | } e |  d ƒ / } | p3 e } | | j ƒ  |  d ƒ | | UWd  QXd  S(   Nt   rbt   exec(   R   t   opent   compilet   read(   t   fnamet   globt   loct   compilert   f(    (    s6   lib/python2.7/site-packages/IPython/utils/py3compat.pyt   execfile¶   s    s   \bprint (?P<expr>.*)$c         C   s   |  j  d ƒ } d | S(   Nt   exprs	   print(%s)(   t   groups(   t   matchRc   (    (    s6   lib/python2.7/site-packages/IPython/utils/py3compat.pyt   _print_statement_sub¾   s    c         C   s   t  j t |  ƒ S(   sÏ   Refactor 'print x' statements in a doctest to print(x) style. 2to3
        unfortunately doesn't pick up on our doctests.
        
        Can accept a string or a function, so it can be used as a decorator.(   t   _print_statement_ret   subRf   (   R   (    (    s6   lib/python2.7/site-packages/IPython/utils/py3compat.pyt   doctest_refactor_printÂ   s    c         C   s   |  j  d d ƒ S(   st   "{u}'abc'" --> "'abc'" (Python 3)
        
        Accepts a string or a function, so it can be used as a decorator.R   R,   (   t   format(   R   (    (    s6   lib/python2.7/site-packages/IPython/utils/py3compat.pyt   u_formatË   s    c         C   s   |  j  S(   s"   Get a function's closure attribute(   t   __closure__(   Ra   (    (    s6   lib/python2.7/site-packages/IPython/utils/py3compat.pyt   get_closureÒ   s    c         C   s   t  j |  ƒ S(   N(   RI   t	   raw_input(   RK   (    (    s6   lib/python2.7/site-packages/IPython/utils/py3compat.pyRJ   Û   s    t   __builtin__s   [a-zA-Z_][a-zA-Z0-9_]*$c         C   s6   | r# t  d „  |  j d ƒ Dƒ ƒ St t j |  ƒ ƒ S(   Nc         s   s   |  ] } t  | ƒ Vq d  S(   N(   RM   (   R/   RN   (    (    s6   lib/python2.7/site-packages/IPython/utils/py3compat.pys	   <genexpr>ð   s    RO   (   RP   R6   t   boolt   _name_reRe   (   R   RQ   (    (    s6   lib/python2.7/site-packages/IPython/utils/py3compat.pyRM   î   s    c         C   s
   |  j  ƒ  S(   N(   RU   (   RT   (    (    s6   lib/python2.7/site-packages/IPython/utils/py3compat.pyRU   ô   s    c         C   s
   |  j  ƒ  S(   N(   RW   (   RT   (    (    s6   lib/python2.7/site-packages/IPython/utils/py3compat.pyRW   õ   s    c         C   s   t  j |  | t | ƒ ƒ S(   N(   t   typest
   MethodTypet   type(   R   t   instance(    (    s6   lib/python2.7/site-packages/IPython/utils/py3compat.pyRs   ø   s    c         C   s   |  S(   N(    (   R   (    (    s6   lib/python2.7/site-packages/IPython/utils/py3compat.pyRi   û   s    c         C   s   |  j  S(   s"   Get a function's closure attribute(   t   func_closure(   Ra   (    (    s6   lib/python2.7/site-packages/IPython/utils/py3compat.pyRm   þ   s    c         C   s   |  j  d d ƒ S(   su   "{u}'abc'" --> "u'abc'" (Python 2)
        
        Accepts a string or a function, so it can be used as a decorator.R   (   Rj   (   R   (    (    s6   lib/python2.7/site-packages/IPython/utils/py3compat.pyRk     s    R*   c         B   s{   | d  k	 r | n | } e j |  ƒ j ƒ  d } e |  e ƒ rO e |  ƒ } n |  } | p^ e } | | | d ƒ | | Ud  S(   Ns   
RY   (   R   RI   RZ   R\   R	   t   unicodet   unicode_to_strR[   (   R]   R^   R_   R`   t
   scripttextt   filename(    (    s6   lib/python2.7/site-packages/IPython/utils/py3compat.pyRb     s    c         B   s°   e  |  e ƒ r' |  j e j ƒ  ƒ } n |  } g  | | g D] } | d  k	 r: | ^ q: } | d  k rw e j | | Œ n5 e j |  ƒ j	 ƒ  j
 ƒ  d } | | | d ƒ | | Ud  S(   Ns   
RY   (   R	   Rw   R   R8   t   getfilesystemencodingR   RI   Rb   RZ   R\   t   rstrip(   R]   R^   R_   R`   Rz   t   nst   whereRy   (    (    s6   lib/python2.7/site-packages/IPython/utils/py3compat.pyRb     s    +t   PyPyc             s(   ˆ  s t  d ƒ ‚ n  ‡  f d †  } | S(   s5   Python 3 compatible function annotation for Python 2.s1   annotations must be provided as keyword argumentsc            sI   t  |  d ƒ r< x3 ˆ  j ƒ  D] \ } } | |  j | <q Wn	 ˆ  |  _ |  S(   Nt   __annotations__(   t   hasattrRS   R€   (   Ra   t   kt   v(   t   kwargs(    s6   lib/python2.7/site-packages/IPython/utils/py3compat.pyt   dec/  s
    	(   t
   ValueError(   R„   R…   (    (   R„   s6   lib/python2.7/site-packages/IPython/utils/py3compat.pyt   annotate+  s    c         G   s   |  d | i  ƒ S(   s%   Create a base class with a metaclass.t   _NewBase(    (   t   metat   bases(    (    s6   lib/python2.7/site-packages/IPython/utils/py3compat.pyt   with_metaclassN  s    (A   R   R   R!   R8   t   ret   shutilRr   R9   R   R    R   R   R   R   R   R   R   R   R    t   F_OKt   X_OKRH   t   version_infot   Truet   PY3RJ   t   builtin_mod_nameRL   RI   R   Rx   t   str_to_bytest   bytes_to_strt   cast_bytes_py2t   cast_unicode_py2t   buffer_to_bytes_py2R   R   R   t   whicht   FalseRM   t   ranget   xrangeRU   RW   t   getcwdRs   Rb   R[   t	   MULTILINERg   Rf   Ri   Rk   Rm   Ro   Rw   Rq   t   getcwdut   PY2t   python_implementationt   PYPYR‡   R‹   (    (    (    s6   lib/python2.7/site-packages/IPython/utils/py3compat.pyt   <module>   s˜   			?															#