
    Dd	[                        d 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 ddlmZmZ ddlmZ ddlmZmZ dd	lmZmZmZmZmZmZmZ dd
lmZ ddlm Z  ddl!m"Z"  G d d          Z# G d dee#          Z$ G d de$          Z%d Z& G d d          Z' G d d          Z( G d dee#          Z) G d de'          Z* G d de*e)          Z+ G d de*e)          Z, G d  d!e*e$          Z- G d" d#          Z. G d$ d%e'e)e.          Z/ G d& d'e)          Z0 G d( d)e(e0e.          Z1 G d* d+e)          Z2 G d, d-e2          Z3 G d. d/e2          Z4 G d0 d1e(e)e.          Z5 G d2 d3e)          Z6d4 Z7 G d5 d6e          Z8d7S )8zd
Contains all classes and functions to deal with lists, dicts, generators and
iterators in general.
    )compiled)analysis)LazyKnownValueLazyKnownValuesLazyTreeValue)get_int_or_none	is_stringreraise_getitem_errorsSimpleGetItemNotFound)safe_propertyto_list)inference_state_method_cache)LazyAttributeOverwritepublish_method)ValueSetValue	NO_VALUESContextualizedNodeiterate_valuessentinelLazyValueWrapper)get_sync_comp_forsCompForContext)check_array_additionsc                   *    e Zd ZddZd Zej        ZdS )IterableMixinNc                 ,    |                      |          S N)
py__iter__selfcontextualized_nodes     =lib/python3.11/site-packages/jedi/inference/value/iterable.py
py__next__zIterableMixin.py__next__   s    2333    c                 R    t          t          j        | j        d          g          S NNoner   r   builtin_from_nameinference_stater"   s    r$   py__stop_iteration_returnsz(IterableMixin.py__stop_iteration_returns   #    3D4H&QQRSSSr&   r   )__name__
__module____qualname__r%   r.   r   get_safe_value r&   r$   r   r      s>        4 4 4 4T T T )NNNr&   r   c                       e Zd ZdZd Zd Zd Z ed          d             Z ed           ed          d	                         Z	d
 Z
ed             Zd ZdS )GeneratorBaseNc                 V    |                                                                  \  }|S r   )_get_clsexecute_annotation)r"   instances     r$   _get_wrapped_valuez GeneratorBase._get_wrapped_value)   s"    MMOO6688	r&   c                 H    | j         j                            d          \  }|S N	Generator)r,   typing_modulepy__getattribute__)r"   	generators     r$   r8   zGeneratorBase._get_cls-   s#    )7JJ;WW
	r&   c                     dS )NTr4   r-   s    r$   
py__bool__zGeneratorBase.py__bool__1       tr&   __iter__c                 "    t          | g          S r   )r   r"   	argumentss     r$   _iterzGeneratorBase._iter4   s    r&   send__next__c                 b    t          j        d |                                 D                       S )Nc              3   >   K   | ]}|                                 V  d S r   infer.0
lazy_values     r$   	<genexpr>z&GeneratorBase._next.<locals>.<genexpr>;   .      !Y!Y*"2"2"4"4!Y!Y!Y!Y!Y!Yr&   r   	from_setsr    rG   s     r$   _nextzGeneratorBase._next8   s.     !!Y!YtGXGX!Y!Y!YYYYr&   c                 R    t          t          j        | j        d          g          S r(   r*   r-   s    r$   r.   z(GeneratorBase.py__stop_iteration_returns=   r/   r&   c                 ,    t          j        | d          S r=   )r   CompiledValueNamer-   s    r$   namezGeneratorBase.name@   s    )$<<<r&   c                     ddl m} |                                                                 } ||t          t          f          }|                                                     |          S )Nr   TupleGenericManager)jedi.inference.gradual.genericsr^   merge_types_of_iteratepy__class__r   r8   with_generics)r"   r^   
gen_valuesgms       r$   get_annotated_class_objectz(GeneratorBase.get_annotated_class_objectD   sd    GGGGGG0022>>@@
  *i!CDD}},,R000r&   )r0   r1   r2   
array_typer;   r8   rC   r   rI   rW   r.   propertyr[   re   r4   r&   r$   r6   r6   &   s        J       ^J       ^F^JZ Z   ZT T T = = X=1 1 1 1 1r&   r6   c                   6     e Zd ZdZ fdZddZd Zd Z xZS )r>   zHandling of `yield` functions.c                 X    t                                          |           || _        d S r   )super__init___func_execution_context)r"   r,   func_execution_context	__class__s      r$   rk   zGenerator.__init__M   s)    )))'=$$$r&   Nc                     | j                                         }|r|                    |          S | j                                         S r   )rl   infer_annotationsiterateget_yield_lazy_values)r"   r#   	iteratorss      r$   r    zGenerator.py__iter__Q   sH    0BBDD	 	:$$%8999+AACCCr&   c                 4    | j                                         S r   )rl   get_return_valuesr-   s    r$   r.   z$Generator.py__stop_iteration_returnsW   s    +==???r&   c                 B    dt          |           j        d| j        dS N<z of >)typer0   rl   r-   s    r$   __repr__zGenerator.__repr__Z   s'     #Dzz222D4P4P4PQQr&   r   )	r0   r1   r2   __doc__rk   r    r.   r{   __classcell__rn   s   @r$   r>   r>   K   s~        ((> > > > >D D D D@ @ @R R R R R R Rr&   r>   c                    |j         d         }|j         d         }|dk    rs|j         d         j         d         dk    rO|j         d         }|j        dk    r|j         d         }t          | |||j         d         |j         d                   S t          }n|d	k    rt          }n|d
k    rt
          }|j         d         }|j        dk    r|j         d         } || |||j         d                   S )Nr      {:   comp_for   )sync_comp_for_nodekey_node
value_node([)defining_contextr   
entry_node)childrenrz   DictComprehensionSetComprehensionGeneratorComprehensionListComprehension)r,   valueatombrackettest_list_compsync_comp_forclss          r$   comprehension_from_atomr   ^   s&   mAG]1%N#~  =$Q'3. 	#*3A6M!Z/ : - 6q 9$#0'03)215    #CC	C  $	C  "+A.MZ' 2%.q13(!*1-	   r&   c                       e Zd Z e            d             ZddZ eg           ed                         ZddZd Z	dS )	ComprehensionMixinc                 "    t          ||          S r   r   )r"   parent_contextr   s      r$   _get_comp_for_contextz(ComprehensionMixin._get_comp_for_context   s    nh777r&   Nc              #     K   |d         }|j         j        dk    }|j        d         }|p| j        }|                    |          }t          ||          }|                    ||          }|j        d         }	t          |          D ]\  }
}|                                }t          |||	          }| 
                    ||          }|                    ||          5  	 |                     |dd          |          E d {V  nX# t          $ rK |                    | j                  }| j        dk    r||                    | j                  fV  n|V  Y nw xY wd d d            n# 1 swxY w Y   d S )Nr   r   r   )is_asyncr   dict)parentrz   r   _defining_context
infer_noder   rq   	enumeraterO   unpack_tuple_to_dictr   predefine_names_nested
IndexError_entry_noderf   _value_node)r"   	comp_forsr   r   r   
input_nodeinput_typescniteratedexprlistirR   typesdctcontexts                  r$   r   zComprehensionMixin._nested   s     Q<?':5&q)
'A4+A$//
;;
;;&&rH&==$Q'&x00 	' 	'MAz$$&&E&~uhGGC00 G ((377 ' ''#||IabbM7CCCCCCCCCC! ' ' '&11$2BCCH&0 '&(:(:4;K(L(LLLLLL&'' ' ' ' ' ' ' ' ' ' ' ' ' ' '	' 	's7   E*!$DE*AEE*EE**E.	1E.	defaultc              #      K   t          t          | j                            }|                     |          E d {V  d S r   )tupler   _sync_comp_for_noder   )r"   r   s     r$   _iteratezComprehensionMixin._iterate   sK       ,T-EFFGG	<<	***********r&   c              #   Z   K   |                                  D ]}t          |          V  d S r   r   r   )r"   r#   set_s      r$   r    zComprehensionMixin.py__iter__   s>      MMOO 	( 	(D!$''''''	( 	(r&   c                 B    dt          |           j        d| j        dS rw   )rz   r0   r   r-   s    r$   r{   zComprehensionMixin.__repr__   s'     #Dzz222D4L4L4LMMr&   r   )
r0   r1   r2   r   r   r   r   r   r    r{   r4   r&   r$   r   r      s        !!##8 8 $#8' ' ' ': "!"---+ + W .-+( ( ( (N N N N Nr&   r   c                       e Zd Zd ZdS )
_DictMixinc                 X    t          d |                                 D                       S )Nc              3   >   K   | ]}|                                 V  d S r   )ra   )rQ   c_sets     r$   rS   z+_DictMixin._get_generics.<locals>.<genexpr>   s.      UUUU&&((UUUUUUr&   )r   get_mapping_item_valuesr-   s    r$   _get_genericsz_DictMixin._get_generics   s+    UUd6R6R6T6TUUUUUUr&   N)r0   r1   r2   r   r4   r&   r$   r   r      s(        V V V V Vr&   r   c                       e Zd ZdZed             Zd Z ed          d             Zd Z	d Z
ed	             Zd
 ZdS )Sequencer:   c                 6    t          j        | | j                  S r   )r   rZ   rf   r-   s    r$   r[   zSequence.name   s    )$@@@r&   c                 P    |                                                                  fS r   )r`   ra   r-   s    r$   r   zSequence._get_generics   s#    ++--99;;==r&   r4   r   c                 *    |                                  S r   )r   r-   s    r$   _cached_genericszSequence._cached_generics   s    !!###r&   c                     ddl m} ddlm} t	          j        | j        | j                  } || ||                                                     	                                \  }|S )Nr   )GenericClassr]   )
jedi.inference.gradual.baser   r_   r^   r   r+   r,   rf   r   r9   )r"   r   r^   klasscs        r$   r;   zSequence._get_wrapped_value   s    <<<<<<GGGGGG*4+?QQ\ 5 5 7 788
 
 


 	 r&   c                     d S r   r4   r-   s    r$   rC   zSequence.py__bool__   rD   r&   c                     | j         j        S r   )r,   builtins_moduler-   s    r$   r   zSequence.parent   s    #33r&   c                 z    | j         dk    r|                                 S t          t          | g                    S )Nr   )rf   _dict_valuesr   r   )r"   index_value_setr#   s      r$   py__getitem__zSequence.py__getitem__   s;    ?f$ 	'$$&&&hv..///r&   N)r0   r1   r2   api_typerg   r[   r   r   r   r;   rC   r   r   r   r4   r&   r$   r   r      s        HA A XA> > > "!"---$ $ .-$     4 4 ]40 0 0 0 0r&   r   c                        e Zd Z fdZ xZS )_BaseComprehensionc                     |j         dk    sJ t                                          |           || _        || _        || _        d S Nr   )rz   rj   rk   r   r   r   )r"   r,   r   r   r   rn   s        r$   rk   z_BaseComprehension.__init__   sM    !&/9999)))!1#5 %r&   )r0   r1   r2   rk   r}   r~   s   @r$   r   r      s8        & & & & & & & & &r&   r   c                       e Zd ZdZd ZdS )r   listc                 *   t          |t                    rt          | g          S t          |                                           }t          t          t                    5  ||         }d d d            n# 1 swxY w Y   |                                S r   )	
isinstanceslicer   r   r    r
   r   	TypeErrorrO   )r"   index	all_typesrR   s       r$   py__simple_getitem__z&ListComprehension.py__simple_getitem__   s    eU## 	$TF###**++	#J	:: 	* 	*"5)J	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*!!!s   !	A66A:=A:N)r0   r1   r2   rf   r   r4   r&   r$   r   r      s(        J" " " " "r&   r   c                       e Zd ZdZdS )r   setNr0   r1   r2   rf   r4   r&   r$   r   r      s        JJJr&   r   c                       e Zd ZdS )r   N)r0   r1   r2   r4   r&   r$   r   r      s        Dr&   r   c                       e Zd Zd Zd ZdS )_DictKeyMixinc                 R    |                                  |                                 fS r   )
_dict_keysr   r-   s    r$   r   z%_DictKeyMixin.get_mapping_item_values   s#      $"3"3"5"555r&   c                 *    |                                  S r   )r   r-   s    r$   get_key_valuesz_DictKeyMixin.get_key_values   s       r&   N)r0   r1   r2   r   r   r4   r&   r$   r   r      s2        6 6 6! ! ! ! !r&   r   c                        e Zd ZdZ fdZddZd Zd Zd Z e	d          d	             Z
 e	d
          d             Zd Z xZS )r   r   c                     |j         dk    sJ t                                          |           || _        || _        || _        || _        d S r   )rz   rj   rk   r   r   r   r   )r"   r,   r   r   r   r   rn   s         r$   rk   zDictComprehension.__init__  sU    !&/9999)))!1#5 #%r&   Nc              #   `   K   |                                  D ]\  }}t          |          V  d S r   r   )r"   r#   keysvaluess       r$   r    zDictComprehension.py__iter__  sB       MMOO 	( 	(LD&!$''''''	( 	(r&   c                     |                                  D ]6\  }}|D ].}|                    t                                |k    r|c c S /7t                      )Nr   )r   r3   objectr   )r"   r   r   r   ks        r$   r   z&DictComprehension.py__simple_getitem__  su     MMOO 	" 	"LD& " " ##FHH#55> "!MMMMM""
 $%%%r&   c                 b    t          j        d |                                 D                       S )Nc              3       K   | ]	\  }}|V  
d S r   r4   rQ   r   r   s      r$   rS   z/DictComprehension._dict_keys.<locals>.<genexpr>  s&      !K!K<4$!K!K!K!K!K!Kr&   r   rV   r   r-   s    r$   r   zDictComprehension._dict_keys  s*    !!K!K4==??!K!K!KKKKr&   c                 b    t          j        d |                                 D                       S )Nc              3       K   | ]	\  }}|V  
d S r   r4   r   s      r$   rS   z1DictComprehension._dict_values.<locals>.<genexpr>   s&      !M!M\T6&!M!M!M!M!M!Mr&   r   r-   s    r$   r   zDictComprehension._dict_values  s*    !!M!MT]]__!M!M!MMMMr&   r   c                     t          |                                           }t          t          | j        |g          g          S r   r   r   r   FakeListr,   r"   rH   rR   s      r$   _imitate_valuesz!DictComprehension._imitate_values"  ;    $T%6%6%8%899
$"6EEFGGGr&   itemsc                       fd                                  D             }t          t           j        |          g          S )Nc                     g | ]C\  }}t          t          j        t          |          t          |          g                    DS r4   )r   	FakeTupler,   r   )rQ   keyr   r"   s      r$   
<listcomp>z4DictComprehension._imitate_items.<locals>.<listcomp>)  sg     	
 	
 	
 U ($S))$U++-  	
 	
 	
r&   )r   r   r   r,   r"   rH   lazy_valuess   `  r$   _imitate_itemsz DictComprehension._imitate_items'  sU    	
 	
 	
 	
 #mmoo	
 	
 	
 $"6DDEFFFr&   c                     g S r   r4   r-   s    r$   exact_key_itemsz!DictComprehension.exact_key_items6  s	     	r&   r   )r0   r1   r2   rf   rk   r    r   r   r   r   r  r  r  r}   r~   s   @r$   r   r     s        J& & & & &( ( ( (& & &L L LN N N ^HH H H ^GG G G      r&   r   c                   X     e Zd ZdZddddZ fdZ fdZd Zdd
Zd Z	d Z
d Z xZS )SequenceLiteralValue)testlist_star_exprtestlistsubscriptlistr   r   r   )r   r   r   c                     t                                          |           || _        || _        | j        j        | j        v r	d| _        d S t          j        |j	        d                  | _        d S )Nr   r   )
rj   rk   r   r   rz   _TUPLE_LIKErf   r  mappingr   )r"   r,   r   r   rn   s       r$   rk   zSequenceLiteralValue.__init__B  sf    )))	!19>T-- 	L%DOOO2:4=;KLDOKKr&   c                     | j         dk    r+t          d |                                 D                       S t                                                      S )Nr   c              3   b   K   | ]*}|                                                                 V  +d S r   )rO   ra   )rQ   xs     r$   rS   z5SequenceLiteralValue._get_generics.<locals>.<genexpr>O  s6      LLQ..00LLLLLLr&   )rf   r   r    rj   r   )r"   rn   s    r$   r   z"SequenceLiteralValue._get_genericsM  sP    ?g% 	MLL$//:K:KLLLLLLww$$&&&r&   c                 T   t          |t                    rt          | g          S t          t          t
          t                    5  |                                 |         }ddd           n# 1 swxY w Y   |dk    s|j        dk    rt          S | j
                            |          S )9Here the index is an int/str. Raises IndexError/KeyError.Nr   	subscript)r   r   r   r
   r   KeyErrorr   get_tree_entriesrz   r   r   r   )r"   r   nodes      r$   r   z)SequenceLiteralValue.py__simple_getitem__R  s    eU## 	;TF###'	8ZHH 6 6,,..u56 6 6 6 6 6 6 6 6 6 6 6 6 6 6s{ !di;6 !  )44T:::s   A--A14A1Nc           	   #     K   |                                  D ]Q}|dk    s|j        dk    r't          t          | j        ddd                    V  :t          | j        |          V  Rt          | j        |           E d{V  dS )
        While values returns the possible values for any array field, this
        function returns the value for a certain index.
        r   r  N)r  rz   r   Slicer   r   r   )r"   r#   r  s      r$   r    zSequenceLiteralValue.py__iter__]  s      
 ))++ 	B 	BDs{ Bdi;6 B %U4+A4t%T%TUUUUUU#D$:DAAAAAA()?FFFFFFFFFFFr&   c                 D    t          |                                           S r   )lenr  r-   s    r$   	py__len__zSequenceLiteralValue.py__len__k  s    4((**+++r&   c                 d   | j         j        }| j         j        | j        v r|d d d         S |d         }|dv rg S |j        dk    rd |j        d d d         D             S |j        dk    rg }t	          |j                  }|D ]}|dk    r t          |           t          |d            (t          |d           }||dk    r"|j        d	k    rL|                    |           b|d
k    sJ |                    |t          |          f           t          |d            |S |j        d	k    rg S |gS )Nr   r   )]})testlist_compc                 (    g | ]}|j         d k    |S )	star_expr)rz   )rQ   r   s     r$   r	  z9SequenceLiteralValue.get_tree_entries.<locals>.<listcomp>{  s3     2 2 2ez[02E 2 2 2r&   dictorsetmakerz**,r,  r   )r   r   rz   r  iternextappend)r"   r   
array_nodekviteratorr  ops          r$   r  z%SequenceLiteralValue.get_tree_entrieso  s   I9>T-- 	SSqS6MqT
( 	I?o- !	$2 2z':33Q3'? 2 2 2 2_ 00 	$BJ/00H - -$; - NNN4((((h--B 
-R3Y 
-8{2 + !IIcNNNN!Sy(((		3X"7888Xt,,,,I+- $ 	"|#r&   c                 2    d| j         j        d| j        dS rw   )rn   r0   r   r-   s    r$   r{   zSequenceLiteralValue.__repr__  s      #~666			BBr&   r   )r0   r1   r2   r  r  rk   r   r   r    r%  r  r{   r}   r~   s   @r$   r  r  <  s        CK G	L 	L 	L 	L 	L' ' ' ' '
	; 	; 	;G G G G, , ,+$ +$ +$ZC C C C C C Cr&   r  c                       e Zd ZdZd Zd ZddZ ed          d             Z ed          d	             Z	d
 Z
d Zd ZdS )DictLiteralValuer   c                 X    t                               | |           || _        || _        d S r   )r   rk   r   r   )r"   r,   r   r   s       r$   rk   zDictLiteralValue.__init__  s-     	$000!1			r&   c                 b   t          j        | j        |          }|                                 D ]o\  }}| j                            |          D ]O}|                    |d          D ]6}|                                r | j                            |          c c c S 7Ppt          d| z            )r  z==zNo key found in dictionary %s.)	r   create_simple_objectr,   r  r   r   execute_operationr3   r   )r"   r   compiled_value_indexr  r   r   key_vs          r$   r   z%DictLiteralValue.py__simple_getitem__  s    '<T=QSXYY//11 	H 	HJC+66s;; H H001EtLL H HE++-- H#5@@GGGGGGGGGHHH $$Dt$KLLLr&   Nc              #      K   t           }|                                 D ]"\  }}|| j                            |          z  }#|D ]}t	          |          V  dS )r!  N)r   r  r   r   r   )r"   r#   r   r   _s        r$   r    zDictLiteralValue.py__iter__  s{       ))++ 	: 	:DAqT+66q999EE  	) 	)A!%((((((	) 	)r&   r   c                     t          |                                           }t          t          | j        |g          g          S r   r   r  s      r$   r  z DictLiteralValue._imitate_values  r  r&   r  c                       fd                                  D             }t          t           j        |          g          S )Nc                     g | ]O\  }}t          t          j        t          j        |          t          j        |          f                    PS r4   )r   r  r,   r   r   )rQ   r   r   r"   s      r$   r	  z3DictLiteralValue._imitate_items.<locals>.<listcomp>  sq     
 
 

 (8Z	 9$t5x@@t5zBBD   
 
 
r&   )r  r   r   r,   r
  s   `  r$   r  zDictLiteralValue._imitate_items  sY    
 
 
 

 ,0+@+@+B+B
 
 
 $"6DDEFFFr&   c              #      K   |                                  D ]\\  }}| j                            |          D ]<}t          |          r+|                                t          | j        |          fV  =]dS )z
        Returns a generator of tuples like dict.items(), where the key is
        resolved (as a string) and the values are still lazy values.
        N)r  r   r   r	   r3   r   )r"   r   r   r  s       r$   r  z DictLiteralValue.exact_key_items  s      
  $4466 	] 	]OHe-88BB ] ]S>> ],,..d>TV[0\0\\\\\]	] 	]r&   c                 h     t          j         fd                                 D                       S )Nc              3   R   K   | ]!\  }}j                             |          V  "d S r   r   r   rQ   r   vr"   s      r$   rS   z0DictLiteralValue._dict_values.<locals>.<genexpr>  L       "
 "
1 "--a00"
 "
 "
 "
 "
 "
r&   r   rV   r  r-   s   `r$   r   zDictLiteralValue._dict_values  J    ! "
 "
 "
 "
--//"
 "
 "
 
 
 	
r&   c                 h     t          j         fd                                 D                       S )Nc              3   R   K   | ]!\  }}j                             |          V  "d S r   rG  rH  s      r$   rS   z.DictLiteralValue._dict_keys.<locals>.<genexpr>  rJ  r&   rK  r-   s   `r$   r   zDictLiteralValue._dict_keys  rL  r&   r   )r0   r1   r2   rf   rk   r   r    r   r  r  r  r   r   r4   r&   r$   r8  r8    s        J  M M M) ) ) ) ^HH H H ^G	G 	G 	G] ] ]
 
 

 
 
 
 
r&   r8  c                   8     e Zd Z fdZd ZddZd Zd Z xZS )_FakeSequencec                 X    t                                          |           || _        dS )z7
        type should be one of "tuple", "list"
        N)rj   rk   _lazy_value_list)r"   r,   lazy_value_listrn   s      r$   rk   z_FakeSequence.__init__  s+     	))) /r&   c                     t          |t                    rt          | g          S t          t          t
                    5  | j        |         }d d d            n# 1 swxY w Y   |                                S r   )r   r   r   r
   r   r   rR  rO   r"   r   rR   s      r$   r   z"_FakeSequence.py__simple_getitem__  s    eU## 	$TF####J	:: 	6 	6.u5J	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6!!!s    AA!ANc                     | j         S r   )rR  r!   s     r$   r    z_FakeSequence.py__iter__  s    $$r&   c                 D    t          t          | j                            S r   )boolr$  rR  r-   s    r$   rC   z_FakeSequence.py__bool__  s    C-..///r&   c                 B    dt          |           j        d| j        dS rw   )rz   r0   rR  r-   s    r$   r{   z_FakeSequence.__repr__   s'     #Dzz222D4I4I4IJJr&   r   )	r0   r1   r2   rk   r   r    rC   r{   r}   r~   s   @r$   rP  rP    s        0 0 0 0 0" " "% % % %0 0 0K K K K K K Kr&   rP  c                       e Zd ZdZdS )r  r   Nr   r4   r&   r$   r  r            JJJr&   r  c                       e Zd ZdZdS )r   r   Nr   r4   r&   r$   r   r     r[  r&   r   c                   p     e Zd ZdZ fdZddZd Z ed          d             Zd Z	d	 Z
d
 Zd Z xZS )FakeDictr   c                 X    t                                          |           || _        d S r   )rj   rk   _dct)r"   r,   r   rn   s      r$   rk   zFakeDict.__init__  s&    )))			r&   Nc              #   p   K   | j         D ]+}t          t          j        | j        |                    V  ,d S r   )r`  r   r   r;  r,   )r"   r#   r  s      r$   r    zFakeDict.py__iter__  sM      9 	[ 	[C !>t?SUX!Y!YZZZZZZ	[ 	[r&   c                     t          t          t                    5  | j        |         }d d d            n# 1 swxY w Y   |                                S r   )r
   r  r   r`  rO   rU  s      r$   r   zFakeDict.py__simple_getitem__  s    #Hi88 	* 	*5)J	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*!!!s   599r   c           	          t          t          | j        t          |                                           g          g          S r   )r   r  r,   r   r   rG   s     r$   _valueszFakeDict._values  sE     T..00112
 
    	r&   c                 l    t          j        d | j                                        D                       S )Nc              3   >   K   | ]}|                                 V  d S r   rN   rP   s     r$   rS   z(FakeDict._dict_values.<locals>.<genexpr>$  s.      !Z!Z*"2"2"4"4!Z!Z!Z!Z!Z!Zr&   )r   rV   r`  r   r-   s    r$   r   zFakeDict._dict_values#  s0    !!Z!ZtyGWGWGYGY!Z!Z!ZZZZr&   c                 b    t          j        d |                                 D                       S )Nc              3   >   K   | ]}|                                 V  d S r   rN   rP   s     r$   rS   z&FakeDict._dict_keys.<locals>.<genexpr>'  rT   r&   rU   r-   s    r$   r   zFakeDict._dict_keys&  ,    !!Y!YtGXGX!Y!Y!YYYYr&   c                 4    | j                                         S r   )r`  r  r-   s    r$   r  zFakeDict.exact_key_items)  s    y   r&   c                 2    d| j         j        d| j        dS )Nrx   z: ry   )rn   r0   r`  r-   s    r$   r{   zFakeDict.__repr__,  s      !^444diii@@r&   r   )r0   r1   r2   rf   rk   r    r   r   rd  r   r   r  r{   r}   r~   s   @r$   r^  r^    s        J    [ [ [ [" " "
 ^H  [ [ [Z Z Z! ! !A A A A A A Ar&   r^  c                   ,     e Zd Z fdZddZd Z xZS )MergedArrayc                 |    t                                          |           |d         j        | _        || _        d S )N)rj   rk   rf   _arrays)r"   r,   arraysrn   s      r$   rk   zMergedArray.__init__1  s4    ))) */r&   Nc              #   R   K   | j         D ]}|                                E d {V  d S r   )rp  r    )r"   r#   arrays      r$   r    zMergedArray.py__iter__6  sH      \ 	* 	*E''))))))))))	* 	*r&   c                 b    t          j        d |                                 D                       S )Nc              3   >   K   | ]}|                                 V  d S r   rN   rP   s     r$   rS   z3MergedArray.py__simple_getitem__.<locals>.<genexpr>;  rT   r&   rU   )r"   r   s     r$   r   z MergedArray.py__simple_getitem__:  ri  r&   r   )r0   r1   r2   rk   r    r   r}   r~   s   @r$   rm  rm  0  sb            
* * * *Z Z Z Z Z Z Zr&   rm  c           	         |j         dk    r	|j        |iS |j         dk    r+|j        d         dv rt          | ||j        d                   S |j         dv ri }t	          |j        ddd                   }d}|                    t          | |                    D ]x}|dz  }	 t          |          }|                    t          | |	                                |                     N# t          $ r t          j        | d	|d
|z             Y uw xY wt          |d          }|r|t          j        | d|d|z             |S |j         dk    s|j         dk    ri S |j         dk    ri S t          )zG
    Unpacking tuple assignments in for statements and expr_stmts.
    r[   r   r   )r   r   r   )r  r*  r   r  Nr   zvalue-error-too-many-valuesz3ValueError: too many values to unpack (expected %s))messagezvalue-error-too-few-valuesz.ValueError: need more than %s values to unpackpower	atom_exprr,  )rz   r   r   r   r/  rq   r   r0  updaterO   StopIterationr   addNotImplementedError)	r   r   r   r   partsnrR   part	has_partss	            r$   r   r   >  s    } &&	&	  X%6q%9Z%G #GUH4Ea4HIII	 1 
1 X&sss+,,--(:7H(M(MNN 	T 	TJFATE{{
 

/9I9I9K9KTRRSSSS	 ! ` ` `W&CT%Z]^%^` ` ` ` ` ``
 %%	 	WY 	WL">	!QTU!UW W W W
	'	! X]k%A  		+	% 	
s    C&&%DDc                   $    e Zd Zd Zd ZefdZdS )r"  c                 V    |j         | _         || _        || _        || _        || _        d S r   )r,   _context_start_stop_step)r"   python_contextstartstopsteps        r$   rk   zSlice.__init__e  s-    -=&



r&   c                 p    t          j        | j        j        d          }|                                \  }|S )Nr   )r   r+   r  r,   execute_with_values)r"   r   slice_values      r$   r;   zSlice._get_wrapped_valuem  s2    *4=+H'RR0022r&   c                       fd}	 t           | j                   | j                   | j                            S # t          $ r t          ddd          cY S w xY w)ze
        Imitate CompiledValue.obj behavior and return a ``builtin.slice()``
        object.
        c                     | d S j                             |           }t          |          dk    rt          |\  }t	          |          S )Nr   )r  r   r$  r   r   )elementresultr   r"   s      r$   getz!Slice.get_safe_value.<locals>.getw  sU     t]--g66F6{{a ! ! FE"5)))r&   N)r   r  r  r  r   )r"   r   r  s   `  r$   r3   zSlice.get_safe_valuer  s    
	* 	* 	* 	* 	*	+T[))33tz??CC
OOLLL 	+ 	+ 	+tT*****	+s   :A A! A!N)r0   r1   r2   rk   r;   r   r3   r4   r&   r$   r"  r"  d  sK            
 &. + + + + + +r&   r"  N)9r|   jedi.inferencer   r   jedi.inference.lazy_valuer   r   r   jedi.inference.helpersr   r	   r
   r   jedi.inference.utilsr   r   jedi.inference.cacher   jedi.inference.filtersr   r   jedi.inference.base_valuer   r   r   r   r   r   r   jedi.parser_utilsr   jedi.inference.contextr   #jedi.inference.value.dynamic_arraysr   r   r6   r>   r   r   r   r   r   r   r   r   r   r   r  r8  rP  r  r   r^  rm  r   r"  r4   r&   r$   <module>r     sO    $ # # # # # # # # # # #         2 2 2 2 2 2 2 2 2 2 2 2 7 7 7 7 7 7 7 7 = = = = = = I I I I I I I I                  1 0 0 0 0 0 1 1 1 1 1 1 E E E E E E* * * * * * * * "1 "1 "1 "1 "1*M "1 "1 "1JR R R R R R R R&! ! !H-N -N -N -N -N -N -N -N`V V V V V V V V
"0 "0 "0 "0 "0%} "0 "0 "0J& & & & &+ & & &
" 
" 
" 
" 
"*H 
" 
" 
"    )8   	 	 	 	 	/ 	 	 	! ! ! ! ! ! ! !5 5 5 5 5*Hm 5 5 5paC aC aC aC aC8 aC aC aCHG
 G
 G
 G
 G
z#7 G
 G
 G
TK K K K KH K K K4           }   !A !A !A !A !Az8] !A !A !AHZ Z Z Z Z( Z Z Z# # #L#+ #+ #+ #+ #+ #+ #+ #+ #+ #+r&   