ó
’›V]c           @   s†   d  Z  d d l m Z d d l m Z d d l m Z d „  Z d „  Z d „  Z	 d „  Z
 e d	 d
 „ ƒ Z d e f d „  ƒ  YZ d S(   s  
This module is responsible for evaluating *args and **kwargs for signatures.

This means for example in this case::

    def foo(a, b, c): ...

    def bar(*args):
        return foo(1, *args)

The signature here for bar should be `bar(b, c)` instead of bar(*args).
iÿÿÿÿ(   t	   Parameter(   t   to_list(   t   ParamNameWrapperc      	   c   s€  d d l  m } d d l m } |  j } | j } | j ƒ  } | j d j } | j d j	 } x| j
 ƒ  j |  j ƒ D]} | | j k o— | k  n rw | j }	 |	 j d k rx|	 j d d |  j k rx| |	 d ƒ }
 |
 d  k	 ru| j |
 ƒ } t |  | | ƒ rct | |
 ƒ } | j | j d | d	 |
 j d
 d |
 ƒ} x( | D] } | | f VqKWqrt srt ‚ quqxqw qw Wd  S(   Niÿÿÿÿ(   t   search_ancestor(   t   TreeArgumentst   argumenti    t   *t   trailert   contextt   argument_nodei   (   t   parso.python.treeR   t   jedi.evaluate.argumentsR   t   parent_contextt	   tree_nodet   get_root_nodet   childrent	   start_post   end_post   get_used_namest   gett   string_namet   parentt   typet
   star_countt   Nonet   create_contextt   _goes_to_param_namet   _to_callablest   create_cachedt	   evaluatort   Falset   AssertionError(   t
   param_nameR   R   t   execution_contextt   function_nodet   module_nodet   startt   endt   nameR   R   R   t   contextst   argst   c(    (    s6   lib/python2.7/site-packages/jedi/evaluate/star_args.pyt   _iter_nodes_for_param   s2    					c            sR   | j  d k r t Sd d l m } | | | ƒ j ƒ  } t ‡  f d †  | Dƒ ƒ S(   NR&   iÿÿÿÿ(   t   TreeNameDefinitionc         3   s3   |  ]) } ˆ  j  | j  k o* ˆ  j | j k Vq d  S(   N(   R   R   (   t   .0t   p(   R    (    s6   lib/python2.7/site-packages/jedi/evaluate/star_args.pys	   <genexpr>;   s   (   R   R   t   jedi.evaluate.namesR+   t   gotot   any(   R    R   t   potential_nameR+   t   found(    (   R    s6   lib/python2.7/site-packages/jedi/evaluate/star_args.pyR   6   s    c         C   s„   d d l  m } | j } | j d d k } |  j | j | ƒ } x; | j | d D]( } | | k rj Pn  | |  | | ƒ } qT W| S(   Niÿÿÿÿ(   t   eval_traileri    t   awaiti   (   t   jedi.evaluate.syntax_treeR3   R   R   t	   eval_node(   R   R   R3   t	   atom_exprt   indexR'   t   trailer2(    (    s6   lib/python2.7/site-packages/jedi/evaluate/star_args.pyR   @   s    	c         c   s¯   d } t  ƒ  } x@ |  j ƒ  D]2 \ } } | d  k rA | d 7} q | j | ƒ q WxV | D]N } | r | j ƒ  r | d 8} qY n  | j | k r¢ | j ƒ  r¢ qY n  | VqY Wd  S(   Ni    i   (   t   sett   unpackR   t   addt   maybe_positional_argumentR   t   maybe_keyword_argument(   t	   argumentst   param_namest   countt	   used_keyst   keyt   _R-   (    (    s6   lib/python2.7/site-packages/jedi/evaluate/star_args.pyt   _remove_given_paramsN   s    	
i   c      	   c   sh  t  ƒ  } g  } g  } g  } g  } g  } d  } d  }	 x5|  D]-}
 |
 j ƒ  } | t j k r} | d @rgt |
 ƒ } |
 } qgq: |
 j ƒ  t j k rº | d @rgt t |
 ƒ ƒ } |
 }	 qgq: | t j k ræ | d @rg| j	 |
 ƒ qgq: | t j
 k r
| d @rg|
 Vqgq: | d k r*t |
 t j
 ƒ Vq: | d k rR| j	 t |
 t j ƒ ƒ q: | j |
 j ƒ |
 Vq: Wd } t } t } xL| D]D} | \ } } | } | | k r¸| j | ƒ n d } x| j ƒ  D]ù } t } | d k rìt } n  g  } x® t t t | | j d t ƒ ƒ ƒ | ƒ D]‚ }
 |
 j ƒ  t j k rH| j	 |
 ƒ q|
 j ƒ  t j k rm| j	 |
 ƒ q|
 j ƒ  t j k r’| j	 |
 ƒ q| j	 |
 ƒ qWt | ƒ t | ƒ k rË| } qËqËWq„Wxp | D]h }
 | d k r|
 j ƒ  t j k rt |
 t j
 ƒ VqÓ|
 j ƒ  t j k r6| j |
 j ƒ n  |
 VqÓW| rZ| d  k	 rZ| Vn | rl| d Vn  x8 | D]0 }
 |
 j | k rŽqsn  |
 V| j |
 j ƒ qsWx | D]… \ } } xv | j ƒ  D]h } t } xY t t t | | j d t ƒ ƒ ƒ d d ƒD]* }
 |
 j ƒ  t j k s#| r|
 VqqWqÇWq®W| rR|	 d  k	 rR|	 Vn | rd| d Vn  d  S(   Ni   i   i   t   resolve_starsi    R   (    (   R:   R   t   get_kindR    t   VAR_POSITIONALR*   t   VAR_KEYWORDt   listt   KEYWORD_ONLYt   appendt   POSITIONAL_ONLYt   ParamNameFixedKindR<   R   R   t   removet   get_signaturest   Truet   process_paramsRE   t   get_param_namest   lent   POSITIONAL_OR_KEYWORD(   R@   R   t
   used_namest   arg_callablest   kwarg_callablest   kw_only_namest   kwarg_namest	   arg_namest   original_arg_namet   original_kwarg_nameR-   t   kindt   longest_param_namest   found_arg_signaturet   found_kwarg_signaturet   func_and_argumentt   funcR?   t   new_star_countt	   signaturet   args_for_this_func(    (    s6   lib/python2.7/site-packages/jedi/evaluate/star_args.pyRR   `   s®    	



		!	RN   c           B   s   e  Z d  „  Z d „  Z RS(   c         C   s#   t  t |  ƒ j | ƒ | |  _ d  S(   N(   t   superRN   t   __init__t	   _new_kind(   t   selfR    t   new_kind(    (    s6   lib/python2.7/site-packages/jedi/evaluate/star_args.pyRh   É   s    c         C   s   |  j  S(   N(   Ri   (   Rj   (    (    s6   lib/python2.7/site-packages/jedi/evaluate/star_args.pyRG   Í   s    (   t   __name__t
   __module__Rh   RG   (    (    (    s6   lib/python2.7/site-packages/jedi/evaluate/star_args.pyRN   È   s   	N(   t   __doc__t   jedi._compatibilityR    t   jedi.evaluate.utilsR   R.   R   R*   R   R   RE   RR   RN   (    (    (    s6   lib/python2.7/site-packages/jedi/evaluate/star_args.pyt   <module>   s   	#	
		g