ó
’›V]c           @   sÃ   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 d  d l m Z d  d l m Z d „  Z d	 e f d
 „  ƒ  YZ d „  Z d „  Z d „  Z d „  Z d S(   iÿÿÿÿ(   t   defaultdict(   t   debug(   t   PushBackIterator(   t   analysis(   t   LazyKnownContextt   LazyTreeContextt   LazyUnknownContext(   t
   docstrings(   t   iterablec         C   sS   t  | t ƒ rO | j } | j j d k r6 | j } n  t j | j |  | | ƒ Sd  S(   Nt   argument(   t
   isinstanceR   t   datat   parentt   typeR   t   addt   context(   t
   error_namet   lazy_contextt   messaget   node(    (    s2   lib/python2.7/site-packages/jedi/evaluate/param.pyt   _add_argument_issue   s
    	t   ExecutedParamc           B   sP   e  Z d  Z e d „ Z d „  Z e d „ Z d „  Z e	 d „  ƒ Z
 d „  Z RS(   s    Fake a param and give it values.c         C   s7   | |  _  | |  _ | |  _ | j j |  _ | |  _ d  S(   N(   t   _execution_contextt   _param_nodet   _lazy_contextt   namet   valuet   string_namet   _is_default(   t   selft   execution_contextt
   param_nodeR   t
   is_default(    (    s2   lib/python2.7/site-packages/jedi/evaluate/param.pyt   __init__   s
    			c         C   s#   d d l  m } | |  j |  j ƒ S(   Niÿÿÿÿ(   t   infer_param(   t    jedi.evaluate.gradual.annotationR"   R   R   (   R   R"   (    (    s2   lib/python2.7/site-packages/jedi/evaluate/param.pyt   infer_annotations   s    c         C   sT   | rG t  j |  j |  j ƒ } |  j ƒ  j ƒ  } | s< | rG | | BSn  |  j j ƒ  S(   N(   R   R"   R   R   R$   t   execute_annotationR   t   infer(   R   t	   use_hintst
   doc_paramst   ann(    (    s2   lib/python2.7/site-packages/jedi/evaluate/param.pyR&   !   s    c            s‡   |  j  r t S|  j d t ƒ j ƒ  } |  j j r5 t S|  j ƒ  ‰  ˆ  sK t St ‡  f d †  | Dƒ ƒ } t	 j
 d | | ˆ  d d ƒ| S(   NR'   c         3   s1   |  ]' } ˆ  j  ƒ  D] } | j | ƒ Vq q d  S(   N(   t   gather_annotation_classest   is_sub_class_of(   t   .0t   c1t   c2(   t   annotations(    s2   lib/python2.7/site-packages/jedi/evaluate/param.pys	   <genexpr>5   s   s   signature compare %s: %s <=> %st   colort   BLUE(   R   t   TrueR&   t   Falset   py__class__R   t
   star_countR$   t   anyR   t   dbg(   R   t   argument_contextst   matches(    (   R/   s2   lib/python2.7/site-packages/jedi/evaluate/param.pyt   matches_signature*   s    		c         C   s
   |  j  j S(   N(   R   t   var_args(   R   (    (    s2   lib/python2.7/site-packages/jedi/evaluate/param.pyR;   <   s    c         C   s   d |  j  j |  j f S(   Ns   <%s: %s>(   t	   __class__t   __name__R   (   R   (    (    s2   lib/python2.7/site-packages/jedi/evaluate/param.pyt   __repr__@   s    (   R=   t
   __module__t   __doc__R3   R!   R$   R2   R&   R:   t   propertyR;   R>   (    (    (    s2   lib/python2.7/site-packages/jedi/evaluate/param.pyR      s   			c      	      sõ  ‡  ‡ ‡ ‡ f d †  } g  ‰ g  } i  } |  j  ‰ |  j j ƒ  } x$ ˆ j ƒ  D] } | | | j j <qO Wt ˆ  j ˆ ƒ ƒ ‰ t t	 ˆ ƒ ƒ } t
 d „  ƒ } i  }	 t }
 t } xˆ j ƒ  D]} t } t | d ƒ \ } } xÔ | d  k	 rµt }
 y | | } Wn t k
 r| | | <n~ X| |	 k r‡t } d ˆ j | f } xU ˆ  j ƒ  D]. } ˆ j t j | j d | j d | ƒƒ qRWn t |  | | ƒ |	 | <t | d ƒ \ } } qâ Wy | j |	 | j j ƒ w¾ Wn t k
 rçn X| j d k rg  } | d  k	 rZ| j | ƒ xA | D]6 \ } } | rF| j | | f ƒ Pn  | j | ƒ qWn  t j |  j d | ƒ } t | ƒ } ný | j d k rÙ| d  k	 r©| | ƒ n  t j |  j t | ƒ ƒ } t | ƒ } i  } n¥ | d  k rx| j d  k r]t  ƒ  } |
 suxT ˆ  j ƒ  D]C } t! ˆ t" ˆ ƒ ƒ } ˆ j t j | j d	 | j d | ƒƒ qWquq~t# | | j ƒ } t } n | } | j t |  | | d
 | ƒƒ t$ | t  ƒ s¾ | d |	 | j j <q¾ q¾ W|
 rpx  t% | ƒ t% |	 ƒ D]… } | | } | p| p| j p| j säxT ˆ  j ƒ  D]C } t! ˆ t" ˆ ƒ ƒ } ˆ j t j | j d	 | j d | ƒƒ qWqäqäWn  xI | j& ƒ  D]; \ } } d ˆ j | f } ˆ j t' d | d | ƒƒ q}Wt | ƒ } | rë| d \ } } | | ƒ n  | ˆ f S(   Nc            sQ   t  ˆ t ˆ ƒ ƒ } ˆ  j ƒ  r@ ˆ j t d |  d | ƒƒ n ˆ j d  ƒ d  S(   Ns   type-error-too-many-argumentsR   (   t   _error_argument_countt   lent   get_calling_nodest   appendR   t   None(   R	   t   m(   t	   argumentst   funcdeft   issuest   unpacked_va(    s2   lib/python2.7/site-packages/jedi/evaluate/param.pyt   too_many_argsE   s    c           S   s   g  S(   N(    (    (    (    s2   lib/python2.7/site-packages/jedi/evaluate/param.pyt   <lambda>c   t    s>   TypeError: %s() got multiple values for keyword argument '%s'.s   type-error-multiple-valuesR   i   u   tuplei   s   type-error-too-few-argumentsR    iÿÿÿÿs8   TypeError: %s() got an unexpected keyword argument '%s'.s   type-error-keyword-argumenti    (   NN(   NN((   t	   tree_nodet   function_contextt   get_default_param_contextt
   get_paramsR   R   t   listt   unpackR   t   iterR    R3   t   nextRF   R2   t   KeyErrorRD   RE   R   R   R   R   R   R5   t	   push_backR   t   FakeSequencet	   evaluatorR   t   FakeDictt   dictt   defaultR   RB   RC   R   R
   t   sett   itemsR   (   R   RH   RL   t   result_paramst
   param_dictt   default_param_contextt   paramt   var_arg_iteratort   non_matching_keyst	   keys_usedt	   keys_onlyt   had_multiple_value_errorR    t   keyR	   t	   key_paramRG   t   contextualized_nodet   lazy_context_listt   seqt
   result_argt   dctt   kR   t   remaining_argumentst	   first_key(    (   RH   RI   RJ   RK   s2   lib/python2.7/site-packages/jedi/evaluate/param.pyt   get_executed_params_and_issuesD   sÈ    						

!c         C   sh   |  j  ƒ  } t d „  | Dƒ ƒ } | d k r7 d } n d t | ƒ | } d |  j | t | ƒ | f S(   Nc         s   s'   |  ] } | j  s | j r d  Vq d S(   i   N(   R]   R5   (   R,   t   p(    (    s2   lib/python2.7/site-packages/jedi/evaluate/param.pys	   <genexpr>á   s    i    s   exactly s   from %s to s0   TypeError: %s() takes %s%s arguments (%s given).(   RR   t   sumRC   R   (   RI   t   actual_countt   paramst   default_argumentst   before(    (    s2   lib/python2.7/site-packages/jedi/evaluate/param.pyRB   ß   s    	c         C   s   | j  d k r0 t t j |  j d g  ƒ ƒ } n] | j  d k r] t t j |  j i  ƒ ƒ } n0 | j d  k rx t ƒ  } n t	 |  j
 | j ƒ } t |  | | ƒ S(   Ni   u   tuplei   (   R5   R   R   RY   RZ   R[   R]   RF   R   R   t   parent_contextR   (   R   Rc   Rn   (    (    s2   lib/python2.7/site-packages/jedi/evaluate/param.pyt   _create_default_paramë   s    c         C   s&   g  | j  ƒ  D] } t |  | ƒ ^ q S(   N(   RR   R{   (   R   RI   Rt   (    (    s2   lib/python2.7/site-packages/jedi/evaluate/param.pyt   create_default_paramsû   s    N(   t   collectionsR    t   jediR   t   jedi.evaluate.utilsR   t   jedi.evaluateR   t   jedi.evaluate.lazy_contextR   R   R   R   t   jedi.evaluate.contextR   R   t   objectR   Rs   RB   R{   R|   (    (    (    s2   lib/python2.7/site-packages/jedi/evaluate/param.pyt   <module>   s   	0	›		