o
    ˷e	[                     @   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/ideatree/venv/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*   typing_module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.genericsrU   merge_types_of_iteratepy__class__r   r3   with_generics)r   rU   
gen_valuesgmr!   r!   r"   get_annotated_class_objectD   s   z(GeneratorBase.get_annotated_class_object)r.   r/   r0   
array_typer6   r3   r<   r   rA   rP   r,   propertyrR   r\   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*   func_execution_context	__class__r!   r"   ra   M      
zGenerator.__init__Nc                 C   s"   | j  }|r||S | j  S r   )rb   infer_annotationsiterateget_yield_lazy_values)r   r    	iteratorsr!   r!   r"   r   Q   s   


zGenerator.py__iter__c                 C   
   | j  S r   )rb   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.   rb   r+   r!   r!   r"   __repr__Z   r-   zGenerator.__repr__r   )	r.   r/   r0   __doc__ra   r   r,   rp   __classcell__r!   r!   rd   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_contextry   
entry_node)childrenro   DictComprehensionSetComprehensionGeneratorComprehensionListComprehension)r*   valueatombracket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_contextrw   r!   r!   r"   _get_comp_for_context   rB   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   rw   rv   )is_asyncrs   dict)parentro   r   _defining_context
infer_noder   rh   	enumeraterH   unpack_tuple_to_dictr   predefine_names_nested
IndexError_entry_noder]   _value_node)r   	comp_forsr   rw   r   
input_nodeinput_typescniteratedexprlistirK   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   rm   rn   )ro   r.   r   r+   r!   r!   r"   rp      r-   zComprehensionMixin.__repr__r   )
r.   r/   r0   r   r   r   r   r   r   rp   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   rF   r   )rX   )rJ   c_setr!   r!   r"   rL      rM   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   rQ   r]   r+   r!   r!   r"   rR      s   zSequence.namec                 C   s   |    fS r   )rW   rX   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   )GenericClassrT   )
jedi.inference.gradual.baser   rV   rU   r   r)   r*   r]   r   r4   )r   r   rU   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*   builtins_moduler+   r!   r!   r"   r      r   zSequence.parentc                 C   s    | j dkr	|  S tt| gS )Nr   )r]   _dict_valuesr   r   )r   index_value_setr    r!   r!   r"   py__getitem__   s   
zSequence.py__getitem__N)r.   r/   r0   api_typer^   rR   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   )ro   r`   ra   r   r   r   )r   r*   r~   ry   r   rd   r!   r"   ra      s
   
z_BaseComprehension.__init__)r.   r/   r0   ra   rr   r!   r!   rd   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   	TypeErrorrH   )r   index	all_typesrK   r!   r!   r"   py__simple_getitem__   s   



z&ListComprehension.py__simple_getitem__N)r.   r/   r0   r]   r   r!   r!   r!   r"   r      s    r   c                   @      e Zd ZdZdS )r   setNr.   r/   r0   r]   r!   r!   r!   r"   r          r   c                   @   s   e Zd ZdS )r   N)r.   r/   r0   r!   r!   r!   r"   r      s    r   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 )r   r   c                    s6   |j dksJ t | || _|| _|| _|| _d S r   )ro   r`   ra   r   r   r   r   )r   r*   r~   ry   rz   r{   rd   r!   r"   ra     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   rE   )Nc                 s   s    | ]\}}|V  qd S r   r!   rJ   r   r   r!   r!   r"   rL     rM   z/DictComprehension._dict_keys.<locals>.<genexpr>r   rO   r   r+   r!   r!   r"   r        zDictComprehension._dict_keysc                 C   rE   )Nc                 s   s    | ]\}}|V  qd S r   r!   r   r!   r!   r"   rL      rM   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@   rK   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   )rJ   keyr   r+   r!   r"   
<listcomp>)  s    z4DictComprehension._imitate_items.<locals>.<listcomp>)r   r   r   r*   r   r@   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   r]   ra   r   r   r   r   r   r   r   r   rr   r!   r!   rd   r"   r     s    
	

r   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testlistsubscriptlistr   r   r   )r|   r}   rt   c                    sH   t  | || _|| _| jj| jv rd| _d S tj|j	d  | _	 d S )Nr   r   )
r`   ra   r   r   ro   _TUPLE_LIKEr]   r   mappingr   r   r*   r~   r   rd   r!   r"   ra   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   )rH   rX   )rJ   xr!   r!   r"   rL   O  s    z5SequenceLiteralValue._get_generics.<locals>.<genexpr>)r]   r   r   r`   r   r+   rd   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.Nru   	subscript)r   r   r   r	   r   KeyErrorr   get_tree_entriesro   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.
        ru   r   N)r   ro   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  rS   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 )Nrx   rs   )]})testlist_compc                 S   s   g | ]	}|j d kr|qS )	star_expr)ro   )rJ   r   r!   r!   r"   r   {  s    
z9SequenceLiteralValue.get_tree_entries.<locals>.<listcomp>dictorsetmakerz**,r   ru   )r   r   ro   r   iternextappend)r   r   
array_nodekviteratorr   opr!   r!   r"   r   o  s6   





z%SequenceLiteralValue.get_tree_entriesc                 C      d| j j| jf S rn   )re   r.   r   r+   r!   r!   r"   rp        zSequenceLiteralValue.__repr__r   )r.   r/   r0   r   r   ra   r   r   r   r   r   rp   rr   r!   r!   rd   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   ra   r   r   r   r!   r!   r"   ra     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   execute_operationr1   r
   )r   r   compiled_value_indexr   r   r   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   )rJ   rz   r{   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   rz   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   rJ   r   vr+   r!   r"   rL     
    

z0DictLiteralValue._dict_values.<locals>.<genexpr>r   rO   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"   rL     r  z.DictLiteralValue._dict_keys.<locals>.<genexpr>r  r+   r!   r+   r"   r     r  zDictLiteralValue._dict_keysr   )r.   r/   r0   r]   ra   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`   ra   _lazy_value_list)r   r*   lazy_value_listrd   r!   r"   ra     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  rH   r   r   rK   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   rm   rn   )ro   r.   r  r+   r!   r!   r"   rp      r-   z_FakeSequence.__repr__r   )	r.   r/   r0   ra   r   r   r<   rp   rr   r!   r!   rd   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                    r_   r   )r`   ra   _dct)r   r*   r   rd   r!   r"   ra     rf   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  rH   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   rF   r   rG   rI   r!   r!   r"   rL   $  rM   z(FakeDict._dict_values.<locals>.<genexpr>)r   rO   r  r   r+   r!   r!   r"   r   #  s   zFakeDict._dict_valuesc                 C   rE   )Nc                 s   rF   r   rG   rI   r!   r!   r"   rL   '  rM   z&FakeDict._dict_keys.<locals>.<genexpr>rN   r+   r!   r!   r"   r   &  r   zFakeDict._dict_keysc                 C   rk   r   )r  r   r+   r!   r!   r"   r   )  r$   zFakeDict.exact_key_itemsc                 C   r  )Nz<%s: %s>)re   r.   r  r+   r!   r!   r"   rp   ,  r  zFakeDict.__repr__r   )r.   r/   r0   r]   ra   r   r   r   r  r   r   r   rp   rr   r!   r!   rd   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`   ra   r]   _arrays)r   r*   arraysrd   r!   r"   ra   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   rE   )Nc                 s   rF   r   rG   rI   r!   r!   r"   rL   ;  rM   z3MergedArray.py__simple_getitem__.<locals>.<genexpr>rN   )r   r   r!   r!   r"   r   :  r   z MergedArray.py__simple_getitem__r   )r.   r/   r0   ra   r   r   rr   r!   r!   rd   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.
    rR   r   r   )r|   r}   rs   )r   r   r   r   Nrx   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   )ro   r   r   r   r   rh   r   r   StopIterationr   addupdaterH   NotImplementedError)	r   r   r   r   partsnrK   part	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   python_contextstartstopstepr!   r!   r"   ra   e  s
   
zSlice.__init__c                 C   s   t | jjd}| \}|S )Nr   )r   r)   r*  r*   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 )Nrs   )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   r6  r!   r+   r"   r1   r  s    zSlice.get_safe_valueN)r.   r/   r0   ra   r6   r   r1   r!   r!   r!   r"   r   d  s    r   N)9rq   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   r2   r8   r   r   r   r   r   r   r   r   r   r   r   r  r  r   r   r  r  r   r   r!   r!   r!   r"   <module>   sD    $%$0%	
8dJ$&