ó
æNXc           @   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 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 „ Z/ e j0 d e j1 ƒ Z2 d „  Z3 e d „  ƒ Z4 e d „  ƒ Z5 d „  Z6 ne' Z d d „ Z d Z d d l7 Z e Z e Z e
 Z e
 Z e Z  e Z! e Z" e# e8 f Z$ e8 Z% d d l Z e j0 d ƒ Z9 e' d „ Z( e* Z* d  „  Z+ d! „  Z, e j: Z- d" „  Z. d# „  Z4 d$ „  Z6 e Z& e d% „  ƒ Z5 e j; d& k rÐd d d d' „ Z/ n d d d d( „ 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(    (    sO   /data/av2000/mvv/env_mvv/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   (    (    sO   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/utils/py3compat.pyR      s    c         C   s   | p	 t  } |  j | d ƒ S(   NR   (   R    t   encode(   t   uR   (    (    sO   /data/av2000/mvv/env_mvv/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   (    (    sO   /data/av2000/mvv/env_mvv/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   (    (    sO   /data/av2000/mvv/env_mvv/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(    (    sO   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/utils/py3compat.pyt   buffer_to_bytes"   s    c            s"   t  j ˆ  ƒ ‡  f d †  ƒ } | S(   Nc            sP   t  |  t ƒ r d  } |  } n |  } | j } ˆ  | ƒ } | rL | | _ | S| S(   N(   R	   t   string_typest   Nonet   __doc__(   t   func_or_strt   funct   doc(   t   str_change_func(    sO   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/utils/py3compat.pyt   wrapper)   s    			(   t	   functoolst   wraps(   R   R   (    (   R   sO   /data/av2000/mvv/env_mvv/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(    (    sO   /data/av2000/mvv/env_mvv/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(    (    sO   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/utils/py3compat.pyt   _access_check^   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(    sO   /data/av2000/mvv/env_mvv/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   sO   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/utils/py3compat.pyt   _shutil_whichP   s8    	! 		i    i   R,   c         C   s   t  j |  ƒ S(   N(   t   builtin_modt   input(   t   prompt(    (    sO   /data/av2000/mvv/env_mvv/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(    (    sO   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/utils/py3compat.pys	   <genexpr>©   s    t   .(   t   allR6   RM   (   R   t   dotted(    (    sO   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/utils/py3compat.pyRM   §   s    c         C   s   t  |  j ƒ  ƒ S(   N(   t   itert   items(   t   d(    (    sO   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/utils/py3compat.pyt	   iteritems­   s    c         C   s   t  |  j ƒ  ƒ S(   N(   RR   t   values(   RT   (    (    sO   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/utils/py3compat.pyt
   itervalues®   s    c      	   B   sc   | d  k	 r | n | } e |  d ƒ 6 } | p3 e } | | j ƒ  |  d ƒ | | f d  UWd  QXd  S(   Nt   rbt   exec(   R   t   opent   compilet   read(   t   fnamet   globt   loct   compilert   f(    (    sO   /data/av2000/mvv/env_mvv/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   (    (    sO   /data/av2000/mvv/env_mvv/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   (    (    sO   /data/av2000/mvv/env_mvv/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   (    (    sO   /data/av2000/mvv/env_mvv/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   (    (    sO   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/utils/py3compat.pyt   get_closureÏ   s    c         C   s   t  j |  ƒ S(   N(   RI   t	   raw_input(   RK   (    (    sO   /data/av2000/mvv/env_mvv/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   (    (    sO   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/utils/py3compat.pys	   <genexpr>í   s    RO   (   RP   R6   t   boolt   _name_reRe   (   R   RQ   (    (    sO   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/utils/py3compat.pyRM   ë   s    c         C   s
   |  j  ƒ  S(   N(   RU   (   RT   (    (    sO   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/utils/py3compat.pyRU   ñ   s    c         C   s
   |  j  ƒ  S(   N(   RW   (   RT   (    (    sO   /data/av2000/mvv/env_mvv/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(    (    sO   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/utils/py3compat.pyRs   õ   s    c         C   s   |  S(   N(    (   R   (    (    sO   /data/av2000/mvv/env_mvv/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   (    (    sO   /data/av2000/mvv/env_mvv/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   (    (    sO   /data/av2000/mvv/env_mvv/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 ƒ | | f d  Ud  S(   Ns   
RY   (   R   RI   RZ   R\   R	   t   unicodet   unicode_to_strR[   (   R]   R^   R_   R`   t
   scripttextt   filename(    (    sO   /data/av2000/mvv/env_mvv/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 | | Œ n< e j |  ƒ j	 ƒ  j
 ƒ  d } | | | d ƒ | | f 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   (    (    sO   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/utils/py3compat.pyRb     s    +c             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(    sO   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/utils/py3compat.pyt   dec(  s
    	(   t
   ValueError(   Rƒ   R„   (    (   Rƒ   sO   /data/av2000/mvv/env_mvv/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(    (    sO   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/utils/py3compat.pyt   with_metaclassG  s    (>   R   R   R!   R8   t   ret   shutilRr   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   getcwduR9   R†   RŠ   (    (    (    sO   /data/av2000/mvv/env_mvv/lib/python2.7/site-packages/IPython/utils/py3compat.pyt   <module>   s’   			?															#