
)Ί]c           @  s  d  Z  d d l m Z d d l Z d d l Z d d l m Z m Z m Z m	 Z	 m
 Z
 m Z m Z m Z d Z e d  Z d   Z d   Z d	   Z d
   Z e Z d   Z d   Z d   Z d   Z e d  Z e d d  Z e d k rd e f d     YZ  e! e e  j"   e! e e  j#   e! e d d e  e! e d   e! e d d e  e! e d   e! e d   e! e d   e! e d   e! e e$   e! e e$   n  d S(   s,   Utilities and wrappers around inspect modulei(   t   print_functionN(   t   is_text_stringt   builtinst   get_meth_funct   get_meth_class_instt   get_meth_classt   get_func_defaultst   to_text_stringt   PY2s   [^\'\"a-zA-Z0-9_.]c         C  s4  d } xX d d g D]J \ } } |  j  |  r |  j |  } | r] |  | } |  |  }  q] q q Wt j t |   } d } y x. | d k s t j t |  r | j   } q W| j  d  r | d  } n  | j d  r d S| r| |  |  j |  t	 |  7} n  | | 7} | r| SWn t
 k
 r/d SXd S(   s+   Return the last valid object name in stringt    s   []s   ()t   .iN(   t   endswitht   rfindt   ret   splitt   SYMBOLSt   Nonet   matcht   popt
   startswitht   lent
   IndexError(   t   txtt   lastt   txt_endt	   startchart   endchart   post   tokenst   token(    (    s>   lib/python2.7/site-packages/spyder_kernels/utils/dochelpers.pyt   getobj   s.    
!$
c         C  s)   g  t  |   D] } t |  r | ^ q S(   s   
    For standard objects, will simply return dir(obj)
    In special cases (e.g. WrapITK package), will return only string elements
    of result returned by dir(obj)
    (   t   dirR   (   t   objt   item(    (    s>   lib/python2.7/site-packages/spyder_kernels/utils/dochelpers.pyt	   getobjdir6   s    c      
   C  s  t  j |   p! t  j |   p! d } y t |  } Wn n Xi d d 6d d 6d d 6| d 6} t |   ry |  j } Wn t k
 r | | d <| SXt  j |   rt |   } t	 |   d k	 r d t	 |   j j | d <n d | j | d <t |   }  n- t |  d  r%d	 |  j | d <n
 d
 | d <|  j | d <t  j |   rt rt  j |   \ } } } } t  j | | | | d d   | d <nR t  j |   \ } } } } }	 }
 } t  j | | | | |	 |
 | d d   | d <| d k r| d | d <| d d d !| d <qn t | d  } | r| | d <| d | d } | d j d  } | d j   } | | k r| d j | d d  j   | d <qn
 d | d <| d } | j d d  j d d  | d <n  | S(   sc  
    Return text documentation from an object. This comes in a form of
    dictionary with four keys:

    name:
      The name of the inspected object
    argspec:
      It's argspec
    note:
      A phrase describing the type of object (function or method) we are
      inspecting, and the module it belongs to.
    docstring:
      It's docstring
    R	   t   namet   argspect   notet	   docstrings   Method of %s instances   Unbound %s methodt
   __module__s   Function of %s modulet   Functiont   formatvaluec         S  s   d t  |   S(   Nt   =(   t   repr(   t   o(    (    s>   lib/python2.7/site-packages/spyder_kernels/utils/dochelpers.pyt   <lambda>y   R	   c         S  s   d t  |   S(   NR*   (   R+   (   R,   (    (    s>   lib/python2.7/site-packages/spyder_kernels/utils/dochelpers.pyR-      R	   s   <lambda>s    lambda i   is   

i    s   (...)s   (self)s   ()s   (self, t   (N(   t   inspectt   getdoct   getcommentsR   t   callablet   __name__t   AttributeErrort   ismethodR   R   R   t	   __class__R   t   hasattrR'   t
   isfunctionR   t
   getargspect   formatargspect   getfullargspect   getargspecfromtextR   t   stript   replacet   lstrip(   R    R&   t   docR#   t   imclasst   argst   varargst   varkwt   defaultst
   kwonlyargst   kwonlydefaultst   annotationsR$   t	   signaturet   docstring_blockst   first_block(    (    s>   lib/python2.7/site-packages/spyder_kernels/utils/dochelpers.pyR0   ?   sh    $



$




%c         C  s   yk y t  t j |    } WnG t k
 re t |  d  rV t  t j |  j   } qf t |   } n X| SWn t t f k
 r d SXd S(   s    Wrapper around inspect.getsourceR6   N(   R   R/   t	   getsourcet	   TypeErrorR7   R6   R0   t   IOError(   R    t   src(    (    s>   lib/python2.7/site-packages/spyder_kernels/utils/dochelpers.pyRL      s    c   	      C  s   t  |  t  r$ |  j d d  }  n  | d } | d } d } |  sM d }  n  t j | d | |   } g  t j | | |   D] } | d ^ q~ } | | } | r | d Sd Sd S(	   s   Get object signatures from text (object documentation)
    Return a list containing a single string in most cases
    Example of multiple signatures: PyQt5 objectsR&   R	   s!   \([^\)].+?(?<=[\w\]\}\'"])\)(?!,)s   \([^\)]+(?<=[\w\]\}\'"])\)(?!,)s(   (%s\([^\)]+(\),\n.+)+(?<=[\w\]\}\'"])\))t   |i    N(   t
   isinstancet   dictt   getR   t   findall(	   t   textt   objnamet
   oneline_ret   multiline_ret   multiline_end_parenleft_ret   sigs_1t   gt   sigs_2t   all_sigs(    (    s>   lib/python2.7/site-packages/spyder_kernels/utils/dochelpers.pyt   getsignaturefromtext   s    

	-
c         C  s,   |  j  d  } | d j   } t | d  S(   s   
    Try to get the formatted argspec of a callable from the first block of its
    docstring
    
    This will return something like
    '(foo, bar, k=1)'
    s   

i    R	   (   R   R=   R^   (   RU   t   blocksRK   (    (    s>   lib/python2.7/site-packages/spyder_kernels/utils/dochelpers.pyR<      s    c         C  s@   t  |  |  } | r< | | j d  d d !} | j d  Sd S(   s.   Get arguments from text (object documentation)R.   i   it   ,N(   R^   t   findR   (   RU   RV   RI   t   argtxt(    (    s>   lib/python2.7/site-packages/spyder_kernels/utils/dochelpers.pyt   getargsfromtext   s    c         C  s&   |  j  d k	 r" t |  j  |  j  Sd S(   s   Get arguments from object docN(   t   __doc__R   Rc   R3   (   R    (    (    s>   lib/python2.7/site-packages/spyder_kernels/utils/dochelpers.pyt   getargsfromdoc   s    c   	      C  s  t  j |   s t  j |   r' |  } nR t  j |   rE t |   } n4 t  j |   ru t |  d  ru t |  d  } n g  St | d  s t |  } | d k	 r | St |   Sn  t  j
 | j  \ } } } | s t |   SxC t |  D]5 \ } } t | t  r d d j |  | | <q q Wt |  } | d k	 rxK t |  D]: \ } } | | t |  t |  c d t |  7<qGWn  t  j |   st  j |   rt |  d k rd Sd | k r| j d  qn  | S(	   s:   Get the names and default values of a function's argumentst   __init__t	   func_codes   (%s)s   , R*   i   t   selfN(   R/   R8   t	   isbuiltinR5   R   t   isclassR7   t   getattrRe   R   t   getargsRg   t	   enumerateRQ   t   listt   joinR   R   R+   t   remove(	   R    t   func_objRB   t   _t   i_argt   argRE   t   indext   default(    (    s>   lib/python2.7/site-packages/spyder_kernels/utils/dochelpers.pyRl      s8    	
5c         C  s  t  |   } | rd } d } x t |  D] \ } } | d k rO d g } n  | d c | 7<| t |  d k  r+ | d c | 7<t | d  d k s | r | j d  q q+ q+ Wt j |   s t j |   rt |  d k r d Sd | | k r| j d |  qn  | Sd S(   s   
    Get the names and default values of a function's arguments
    Return list with separators (', ') formatted for calltips
    s   , R	   ii   i    Rh   N(	   Rl   R   Rm   R   t   appendR/   Rj   R5   Rp   (   R    t   one_arg_per_lineRB   t   sept   textlistRs   Rt   (    (    s>   lib/python2.7/site-packages/spyder_kernels/utils/dochelpers.pyt	   getargtxt  s$    c         C  sy  | d k r t   } n  |  j d  } | j d  } t |  d k rL t S| t j k r | | k r | r yB t | t	   |  } | t	   k r | t	   | <n  | | | <Wq t
 k
 r t SXq t Sn  x | D] } y t t | |  |  } Wn t t f k
 rt SX| rc| r\y t | d | t	   |  Wq`t t f k
 rXt SXqct Sn  | d | 7} q Wt S(   s_   Return True if object is defined in namespace
    If namespace is None --> namespace = locals()R
   i    N(   R   t   localsR   R   R   t   FalseR   t   __dict__t
   __import__t   globalst	   ExceptionR7   t   evalt   SyntaxErrorR4   t   ImportErrort   True(   R    t   force_importt	   namespacet	   attr_listt   baset   modulet   attrt   attr_not_found(    (    s>   lib/python2.7/site-packages/spyder_kernels/utils/dochelpers.pyt	   isdefined'  s<    t   __main__t   Testc           B  s   e  Z d  d  Z RS(   i   c         C  s   d  S(   N(    (   Rh   t   xt   y(    (    s>   lib/python2.7/site-packages/spyder_kernels/utils/dochelpers.pyt   methodN  s    (   R3   R'   R   (    (    (    s>   lib/python2.7/site-packages/spyder_kernels/utils/dochelpers.pyR   M  s   s
   numpy.takeR   R   s   .keysR   s   globals().keyss   +scipy.signal.s   4.(%   Rd   t
   __future__R    R/   R   t   spyder_kernels.py3compatR   R   R   R   R   R   R   R   R   R}   R   R"   R0   RL   R^   t   getsignaturesfromtextR<   Rc   Re   Rl   R   R{   R   R   R3   t   objectR   t   printRf   R   t   sorted(    (    (    s>   lib/python2.7/site-packages/spyder_kernels/utils/dochelpers.pyt   <module>	   s<   :			a						'%