ó
’›V]c           @   s"  d  d l  m Z d  d l m Z d  d l m Z d  d l m Z 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 d  d
 l m Z d  d l m Z d  d l m Z m Z d  d l m Z m Z m Z d  d l m Z m Z m Z 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( d  d l) m* Z* d e f d „  ƒ  YZ+ d e f d „  ƒ  YZ, d e- f d „  ƒ  YZ. d e e e. e, ƒ f d „  ƒ  YZ/ d e/ f d „  ƒ  YZ0 d e f d „  ƒ  YZ1 d  e. e f d! „  ƒ  YZ2 d" „  Z3 d# S($   iÿÿÿÿ(   t   tree(   t   use_metaclass(   t   debug(   t   evaluator_method_cachet   CachedMetaClass(   t   compiled(   t	   recursion(   t
   docstrings(   t   flow_analysis(   t   helpers(   t   TreeSignature(   t   AnonymousArguments(   t   ParserTreeFiltert   FunctionExecutionFilter(   t   ContextNamet   AbstractNameDefinitiont	   ParamName(   t   ContextualizedNodet   NO_CONTEXTSt
   ContextSett   TreeContextt   ContextWrapper(   t   LazyKnownContextst   LazyKnownContextt   LazyTreeContext(   t   iterable(   t   parser_utils(   t   get_yield_exprs(   t   contexts_from_qualified_namest
   LambdaNamec           B   s5   e  Z d  Z d Z d „  Z e d „  ƒ Z d „  Z RS(   s   <lambda>u   functionc         C   s   | |  _  | j |  _ d  S(   N(   t   _lambda_contextt   parent_context(   t   selft   lambda_context(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyt   __init__   s    	c         C   s   |  j  j j S(   N(   R   t	   tree_nodet	   start_pos(   R    (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyR$   !   s    c         C   s   t  |  j g ƒ S(   N(   R   R   (   R    (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyt   infer%   s    (   t   __name__t
   __module__t   string_namet   api_typeR"   t   propertyR$   R%   (    (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyR      s
   	t   FunctionAndClassBasec           B   s   e  Z d  „  Z RS(   c         C   sc   |  j  j ƒ  r? |  j  j ƒ  } | d  k r. d  S| |  j ƒ  f S|  j  j ƒ  r[ |  j ƒ  f Sd  Sd  S(   N(   R   t   is_classt   get_qualified_namest   Nonet
   py__name__t	   is_module(   R    t   n(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyR-   *   s    (   R&   R'   R-   (    (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyR+   )   s   t   FunctionMixinc           B   sh   e  Z d  Z e d	 d	 d „ Z d „  Z d „  Z e d „  ƒ Z	 d „  Z
 d „  Z d	 d „ Z d „  Z RS(
   u   functionc         c   sx   | r) t  |  j d |  d | d | ƒVnK |  j ƒ  } x< | j ƒ  D]. } x% | j d t d | ƒ D] } | Vqa WqB Wd  S(   Nt   contextt   until_positiont   origin_scopet   search_global(   R   t	   evaluatort   py__class__t   execute_evaluatedt   get_filterst   False(   R    R6   R4   R5   t   clst   instancet   filter(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyR:   :   s    	c         C   s?   d d l  m } | d  k r) t |  g ƒ St | | |  ƒ g ƒ S(   Niÿÿÿÿ(   t   BoundMethod(   t   jedi.evaluate.context.instanceR?   R.   R   (   R    R=   t   class_contextR?   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyt	   py__get__H   s    c         C   s8   |  j  ƒ  } g  |  j j ƒ  D] } t | | j ƒ ^ q S(   N(   t   get_function_executionR#   t
   get_paramsR   t   name(   R    t   function_executiont   param(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyt   get_param_namesO   s    c         C   s/   |  j  j d k r t |  ƒ St |  |  j  j ƒ S(   Nt   lambdef(   R#   t   typeR   R   RE   (   R    (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyRE   T   s    
c         C   s
   |  j  j S(   N(   RE   R(   (   R    (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyR/   Z   s    c         C   s   |  j  | ƒ } | j ƒ  S(   N(   RC   R%   (   R    t	   argumentsRF   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyt
   py__call__]   s    c         C   s1   | d  k r t ƒ  } n  t |  j |  j |  | ƒ S(   N(   R.   R   t   FunctionExecutionContextR7   R   (   R    RK   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyRC   a   s    c         C   s#   g  |  j  ƒ  D] } t | ƒ ^ q S(   N(   t   get_signature_functionsR
   (   R    t   f(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyt   get_signaturesg   s    N(   R&   R'   R)   R;   R.   R:   RB   RH   R*   RE   R/   RL   RC   RP   (    (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyR2   7   s   				t   FunctionContextc           B   sA   e  Z d  Z d „  Z e d „  ƒ Z d „  Z d „  Z d „  Z RS(   sF   
    Needed because of decorators. Decorators are evaluated here.
    c         C   s   t  S(   N(   t   True(   R    (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyt   is_functiono   s    c            s”   ‡  ‡ ‡ f d †  } t  t ˆ | ƒ ƒ } ˆ ‰ x% ˆ j ƒ  sK ˆ j ƒ  rW ˆ j ‰ q3 W| | ƒ } | r t | g  | D] } | | ƒ ^ qw ƒ S| S(   Nc            sE   ˆ j  ƒ  r( t ˆ j ˆ d ˆ d |  ƒSˆ  ˆ j d ˆ d |  ƒSd  S(   NR   R#   (   R,   t   MethodContextR7   (   R#   (   R<   R3   R   (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyt   createt   s    	(   t   listt   _find_overload_functionsR,   t   is_instanceR   t   OverloadedFunctionContext(   R<   R3   R#   RU   t   overloaded_funcst   functionRO   (    (   R<   R3   R   s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyt   from_contextr   s     c         C   s   t  |  j d d ƒ \ } | S(   Nu   typesu   FunctionType(   R   R7   (   R    t   c(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyR8   ’   s    c         C   s   |  j  S(   N(   R   (   R    (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyt   get_default_param_context–   s    c         C   s   |  g S(   N(    (   R    (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyRN   ™   s    (	   R&   R'   t   __doc__RS   t   classmethodR\   R8   R^   RN   (    (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyRQ   k   s   	 		RT   c           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         O   s)   t  t |  ƒ j | | | Ž | |  _ d  S(   N(   t   superRT   R"   RA   (   R    R7   RA   t   argst   kwargs(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyR"   ž   s    c         C   s   |  j  S(   N(   RA   (   R    (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyR^   ¢   s    c         C   s0   |  j  j ƒ  } | d  k r d  S| |  j ƒ  f S(   N(   RA   R-   R.   R/   (   R    t   names(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyR-   ¥   s    (   R&   R'   R"   R^   R-   (    (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyRT      s   		RM   c           B   s³   e  Z d  Z e Z d „  Z e d e ƒ e j	 ƒ  e
 d „ ƒ ƒ Z d „  Z e j	 d e g  ƒ ƒ e
 d „ ƒ Z e
 d „ Z e
 d d d „ Z e ƒ  d „  ƒ Z d	 „  Z d
 „  Z RS(   sM  
    This class is used to evaluate functions and their returns.

    This is the most complicated class, because it contains the logic to
    transfer parameters. It is even more complicated, because there may be
    multiple calls to functions and recursion has to be avoided. But this is
    responsibility of the decorators.
    c         C   s5   t  t |  ƒ j | | | j ƒ | |  _ | |  _ d  S(   N(   Ra   RM   R"   R#   t   function_contextt   var_args(   R    R7   R   Re   Rf   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyR"   ¹   s    
	t   defaultc   
      C   s“  |  j  } | j d k r, |  j | j d ƒ S| rM t } t |  j | ƒ } nH | j ƒ  } d d l m	 } | |  ƒ } | r | S| t
 j	 |  j ƒ O} x÷ | D]ï } t j |  | | ƒ } | t j k rÙ t j d | ƒ n | r| t j d „  |  j | ƒ Dƒ ƒ O} n` y | j } Wn9 t k
 rPt j |  j d ƒ }	 | t |	 g ƒ O} n X| |  j | d ƒ O} | t j k rœ t j d | ƒ Pqœ qœ W| S(	   NRI   iÿÿÿÿ(   t   infer_return_typess   Return unreachable: %sc         s   s   |  ] } | j  ƒ  Vq d  S(   N(   R%   (   t   .0t   lazy_context(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pys	   <genexpr>Ý   s   u   Nonei   s   Return reachable: %s(   R#   RJ   t	   eval_nodet   childrenR   R   R7   t   iter_return_stmtst    jedi.evaluate.gradual.annotationRh   R   Re   R   t   reachability_checkt   UNREACHABLER   t   dbgR   t	   from_setst   _get_yield_lazy_contextt   AttributeErrorR   t   builtin_from_namet	   REACHABLE(
   R    t   check_yieldst   funcdeft   context_sett   returnsRh   t   rt   checkRl   t   ctx(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyt   get_return_valuesÂ   s<    		c         c   sŸ   | j  d k r3 t j |  j d ƒ } t | ƒ Vd  S| j d } | j  d k r t |  | j d ƒ } x3 | j ƒ  j | ƒ D] } | Vq{ Wn t	 |  | ƒ Vd  S(   Nt   keywordu   Nonei   t	   yield_arg(
   RJ   R   Ru   R7   R   Rl   R   R%   t   iterateR   (   R    t
   yield_exprR}   t   nodet   cnRj   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyRs   í   s    c      	   c   sb  g  t  |  j |  j ƒ D]' } | t j | d d d d ƒ f ^ q } g  } d  } xú | D]ò \ } } | j } | j d k r† | j } n  | j d k rð | |  j k rð t j	 | ƒ rð | | k r× | d d j
 | ƒ qB| j
 | | g f ƒ nR | |  j k r| j
 d  | g f ƒ n* |  j d t ƒ }	 |	 r>t |	 ƒ Vn  d  S| } qV Wx| D]\ } }
 | d  k ržxì |
 D]% } x |  j | ƒ D] } | VqˆWqrWqS| j ƒ  } t |  | ƒ } | j ƒ  j | ƒ } t | ƒ } x} | D]u } i | j ƒ  t | j d j ƒ 6} t j |  | | ƒ 5 x- |
 D]% } x |  j | ƒ D] } | Vq=Wq'WWd  QXqáWqSWd  S(	   Nt   for_stmtRx   t
   while_stmtt   if_stmtt   suiteiÿÿÿÿi   Rw   (   R   R7   R#   R    t   search_ancestorR.   t   parentRJ   R   t   for_stmt_defines_one_namet   appendR~   RR   R   Rs   t   get_testlistR   R%   R   RV   t   strRl   t   valueR	   t   predefine_names(   R    t   is_asynct   yt   for_parentst   yields_ordert   last_for_stmtt   yield_R…   RŠ   t   typest   yieldst   resultt
   input_nodeR„   t   orderedRj   t   dctt   yield_in_same_for_stmt(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyt   get_yield_lazy_contextsü   sF    @	
#c         C   s   t  j d „  |  j ƒ  Dƒ ƒ S(   Nc         s   s   |  ] } | j  ƒ  Vq d  S(   N(   R%   (   Ri   Rj   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pys	   <genexpr>/  s   (   R   Rr   Rž   (   R    R‘   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyt   merge_yield_contexts-  s    c         c   s$   |  j  |  j |  d | d | ƒVd  S(   NR4   R5   (   t   function_execution_filterR7   (   R    R6   R4   R5   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyR:   3  s    c         C   s   |  j  j |  ƒ S(   N(   Rf   t   get_executed_params_and_issues(   R    (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyR¡   8  s    c         C   s¯   |  j  ƒ  \ } } | r t St d „  | Dƒ ƒ } t j r« t j |  j ƒ } | r t j d | |  j j	 d |  j
 d d ƒq« t j d | |  j j	 d |  j
 d d ƒn  | S(   Nc         s   s   |  ] } | j  ƒ  Vq d  S(   N(   t   matches_signature(   Ri   t   executed_param(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pys	   <genexpr>A  s   s   Overloading match: %s@%s (%s)i    t   colort   BLUEs    Overloading no match: %s@%s (%s)(   R¡   R;   t   allR   t   enable_noticeR   t   get_call_signatureR#   Rq   R$   Rf   (   R    t   executed_paramst   issuest   matchest	   signature(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyR¢   <  s    			#	#c            s]  |  j  } |  j j j d k } t t | |  j ƒ ƒ } d d l m ‰  | r0| rÁ | j j	 d k  rh t
 S| j j d ƒ } |  j d t ƒ } | j ƒ  t
 f ‰ t ‡  ‡ f d	 †  | Dƒ ƒ j ƒ  S| j j	 d k  r× t
 S| j j d ƒ } |  j ƒ  } | j ƒ  t
 t
 f ‰ t ‡  ‡ f d †  | Dƒ ƒ j ƒ  Sn) | rOt t j | |  ƒ g ƒ S|  j ƒ  Sd S(   s4   
        Created to be used by inheritance.
        t
   async_stmtt   async_funcdefiÿÿÿÿ(   t   GenericClassi   i   t   AsyncGeneratorR‘   c         3   s   |  ] } ˆ  | ˆ ƒ Vq d  S(   N(    (   Ri   R]   (   R¯   t   generics(    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pys	   <genexpr>b  s   i   t	   Coroutinec         3   s   |  ] } ˆ  | ˆ ƒ Vq d  S(   N(    (   Ri   R]   (   R¯   R±   (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pys	   <genexpr>m  s    N(   R­   R®   (   i   i   (   i   i   (   R7   R#   RŠ   RJ   t   boolR   t   jedi.evaluate.gradual.typingR¯   t   environmentt   version_infoR   t   typing_modulet   py__getattribute__RŸ   RR   R8   R   t   execute_annotationR~   R   t	   Generator(   R    R7   t   is_coroutinet   is_generatort   async_generator_classest   yield_contextst   async_classest   return_contexts(    (   R¯   R±   s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyR%   M  s2    			#N(   R&   R'   R_   R   R    R"   R   R   R   t   execution_recursion_decoratorR;   R~   Rs   t   iterRž   RŸ   R.   R:   R¡   R¢   R%   (    (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyRM   ®   s   			)	0	RY   c           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s#   t  t |  ƒ j | ƒ | |  _ d  S(   N(   Ra   RY   R"   t   _overloaded_functions(   R    R[   t   overloaded_functions(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyR"   w  s    c         C   s¨   t  j d |  j d d ƒg  } t } t } xI |  j D]> } | j | ƒ } | j | ƒ | j ƒ  r5 t	 } | j
 ƒ  Sq5 W| r | S|  j j r‘ t St j d „  | Dƒ ƒ S(   Ns   Execute overloaded function %sR¤   R¥   c         s   s   |  ] } | j  ƒ  Vq d  S(   N(   R%   (   Ri   t   fe(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pys	   <genexpr>  s    (   R   Rq   t   _wrapped_contextR   R;   RÃ   RC   RŒ   R¢   RR   R%   R7   t   is_analysisR   Rr   (   R    RK   t   function_executionsRy   t   matchedRO   RF   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyRL   {  s    c         C   s   |  j  S(   N(   RÃ   (   R    (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyRN     s    (   R&   R'   R"   RL   RN   (    (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyRY   v  s   		c         c   sì   d „  } | j  d k r d  S| | ƒ r0 | Vn  xµ t rç t |  j |  d | j ƒ} | j | j j ƒ } t | t	 ƒ s~ t
 ‚ | sˆ Pn  t } xI | D]A } | j j } | j  d k r• | | ƒ r• | } t } | Vq• q• W| s3 Pq3 q3 Wd  S(   Nc         S   s   |  j  j d k r‰ |  j  j d } | j d k r= | g } n	 | j } x@ | D]5 } | j d } | j d k rM | j d k rM t SqM Wn  t S(   Nt	   decoratedi    t	   decoratori   RE   t   overload(   RŠ   RJ   Rl   R   RR   R;   (   Rx   t
   decoratorsRË   t   dotted_name(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyt   _is_overload_decorated”  s    	RI   R4   Rx   (   RJ   RR   R   R7   R$   t   getRE   R   t
   isinstanceRV   t   AssertionErrorR;   t	   tree_nameRŠ   (   R3   R#   RÏ   R>   Rd   t   foundRE   Rx   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyRW   “  s.    		N(4   t   parso.pythonR    t   jedi._compatibilityR   t   jediR   t   jedi.evaluate.cacheR   R   t   jedi.evaluateR   R   R   R   R	   t   jedi.evaluate.signatureR
   t   jedi.evaluate.argumentsR   t   jedi.evaluate.filtersR   R   t   jedi.evaluate.namesR   R   R   t   jedi.evaluate.base_contextR   R   R   R   R   t   jedi.evaluate.lazy_contextR   R   R   t   jedi.evaluate.contextR   R   t   jedi.evaluate.parser_cacheR   t   jedi.evaluate.helpersR   R   R+   t   objectR2   RQ   RT   RM   RY   RW   (    (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/function.pyt   <module>   s4   (4"2È