o
    ð›h	[  ã                   @   s  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„ dƒZ#G dd„ dee#ƒZ$G dd„ de$ƒZ%dd„ Z&G dd„ dƒZ'G dd„ dƒZ(G dd„ dee#ƒZ)G dd„ de'ƒZ*G dd„ de*e)ƒZ+G dd „ d e*e)ƒZ,G d!d"„ d"e*e$ƒZ-G d#d$„ d$ƒZ.G d%d&„ d&e'e)e.ƒZ/G d'd(„ d(e)ƒZ0G d)d*„ d*e(e0e.ƒZ1G d+d,„ d,e)ƒZ2G d-d.„ d.e2ƒZ3G d/d0„ d0e2ƒZ4G d1d2„ d2e(e)e.ƒZ5G d3d4„ d4e)ƒZ6d5d6„ Z7G d7d8„ d8eƒZ8d9S ):zd
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                   @   s$   e Zd Zddd„Zdd„ ZejZdS )ÚIterableMixinNc                 C   s
   |   |¡S ©N)Ú
py__iter__©ÚselfÚcontextualized_node© r!   úSc:\Users\shubh\Videos\agent\nova\Lib\site-packages\jedi/inference/value/iterable.pyÚ
py__next__   ó   
zIterableMixin.py__next__c                 C   ó   t t | jd¡gƒS ©NÚNone©r   r   Úbuiltin_from_nameÚinference_state©r   r!   r!   r"   Úpy__stop_iteration_returns   ó   z(IterableMixin.py__stop_iteration_returnsr   )Ú__name__Ú
__module__Ú__qualname__r#   r,   r   Úget_safe_valuer!   r!   r!   r"   r      s    

	r   c                   @   sl   e Zd ZdZdd„ Zdd„ Zdd„ Zedƒd	d
„ ƒZedƒedƒdd„ ƒƒZ	dd„ Z
edd„ ƒZdd„ ZdS )ÚGeneratorBaseNc                 C   s   |   ¡  ¡ \}|S r   )Ú_get_clsÚexecute_annotation)r   Úinstancer!   r!   r"   Ú_get_wrapped_value)   s   z GeneratorBase._get_wrapped_valuec                 C   s   | j j d¡\}|S ©NÚ	Generator)r*   Ztyping_moduleZpy__getattribute__)r   Ú	generatorr!   r!   r"   r3   -   s   zGeneratorBase._get_clsc                 C   s   dS )NTr!   r+   r!   r!   r"   Ú
py__bool__1   ó   zGeneratorBase.py__bool__Ú__iter__c                 C   s
   t | gƒS r   )r   ©r   Ú	argumentsr!   r!   r"   Ú_iter4   ó   
zGeneratorBase._iterÚsendÚ__next__c                 C   ó   t  dd„ |  ¡ D ƒ¡S )Nc                 s   ó   � | ]}|  ¡ V  qd S r   ©Úinfer©Ú.0Ú
lazy_valuer!   r!   r"   Ú	<genexpr>;   ó   € z&GeneratorBase._next.<locals>.<genexpr>©r   Ú	from_setsr   r=   r!   r!   r"   Ú_next8   s   zGeneratorBase._nextc                 C   r%   r&   r(   r+   r!   r!   r"   r,   =   r-   z(GeneratorBase.py__stop_iteration_returnsc                 C   s   t  | d¡S r7   )r   ÚCompiledValueNamer+   r!   r!   r"   Úname@   ó   zGeneratorBase.namec                 C   s4   ddl m} |  ¡  ¡ }||ttfƒ}|  ¡  |¡S )Nr   ©ÚTupleGenericManager)Újedi.inference.gradual.genericsrS   Úmerge_types_of_iterateÚpy__class__r   r3   Zwith_generics)r   rS   Z
gen_valuesZgmr!   r!   r"   Úget_annotated_class_objectD   s   z(GeneratorBase.get_annotated_class_object)r.   r/   r0   Ú
array_typer6   r3   r:   r   r?   rN   r,   ÚpropertyrP   rW   r!   r!   r!   r"   r2   &   s    

r2   c                       s:   e Zd ZdZ‡ fdd„Zddd„Zdd„ Zd	d
„ Z‡  ZS )r8   zHandling of `yield` functions.c                    ó   t ƒ  |¡ || _d S r   )ÚsuperÚ__init__Ú_func_execution_context)r   r*   Zfunc_execution_context©Ú	__class__r!   r"   r\   M   ó   
zGenerator.__init__Nc                 C   s"   | j  ¡ }|r| |¡S | j  ¡ S r   )r]   Zinfer_annotationsÚiterateZget_yield_lazy_values)r   r    Ú	iteratorsr!   r!   r"   r   Q   s   


zGenerator.py__iter__c                 C   ó
   | j  ¡ S r   )r]   Zget_return_valuesr+   r!   r!   r"   r,   W   r$   z$Generator.py__stop_iteration_returnsc                 C   ó   dt | ƒj| jf S ©Nz
<%s of %s>)Útyper.   r]   r+   r!   r!   r"   Ú__repr__Z   r-   zGenerator.__repr__r   )	r.   r/   r0   Ú__doc__r\   r   r,   rg   Ú__classcell__r!   r!   r^   r"   r8   K   s    
r8   c                 C   sÀ   |j d }|j d }|dkr9|j d j d dkr6|j d }|jdkr'|j d }t| |||j d |j d d�S t}n|d	kr@t}n|d
krFt}|j d }|jdkrU|j d }|| |||j d d�S )Nr   é   Ú{ú:é   Úcomp_foré   )Úsync_comp_for_nodeÚkey_nodeÚ
value_nodeú(ú[)Údefining_contextrp   Ú
entry_node)Úchildrenrf   ÚDictComprehensionÚSetComprehensionÚGeneratorComprehensionÚListComprehension)r*   ÚvalueÚatomZbracketZtest_list_compÚsync_comp_forÚclsr!   r!   r"   Úcomprehension_from_atom^   s8   




û


ür€   c                   @   sL   e Zd Zeƒ dd„ ƒZddd„Zeg d�edd„ ƒƒZdd	d
„Zdd„ Z	dS )ÚComprehensionMixinc                 C   s
   t ||ƒS r   r   )r   Úparent_contextrn   r!   r!   r"   Ú_get_comp_for_contextƒ   r@   z(ComprehensionMixin._get_comp_for_contextNc              
   c   s  � |d }|j jdk}|jd }|p| j}| |¡}t||ƒ}|j||d�}|jd }	t|ƒD ][\}
}| ¡ }t	|||	ƒ}|  
||¡}| ||¡�9 z|  |dd … |¡E d H  W n! tyz   | | j¡}| jdkru|| | j¡fV  n|V  Y nw W d   ƒ n1 s…w   Y  q/d S )Nr   rn   rm   )Úis_asyncrj   Údict)Úparentrf   rw   Ú_defining_contextÚ
infer_noder   ra   Ú	enumeraterF   Úunpack_tuple_to_dictrƒ   Zpredefine_namesÚ_nestedÚ
IndexErrorÚ_entry_noderX   Ú_value_node)r   Ú	comp_forsr‚   rn   r„   Z
input_nodeZinput_typesZcnZiteratedÚexprlistÚirI   ÚtypesÚdctÚcontextr!   r!   r"   r‹   ‡   s<   €




þ
€û€ý€ùzComprehensionMixin._nested©Údefaultc                 c   s$   � t t| jƒƒ}|  |¡E d H  d S r   )Útupler   Ú_sync_comp_for_noder‹   )r   r�   r!   r!   r"   Ú_iterate¤   s   €zComprehensionMixin._iteratec                 c   s   � |   ¡ D ]}t|ƒV  qd S r   ©r™   r   )r   r    Úset_r!   r!   r"   r   ª   s   €ÿzComprehensionMixin.py__iter__c                 C   rd   re   )rf   r.   r˜   r+   r!   r!   r"   rg   ®   r-   zComprehensionMixin.__repr__r   )
r.   r/   r0   r   rƒ   r‹   r   r™   r   rg   r!   r!   r!   r"   r�   ‚   s    


r�   c                   @   s   e Zd Zdd„ ZdS )Ú
_DictMixinc                 C   s   t dd„ |  ¡ D ƒƒS )Nc                 s   rD   r   )rV   )rH   Zc_setr!   r!   r"   rJ   ´   rK   z+_DictMixin._get_generics.<locals>.<genexpr>)r—   Úget_mapping_item_valuesr+   r!   r!   r"   Ú_get_generics³   s   z_DictMixin._get_genericsN)r.   r/   r0   rž   r!   r!   r!   r"   rœ   ²   s    rœ   c                   @   sZ   e Zd ZdZedd„ ƒZdd„ Zedd�dd	„ ƒZd
d„ Z	dd„ Z
edd„ ƒZdd„ ZdS )ÚSequencer5   c                 C   s   t  | | j¡S r   )r   rO   rX   r+   r!   r!   r"   rP   º   s   zSequence.namec                 C   s   |   ¡  ¡ fS r   )rU   rV   r+   r!   r!   r"   rž   ¾   ó   zSequence._get_genericsr!   r•   c                 C   ó   |   ¡ S r   )rž   r+   r!   r!   r"   Ú_cached_genericsÁ   ó   zSequence._cached_genericsc                 C   sD   ddl m} ddlm} t | j| j¡}||||  ¡ ƒƒ 	¡ \}|S )Nr   )ÚGenericClassrR   )
Zjedi.inference.gradual.baser¤   rT   rS   r   r)   r*   rX   r¢   r4   )r   r¤   rS   ÚklassÚcr!   r!   r"   r6   Å   s   
þýzSequence._get_wrapped_valuec                 C   s   d S r   r!   r+   r!   r!   r"   r:   Ï   r;   zSequence.py__bool__c                 C   s   | j jS r   )r*   Zbuiltins_moduler+   r!   r!   r"   r†   Ò   r£   zSequence.parentc                 C   s    | j dkr	|  ¡ S tt| gƒƒS )Nr…   )rX   Ú_dict_valuesr   r   )r   Zindex_value_setr    r!   r!   r"   Úpy__getitem__Ö   s   
zSequence.py__getitem__N)r.   r/   r0   Zapi_typerY   rP   rž   r   r¢   r6   r:   r   r†   r¨   r!   r!   r!   r"   rŸ   ·   s    



rŸ   c                       s   e Zd Z‡ fdd„Z‡  ZS )Ú_BaseComprehensionc                    s0   |j dksJ ‚tƒ  |¡ || _|| _|| _d S ©Nr~   )rf   r[   r\   r‡   r˜   r�   )r   r*   ru   rp   rv   r^   r!   r"   r\   Ý   s
   
z_BaseComprehension.__init__)r.   r/   r0   r\   ri   r!   r!   r^   r"   r©   Ü   s    r©   c                   @   s   e Zd ZdZdd„ ZdS )r{   Úlistc                 C   s`   t |tƒr
t| gƒS t|  ¡ ƒ}tttƒ� || }W d   ƒ | ¡ S 1 s'w   Y  | ¡ S r   )	Ú
isinstanceÚslicer   r«   r   r	   rŒ   Ú	TypeErrorrF   )r   ÚindexZ	all_typesrI   r!   r!   r"   Úpy__simple_getitem__è   s   



ÿþz&ListComprehension.py__simple_getitem__N)r.   r/   r0   rX   r°   r!   r!   r!   r"   r{   å   s    r{   c                   @   ó   e Zd ZdZdS )ry   ÚsetN©r.   r/   r0   rX   r!   r!   r!   r"   ry   ò   ó    ry   c                   @   s   e Zd ZdS )rz   N)r.   r/   r0   r!   r!   r!   r"   rz   ö   s    rz   c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú_DictKeyMixinc                 C   s   |   ¡ |  ¡ fS r   )Ú
_dict_keysr§   r+   r!   r!   r"   r�   ü   s   z%_DictKeyMixin.get_mapping_item_valuesc                 C   r¡   r   )r¶   r+   r!   r!   r"   Úget_key_valuesÿ   r£   z_DictKeyMixin.get_key_valuesN)r.   r/   r0   r�   r·   r!   r!   r!   r"   rµ   ú   s    rµ   c                       sj   e Zd ZdZ‡ fdd„Zddd„Zdd„ Zd	d
„ Zdd„ Ze	dƒdd„ ƒZ
e	dƒdd„ ƒZdd„ Z‡  ZS )rx   r…   c                    s6   |j dksJ ‚tƒ  |¡ || _|| _|| _|| _d S rª   )rf   r[   r\   r‡   r˜   r�   rŽ   )r   r*   ru   rp   rq   rr   r^   r!   r"   r\     s   
zDictComprehension.__init__Nc                 c   s"   � |   ¡ D ]	\}}t|ƒV  qd S r   rš   )r   r    ÚkeysÚvaluesr!   r!   r"   r     s   €ÿzDictComprehension.py__iter__c                 C   s@   |   ¡ D ]\}}|D ]}|jtƒ d�|kr|    S q
qtƒ ‚)Nr•   )r™   r1   Úobjectr
   )r   r¯   r¸   r¹   Úkr!   r!   r"   r°     s   ÿýz&DictComprehension.py__simple_getitem__c                 C   rC   )Nc                 s   s   � | ]\}}|V  qd S r   r!   ©rH   r¸   r¹   r!   r!   r"   rJ     rK   z/DictComprehension._dict_keys.<locals>.<genexpr>©r   rM   r™   r+   r!   r!   r"   r¶     ó   zDictComprehension._dict_keysc                 C   rC   )Nc                 s   s   � | ]\}}|V  qd S r   r!   r¼   r!   r!   r"   rJ      rK   z1DictComprehension._dict_values.<locals>.<genexpr>r½   r+   r!   r!   r"   r§     r¾   zDictComprehension._dict_valuesr¹   c                 C   ó    t |  ¡ ƒ}tt| j|gƒgƒS r   ©r   r§   r   ÚFakeListr*   ©r   r>   rI   r!   r!   r"   Ú_imitate_values"  ó   z!DictComprehension._imitate_valuesÚitemsc                    ó(   ‡ fdd„ˆ   ¡ D ƒ}ttˆ j|ƒgƒS )Nc                    s,   g | ]\}}t tˆ jt|ƒt|ƒgƒƒ‘qS r!   )r   Ú	FakeTupler*   r   )rH   Úkeyr|   r+   r!   r"   Ú
<listcomp>)  s    ùÿþÿÿz4DictComprehension._imitate_items.<locals>.<listcomp>)r™   r   rÁ   r*   ©r   r>   Zlazy_valuesr!   r+   r"   Ú_imitate_items'  s   
øz DictComprehension._imitate_itemsc                 C   s   g S r   r!   r+   r!   r!   r"   Úexact_key_items6  s   z!DictComprehension.exact_key_itemsr   )r.   r/   r0   rX   r\   r   r°   r¶   r§   r   rÃ   rË   rÌ   ri   r!   r!   r^   r"   rx     s    
	

rx   c                       sb   e Zd ZdZddddœZ‡ fdd„Z‡ fdd	„Zd
d„ Zddd„Zdd„ Z	dd„ Z
dd„ Z‡  ZS )ÚSequenceLiteralValue)Útestlist_star_exprÚtestlistZsubscriptlistr—   r«   r²   )rs   rt   rk   c                    sH   t ƒ  |¡ || _|| _| jj| jv rd| _d S tj|j	d  | _	 d S )Nr—   r   )
r[   r\   r}   r‡   rf   Ú_TUPLE_LIKErX   rÍ   Úmappingrw   ©r   r*   ru   r}   r^   r!   r"   r\   B  s   
zSequenceLiteralValue.__init__c                    s*   | j dkrtdd„ |  ¡ D ƒƒS tƒ  ¡ S )Nr—   c                 s   s   � | ]	}|  ¡  ¡ V  qd S r   )rF   rV   )rH   Úxr!   r!   r"   rJ   O  s   € z5SequenceLiteralValue._get_generics.<locals>.<genexpr>)rX   r—   r   r[   rž   r+   r^   r!   r"   rž   M  s   

z"SequenceLiteralValue._get_genericsc                 C   sn   t |tƒr
t| gƒS ttttƒ� |  ¡ | }W d  ƒ n1 s!w   Y  |dks/|jdkr1t	S | j
 |¡S )ú9Here the index is an int/str. Raises IndexError/KeyError.Nrl   Ú	subscript)r¬   r­   r   r	   r®   ÚKeyErrorrŒ   Úget_tree_entriesrf   r   r‡   rˆ   )r   r¯   Únoder!   r!   r"   r°   R  s   

ÿz)SequenceLiteralValue.py__simple_getitem__Nc                 c   s^   � |   ¡ D ]}|dks|jdkrtt| jdddƒƒV  qt| j|ƒV  qt| j| ƒE dH  dS )úŒ
        While values returns the possible values for any array field, this
        function returns the value for a certain index.
        rl   rÕ   N)r×   rf   r   ÚSlicer‡   r   r   )r   r    rØ   r!   r!   r"   r   ]  s   €zSequenceLiteralValue.py__iter__c                 C   s   t |  ¡ ƒS r   )Úlenr×   r+   r!   r!   r"   Ú	py__len__k  rQ   zSequenceLiteralValue.py__len__c                 C   s  | j j}| j j| jv r|d d d… S |d }|dv rg S |jdkr.dd„ |jd d d… D ƒS |jdkr|g }t|jƒ}|D ]=}|dkrLt|ƒ t|d ƒ q<t|d ƒ}|d u sY|d	kre|jd
kr_q<| |¡ q<|dkskJ ‚| |t|ƒf¡ t|d ƒ q<|S |jd
krƒg S |gS )Nro   rj   )ú]Ú}ú)Útestlist_compc                 S   s   g | ]	}|j d kr|‘qS )Ú	star_expr)rf   )rH   r|   r!   r!   r"   rÉ   {  s    
ÿz9SequenceLiteralValue.get_tree_entries.<locals>.<listcomp>Zdictorsetmakerz**ú,rá   rl   )r}   rw   rf   rÐ   ÚiterÚnextÚappend)r   r¦   Z
array_nodeÚkvÚiteratorrÈ   Úopr!   r!   r"   r×   o  s6   





z%SequenceLiteralValue.get_tree_entriesc                 C   ó   d| j j| jf S re   )r_   r.   r}   r+   r!   r!   r"   rg   œ  ó   zSequenceLiteralValue.__repr__r   )r.   r/   r0   rÐ   rÑ   r\   rž   r°   r   rÜ   r×   rg   ri   r!   r!   r^   r"   rÍ   <  s    þ
-rÍ   c                   @   sb   e Zd ZdZdd„ Zdd„ Zddd„Zed	ƒd
d„ ƒZedƒdd„ ƒZ	dd„ Z
dd„ Zdd„ ZdS )ÚDictLiteralValuer…   c                 C   s   t  | |¡ || _|| _d S r   )rŸ   r\   r‡   r}   rÒ   r!   r!   r"   r\   £  s   
zDictLiteralValue.__init__c                 C   sp   t  | j|¡}|  ¡ D ]&\}}| j |¡D ]}| |d¡D ]}| ¡ r/| j |¡      S qqqtd|  ƒ‚)rÔ   z==zNo key found in dictionary %s.)	r   Úcreate_simple_objectr*   r×   r‡   rˆ   Zexecute_operationr1   r
   )r   r¯   Zcompiled_value_indexrÈ   r|   r»   Zkey_vr!   r!   r"   r°   ª  s   ÿÿÿz%DictLiteralValue.py__simple_getitem__Nc                 c   s@   � t }|  ¡ D ]\}}|| j |¡O }q|D ]}t|ƒV  qdS )rÙ   N)r   r×   r‡   rˆ   r   )r   r    r’   r»   Ú_r!   r!   r"   r   ´  s   €ÿzDictLiteralValue.py__iter__r¹   c                 C   r¿   r   rÀ   rÂ   r!   r!   r"   rÃ   Â  rÄ   z DictLiteralValue._imitate_valuesrÅ   c                    rÆ   )Nc              	      s4   g | ]\}}t tˆ jtˆ j|ƒtˆ j|ƒfƒƒ‘qS r!   )r   rÇ   r*   r   r‡   )rH   rq   rr   r+   r!   r"   rÉ   É  s    ü

ÿþÿz3DictLiteralValue._imitate_items.<locals>.<listcomp>)r×   r   rÁ   r*   rÊ   r!   r+   r"   rË   Ç  s   
ûzDictLiteralValue._imitate_itemsc                 c   sH   � |   ¡ D ]\}}| j |¡D ]}t|ƒr | ¡ t| j|ƒfV  qq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   r1   r   )r   rq   r|   rÈ   r!   r!   r"   rÌ   Ó  s   €€þÿz DictLiteralValue.exact_key_itemsc                    ó   t  ‡ fdd„ˆ  ¡ D ƒ¡S )Nc                 3   s    � | ]\}}ˆ j  |¡V  qd S r   ©r‡   rˆ   ©rH   r»   Úvr+   r!   r"   rJ   Þ  ó
   € 
ÿ
ÿz0DictLiteralValue._dict_values.<locals>.<genexpr>©r   rM   r×   r+   r!   r+   r"   r§   Ý  ó   þzDictLiteralValue._dict_valuesc                    rî   )Nc                 3   s    � | ]\}}ˆ j  |¡V  qd S r   rï   rð   r+   r!   r"   rJ   ä  rò   z.DictLiteralValue._dict_keys.<locals>.<genexpr>ró   r+   r!   r+   r"   r¶   ã  rô   zDictLiteralValue._dict_keysr   )r.   r/   r0   rX   r\   r°   r   r   rÃ   rË   rÌ   r§   r¶   r!   r!   r!   r"   rë      s    




rë   c                       s>   e Zd Z‡ fdd„Zdd„ Zddd„Zdd	„ Zd
d„ Z‡  ZS )Ú_FakeSequencec                    s   t ƒ  |¡ || _dS )z7
        type should be one of "tuple", "list"
        N)r[   r\   Ú_lazy_value_list)r   r*   Zlazy_value_listr^   r!   r"   r\   ë  s   
z_FakeSequence.__init__c                 C   sV   t |tƒr
t| gƒS tttƒ� | j| }W d   ƒ | ¡ S 1 s"w   Y  | ¡ S r   )r¬   r­   r   r	   rŒ   r®   rö   rF   ©r   r¯   rI   r!   r!   r"   r°   ò  s   


ÿþz"_FakeSequence.py__simple_getitem__Nc                 C   s   | j S r   )rö   r   r!   r!   r"   r   ú  s   z_FakeSequence.py__iter__c                 C   s   t t| jƒƒS r   )ÚboolrÛ   rö   r+   r!   r!   r"   r:   ý  r    z_FakeSequence.py__bool__c                 C   rd   re   )rf   r.   rö   r+   r!   r!   r"   rg      r-   z_FakeSequence.__repr__r   )	r.   r/   r0   r\   r°   r   r:   rg   ri   r!   r!   r^   r"   rõ   ê  s    
rõ   c                   @   r±   )rÇ   r—   Nr³   r!   r!   r!   r"   rÇ     r´   rÇ   c                   @   r±   )rÁ   r—   Nr³   r!   r!   r!   r"   rÁ     r´   rÁ   c                       sb   e Zd ZdZ‡ fdd„Zddd„Zdd„ Zed	ƒd
d„ ƒZdd„ Z	dd„ Z
dd„ Zdd„ Z‡  ZS )ÚFakeDictr…   c                    rZ   r   )r[   r\   Ú_dct)r   r*   r“   r^   r!   r"   r\     r`   zFakeDict.__init__Nc                 c   s&   � | j D ]}tt | j|¡ƒV  qd S r   )rú   r   r   rì   r*   )r   r    rÈ   r!   r!   r"   r     s   €
ÿzFakeDict.py__iter__c                 C   sB   t ttƒ� | j| }W d   ƒ | ¡ S 1 sw   Y  | ¡ S r   )r	   rÖ   r®   rú   rF   r÷   r!   r!   r"   r°     s   
ÿþzFakeDict.py__simple_getitem__r¹   c                 C   s   t t| jt|  ¡ ƒgƒgƒS r   )r   rÇ   r*   r   r§   r=   r!   r!   r"   Ú_values  s   þzFakeDict._valuesc                 C   s   t  dd„ | j ¡ D ƒ¡S )Nc                 s   rD   r   rE   rG   r!   r!   r"   rJ   $  rK   z(FakeDict._dict_values.<locals>.<genexpr>)r   rM   rú   r¹   r+   r!   r!   r"   r§   #  s   zFakeDict._dict_valuesc                 C   rC   )Nc                 s   rD   r   rE   rG   r!   r!   r"   rJ   '  rK   z&FakeDict._dict_keys.<locals>.<genexpr>rL   r+   r!   r!   r"   r¶   &  r¾   zFakeDict._dict_keysc                 C   rc   r   )rú   rÅ   r+   r!   r!   r"   rÌ   )  r$   zFakeDict.exact_key_itemsc                 C   ré   )Nz<%s: %s>)r_   r.   rú   r+   r!   r!   r"   rg   ,  rê   zFakeDict.__repr__r   )r.   r/   r0   rX   r\   r   r°   r   rû   r§   r¶   rÌ   rg   ri   r!   r!   r^   r"   rù     s    

rù   c                       s.   e Zd Z‡ fdd„Zddd„Zdd„ Z‡  ZS )	ÚMergedArrayc                    s"   t ƒ  |¡ |d j| _|| _d S )Néÿÿÿÿ)r[   r\   rX   Ú_arrays)r   r*   Zarraysr^   r!   r"   r\   1  s   
zMergedArray.__init__Nc                 c   s    � | j D ]	}| ¡ E d H  qd S r   )rþ   r   )r   r    Úarrayr!   r!   r"   r   6  s   €
ÿzMergedArray.py__iter__c                 C   rC   )Nc                 s   rD   r   rE   rG   r!   r!   r"   rJ   ;  rK   z3MergedArray.py__simple_getitem__.<locals>.<genexpr>rL   )r   r¯   r!   r!   r"   r°   :  r¾   z MergedArray.py__simple_getitem__r   )r.   r/   r0   r\   r   r°   ri   r!   r!   r^   r"   rü   0  s    
rü   c           	   
   C   s(  |j dkr
|j|iS |j dkr|jd dv rt| ||jd ƒS |j dv ri }t|jddd… ƒ}d}| t| |ƒ¡D ],}|d7 }zt|ƒ}W n tyZ   t	j
| d	|d
| d� Y q:w | t| | ¡ |ƒ¡ q:t|dƒ}|r}|dur}t	j
| d|d| d� |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.
    rP   r}   r   )rs   rt   rj   )rÏ   rà   r�   rÎ   Nro   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ÚpowerZ	atom_exprrá   )rf   r|   rw   rŠ   rã   ra   r   rä   ÚStopIterationr   ÚaddÚupdaterF   ÚNotImplementedError)	r”   r’   r�   r“   ÚpartsÚnrI   ÚpartZ	has_partsr!   r!   r"   rŠ   >  s:   




ÿÿ

ÿ
rŠ   c                   @   s(   e Zd Zdd„ Zdd„ Zefdd„ZdS )rÚ   c                 C   s$   |j | _ || _|| _|| _|| _d S r   )r*   Ú_contextÚ_startÚ_stopÚ_step)r   Zpython_contextÚstartÚstopÚstepr!   r!   r"   r\   e  s
   
zSlice.__init__c                 C   s   t  | jjd¡}| ¡ \}|S )Nr­   )r   r)   r	  r*   Zexecute_with_values)r   r|   Úslice_valuer!   r!   r"   r6   m  s   
zSlice._get_wrapped_valuec                    sL   ‡ fdd„}zt |ˆ jƒ|ˆ jƒ|ˆ jƒƒW S  ty%   t dddƒ Y S w )ze
        Imitate CompiledValue.obj behavior and return a ``builtin.slice()``
        object.
        c                    s6   | d u rd S ˆ j  | ¡}t|ƒdkrt‚|\}t|ƒS )Nrj   )r	  rˆ   rÛ   rŒ   r   )ÚelementÚresultr|   r+   r!   r"   Úgetw  s   z!Slice.get_safe_value.<locals>.getN)r­   r
  r  r  rŒ   )r   r–   r  r!   r+   r"   r1   r  s    ÿzSlice.get_safe_valueN)r.   r/   r0   r\   r6   r   r1   r!   r!   r!   r"   rÚ   d  s    rÚ   N)9rh   Zjedi.inferencer   r   Zjedi.inference.lazy_valuer   r   r   Zjedi.inference.helpersr   r   r	   r
   Zjedi.inference.utilsr   r   Zjedi.inference.cacher   Zjedi.inference.filtersr   r   Zjedi.inference.base_valuer   r   r   r   r   r   r   Zjedi.parser_utilsr   Zjedi.inference.contextr   Z#jedi.inference.value.dynamic_arraysr   r   r2   r8   r€   r�   rœ   rŸ   r©   r{   ry   rz   rµ   rx   rÍ   rë   rõ   rÇ   rÁ   rù   rü   rŠ   rÚ   r!   r!   r!   r"   Ú<module>   sD    $%$0%	
8dJ$&