
V]c           @   sg  d  Z  d d l 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 m Z m Z d d
 l m Z m Z m Z m Z m Z m Z d d l m Z m Z d d l m Z d d l m Z m Z m Z d d l  m! Z! m" Z" m# Z# m$ Z$ m% Z% m& Z& m' Z' m( Z( d d l) m* Z* d e+ f d     YZ, d e e, f d     YZ- d e- f d     YZ. d e$ f d     YZ/ d   Z0 d e+ f d     YZ1 d e+ f d     YZ2 d e e, f d     YZ3 d e1 f d      YZ4 d! e4 e3 f d"     YZ5 d# e4 e3 f d$     YZ6 d% e4 e- f d&     YZ7 d' e1 e3 f d(     YZ8 d) e3 f d*     YZ9 d+ e2 e9 f d,     YZ: d- e9 f d.     YZ; d/ e; f d0     YZ< d1 e2 e; f d2     YZ= d3 e; f d4     YZ> d5   Z? d6   Z@ e d7 e#  e jA d8     ZB d9   ZC d: e' f d;     YZD d< e+ f d=     YZE d S(>   s  
Contains all classes and functions to deal with lists, dicts, generators and
iterators in general.

Array modifications
*******************

If the content of an array (``set``/``list``) is requested somewhere, the
current module will be checked for appearances of ``arr.append``,
``arr.insert``, etc.  If the ``arr`` name points to an actual array, the
content will be added

This can be really cpu intensive, as you can imagine. Because |jedi| has to
follow **every** ``append`` and check wheter it's the right array. However this
works pretty good, because in *slow* cases, the recursion detector and other
settings will stop this process.

It is important to note that:

1. Array modfications work only in the current module.
2. Jedi only checks Array additions; ``list.pop``, etc are ignored.
iN(   t   debug(   t   settings(   t   force_unicodet   is_py3(   t   compiled(   t   analysis(   t	   recursion(   t   LazyKnownContextt   LazyKnownContextst   LazyTreeContext(   t   get_int_or_nonet	   is_stringt   predefine_namest   evaluate_call_of_leaft   reraise_getitem_errorst   SimpleGetItemNotFound(   t   safe_propertyt   to_list(   t   evaluator_method_cache(   t   ParserTreeFiltert   LazyAttributeOverwritet   publish_method(   t
   ContextSett   Contextt   NO_CONTEXTSt   TreeContextt   ContextualizedNodet   iterate_contextst   HelperContextMixint	   _sentinel(   t   get_sync_comp_forst   IterableMixinc           B   s<   e  Z d    Z e j d d k r1 e d  Z n	 e j Z RS(   c         C   s   t  t j |  j d  g  S(   Nu   None(   R   R   t   builtin_from_namet	   evaluator(   t   self(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyt   py__stop_iteration_returns.   s    i    i   c         C   s#   | t  k r t d |    n  | S(   Ns)   There exists no safe value for context %s(   R   t
   ValueError(   R"   t   default(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyt   get_safe_value9   s    (   t   __name__t
   __module__R#   t   syst   version_infoR   R&   R   (    (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR   -   s   		t   GeneratorBasec           B   s   e  Z d Z d    Z d   Z d   Z e d  d d   Z e d  e d d d e d	 d d
 d      Z	 d   Z
 e d    Z RS(   c         C   s"   |  j  j j d  j   \ } | S(   Nt	   Generator(   R!   t   typing_modulet   py__getattribute__t   execute_annotation(   R"   t	   generator(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyt   _get_wrapped_contextD   s    c         C   s   t  S(   N(   t   False(   R"   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyt   is_instanceJ   s    c         C   s   t  S(   N(   t   True(   R"   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyt
   py__bool__M   s    t   __iter__c         C   s   t  |  g  S(   N(   R   (   R"   t   contextualized_node(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyt
   py__iter__P   s    t   sendt   nextt   python_version_matchi   t   __next__i   c         C   s   t  j d   |  j   D  S(   Nc         s   s   |  ] } | j    Vq d  S(   N(   t   infer(   t   .0t   lazy_context(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pys	   <genexpr>X   s    (   R   t	   from_setsR8   (   R"   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyt
   py__next__T   s    c         C   s   t  t j |  j d  g  S(   Nu   None(   R   R   R    R!   (   R"   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR#   Z   s    c         C   s   t  j |  d  S(   NR,   (   R   t   CompiledContextName(   R"   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyt   name]   s    N(   R'   R(   t   Nonet
   array_typeR1   R3   R5   R   R8   RA   R#   t   propertyRC   (    (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR+   A   s   					!	R,   c           B   s5   e  Z d  Z d   Z d d  Z d   Z d   Z RS(   s   Handling of `yield` functions.c         C   s#   t  t |   j |  | |  _ d  S(   N(   t   superR,   t   __init__t   _func_execution_context(   R"   R!   t   func_execution_context(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyRH   d   s    c         C   s   |  j  j   S(   N(   RI   t   get_yield_lazy_contexts(   R"   R7   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR8   h   s    c         C   s   |  j  j   S(   N(   RI   t   get_return_values(   R"   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR#   k   s    c         C   s   d t  |   j |  j f S(   Ns
   <%s of %s>(   t   typeR'   RI   (   R"   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyt   __repr__n   s    N(   R'   R(   t   __doc__RH   RD   R8   R#   RN   (    (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR,   b   s
   		t   CompForContextc           B   s)   e  Z e d     Z e d d d  Z RS(   c         C   s   |  | j  | |  S(   N(   R!   (   t   clst   parent_contextt   comp_for(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyt   from_comp_fors   s    c         c   s   t  |  j |   Vd  S(   N(   R   R!   (   R"   t   search_globalt   until_positiont   origin_scope(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyt   get_filtersw   s    N(   R'   R(   t   classmethodRT   R2   RD   RX   (    (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyRP   r   s   c      
   C   s  | j  d } | j  d } | d k r | j  d j  d d k r | j  d } | j d k rl | j  d } n  t |  | d | d | j  d d	 | j  d
 St } n* | d k r t } n | d k r t } n  | j  d } | j d k r | j  d } n  | |  d | d | d | j  d S(   Ni    i   t   {t   :i   RS   t   sync_comp_for_nodet   key_nodet
   value_nodei   t   (t   [t   defining_contextt
   entry_node(   t   childrenRM   t   DictComprehensiont   SetComprehensiont   GeneratorComprehensiont   ListComprehension(   R!   t   contextt   atomt   brackett   test_list_compt   sync_comp_forRQ   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyt   comprehension_from_atom{   s4    			t   ComprehensionMixinc           B   sY   e  Z e   d     Z d d  Z e d g   e d     Z d d  Z d   Z	 RS(   c         C   s   t  j | |  S(   N(   RP   RT   (   R"   RR   RS   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyt   _get_comp_for_context   s    c      
   c   s`  | d } | j  j d k } | j d } | p5 |  j } | j |  } t | |  } | j | d | } | j d }	 x t |  D] \ }
 } | j   } t	 | | |	  } |  j
 | |  } t | | |   y* x# |  j | d |  D] } | Vq WWnQ t k
 rQ| j |  j  } |  j d k rI| | j |  j  f VqR| Vn XWd  QXq Wd  S(   Ni    RS   i   t   is_asynci   t   dict(   t   parentRM   Rc   t   _defining_contextt	   eval_nodeR   t   iteratet	   enumerateR=   t   unpack_tuple_to_dictRo   R   t   _nestedt
   IndexErrort   _entry_nodeRE   t   _value_node(   R"   t	   comp_forsRR   RS   Rp   t
   input_nodet   input_typest   cnt   iteratedt   exprlistt   iR?   t   typest   dctt   context_t   result(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyRx      s.    
	R%   c         c   s8   t  t |  j   } x |  j |  D] } | Vq% Wd  S(   N(   t   tupleR   t   _sync_comp_for_nodeRx   (   R"   R|   R   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyt   _iterate   s    c         c   s&   x |  j    D] } t |  Vq Wd  S(   N(   R   R   (   R"   R7   t   set_(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR8      s    c         C   s   d t  |   j |  j f S(   Ns
   <%s of %s>(   RM   R'   R   (   R"   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyRN      s    N(
   R'   R(   R   Ro   RD   Rx   R   R   R8   RN   (    (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyRn      s   t
   _DictMixinc           B   s   e  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_set(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pys	   <genexpr>   s    (   R   t   get_mapping_item_contexts(   R"   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyt   _get_generics   s    (   R'   R(   R   (    (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR      s   t   Sequencec           B   sY   e  Z d  Z e d    Z d   Z d   Z d   Z d   Z e	 d    Z
 d   Z RS(   u   instancec         C   s   t  j |  |  j  S(   N(   R   RB   RE   (   R"   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyRC      s    c         C   s   |  j    j   f S(   N(   t   merge_types_of_iterateR   (   R"   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR      s    c         C   sJ   d d l  m } t j |  j |  j  } | | |  j    j   \ } | S(   Ni(   t   GenericClass(   t   jedi.evaluate.gradual.typingR   R   R    R!   RE   R   R/   (   R"   R   t   klasst   c(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR1      s    c         C   s   d  S(   N(   RD   (   R"   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR5      s    c         C   s   t  j |  j |  j  S(   N(   R   R    R!   RE   (   R"   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR      s    c         C   s
   |  j  j S(   N(   R!   t   builtins_module(   R"   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyRr      s    c         C   s,   |  j  d k r |  j   St t |  g   S(   NRq   (   RE   t   _dict_valuesR   R   (   R"   t   index_context_setR7   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyt   py__getitem__   s    
(   R'   R(   t   api_typeRF   RC   R   R1   R5   R   R   Rr   R   (    (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR      s   				t   _BaseComprehensionc           B   s   e  Z d    Z RS(   c         C   sJ   | j  d k s t  t t |   j |  | |  _ | |  _ | |  _ d  S(   NRl   (   RM   t   AssertionErrorRG   R   RH   Rs   R   Rz   (   R"   R!   Ra   R\   Rb   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyRH      s
    		(   R'   R(   RH   (    (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR      s   Rg   c           B   s   e  Z d  Z d   Z RS(   u   listc         C   sX   t  | t  r t |  g  St |  j    } t t t   | | } Wd  QX| j   S(   N(	   t
   isinstancet   sliceR   t   listR8   R   Ry   t	   TypeErrorR=   (   R"   t   indext	   all_typesR?   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyt   py__simple_getitem__  s    (   R'   R(   RE   R   (    (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyRg      s   Re   c           B   s   e  Z d  Z RS(   u   set(   R'   R(   RE   (    (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyRe     s   Rf   c           B   s   e  Z RS(    (   R'   R(   (    (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyRf     s   Rd   c           B   sz   e  Z d  Z d   Z d d  Z d   Z d   Z d   Z e	 d  d    Z
 e	 d  d	    Z d
   Z d   Z RS(   u   dictc         C   sS   | j  d k s t  t t |   j |  | |  _ | |  _ | |  _ | |  _ d  S(   NRl   (	   RM   R   RG   Rd   RH   Rs   R   Rz   R{   (   R"   R!   Ra   R\   R]   R^   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyRH     s    			c         c   s,   x% |  j    D] \ } } t |  Vq Wd  S(   N(   R   R   (   R"   R7   t   keyst   values(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR8      s    c         C   so   x_ |  j    D]Q \ } } xB | D]: } t | t j  r  | j d t    | k rZ | Sq  q  Wq Wt    d  S(   NR%   (   R   R   R   t   CompiledObjectR&   t   objectR   (   R"   R   R   R   t   k(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR   $  s    c         C   s   t  j d   |  j   D  S(   Nc         s   s   |  ] \ } } | Vq d  S(   N(    (   R>   R   R   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pys	   <genexpr>/  s    (   R   R@   R   (   R"   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyt
   _dict_keys.  s    c         C   s   t  j d   |  j   D  S(   Nc         s   s   |  ] \ } } | Vq d  S(   N(    (   R>   R   R   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pys	   <genexpr>2  s    (   R   R@   R   (   R"   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR   1  s    R   c         C   s1   t  |  j    } t t |  j d | g  g  S(   Nu   list(   R   R   R   t   FakeSequenceR!   (   R"   R?   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyt   _imitate_values4  s    t   itemsc      	   C   sh   g  |  j    D]9 \ } } t t |  j d t |  t |  g   ^ q } t t |  j d |  g  S(   Nu   tupleu   list(   R   R   R   R!   R   R   (   R"   t   keyt   valuet   lazy_contexts(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyt   _imitate_items9  s    Ic         C   s   |  j    |  j   f S(   N(   R   R   (   R"   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR   I  s    c         C   s   g  S(   N(    (   R"   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyt   exact_key_itemsL  s    N(   R'   R(   RE   RH   RD   R8   R   R   R   R   R   R   R   R   (    (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyRd     s   		
			t   SequenceLiteralContextc           B   st   e  Z d Z i d d 6d d 6d d 6Z d	   Z d
   Z d d  Z d   Z d   Z	 d   Z
 d   Z d   Z RS(   t   testlist_star_exprt   testlistt   subscriptlistu   tupleR_   u   listR`   u   setRZ   c         C   sd   t  t |   j |  | |  _ | |  _ |  j j |  j k rI d |  _ n t j | j	 d |  _ d  S(   Nu   tuplei    (
   RG   R   RH   Ri   Rs   RM   t   _TUPLE_LIKERE   t   mappingRc   (   R"   R!   Ra   Ri   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyRH   X  s    		c         C   s  |  j  d k r t j |  j |  } x} |  j   D]o \ } } x` |  j j |  D]L } y | j } Wn t k
 rv qP X| | d  j	   rP |  j j |  SqP Wq1 Wt
 d |    n  t | t  r t |  g  St t t t   |  j   | } Wd QX|  j j |  Sd S(   s9   Here the index is an int/str. Raises IndexError/KeyError.u   dictu   ==s   No key found in dictionary %s.N(   RE   R   t   create_simple_objectR!   t   get_tree_entriesRs   Rt   t   execute_operationt   AttributeErrorR&   R   R   R   R   R   R   t   KeyErrorRy   (   R"   R   t   compiled_obj_indexR   R   R   t   methodt   node(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR   c  s     c         c   s   |  j  d k rg t } x0 |  j   D]" \ } } | |  j j |  O} q" Wx | D] } t |  VqO Wn x` |  j   D]R } | d k s | j d k r t t |  j d d d   Vqt t
 |  j |  Vqt Wx t |  j |   D] } | Vq Wd S(   s   
        While values returns the possible values for any array field, this
        function returns the value for a certain index.
        u   dictR[   t	   subscriptN(   RE   R   R   Rs   Rt   R   RM   R   t   SliceRD   R	   t   check_array_additions(   R"   R7   R   R   t   _R   t   addition(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR8   y  s     c         C   s   t  |  j    S(   N(   t   lenR   (   R"   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyt	   py__len__  s    c            s#   t  j   f d     j   D  S(   Nc         3   s'   |  ] \ } }   j  j |  Vq d  S(   N(   Rs   Rt   (   R>   R   t   v(   R"   (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pys	   <genexpr>  s   (   R   R@   R   (   R"   (    (   R"   s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR     s    c         C   s  |  j  j } |  j  j |  j k r2 | d  d  d  S| d } | d k rL g  S| j d k r g  | j d  d  d  D] } | j d k rr | ^ qr S| j d k rqg  } t | j  } x | D] } | d	 k r t |  t | d   q t | d   } | d  k s| d
 k r1| j d k r!qi| j |  q | d k sCt  | j | t |  f  t | d   q W| S| j d k rg  S| g Sd  S(   Ni   i   t   ]t   }t   )t   testlist_compt	   star_exprt   dictorsetmakers   **t   ,R[   (   R   R   R   (	   Ri   Rc   RM   R   t   iterR:   RD   t   appendR   (   R"   R   t
   array_nodeR   t   kvt   iteratorR   t   op(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR     s8    

c         c   sj   xc |  j    D]U \ } } xF |  j j |  D]2 } t |  r, | j   t |  j |  f Vq, q, Wq Wd S(   s   
        Returns a generator of tuples like dict.items(), where the key is
        resolved (as a string) and the values are still lazy contexts.
        N(   R   Rs   Rt   R   R&   R	   (   R"   R]   R   R   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR     s    c         C   s   d |  j  j |  j f S(   Ns
   <%s of %s>(   t	   __class__R'   Ri   (   R"   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyRN     s    (   R   R   R   N(   R'   R(   R   R   RH   R   RD   R8   R   R   R   R   RN   (    (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR   R  s   

					-	
t   DictLiteralContextc           B   sS   e  Z d  Z d   Z e d  d    Z e d  d    Z d   Z d   Z RS(   u   dictc         C   s,   t  t |   j |  | |  _ | |  _ d  S(   N(   RG   R   RH   Rs   Ri   (   R"   R!   Ra   Ri   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyRH     s    	R   c         C   s1   t  |  j    } t t |  j d | g  g  S(   Nu   list(   R   R   R   R   R!   (   R"   R?   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR     s    R   c      
   C   st   g  |  j    D]E \ } } t t |  j d t |  j |  t |  j |  f   ^ q } t t |  j d |  g  S(   Nu   tupleu   list(   R   R   R   R!   R	   Rs   R   (   R"   R]   R^   R   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR     s    Uc            s#   t  j   f d     j   D  S(   Nc         3   s'   |  ] \ } }   j  j |  Vq d  S(   N(   Rs   Rt   (   R>   R   R   (   R"   (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pys	   <genexpr>  s   (   R   R@   R   (   R"   (    (   R"   s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR     s    c         C   s   |  j    |  j   f S(   N(   R   R   (   R"   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR     s    (	   R'   R(   RE   RH   R   R   R   R   R   (    (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR     s   		t
   _FakeArrayc           B   s   e  Z d    Z RS(   c         C   s,   t  t |   j |  | |  _ | |  _ d  S(   N(   RG   R   RH   RE   Ri   (   R"   R!   t	   containerRM   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyRH     s    	(   R'   R(   RH   (    (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR     s   R   c           B   s8   e  Z d    Z d   Z d d  Z d   Z d   Z RS(   c         C   s)   t  t |   j | d |  | |  _ d S(   s7   
        type should be one of "tuple", "list"
        N(   RG   R   RH   RD   t   _lazy_context_list(   R"   R!   RE   t   lazy_context_list(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyRH     s    c         C   sI   t  | t  r t |  g  St t t   |  j | } Wd  QX| j   S(   N(   R   R   R   R   Ry   R   R   R=   (   R"   R   R?   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR   
  s
    c         C   s   |  j  S(   N(   R   (   R"   R7   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR8     s    c         C   s   t  t |  j   S(   N(   t   boolR   R   (   R"   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR5     s    c         C   s   d t  |   j |  j f S(   Ns
   <%s of %s>(   RM   R'   R   (   R"   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyRN     s    N(   R'   R(   RH   R   RD   R8   R5   RN   (    (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR     s
   			t   FakeDictc           B   s_   e  Z d    Z d	 d  Z d   Z e d  d    Z d   Z d   Z	 d   Z
 d   Z RS(
   c         C   s)   t  t |   j | | d  | |  _ d  S(   Nu   dict(   RG   R   RH   t   _dct(   R"   R!   R   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyRH     s    c         c   s2   x+ |  j  D]  } t t j |  j |   Vq
 Wd  S(   N(   R   R   R   R   R!   (   R"   R7   R   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR8   !  s    c         C   s   t  r |  j j j j d k r t | t  re t |  } y |  j | j	   SWq t
 k
 ra q Xq t | t  r | j d  } y |  j | j	   SWq t
 k
 r q Xq n  t t
 t   |  j | } Wd  QX| j	   S(   Ni   s   utf-8(   R   R!   t   environmentR*   t   majorR   t   bytesR   R   R=   R   t   strt   encodeR   R   (   R"   R   t   index_unicodet   index_bytesR?   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR   %  s     
R   c         C   s+   t  t |  j d t |  j    g  g  S(   Nu   tuple(   R   R   R!   R   R   (   R"   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyt   _values9  s    	c         C   s    t  j d   |  j j   D  S(   Nc         s   s   |  ] } | j    Vq d  S(   N(   R=   (   R>   R?   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pys	   <genexpr>A  s    (   R   R@   R   R   (   R"   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR   @  s    c         C   s   t  j d   |  j   D  S(   Nc         s   s   |  ] } | j    Vq d  S(   N(   R=   (   R>   R?   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pys	   <genexpr>D  s    (   R   R@   R8   (   R"   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR   C  s    c         C   s   |  j    |  j   f S(   N(   R   R   (   R"   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR   F  s    c         C   s   |  j  j   S(   N(   R   R   (   R"   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR   I  s    N(   R'   R(   RH   RD   R8   R   R   R   R   R   R   R   (    (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR     s   					t   MergedArrayc           B   s8   e  Z d    Z d d  Z d   Z d   Z d   Z RS(   c         C   s0   t  t |   j | | | d j  | |  _ d  S(   Ni(   RG   R   RH   RE   t   _arrays(   R"   R!   t   arrays(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyRH   N  s    #c         c   s4   x- |  j  D]" } x | j   D] } | Vq Wq
 Wd  S(   N(   R   R8   (   R"   R7   t   arrayR?   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR8   R  s    c         C   s   t  j d   |  j   D  S(   Nc         s   s   |  ] } | j    Vq d  S(   N(   R=   (   R>   R?   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pys	   <genexpr>X  s    (   R   R@   R8   (   R"   R   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR   W  s    c         c   s4   x- |  j  D]" } x | j   D] } | Vq Wq
 Wd  S(   N(   R   R   (   R"   R   t   a(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR   Z  s    c         C   s   t  d   |  j D  S(   Nc         s   s   |  ] } t  |  Vq d  S(   N(   R   (   R>   R   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pys	   <genexpr>`  s    (   t   sumR   (   R"   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyt   __len___  s    N(   R'   R(   RH   RD   R8   R   R   R   (    (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR   M  s
   			c   	      C   s  | j  d k r i | | j 6S| j  d k rV | j d d k rV t |  | | j d  S| j  d k rVi  } t | j d d d   } d } x | j |  D]p } | d 7} y t |  } Wn. t k
 r t j	 |  d | d d | q X| j
 t |  | j   |   q Wt | d  } | rR| d k	 rRt j	 |  d | d d | n  | S| j  d k st| j  d k rxi  S| j  d k ri  St  d S(   sG   
    Unpacking tuple assignments in for statements and expr_stmts.
    RC   Ri   i    R_   R`   i   R   R   R   R   Ni   s   value-error-too-many-valuest   messages3   ValueError: too many values to unpack (expected %s)s   value-error-too-few-valuess.   ValueError: need more than %s values to unpackt   powert	   atom_exprR   (   R_   R`   (   R   R   R   R   (   RM   R   Rc   Rw   R   Ru   R:   t   StopIterationR   t   addt   updateR=   RD   t   NotImplementedError(	   Rh   R   R   R   t   partst   nR?   t   partt	   has_parts(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyRw   c  s6    "	
#c         C   s    | j  d k r t St |  |  S(   s@    Just a mapper function for the internal _check_array_additions R   t   set(   R   R   (   RE   R   t   _check_array_additions(   Rh   t   sequence(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR     s    R%   c            sn  d d l  m   t j d | d d |  j   } t j sO t | t j	  rf t j d d d t
 S  f d   } t j t } t _ | j j d k } | r d	 d
 d g n	 d d g } t   } x| D]{} y | j j   | }	 Wn t k
 r q q XxD|	 D]<}
 |  j } | j |
 j k  o5| j k  n s@qn  |
 j } | j } | j j |  } y | j | d } Wn t k
 rqn< X| j d k s| j d d k s| j d d k rqn  |  j |
  } t j |  j |  Q } | r<t | |
 d t } | | k r<| | | | j d |  O} q<n  Wd QXqWq W| t _ t j d | d d | S(   sr   
    Checks if a `Array` has "add" (append, insert, extend) statements:

    >>> a = [""]
    >>> a.append(1)
    i(   t	   argumentss   Dynamic array search for %st   colort   MAGENTAs   Dynamic array search aborted.c            s   t    j |  j |  |  j    } t   } | d k rF | d } n  | d k ry xf | D] \ } } | j |  qY WnB | d	 k r x3 | D]( \ } } | t | j   j    O} q Wn  | S(
   Nt   inserti   R   R   t   extendR   (   R   (   R   R   R   (   R   R   (   R   t   TreeArgumentsR!   t   unpackR   R   R=   Ru   (   Rh   t   arglistt   add_namet   paramsR   R   R?   (   R   (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyt   find_additions  s    $	#R   R   R   R   R   R   i   t   traileri    R_   R   t   cut_own_trailerNs   Dynamic array result %s(    t   jedi.evaluateR   R    t   dbgt   get_root_contextR   t   dynamic_array_additionsR   R   R   R   t    dynamic_params_for_other_modulesR2   RC   t   string_nameR   t	   tree_nodet   get_used_namesR   t	   start_post   end_posRr   Rc   R   Ry   RM   t   create_contextR   t   execution_allowedR!   R   R4   (   Rh   R   t   module_contextR  t   temp_param_addt   is_listt   search_namest   added_typesR  t   possible_namesRC   t   context_nodeR  R   t   trailer_post   execution_trailert   random_contextt   allowedt   found(    (   R   s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR     s\    	!		%			
	c         C   s8   t  |  |  } d d l m } | j t | g  g  S(   s$   Used for set() and list() instances.i(   R   (   t   _ArrayInstanceR  R   t   ValuesArgumentsR   (   t   instanceR   t   ai(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyt   get_dynamic_array_instance  s    R   c           B   s;   e  Z d  Z d   Z d   Z d d  Z d e d  Z RS(   s   
    Used for the usage of set() and list().
    This is definitely a hack, but a good one :-)
    It makes it possible to use set/list conversions.
    c         C   s   | |  _  | |  _ d  S(   N(   R"  t   var_args(   R"   R"  R%  (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyRH     s    	c         C   s   |  j  j j j d  \ } | S(   NR   (   R"  R!   R   R.   (   R"   t   tuple_(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR     s    c   	      c   s   |  j  } y t | j    \ } } Wn t k
 r8 n# Xx | j   j   D] } | VqL Wd d l m } t | | j	  r t
 | j |  j  } x | D] } | Vq Wn  d  S(   Ni(   R   (   R%  R:   R  R   R=   Ru   R  R   R   R   R   Rh   R"  (	   R"   R7   R%  R   R?   t   lazyR   t	   additionsR   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR8     s    		c         C   s   |  j  |  S(   N(   R8   (   R"   R7   Rp   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyRu     s    N(	   R'   R(   RO   RH   R   RD   R8   R2   Ru   (    (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR     s
   		R   c           B   s)   e  Z d    Z d   Z e d    Z RS(   c         C   s1   | |  _  d  |  _ | |  _ | |  _ | |  _ d  S(   N(   t   _contextRD   t   _slice_objectt   _startt   _stopt   _step(   R"   Rh   t   startt   stopt   step(    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyRH     s
    				c         C   sL   |  j  d  k r< t j |  j j d  } | j   \ |  _  n  t |  j  |  S(   NR   (   R*  RD   R   R    R)  R!   t   execute_evaluatedt   getattr(   R"   RC   Rh   (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyt   __getattr__  s    c            sc     f d   } y/ t  |   j  |   j  |   j   SWn t k
 r^ t  d d d  SXd S(   sf   
        Imitate CompiledObject.obj behavior and return a ``builtin.slice()``
        object.
        c            sP   |  d  k r d  S  j j |   } t |  d k r= t  n  | \ } t |  S(   Ni   (   RD   R)  Rt   R   Ry   R
   (   t   elementR   Rh   (   R"   (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyt   get%  s    		N(   R   R+  R,  R-  Ry   RD   (   R"   R5  (    (   R"   s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyt   obj  s
    /(   R'   R(   RH   R3  RF   R6  (    (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyR     s   		(F   RO   R)   t   jediR    R   t   jedi._compatibilityR   R   R  R   R   R   t   jedi.evaluate.lazy_contextR   R   R	   t   jedi.evaluate.helpersR
   R   R   R   R   R   t   jedi.evaluate.utilsR   R   t   jedi.evaluate.cacheR   t   jedi.evaluate.filtersR   R   R   t   jedi.evaluate.base_contextR   R   R   R   R   R   R   R   t   jedi.parser_utilsR   R   R   R+   R,   RP   Rm   Rn   R   R   R   Rg   Re   Rf   Rd   R   R   R   R   R   R   Rw   R   t   increase_indentR   R$  R   R   (    (    (    s=   lib/python2.7/site-packages/jedi/evaluate/context/iterable.pyt   <module>   sP   .:!		$3 	=#1	(		R	"