o
    ZhgC                  	   @   s  d Z ddl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 ddlmZ ddlmZ ddlmZ dd	lmZmZ dd
lmZ ddlmZmZmZ ddlmZ ddlmZm Z  d! Z"dddddddddZ#d! Z$G dd deZ%G dd deZ&G dd deZ'G dd  d 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Z,G d)d* d*eZ-G d+d, d,eZ.G d-d. d.eZ/G d/d0 d0eZ0G d1d2 d2eZ1G d3d4 d4eZ2G d5d6 d6eZ3G d7d8 d8e
Z4G d9d: d:eZ5G d;d< d<eZ6G d=d> d>eZ7dS )?z
We need to somehow work with the typing objects. Since the typing objects are
pretty bare we need to add all the Jedi customizations to make them work as
values.

This file deals with all the typing.py cases.
    N)debug)builtin_from_namecreate_simple_object)ValueSet	NO_VALUESValueLazyValueWrapperValueWrapper)LazyKnownValues)repack_with_argument_clinic)FilterWrapper)NameWrapper	ValueName)
ClassMixin)BaseTypingValueBaseTypingClassWithGenericsBaseTypingInstance)TypeVarClass)LazyGenericManagerTupleGenericManagerz$Tuple Generic Protocol Callable Typezbuiltins.listzbuiltins.dictzbuiltins.setzbuiltins.frozensetzcollections.ChainMapzcollections.Counterzcollections.defaultdictzcollections.deque)ListDictSet	FrozenSetChainMapCounterDefaultDictDequez!Optional Union ClassVar Annotatedc                   @      e Zd Zdd Zdd ZdS )TypingModuleNamec                 C   s   t |  S N)r   _remapself r$   T/var/www/html/lang_env/lib/python3.10/site-packages/jedi/inference/gradual/typing.pyinfer'   s   zTypingModuleName.inferc                 c   s   | j }| jj}zt| }W n	 ty   Y nw t|| j| j|V  d S |tv r5t	|| j| jV  d S |t
v rEt|| j| jV  d S |dkrKd S |dkr^| j \}t||V  d S |dkrnt|| j| jV  d S |dkrzt|dV  d S |dkrt|| j| jV  d S |dkr| j \}t||V  d S |dkr| j \}t||V  d S |d	krt|| j| jV  d S | j E d H  d S )
NZruntimeTypeVarAnyTYPE_CHECKINGTrueoverloadNewTypecast	TypedDict)string_nameparent_contextinference_state_TYPE_ALIAS_TYPESKeyError	TypeAliascreate_cachedZ	tree_name_PROXY_CLASS_TYPESProxyTypingClassValue_PROXY_TYPESProxyTypingValueZ_wrapped_namer&   r   AnyClassr   OverloadFunctionNewTypeFunctionCastFunctionTypedDictClass)r#   namer1   actualclsvZcast_fnr$   r$   r%   r!   *   s\   









zTypingModuleName._remapN)__name__
__module____qualname__r&   r!   r$   r$   r$   r%   r   &   s    r   c                   @      e Zd ZeZdS )TypingModuleFilterWrapperN)rC   rD   rE   r   Zname_wrapper_classr$   r$   r$   r%   rG   `       rG   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
ProxyWithGenericsc                 C   s   | j j}|dkr|   S |dkr!|   tt| jdgB S |dkr*| jd S |dv r5| jd  S tt	t
td}|| }t|| j| | j | jdgS )	NUnionOptionalNoneTyper   )ClassVar	Annotated)TupleGenericProtocolCallablegenerics_manager)
_tree_namevaluegather_annotation_classesexecute_annotationr   r   r1   _generics_managerrP   rQ   rR   rS   r0   )r#   r/   ZmappedrA   r$   r$   r%   rY   e   s.   


z$ProxyWithGenerics.execute_annotationc                 C   s   t | j S r    )r   	from_setsrZ   to_tupler"   r$   r$   r%   rX         z+ProxyWithGenerics.gather_annotation_classesc                 C      t | j| j|S r    )rI   r0   rV   r#   rU   r$   r$   r%   _create_instance_with_generics   
   z0ProxyWithGenerics._create_instance_with_genericsc                    sL   |   }|si S |  }|dkr$t| jd |d | fddS i S )NrK   rL   r   c                    s   |  kS r    r$   xnoner$   r%   <lambda>   s    z3ProxyWithGenerics.infer_type_vars.<locals>.<lambda>)get_generics
py__name__r   r1   infer_type_varsfilter)r#   	value_setannotation_genericsannotation_namer$   rd   r%   ri      s   z!ProxyWithGenerics.infer_type_varsN)rC   rD   rE   rY   rX   r`   ri   r$   r$   r$   r%   rI   d   s
    !rI   c                   @   s    e Zd ZeZdd Zdd ZdS )r9   c                 C   s   | j j| j| j| jt|dS )NrT   )index_classr5   r1   r0   rV   r   )r#   Zgenerics_tupler$   r$   r%   with_generics   s   zProxyTypingValue.with_genericsc                    s   t  fdd|D S )Nc              	   3   s4    | ]}j jjjjt j|d dV  qdS ))Zcontext_of_indexindex_valuerT   N)rn   r5   r1   r0   rV   r   context).0rp   contextualized_noder#   r$   r%   	<genexpr>   s    	
z1ProxyTypingValue.py__getitem__.<locals>.<genexpr>r   r#   Zindex_value_setrt   r$   rs   r%   py__getitem__   s   	zProxyTypingValue.py__getitem__N)rC   rD   rE   rI   rn   ro   rx   r$   r$   r$   r%   r9      s    r9   c                   @   s(   e Zd Zdd Zdd Zedd ZdS )_TypingClassMixinc                 C   s   t | jjdgS )Nobject)r
   r1   builtins_modulepy__getattribute__r"   r$   r$   r%   py__bases__   s   z_TypingClassMixin.py__bases__c                 C      g S r    r$   r"   r$   r$   r%   get_metaclasses      z!_TypingClassMixin.get_metaclassesc                 C      t | | jS r    )r   rV   r"   r$   r$   r%   r?         z_TypingClassMixin.nameN)rC   rD   rE   r}   r   propertyr?   r$   r$   r$   r%   ry      s
    ry   c                   @   r   )TypingClassWithGenericsc                 C   s   i }|   }|s
|S |  }|dkr|d | S |dkr0t|dkr.|d | S |S |dkr>|  \}||S |S )NrM   r   rS         rP   )rg   rh   ri   rY   len)r#   rk   type_var_dictrl   rm   Ztuple_annotationr$   r$   r%   ri      s&   

z'TypingClassWithGenerics.infer_type_varsc                 C   r^   r    )r   r0   rV   r_   r$   r$   r%   r`      ra   z6TypingClassWithGenerics._create_instance_with_genericsN)rC   rD   rE   ri   r`   r$   r$   r$   r%   r      s    r   c                   @   rF   )r7   N)rC   rD   rE   r   rn   r$   r$   r$   r%   r7      rH   r7   c                   @   sH   e Zd Zdd Zedd Zdd Zdd Zd	d
 Zdd Z	dd Z
dS )r4   c                 C   s   |j | _ || _|| _|| _d S r    )r1   r0   _origin_tree_name_actual)r#   r0   Zorigin_tree_namer@   r$   r$   r%   __init__   s   
zTypeAlias.__init__c                 C   r   r    )r   r   r"   r$   r$   r%   r?      r   zTypeAlias.namec                 C      | j jS r    )r?   r/   r"   r$   r$   r%   rh      s   zTypeAlias.py__name__c                 C   s   d| j j| jf S )Nz<%s: %s>)	__class__rC   r   r"   r$   r$   r%   __repr__  s   zTypeAlias.__repr__c                 C   sd   | j d\}}ddlm} || j|g| jj \}||}t|dks*J |t	t
|}|S )N.r   )Importerr   )r   splitZjedi.inference.importsr   r1   r{   followr|   r   nextiter)r#   module_name
class_namer   moduleclassesrA   r$   r$   r%   _get_wrapped_value  s   
zTypeAlias._get_wrapped_valuec                 C   s   t |  gS r    )r   r   r"   r$   r$   r%   rX     s   z#TypeAlias.gather_annotation_classesc                 C   r~   r    r$   r"   r$   r$   r%   get_signatures  r   zTypeAlias.get_signaturesN)rC   rD   rE   r   r   r?   rh   r   r   rX   r   r$   r$   r$   r%   r4      s    
r4   c                   @   r   )rS   c                 C   sR   z| j d }| j d }W n ty   td t Y S w ddlm} ||||S )zG
            def x() -> Callable[[Callable[..., _T]], _T]: ...
        r   r   z+Callable[...] defined without two arguments)infer_return_for_callable)rZ   
IndexErrorr   warningr   !jedi.inference.gradual.annotationr   )r#   	argumentsZparam_valuesZresult_valuesr   r$   r$   r%   
py__call__  s   

zCallable.py__call__c                 C   s
   t | gS r    rv   )r#   instanceZclass_valuer$   r$   r%   	py__get__)     
zCallable.py__get__N)rC   rD   rE   r   r   r$   r$   r$   r%   rS     s    rS   c                   @   sJ   e Zd Zdd Zdd ZdddZdd	 Zd
d Zedd Z	dd Z
dS )rP   c                 C   
   | j  S r    )rZ   Zis_homogenous_tupler"   r$   r$   r%   _is_homogenous.  s   
zTuple._is_homogenousc                 C   s<   |   r
| jdS t|tr| j|S td|  tS )Nr   z The getitem type on Tuple was %s)r   rZ   get_index_and_execute
isinstanceintr   Zdbgr   r#   indexr$   r$   r%   py__simple_getitem__3  s   
zTuple.py__simple_getitem__Nc                 c   sB    |   rt| jdV  d S | j D ]	}t| V  qd S Nr   )r   r
   rZ   r   r\   rY   )r#   rt   rB   r$   r$   r%   
py__iter__=  s   zTuple.py__iter__c                 C   s(   |   r
| jdS t| j  S r   )r   rZ   r   r   r[   r\   rY   rw   r$   r$   r%   rx   D  s   zTuple.py__getitem__c                 C   s   | j jd \}|S Ntuple)r1   r{   r|   rY   )r#   tuple_r$   r$   r%   r   L  s   
zTuple._get_wrapped_valuec                 C   r   r    )Z_wrapped_valuer?   r"   r$   r$   r%   r?   Q     z
Tuple.namec              	   C   s   ddl m}m} |dd }|  r| j d | S i }|D ]}z|j	}W n	 t
y3   Y q#w | }|||| j| q#|S )Nr   )merge_pairwise_genericsmerge_type_var_dictsc                 S   s   |    dkS r   )rh   lowerrb   r$   r$   r%   rf   Z  s    z'Tuple.infer_type_vars.<locals>.<lambda>)r   r   r   rj   r   Z_class_valuerg   ri   Zmerge_types_of_iterateZget_annotated_class_objectAttributeError)r#   rk   r   r   r   elementmethodZpy_classr$   r$   r%   ri   U  s*   


zTuple.infer_type_varsr    )rC   rD   rE   r   r   r   rx   r   r   r?   ri   r$   r$   r$   r%   rP   -  s    


rP   c                   @      e Zd ZdS )rQ   NrC   rD   rE   r$   r$   r$   r%   rQ   ~      rQ   c                   @   r   )rR   Nr   r$   r$   r$   r%   rR     r   rR   c                   @      e Zd Zdd ZdS )r:   c                 C   s   t d tS )NzUsed Any - returned no results)r   r   r   r"   r$   r$   r%   rY     s   
zAnyClass.execute_annotationN)rC   rD   rE   rY   r$   r$   r$   r%   r:         r:   c                   @      e Zd Zeddd ZdS )r;   zfunc, /c                 C   s   |S r    r$   )r#   Zfunc_value_setr$   r$   r%   r     s   zOverloadFunction.py__call__NrC   rD   rE   r   r   r$   r$   r$   r%   r;         r;   c                   @   r   )r<   c                    sH   |  }t|d t|d\}  d u rtS t fdd| D S )N)NNc                 3   s(    | ]}t j|j|j  V  qd S r    )r,   r1   rq   noder&   )rr   rt   Z
second_argr#   r$   r%   ru     s    
z-NewTypeFunction.py__call__.<locals>.<genexpr>)unpackr   r   r   Zget_calling_nodes)r#   r   Zordered_args_r$   r   r%   r     s   
zNewTypeFunction.py__call__N)rC   rD   rE   r   r$   r$   r$   r%   r<     r   r<   c                       sF   e Zd Z fddZdd Zdd Zedd Zd	efd
dZ	  Z
S )r,   c                    s   t  || || _|| _d S r    )superr   _type_value_set	tree_node)r#   r1   r0   r   type_value_setr   r$   r%   r     s   
zNewType.__init__c                 C   s   | j  \}|S r    )r   py__class__)r#   cr$   r$   r%   r     s   zNewType.py__class__c                 C   r   r    )r   rY   )r#   r   r$   r$   r%   r     r   zNewType.py__call__c                 C   s   ddl m} || dS )Nr   )CompiledValueNamer,   )Zjedi.inference.compiled.valuer   )r#   r   r$   r$   r%   r?     s   
zNewType.namereturnc                 C   s   d| j | jf S )Nz<NewType: %s>%s)r   r   r"   r$   r$   r%   r     r]   zNewType.__repr__)rC   rD   rE   r   r   r   r   r?   strr   __classcell__r$   r$   r   r%   r,     s    
r,   c                   @   r   )r=   ztype, object, /c                 C   s   |  S r    )rY   )r#   r   Zobject_value_setr$   r$   r%   r     r   zCastFunction.py__call__Nr   r$   r$   r$   r%   r=     r   r=   c                   @   s   e Zd ZdZdS )r>   zr
    This class has no responsibilities and is just here to make sure that typed
    dicts can be identified.
    N)rC   rD   rE   __doc__r$   r$   r$   r%   r>     rH   r>   c                   @   s<   e Zd ZdZdd Zedd Zdd Zdd	 Zd
d Z	dS )r.   z6Represents the instance version of ``TypedDictClass``.c                 C   s"   |j | _ |j| _|j| _|| _d S r    )r1   r0   r   _definition_class)r#   Zdefinition_classr$   r$   r%   r     s   
zTypedDict.__init__c                 C   s   t | | jjS r    )r   r   r?   r"   r$   r$   r%   r?     s   zTypedDict.namec                    s0   t  trt fdd| jjddD S tS )Nc                 3   s(    | ]}|  D ]}| V  q	qd S r    )getr&   )rr   rj   r?   r   r$   r%   ru     s    z1TypedDict.py__simple_getitem__.<locals>.<genexpr>TZis_instance)r   r   r   r[   r   get_filtersr   r   r$   r   r%   r     s
   
zTypedDict.py__simple_getitem__c                    s6   t jdd  jjddD }t fdd|D S )Nc                 s   s    | ]}|  V  qd S r    )values)rr   fr$   r$   r%   ru     s
    
z+TypedDict.get_key_values.<locals>.<genexpr>Tr   c                    s   h | ]	}t  j|jqS r$   )r   r1   r/   )rr   rB   r"   r$   r%   	<setcomp>  s    z+TypedDict.get_key_values.<locals>.<setcomp>)	itertoolschainfrom_iterabler   r   r   )r#   Zfiltered_valuesr$   r"   r%   get_key_values  s   zTypedDict.get_key_valuesc                 C   s   | j jd\}| \}|S )Ndict)r1   r{   r|   Zexecute_with_values)r#   dresultr$   r$   r%   r     s   
zTypedDict._get_wrapped_valueN)
rC   rD   rE   r   r   r   r?   r   r   r   r$   r$   r$   r%   r.     s    
	
r.   )8r   r   Zjedir   Zjedi.inference.compiledr   r   Zjedi.inference.base_valuer   r   r   r   r	   Zjedi.inference.lazy_valuer
   Zjedi.inference.argumentsr   Zjedi.inference.filtersr   Zjedi.inference.namesr   r   Zjedi.inference.value.klassr   Zjedi.inference.gradual.baser   r   r   Zjedi.inference.gradual.type_varr   Zjedi.inference.gradual.genericsr   r   r   r6   r2   r8   r   rG   rI   r9   ry   r   r7   r4   rS   rP   rQ   rR   r:   r;   r<   r,   r=   r>   r.   r$   r$   r$   r%   <module>   sV    
:?%&Q