a
    lc	[                     @   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!   Y/var/www/html/django/DPS/env/lib/python3.9/site-packages/jedi/inference/value/iterable.py
py__next__   s    zIterableMixin.py__next__c                 C   s   t t| jdgS NNoner   r   builtin_from_nameinference_stater   r!   r!   r"   py__stop_iteration_returns   s    z(IterableMixin.py__stop_iteration_returns)N)__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"   r0   -   s    zGeneratorBase._get_clsc                 C   s   dS )NTr!   r)   r!   r!   r"   
py__bool__1   s    zGeneratorBase.py__bool____iter__c                 C   s
   t | gS r   )r   r   	argumentsr!   r!   r"   _iter4   s    zGeneratorBase._itersend__next__c                 C   s   t dd |  D S )Nc                 s   s   | ]}|  V  qd S r   infer.0
lazy_valuer!   r!   r"   	<genexpr>;       z&GeneratorBase._next.<locals>.<genexpr>r   	from_setsr   r9   r!   r!   r"   _next8   s    zGeneratorBase._nextc                 C   s   t t| jdgS r$   r&   r)   r!   r!   r"   r*   =   s    z(GeneratorBase.py__stop_iteration_returnsc                 C   s   t | dS r4   )r   CompiledValueNamer)   r!   r!   r"   name@   s    zGeneratorBase.namec                 C   s4   ddl m} |   }||ttf}|  |S )Nr   TupleGenericManager)jedi.inference.gradual.genericsrK   merge_types_of_iteratepy__class__r   r0   Zwith_generics)r   rK   Z
gen_valuesZgmr!   r!   r"   get_annotated_class_objectD   s    z(GeneratorBase.get_annotated_class_object)r+   r,   r-   
array_typer3   r0   r7   r   r;   rG   r*   propertyrI   rO   r!   r!   r!   r"   r/   &   s   

r/   c                       s:   e Zd ZdZ fddZdddZdd Zd	d
 Z  ZS )r5   zHandling of `yield` functions.c                    s   t  | || _d S r   )super__init___func_execution_context)r   r(   Zfunc_execution_context	__class__r!   r"   rS   M   s    zGenerator.__init__Nc                 C   s"   | j  }|r||S | j  S r   )rT   Zinfer_annotationsiterateZget_yield_lazy_values)r   r    	iteratorsr!   r!   r"   r   Q   s    

zGenerator.py__iter__c                 C   s
   | j  S r   )rT   Zget_return_valuesr)   r!   r!   r"   r*   W   s    z$Generator.py__stop_iteration_returnsc                 C   s   dt | j| jf S Nz
<%s of %s>)typer+   rT   r)   r!   r!   r"   __repr__Z   s    zGenerator.__repr__)N)	r+   r,   r-   __doc__rS   r   r*   r[   __classcell__r!   r!   rU   r"   r5   K   s
   
r5   c                 C   s   |j d }|j d }|dkrr|j d j d dkrl|j d }|jdkrN|j d }t| |||j d |j d dS t}n|d	krt}n|d
krt}|j d }|jdkr|j d }|| |||j d dS )Nr      {:   comp_for   )sync_comp_for_nodekey_node
value_node([)defining_contextrd   
entry_node)childrenrZ   DictComprehensionSetComprehensionGeneratorComprehensionListComprehension)r(   valueatomZbracketZtest_list_compsync_comp_forclsr!   r!   r"   comprehension_from_atom^   s8    







rt   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_contextrb   r!   r!   r"   _get_comp_for_context   s    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	|||	}| 
||}|||r z| |dd  |E d H  W nB ty   || j}| jdkr||| jfV  n|V  Y n0 W d    q\1 s
0    Y  q\d S )Nr   rb   ra   )is_asyncr^   dict)parentrZ   rk   _defining_context
infer_noder   rW   	enumerater?   unpack_tuple_to_dictrw   Zpredefine_names_nested
IndexError_entry_noderP   _value_node)r   	comp_forsrv   rb   rx   Z
input_nodeZinput_typesZcnZiteratedexprlistirB   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   s   dt | j| jf S rY   )rZ   r+   r   r)   r!   r!   r"   r[      s    zComprehensionMixin.__repr__)N)N)
r+   r,   r-   r   rw   r   r   r   r   r[   r!   r!   r!   r"   ru      s   


ru   c                   @   s   e Zd Zdd ZdS )
_DictMixinc                 C   s   t dd |  D S )Nc                 s   s   | ]}|  V  qd S r   )rN   )rA   Zc_setr!   r!   r"   rC      rD   z+_DictMixin._get_generics.<locals>.<genexpr>)r   get_mapping_item_valuesr)   r!   r!   r"   _get_generics   s    z_DictMixin._get_genericsN)r+   r,   r-   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 )Sequencer2   c                 C   s   t | | jS r   )r   rH   rP   r)   r!   r!   r"   rI      s    zSequence.namec                 C   s   |    fS r   )rM   rN   r)   r!   r!   r"   r      s    zSequence._get_genericsr!   r   c                 C   s   |   S r   )r   r)   r!   r!   r"   _cached_generics   s    zSequence._cached_genericsc                 C   sD   ddl m} ddlm} t| j| j}||||  	 \}|S )Nr   )GenericClassrJ   )
Zjedi.inference.gradual.baser   rL   rK   r   r'   r(   rP   r   r1   )r   r   rK   klasscr!   r!   r"   r3      s    

zSequence._get_wrapped_valuec                 C   s   d S r   r!   r)   r!   r!   r"   r7      s    zSequence.py__bool__c                 C   s   | j jS r   )r(   Zbuiltins_moduler)   r!   r!   r"   rz      s    zSequence.parentc                 C   s    | j dkr|  S tt| gS )Nry   )rP   _dict_valuesr   r   )r   Zindex_value_setr    r!   r!   r"   py__getitem__   s    
zSequence.py__getitem__N)r+   r,   r-   Zapi_typerQ   rI   r   r   r   r3   r7   r   rz   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 Nrr   )rZ   rR   rS   r{   r   r   )r   r(   ri   rd   rj   rU   r!   r"   rS      s
    z_BaseComprehension.__init__)r+   r,   r-   rS   r]   r!   r!   rU   r"   r      s   r   c                   @   s   e Zd ZdZdd ZdS )ro   listc                 C   sZ   t |trt| gS t|  }ttt || }W d    n1 sH0    Y  | S r   )	
isinstanceslicer   r   r   r	   r   	TypeErrorr?   )r   indexZ	all_typesrB   r!   r!   r"   py__simple_getitem__   s    

&z&ListComprehension.py__simple_getitem__N)r+   r,   r-   rP   r   r!   r!   r!   r"   ro      s   ro   c                   @   s   e Zd ZdZdS )rm   setNr+   r,   r-   rP   r!   r!   r!   r"   rm      s   rm   c                   @   s   e Zd ZdS )rn   N)r+   r,   r-   r!   r!   r!   r"   rn      s   rn   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   s   |   S r   )r   r)   r!   r!   r"   get_key_values   s    z_DictKeyMixin.get_key_valuesN)r+   r,   r-   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 )rl   ry   c                    s6   |j dksJ t | || _|| _|| _|| _d S r   )rZ   rR   rS   r{   r   r   r   )r   r(   ri   rd   re   rf   rU   r!   r"   rS     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   sD   |   D ]0\}}|D ]"}|jt d|kr|    S qqt d S )Nr   )r   r.   objectr
   )r   r   r   r   kr!   r!   r"   r     s
    z&DictComprehension.py__simple_getitem__c                 C   s   t dd |  D S )Nc                 s   s   | ]\}}|V  qd S r   r!   rA   r   r   r!   r!   r"   rC     rD   z/DictComprehension._dict_keys.<locals>.<genexpr>r   rF   r   r)   r!   r!   r"   r     s    zDictComprehension._dict_keysc                 C   s   t dd |  D S )Nc                 s   s   | ]\}}|V  qd S r   r!   r   r!   r!   r"   rC      rD   z1DictComprehension._dict_values.<locals>.<genexpr>r   r)   r!   r!   r"   r     s    zDictComprehension._dict_valuesr   c                 C   s    t |  }tt| j|ggS r   r   r   r   FakeListr(   r   r:   rB   r!   r!   r"   _imitate_values"  s    z!DictComprehension._imitate_valuesitemsc                    s(    fdd   D }tt j|gS )Nc                    s,   g | ]$\}}t t jt|t|gqS r!   )r   	FakeTupler(   r   )rA   keyrp   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_items)N)r+   r,   r-   rP   rS   r   r   r   r   r   r   r   r   r]   r!   r!   rU   r"   rl     s   
	

rl   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   )rg   rh   r_   c                    sD   t  | || _|| _| jj| jv r.d| _ntj|j	d  | _d S )Nr   r   )
rR   rS   rq   r{   rZ   _TUPLE_LIKErP   r   mappingrk   r   r(   ri   rq   rU   r!   r"   rS   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   )r?   rN   )rA   xr!   r!   r"   rC   O  rD   z5SequenceLiteralValue._get_generics.<locals>.<genexpr>)rP   r   r   rR   r   r)   rU   r!   r"   r   M  s    
z"SequenceLiteralValue._get_genericsc                 C   sr   t |trt| gS tttt |  | }W d   n1 sB0    Y  |dks^|jdkrbt	S | j
|S d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   noder!   r!   r"   r   R  s    

*z)SequenceLiteralValue.py__simple_getitem__Nc                 c   s\   |   D ]<}|dks|jdkr6t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.
        r`   r   N)r   rZ   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  s    zSequenceLiteralValue.py__len__c                 C   s  | j j}| j j| jv r$|d d d S |d }|dv r8g S |jdkr\dd |jd d d D S |jdkrg }t|j}|D ]z}|dkrt| t|d  qxt|d }|d u s|d	kr|jd
krq|| qx|dksJ ||t|f t|d  qx|S |jd
krg S |gS d S )Nrc   r^   )]})testlist_compc                 S   s   g | ]}|j d kr|qS )	star_expr)rZ   )rA   rp   r!   r!   r"   r   {  s   
z9SequenceLiteralValue.get_tree_entries.<locals>.<listcomp>Zdictorsetmakerz**,r   r`   )rq   rk   rZ   r   iternextappend)r   r   Z
array_nodekviteratorr   opr!   r!   r"   r   o  s6    




z%SequenceLiteralValue.get_tree_entriesc                 C   s   d| j j| jf S rY   )rV   r+   rq   r)   r!   r!   r"   r[     s    zSequenceLiteralValue.__repr__)N)r+   r,   r-   r   r   rS   r   r   r   r   r   r[   r]   r!   r!   rU   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 )DictLiteralValuery   c                 C   s   t | | || _|| _d S r   )r   rS   r{   rq   r   r!   r!   r"   rS     s    zDictLiteralValue.__init__c                 C   st   t | j|}|  D ]L\}}| j|D ]6}||dD ]$}| r:| j|      S q:q*qtd|  dS )r   z==zNo key found in dictionary %s.N)	r   create_simple_objectr(   r   r{   r|   Zexecute_operationr.   r
   )r   r   Zcompiled_value_indexr   rp   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   s    t |  }tt| j|ggS r   r   r   r!   r!   r"   r     s    z DictLiteralValue._imitate_valuesr   c                    s(    fdd   D }tt j|gS )Nc              	      s4   g | ],\}}t t jt j|t j|fqS r!   )r   r   r(   r   r{   )rA   re   rf   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   sF   |   D ]8\}}| 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   r.   r   )r   re   rp   r   r!   r!   r"   r     s    z DictLiteralValue.exact_key_itemsc                    s   t  fdd  D S )Nc                 3   s   | ]\}} j |V  qd S r   r{   r|   rA   r   vr)   r!   r"   rC     s   z0DictLiteralValue._dict_values.<locals>.<genexpr>r   rF   r   r)   r!   r)   r"   r     s    zDictLiteralValue._dict_valuesc                    s   t  fdd  D S )Nc                 3   s   | ]\}} j |V  qd S r   r   r   r)   r!   r"   rC     s   z.DictLiteralValue._dict_keys.<locals>.<genexpr>r   r)   r!   r)   r"   r     s    zDictLiteralValue._dict_keys)N)r+   r,   r-   rP   rS   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)rR   rS   _lazy_value_list)r   r(   Zlazy_value_listrU   r!   r"   rS     s    z_FakeSequence.__init__c                 C   sP   t |trt| gS ttt | j| }W d    n1 s>0    Y  | S r   )r   r   r   r	   r   r   r   r?   r   r   rB   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"   r7     s    z_FakeSequence.py__bool__c                 C   s   dt | j| jf S rY   )rZ   r+   r   r)   r!   r!   r"   r[      s    z_FakeSequence.__repr__)N)	r+   r,   r-   rS   r   r   r7   r[   r]   r!   r!   rU   r"   r     s
   
r   c                   @   s   e Zd ZdZdS )r   r   Nr   r!   r!   r!   r"   r     s   r   c                   @   s   e Zd ZdZdS )r   r   Nr   r!   r!   r!   r"   r     s   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 )FakeDictry   c                    s   t  | || _d S r   )rR   rS   _dct)r   r(   r   rU   r!   r"   rS     s    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   s<   t tt | j| }W d    n1 s*0    Y  | S r   )r	   r   r   r   r?   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   r9   r!   r!   r"   _values  s    zFakeDict._valuesc                 C   s   t dd | j D S )Nc                 s   s   | ]}|  V  qd S r   r>   r@   r!   r!   r"   rC   $  rD   z(FakeDict._dict_values.<locals>.<genexpr>)r   rF   r   r   r)   r!   r!   r"   r   #  s    zFakeDict._dict_valuesc                 C   s   t dd |  D S )Nc                 s   s   | ]}|  V  qd S r   r>   r@   r!   r!   r"   rC   '  rD   z&FakeDict._dict_keys.<locals>.<genexpr>rE   r)   r!   r!   r"   r   &  s    zFakeDict._dict_keysc                 C   s
   | j  S r   )r   r   r)   r!   r!   r"   r   )  s    zFakeDict.exact_key_itemsc                 C   s   d| j j| jf S )Nz<%s: %s>)rV   r+   r   r)   r!   r!   r"   r[   ,  s    zFakeDict.__repr__)N)r+   r,   r-   rP   rS   r   r   r   r   r   r   r   r[   r]   r!   r!   rU   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)rR   rS   rP   _arrays)r   r(   ZarraysrU   r!   r"   rS   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   s   t dd |  D S )Nc                 s   s   | ]}|  V  qd S r   r>   r@   r!   r!   r"   rC   ;  rD   z3MergedArray.py__simple_getitem__.<locals>.<genexpr>rE   )r   r   r!   r!   r"   r   :  s    z MergedArray.py__simple_getitem__)N)r+   r,   r-   rS   r   r   r]   r!   r!   rU   r"   r   0  s   
r   c           	   
   C   s8  |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 ]X}|d7 }zt|}W n( ty   t	j
| d	|d
| d Y qv0 |t| | | qvt|d}|r |dur t	j
| d|d| d |S |j dks|j dkr i S |j dkr0i S tdS )zG
    Unpacking tuple assignments in for statements and expr_stmts.
    rI   rq   r   )rg   rh   r^   )r   r   r   r   Nrc   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   )rZ   rp   rk   r~   r   rW   r   r   StopIterationr   addupdater?   NotImplementedError)	r   r   r   r   partsnrB   partZ	has_partsr!   r!   r"   r~   >  s8    




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"   rS   e  s
    zSlice.__init__c                 C   s   t | jjd}| \}|S )Nr   )r   r'   r   r(   Zexecute_with_values)r   rp   slice_valuer!   r!   r"   r3   m  s    
zSlice._get_wrapped_valuec                    sP    fdd}z t | j| j| jW S  tyJ   t ddd Y S 0 dS )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 )Nr^   )r   r|   r   r   r   )elementresultrp   r)   r!   r"   getw  s    z!Slice.get_safe_value.<locals>.getN)r   r   r   r   r   )r   r   r   r!   r)   r"   r.   r  s
     zSlice.get_safe_valueN)r+   r,   r-   rS   r3   r   r.   r!   r!   r!   r"   r   d  s   r   N)9r\   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   r/   r5   rt   ru   r   r   r   ro   rm   rn   r   rl   r   r   r   r   r   r   r   r~   r   r!   r!   r!   r"   <module>   sB   $%$0%	
8dJ$&