ó
’›V]c           @   sÏ  d  d l  Z  d  d l m Z d  d l m Z d  d l m Z d  d l m Z d  d l	 m
 Z
 d  d l m Z m Z m Z m Z d  d l m Z m Z d  d	 l m Z m Z m Z d  d
 l m Z d  d l m Z d  d l m Z m Z d d „ Z d e f d „  ƒ  YZ  e! e! d „ Z" d „  Z# d „  Z$ d e% f d „  ƒ  YZ& d e& f d „  ƒ  YZ' d e' f d „  ƒ  YZ( d „  Z) d e' f d „  ƒ  YZ* d e' f d „  ƒ  YZ+ d e& f d  „  ƒ  YZ, d d! „ Z. d" „  Z/ d S(#   iÿÿÿÿN(   t   tree(   t   zip_longest(   t   debug(   t   PushBackIterator(   t   analysis(   t   LazyKnownContextt   LazyKnownContextst   LazyTreeContextt   get_merged_lazy_context(   t	   ParamNamet   TreeNameDefinition(   t   NO_CONTEXTSt
   ContextSett   ContextualizedNode(   t   iterable(   t   evaluator_as_method_param_cache(   t   get_executed_params_and_issuest   ExecutedParami    c         C   sq   | d k r d SxZ |  D]R } y | j  } Wn t k
 r= q Xx( | ƒ  D] } t | j ƒ  | d ƒ qH Wq Wd S(   s"   Helper method for static analysis.i
   Ni   (   t
   py__iter__t   AttributeErrort   try_iter_contentt   infer(   t   typest   deptht   typt   ft   lazy_context(    (    s6   lib/python2.7/site-packages/jedi/evaluate/arguments.pyR      s    t
   ParamIssuec           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    s6   lib/python2.7/site-packages/jedi/evaluate/arguments.pyR   #   s   c            s(   t  t |  ƒ ƒ ‰  ‡  ‡ f d †  } | S(   sN  
    Transforms a function or method with arguments to the signature that is
    given as an argument clinic notation.

    Argument clinic is part of CPython and used for all the functions that are
    implemented in C (Python 3.7):

        str.split.__text_signature__
        # Results in: '($self, /, sep=None, maxsplit=-1)'
    c            s   ‡ ‡  ‡ f d †  } | S(   Nc            s‡   ˆ r | d } n | j  d ƒ } ˆ s; | j  d d  ƒ n  y# | t t |  j | ˆ  ƒ ƒ 7} Wn t k
 rr t SXˆ |  | | Ž Sd  S(   Nt	   argumentst   callback(   t   popt   Nonet   tuplet   _iterate_argument_clinict	   evaluatorR   R   (   t   contextt   argst   kwargsR   (   t   clinic_argst   funct   keep_arguments_param(    s6   lib/python2.7/site-packages/jedi/evaluate/arguments.pyt   wrapper5   s    	(    (   R)   R+   (   R(   R*   (   R)   s6   lib/python2.7/site-packages/jedi/evaluate/arguments.pyt	   decorator4   s    (   t   listt   _parse_argument_clinic(   t   stringR*   t   keep_callback_paramR,   (    (   R(   R*   s6   lib/python2.7/site-packages/jedi/evaluate/arguments.pyt   repack_with_argument_clinic'   s    c         c   s  t  | j ƒ  ƒ } xwt | ƒ D]i\ } \ } } } } | d k r· g  }	 xD | D]< \ }
 } |
 d k	 r | j |
 | f ƒ Pn  |	 j | ƒ qP Wt t j |  d |	 ƒ g ƒ V|	 q n | d k rÏ t	 ƒ  ‚ n  t
 | d ƒ \ }
 } |
 d k	 rt j d ƒ t ‚ n  | d k r>| r>t j d | t | ƒ | ƒ t ‚ n  | d k rPt n	 | j ƒ  } | rƒ| rƒt j d | ƒ t ‚ n  | Vq Wd S(	   s;   Uses a list with argument clinic information (see PEP 436).i   u   tuplei   sA   Keyword arguments in argument clinic are currently not supported.s4   TypeError: %s expected at least %s arguments, got %ss$   argument_clinic "%s" not resolvable.N(   NN(   R   t   unpackt	   enumerateR!   t	   push_backt   appendR   R   t   FakeSequencet   NotImplementedErrort   nextR   t   warningR   t   lenR   R   (   R$   R   t
   parameterst   iteratort   it   namet   optionalt   allow_kwargst   starst   lazy_contextst   keyt   argumentt   context_set(    (    s6   lib/python2.7/site-packages/jedi/evaluate/arguments.pyR#   K   s6    %				c         c   sÆ   t  } t  } x³ |  rÁ t j d |  ƒ } |  t | j d ƒ ƒ }  | j d ƒ s[ t } q n  | ps t | j d ƒ ƒ } | j d ƒ } | j d ƒ } | | } | | | | f V| r t } q q Wd  S(   Ns%   (?:(?:(\[),? ?|, ?|)(\**\w+)|, ?/)\]*i    i   i   t   *(   t   Falset   ret   matchR:   t   groupt   Truet   boolt   count(   R/   R@   R?   RI   t   wordRA   (    (    s6   lib/python2.7/site-packages/jedi/evaluate/arguments.pyR.   p   s    	
t   _AbstractArgumentsMixinc           B   s2   e  Z d d  „ Z d d „ Z d „  Z d „  Z RS(   c         C   s7   x0 |  j  ƒ  D]" \ } } | j ƒ  } t | ƒ q Wd S(   sc   
        Evaluates all arguments as a support for static analysis
        (normally Jedi).
        N(   R2   R   R   (   t   selft   funcdefRC   R   R   (    (    s6   lib/python2.7/site-packages/jedi/evaluate/arguments.pyt   eval_all‡   s    c         C   s
   t  ‚ d  S(   N(   R7   (   RP   RQ   (    (    s6   lib/python2.7/site-packages/jedi/evaluate/arguments.pyR2      s    c         C   s   t  | |  ƒ S(   N(   R   (   RP   t   execution_context(    (    s6   lib/python2.7/site-packages/jedi/evaluate/arguments.pyR   “   s    c         C   s   g  S(   N(    (   RP   (    (    s6   lib/python2.7/site-packages/jedi/evaluate/arguments.pyt   get_calling_nodes–   s    N(   R   R   R!   RR   R2   R   RT   (    (    (    s6   lib/python2.7/site-packages/jedi/evaluate/arguments.pyRO   †   s   		t   AbstractArgumentsc           B   s   e  Z d  Z d  Z d  Z RS(   N(   R   R   R!   R%   t   argument_nodet   trailer(    (    (    s6   lib/python2.7/site-packages/jedi/evaluate/arguments.pyRU   š   s   t   AnonymousArgumentsc           B   s   e  Z d  „  Z d „  Z RS(   c         C   s,   d d l  m } | | j | | j ƒ g  f S(   Niÿÿÿÿ(   t   search_params(   t   jedi.evaluate.dynamicRY   R$   t	   tree_node(   RP   RS   RY   (    (    s6   lib/python2.7/site-packages/jedi/evaluate/arguments.pyR   ¡   s    	c         C   s   d |  j  j S(   Ns   %s()(   t	   __class__R   (   RP   (    (    s6   lib/python2.7/site-packages/jedi/evaluate/arguments.pyt   __repr__©   s    (   R   R   R   R]   (    (    (    s6   lib/python2.7/site-packages/jedi/evaluate/arguments.pyRX       s   	c         c   s  |  d  k r d  S|  j d
 k p> |  j d k o> |  j d d k sP d |  f Vd  St |  j ƒ } x¶ | D]® } | d k r~ qf qf | d k r§ t | j ƒ t | ƒ f Vqf | j d k r	| j d d k r	t | j ƒ d k sä t ‚ t | j d j ƒ | j d	 f Vqf d | f Vqf Wd  S(   Nt   arglistt   testlistRD   i    RF   s   **t   ,i   i   (   R^   R_   (   RF   s   **(   RF   s   **(   RF   s   **(   R!   t   typet   childrent   iterR:   t   valueR8   t   AssertionError(   R^   R<   t   child(    (    s6   lib/python2.7/site-packages/jedi/evaluate/arguments.pyt   unpack_arglist­   s$    %t   TreeArgumentsc           B   s\   e  Z d d  „ Z e e ƒ  d „  ƒ ƒ Z d d „ Z d „  Z d „  Z	 d „  Z
 d „  Z RS(   c         C   s(   | |  _  | |  _ | |  _ | |  _ d S(   s7  
        The argument_node is either a parser node or a list of evaluated
        objects. Those evaluated objects may be lists of evaluated objects
        themselves (one list for the first argument, one for the second, etc).

        :param argument_node: May be an argument_node or a list of nodes.
        N(   RV   R%   t
   _evaluatorRW   (   RP   R$   R%   RV   RW   (    (    s6   lib/python2.7/site-packages/jedi/evaluate/arguments.pyt   __init__É   s    			c         O   s   |  | | Ž  S(   N(    (   t   clsR&   R'   (    (    s6   lib/python2.7/site-packages/jedi/evaluate/arguments.pyt   create_cachedÖ   s    c      
   c   s  g  } xøt  |  j ƒ D]ç\ } } | d k r» |  j j | ƒ } g  | D] } t |  j | | | ƒ ^ qG } xt t | Œ  ƒ D]6 } d  t g  | D] }	 |	 d  k	 r‘ |	 ^ q‘ ƒ f Vq~ Wq | d k r!|  j j | ƒ } x!| D]: }
 x1 t	 |  j |
 | | ƒ D] \ } } | | f Vqÿ Wqà Wq | j
 d k ræ| j } t | ƒ d k rx| j | d j t |  j | d ƒ f ƒ qý| j d } | j
 d k r¤| j d } n  t j |  j d |  j d | d	 | j d ƒ} d  t | ƒ f Vq d  t |  j | ƒ f Vq Wx | D] } | VqWd  S(
   Ni   i   RD   i   i    t   comp_fort   defining_contextt   sync_comp_for_nodet
   entry_node(   Rg   RV   R%   t	   eval_nodet   _iterate_star_argsR-   R   R!   R   t   _star_star_dictRa   Rb   R:   R5   Rd   R   R   t   GeneratorComprehensionRi   R   (   RP   RQ   t
   named_argst
   star_countt   elt   arrayst   at	   iteratorst   valuest   vt   dctRC   t   ct   sync_comp_fort   compt	   named_arg(    (    s6   lib/python2.7/site-packages/jedi/evaluate/arguments.pyR2   Û   s<    (1%	-		c         c   s~   xw t  |  j ƒ D]f \ } } d  } | j d k rh t | j ƒ d k rh | j d  d  d … \ } } qh n  | | | f Vq Wd  S(   NRD   i   i   (   Rg   RV   R!   Ra   R:   Rb   (   RP   Rv   RD   t   default(    (    s6   lib/python2.7/site-packages/jedi/evaluate/arguments.pyt   _as_tree_tuple_objects  s    "c         c   sU   xN |  j  ƒ  D]@ \ } } } | s t | t j ƒ r< q n  t |  j | ƒ Vq Wd  S(   N(   Rƒ   t
   isinstanceR    t   NameR
   R%   (   RP   R>   R‚   Rv   (    (    s6   lib/python2.7/site-packages/jedi/evaluate/arguments.pyt   iter_calling_names_with_star  s    c         C   s   d |  j  j |  j f S(   Ns   <%s: %s>(   R\   R   RV   (   RP   (    (    s6   lib/python2.7/site-packages/jedi/evaluate/arguments.pyR]     s    c         C   sL  d d l  m } g  } |  } xß | | k rý t | t ƒ s> Pn  | j | ƒ x¬ t t | j ƒ  ƒ ƒ D]’ } | j ƒ  } t	 | ƒ d k rŒ Pn  t | d t
 ƒ s£ Pn  | d j ƒ  } t | | ƒ rÆ g  St | t ƒ sÙ Pn  | j d  k rì Pn  | j } Pqd Wq W| j d  k	 r#t | j | j ƒ g S| j d  k	 rHt | j | j ƒ g Sg  S(   Niÿÿÿÿ(   t   DynamicExecutedParamsi   i    (   RZ   R‡   R„   Rh   R5   t   reversedR-   R†   t   gotoR:   R	   t	   get_paramR   t   var_argsR!   RV   R   R%   RW   (   RP   R‡   t   old_arguments_listR   t   calling_namet   namest   param(    (    s6   lib/python2.7/site-packages/jedi/evaluate/arguments.pyRT     s6    		N(   R   R   R!   Rj   t   classmethodR   Rl   R2   Rƒ   R†   R]   RT   (    (    (    s6   lib/python2.7/site-packages/jedi/evaluate/arguments.pyRh   È   s   +			t   ValuesArgumentsc           B   s&   e  Z d  „  Z d d „ Z d „  Z RS(   c         C   s   | |  _  d  S(   N(   t   _values_list(   RP   t   values_list(    (    s6   lib/python2.7/site-packages/jedi/evaluate/arguments.pyRj   <  s    c         c   s)   x" |  j  D] } d  t | ƒ f Vq
 Wd  S(   N(   R’   R!   R   (   RP   RQ   R{   (    (    s6   lib/python2.7/site-packages/jedi/evaluate/arguments.pyR2   ?  s    c         C   s   d |  j  j |  j f S(   Ns   <%s: %s>(   R\   R   R’   (   RP   (    (    s6   lib/python2.7/site-packages/jedi/evaluate/arguments.pyR]   C  s    N(   R   R   Rj   R!   R2   R]   (    (    (    s6   lib/python2.7/site-packages/jedi/evaluate/arguments.pyR‘   ;  s   	t   TreeArgumentsWrapperc           B   s\   e  Z d  „  Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z d d „ Z d „  Z	 d „  Z
 RS(   c         C   s   | |  _  d  S(   N(   t   _wrapped_arguments(   RP   R   (    (    s6   lib/python2.7/site-packages/jedi/evaluate/arguments.pyRj   H  s    c         C   s
   |  j  j S(   N(   R•   R%   (   RP   (    (    s6   lib/python2.7/site-packages/jedi/evaluate/arguments.pyR%   K  s    c         C   s
   |  j  j S(   N(   R•   RV   (   RP   (    (    s6   lib/python2.7/site-packages/jedi/evaluate/arguments.pyRV   O  s    c         C   s
   |  j  j S(   N(   R•   RW   (   RP   (    (    s6   lib/python2.7/site-packages/jedi/evaluate/arguments.pyRW   S  s    c         C   s
   t  ‚ d  S(   N(   R7   (   RP   R)   (    (    s6   lib/python2.7/site-packages/jedi/evaluate/arguments.pyR2   W  s    c         C   s   |  j  j ƒ  S(   N(   R•   RT   (   RP   (    (    s6   lib/python2.7/site-packages/jedi/evaluate/arguments.pyRT   Z  s    c         C   s   d |  j  j |  j f S(   Ns   <%s: %s>(   R\   R   R•   (   RP   (    (    s6   lib/python2.7/site-packages/jedi/evaluate/arguments.pyR]   ]  s    N(   R   R   Rj   t   propertyR%   RV   RW   R!   R2   RT   R]   (    (    (    s6   lib/python2.7/site-packages/jedi/evaluate/arguments.pyR”   G  s   		c         c   sŽ   | j  d ƒ sP | d  k	 rP d | j j | f } t j |  d | d | ƒqP n  y | j } Wn t k
 rp n Xx | ƒ  D] } | Vq{ Wd  S(   Nt   __iter__s;   TypeError: %s() argument after * must be a sequence, not %ss   type-error-start   message(   t   py__getattribute__R!   R>   Rd   R   t   addR   R   (   R%   t   arrayt
   input_nodeRQ   t   mt   iter_R   (    (    s6   lib/python2.7/site-packages/jedi/evaluate/arguments.pyRr   a  s    c         C   s¦   d d l  m } t | | ƒ r5 | j j d k r5 i  St | t j ƒ r` | j d k r` | j ƒ  S| d  k	 rž d | j j
 | f } t j |  d | d | ƒn  i  Sd  S(   Niÿÿÿÿ(   t   CompiledInstancet   dicts9   TypeError: %s argument after ** must be a mapping, not %ss   type-error-star-starR˜   (   t   jedi.evaluate.context.instanceRŸ   R„   R>   t   string_nameR   t   Sequencet
   array_typet   exact_key_itemsR!   Rd   R   Rš   (   R%   R›   Rœ   RQ   RŸ   R   (    (    s6   lib/python2.7/site-packages/jedi/evaluate/arguments.pyRs   q  s    !!
(0   RH   t   parso.pythonR    t   jedi._compatibilityR   t   jediR   t   jedi.evaluate.utilsR   t   jedi.evaluateR   t   jedi.evaluate.lazy_contextR   R   R   R   t   jedi.evaluate.namesR	   R
   t   jedi.evaluate.base_contextR   R   R   t   jedi.evaluate.contextR   t   jedi.evaluate.cacheR   t   jedi.evaluate.paramR   R   R   t	   ExceptionR   RG   R1   R#   R.   t   objectRO   RU   RX   Rg   Rh   R‘   R”   R!   Rr   Rs   (    (    (    s6   lib/python2.7/site-packages/jedi/evaluate/arguments.pyt   <module>   s2   "$	%		s