
V]c           @   s  d  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 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 e   Z d e f d     YZ d e e f d     YZ d" e d  Z  d e f d     YZ! d e! f d     YZ" d e! f d     YZ# d e f d     YZ$ d e f d     YZ% d e% f d     YZ& d   Z' d e f d      YZ( e( g   Z) d!   Z* d" S(#   s<  
Contexts are the "values" that Python would return. However Contexts are at the
same time also the "contexts" that a user is currently sitting in.

A ContextSet is typically used to specify the return of a function or any other
static analysis operation. In jedi there are always multiple returns and not
just one.
i(   t   reduce(   t   add(   t   ExprStmtt   SyncCompFor(   t   debug(   t   zip_longestt   unicode(   t   clean_scope_docstring(   t   BaseContextSett   BaseContext(   t   SimpleGetItemNotFound(   t   safe_property(   t   evaluator_as_method_param_cache(   t   memoize_methodt   HelperContextMixinc           B   s   e  Z d    Z e e   d     Z d   Z d   Z d   Z d   Z	 d e d  Z d d e e e d  Z d   Z d	   Z e e d
  Z d e d  Z d   Z d   Z RS(   c         C   s3   |  } x& t  r. | j d  k r" | S| j } q	 Wd  S(   N(   t   Truet   parent_contextt   None(   t   selft   context(    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyt   get_root_context   s
    	c         O   s   |  | |   S(   N(    (   t   clst   argst   kwargs(    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyt   create_cached!   s    c         C   s   |  j  j |  d | S(   Nt	   arguments(   t	   evaluatort   execute(   R   R   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyR   &   s    c         G   sK   d d l  m } | g  | D] } t | g  ^ q  } |  j j |  |  S(   Ni(   t   ValuesArguments(   t   jedi.evaluate.argumentsR   t
   ContextSetR   R   (   R   t
   value_listR   t   valueR   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyt   execute_evaluated)   s    (c         C   s
   |  j    S(   N(   R!   (   R   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyt   execute_annotation.   s    c         C   s   t  |  g  S(   N(   R   (   R   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyt   gather_annotation_classes1   s    c         C   s#   t  j d   |  j | |  D  S(   Nc         s   s   |  ] } | j    Vq d  S(   N(   t   infer(   t   .0t   lazy_context(    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pys	   <genexpr>6   s   (   R   t	   from_setst   iterate(   R   t   contextualized_nodet   is_async(    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyt   merge_types_of_iterate4   s    c   
      C   s   | d k r |  } n  d d l m } | j |  j |  | | | d | } | j |  }	 | rk | j |	  S| j |	 d | S(   sZ   
        :param position: Position of the last statement -> tuple of line, column
        i(   t   findert   analysis_errorst   attribute_lookupN(   R   t   jedi.evaluateR,   t
   NameFinderR   t   get_filterst   filter_namet   find(
   R   t   name_or_strt   name_contextt   positiont   search_globalt   is_gotoR-   R,   t   ft   filters(    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyt   py__getattribute__:   s    	c         C   s2   |  j  d  } | s( t j d |   n  | j   S(   Nu	   __await__s$   Tried to run __await__ on context %s(   R;   R   t   warningR!   (   R   t   await_context_set(    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyt   py__await__J   s    c         C   s   |  j  j |  |  S(   N(   R   t   eval_element(   R   t   node(    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyt	   eval_nodeP   s    c         C   s   |  j  j |  | | |  S(   N(   R   t   create_context(   R   R@   t   node_is_contextt   node_is_object(    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyRB   S   s    c         C   sy   t  j d |   | rl d d l m } t | |  j d  j   j d  j   j d  j   j    g  S|  j |  S(   Ns
   iterate %si(   t   LazyKnownContextst	   __aiter__t	   __anext__t	   __await__(	   R   t   dbgt   jedi.evaluate.lazy_contextRE   t   iterR;   R!   t   py__stop_iteration_returnst
   py__iter__(   R   R)   R*   RE   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyR(   V   s    c         C   s.   x' |  j    D] } | j |  r t Sq Wt S(   N(   t	   py__mro__t   is_same_classR   t   False(   R   t   class_contextR   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyt   is_sub_class_off   s    c         C   s/   t  |  j t j k r% | j |   S|  | k S(   N(   t   typeRO   R   (   R   t   class2(    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyRO   l   s    N(   t   __name__t
   __module__R   t   classmethodR   R   R   R!   R"   R#   R   RP   R+   R   R;   R>   RA   RB   R(   RR   RO   (    (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyR      s"   								t   Contextc           B   s   e  Z d  Z i  Z d Z e d    Z d   Z d d  Z	 d   Z
 d   Z d   Z d   Z d   Z d	   Z d
   Z d   Z d   Z d   Z e d  Z d   Z d   Z d   Z d   Z RS(   sC   
    Should be defined, otherwise the API returns empty types.
    c         C   s   |  j  j j   S(   N(   t	   __class__RU   t   lower(   R   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyt   api_type}   s    c         C   s7   d d l  m } | j | j d | j d d |  t S(   Ni(   t   analysiss   type-error-not-subscriptablet   messages+   TypeError: '%s' object is not subscriptable(   R/   R\   R   R   R@   t   NO_CONTEXTS(   R   t   index_context_setR)   R\   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyt   py__getitem__   s    	c         C   sL   | d  k	 rB d d l m } | j | j d | j d d |  n  t g   S(   Ni(   R\   s   type-error-not-iterableR]   s&   TypeError: '%s' object is not iterable(   R   R/   R\   R   R   R@   RK   (   R   R)   R\   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyRM      s    	c         C   s   g  S(   N(    (   R   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyt   get_signatures   s    c         C   s   t  S(   N(   RP   (   R   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyt   is_class   s    c         C   s   t  S(   N(   RP   (   R   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyt   is_instance   s    c         C   s   t  S(   N(   RP   (   R   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyt   is_function   s    c         C   s   t  S(   N(   RP   (   R   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyt	   is_module   s    c         C   s   t  S(   N(   RP   (   R   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyt   is_namespace   s    c         C   s   t  S(   N(   RP   (   R   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyt   is_compiled   s    c         C   s   t  S(   N(   RP   (   R   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyt   is_bound_method   s    c         C   s   t  S(   s   
        Since Wrapper is a super class for classes, functions and modules,
        the return value will always be true.
        (   R   (   R   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyt
   py__bool__   s    c         C   s4   y |  j  j Wn t k
 r" d SXt |  j   Sd  S(   Nt    (   t	   tree_nodet   get_doc_nodet   AttributeErrorR   R   (   R   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyt	   py__doc__   s    c         C   s#   | t  k r t d |    n  | S(   Ns)   There exists no safe value for context %s(   t	   _sentinelt
   ValueError(   R   t   default(    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyt   get_safe_value   s    c         C   s   t  j d |   t S(   Ns   no execution possible %s(   R   R<   R^   (   R   R   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyt
   py__call__   s    c         C   s   t  j d |   t S(   Ns0   Not possible to return the stop iterations of %s(   R   R<   R^   (   R   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyRL      s    c         C   s   d  S(   N(   R   (   R   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyt   get_qualified_names   s    c         C   s   |  j  j   S(   N(   R   t   is_stub(   R   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyRu      s    N(   RU   RV   t   __doc__t   predefined_namesR   Rk   t   propertyR[   R`   RM   Ra   Rb   Rc   Rd   Re   Rf   Rg   Rh   Ri   Rn   Ro   Rr   Rs   RL   Rt   Ru   (    (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyRX   s   s*   	
														c         C   s&   t  j d   |  j | d | D  S(   s   
    Calls `iterate`, on all contexts but ignores the ordering and just returns
    all contexts that the iterate functions yield.
    c         s   s   |  ] } | j    Vq d  S(   N(   R$   (   R%   R&   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pys	   <genexpr>   s   R*   (   R   R'   R(   (   t   contextsR)   R*   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyt   iterate_contexts   s    t   _ContextWrapperBasec           B   s>   e  Z i  Z e d     Z e e   d     Z d   Z RS(   c         C   s_   d d l  m } |  j j } | j d  k	 r; | |  | j  Sd d l m } | |  | j  Sd  S(   Ni(   t   ContextName(   t   CompiledContextName(	   t   jedi.evaluate.namesR|   t   _wrapped_contextt   namet	   tree_nameR   t   jedi.evaluate.compiledR}   t   string_name(   R   R|   t   wrapped_nameR}   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyR      s    c         O   s   |  | |   S(   N(    (   R   R   R   R   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyR      s    c         C   s(   | d k s t  d   t |  j |  S(   NR   s!   Problem with _get_wrapped_context(   t   AssertionErrort   getattrR   (   R   R   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyt   __getattr__   s    (	   RU   RV   Rw   R   R   RW   R   R   R   (    (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyR{      s
   
t   LazyContextWrapperc           B   s/   e  Z e e d      Z d   Z d   Z RS(   c         C   s$   t  j d   |  j   SWd  QXd  S(   Ns   Resolve lazy context wrapper(   R   t   increase_indent_cmt   _get_wrapped_context(   R   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyR      s    c         C   s   d |  j  j S(   Ns   <%s>(   RY   RU   (   R   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyt   __repr__   s    c         C   s
   t   d  S(   N(   t   NotImplementedError(   R   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyR     s    (   RU   RV   R   R   R   R   R   (    (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyR      s   	t   ContextWrapperc           B   s   e  Z d    Z d   Z RS(   c         C   s   | |  _  d  S(   N(   R   (   R   t   wrapped_context(    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyt   __init__  s    c         C   s   d |  j  j |  j f S(   Ns   %s(%s)(   RY   RU   R   (   R   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyR   
  s    (   RU   RV   R   R   (    (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyR     s   	t   TreeContextc           B   s   e  Z d    Z d   Z RS(   c         C   s/   t  t |   j | |  i  |  _ | |  _ d  S(   N(   t   superR   R   Rw   Rk   (   R   R   R   Rk   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyR     s    	c         C   s   d |  j  j |  j f S(   Ns   <%s: %s>(   RY   RU   Rk   (   R   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyR     s    (   RU   RV   R   R   (    (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyR     s   	t   ContextualizedNodec           B   s,   e  Z d    Z d   Z d   Z d   Z RS(   c         C   s   | |  _  | |  _ d  S(   N(   R   R@   (   R   R   R@   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyR     s    	c         C   s   |  j  j   S(   N(   R   R   (   R   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyR     s    c         C   s   |  j  j |  j  S(   N(   R   RA   R@   (   R   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyR$      s    c         C   s   d |  j  j |  j |  j f S(   Ns   <%s: %s in %s>(   RY   RU   R@   R   (   R   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyR   #  s    (   RU   RV   R   R   R$   R   (    (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyR     s   			t   ContextualizedNamec           B   s    e  Z e d     Z d   Z RS(   c         C   s   |  j  S(   N(   R@   (   R   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyR   )  s    c   	      C   s(  g  } t  } |  j j } |  j } x | d	 k	 r#| j d
 k r x t | j  D]x \ } } | | k rO t | d  } | r t t | j  | d  } t	 | |  } n  | j
 d | | f  PqO qO Wt d   t  } n1 | j d k r t } n t | t t f  rPn  | } | j } q$ W| S(   s  
        Returns an array of tuple(int, node) of the indexes that are used in
        tuple assignments.

        For example if the name is ``y`` in the following code::

            x, (y, z) = 2, ''

        would result in ``[(1, xyz_node), (0, yz_node)]``.

        When searching for b in the case ``a, *b, c = [...]`` it will return::

            [(slice(1, -1), abc_node)]
        t   testlistt   testlist_compt   testlist_star_exprt   exprlisti   i    s   Couldn't find the assignment.t	   star_exprN(   R   R   R   R   (   RP   R@   t   parentR   RS   t	   enumeratet   childrent   intt   lent   slicet   insertt   LookupErrorR   t
   isinstanceR   R   (	   R   t   indexest   is_star_exprR@   t   comparet   it   childt   indext   from_end(    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyt   assignment_indexes-  s.    			(   RU   RV   Rx   R   R   (    (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyR   '  s   c   
      C   sA  d d l  m } t |  d d   } t } t   } x | D] } | d  k	 r | } t | |  rk | j } n  y | j }	 Wn t	 k
 r n X|	 d d   } t
 |  t t t t t t f k r y | | |  O} w8 Wq t k
 r q Xq n  | j |  q8 W| s| r-| |  j t |  |  O} n  t j d |  | S(   Ni(   t   Slicet   py__simple_getitem__Rq   s   py__getitem__ result: %s(   t   jedi.evaluate.context.iterableR   R   R   R^   t   setR   t   objRr   Rm   RS   t   floatR   t   strR   R   t   bytesR
   R   R`   R   R   RI   (
   R   t   index_contextsR)   R   t   simple_getitemt   resultt   unused_contextst   index_contextR   t   method(    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyt   _getitemW  s6    	$
		R   c           B   s_   e  Z d    Z d	 e d  Z d   Z d   Z d   Z d   Z	 d   Z
 d   Z d   Z RS(
   c         C   s   t  d   |  j D  S(   Nc         s   s   |  ] } | j    Vq d  S(   N(   t   py__class__(   R%   t   c(    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pys	   <genexpr>  s    (   R   t   _set(   R   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyR     s    c         c   s   d d l  m } g  |  j D] } | j | d | ^ q } x> t |   D]0 } | g  | D] } | d  k	 rX | ^ qX  VqH Wd  S(   Ni(   t   get_merged_lazy_contextR*   (   RJ   R   R   R(   R   R   (   R   R)   R*   R   R   t
   type_iterst   lazy_contextst   l(    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyR(     s
    +c            s    t  j   f d   |  j D  S(   Nc         3   s$   |  ] } | j  j |    Vq d  S(   N(   R   R   (   R%   R   (   R   (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pys	   <genexpr>  s    (   R   R'   R   (   R   R   (    (   R   s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyR     s    c            s#   t  j    f d   |  j D  S(   Nc         3   s!   |  ] } | j       Vq d  S(   N(   R!   (   R%   R   (   R   R   (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pys	   <genexpr>  s    (   R   R'   R   (   R   R   R   (    (   R   R   s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyR!     s    c            sd    j  d  rA t t g  |  j D] } | j      ^ q g   St j    f d   |  j D  S(   NR8   c         3   s!   |  ] } | j       Vq d  S(   N(   R;   (   R%   R   (   R   R   (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pys	   <genexpr>  s    (   t   getR    R   R   R;   R   R'   (   R   R   R   R   (    (   R   R   s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyR;     s    2c            s#   t  j    f d   |  j D  S(   Nc         3   s!   |  ] } t  |     Vq d  S(   N(   R   (   R%   R   (   R   R   (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pys	   <genexpr>  s    (   R   R'   R   (   R   R   R   (    (   R   R   s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyt   get_item  s    c         C   s[   |  j  g   } xE |  j D]: } y t | |  } Wn t k
 rE q X| |   O} q W| S(   N(   RY   R   R   Rm   (   R   t   function_namet   context_setR   R   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyt	   try_merge  s    c         C   s)   t  j g  |  j D] } | j   ^ q  S(   N(   R   R'   R   R#   (   R   R   (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyR#     s    c         C   s-   g  |  j  D] } | j   D] } | ^ q q
 S(   N(   R   Ra   (   R   R   t   sig(    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyRa     s    N(   RU   RV   R   R   RP   R(   R   R!   R;   R   R   R#   Ra   (    (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyR     s   							c            s     f d   } | S(   Nc             s   t    |  |    S(   N(   R   (   R   R   (   t   func(    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyt   wrapper  s    (    (   R   R   (    (   R   s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyt   iterator_to_context_set  s    N(+   Rv   t	   functoolsR    t   operatorR   t   parso.python.treeR   R   t   jediR   t   jedi._compatibilityR   R   t   jedi.parser_utilsR   t   jedi.commonR   R	   t   jedi.evaluate.helpersR
   t   jedi.evaluate.utilsR   t   jedi.evaluate.cacheR   t
   jedi.cacheR   t   objectRo   R   RX   R   RP   Rz   R{   R   R   R   R   R   R   R   R^   R   (    (    (    s9   lib/python2.7/site-packages/jedi/evaluate/base_context.pyt   <module>   s2   	Zc
0	*,