o
    Zh	[                     @   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!   T/var/www/html/lang_env/lib/python3.10/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 sw   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rg 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ri S |j dkri 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$&