o
    ˷eB                  	   @   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 ClassVarc                   @      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/ideatree/venv/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 )
NruntimeTypeVarAnyTYPE_CHECKINGTrueoverloadNewTypecast	TypedDict)string_nameparent_contextinference_state_TYPE_ALIAS_TYPESKeyError	TypeAliascreate_cached	tree_name_PROXY_CLASS_TYPESProxyTypingClassValue_PROXY_TYPESProxyTypingValue_wrapped_namer&   r   AnyClassr   OverloadFunctionNewTypeFunctionCastFunctionTypedDictClass)r#   namer2   actualclsv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)rG   rH   rI   r   name_wrapper_classr$   r$   r$   r%   rK   `       rK   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kr5| jd  S tt	t
td}|| }t|| j| | j | jdgS )	NUnionOptionalNoneTyper   ClassVar)TupleGenericProtocolCallablegenerics_manager)
_tree_namevaluegather_annotation_classesexecute_annotationr   r   r2   _generics_managerrT   rU   rV   rW   r1   )r#   r0   mappedrD   r$   r$   r%   r]   e   s.   


z$ProxyWithGenerics.execute_annotationc                 C   s   t | j S r    )r   	from_setsr^   to_tupler"   r$   r$   r%   r\         z+ProxyWithGenerics.gather_annotation_classesc                 C      t | j| j|S r    )rN   r1   rZ   r#   rY   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 )NrP   rQ   r   c                    s   |  kS r    r$   xnoner$   r%   <lambda>   s    z3ProxyWithGenerics.infer_type_vars.<locals>.<lambda>)get_generics
py__name__r   r2   infer_type_varsfilter)r#   	value_setannotation_genericsannotation_namer$   ri   r%   rn      s   z!ProxyWithGenerics.infer_type_varsN)rG   rH   rI   r]   r\   re   rn   r$   r$   r$   r%   rN   d   s
    !rN   c                   @   s    e Zd ZeZdd Zdd ZdS )r;   c                 C   s   | j j| j| j| jt|dS )NrX   )index_classr6   r2   r1   rZ   r   )r#   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 ))context_of_indexindex_valuerX   N)rs   r6   r2   r1   rZ   r   context).0rw   contextualized_noder#   r$   r%   	<genexpr>   s    	
z1ProxyTypingValue.py__getitem__.<locals>.<genexpr>)r   r#   index_value_setr{   r$   rz   r%   py__getitem__   s   	zProxyTypingValue.py__getitem__N)rG   rH   rI   rN   rs   ru   r   r$   r$   r$   r%   r;      s    r;   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
   r2   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   rZ   r"   r$   r$   r%   rB         z_TypingClassMixin.nameN)rG   rH   rI   r   r   propertyrB   r$   r$   r$   r%   r      s
    r   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 )NrR   r   rW         rT   )rl   rm   rn   r]   len)r#   rp   type_var_dictrq   rr   tuple_annotationr$   r$   r%   rn      s&   

z'TypingClassWithGenerics.infer_type_varsc                 C   rc   r    )r   r1   rZ   rd   r$   r$   r%   re      rf   z6TypingClassWithGenerics._create_instance_with_genericsN)rG   rH   rI   rn   re   r$   r$   r$   r%   r      s    r   c                   @   rJ   )r9   N)rG   rH   rI   r   rs   r$   r$   r$   r%   r9      rM   r9   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 )r5   c                 C   s   |j | _ || _|| _|| _d S r    )r2   r1   _origin_tree_name_actual)r#   r1   origin_tree_namerC   r$   r$   r%   __init__   s   
zTypeAlias.__init__c                 C   r   r    )r   r   r"   r$   r$   r%   rB      r   zTypeAlias.namec                 C      | j jS r    )rB   r0   r"   r$   r$   r%   rm      s   zTypeAlias.py__name__c                 C   s   d| j j| jf S )Nz<%s: %s>)	__class__rG   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   splitjedi.inference.importsr   r2   r   followr   r   nextiter)r#   module_name
class_namer   moduleclassesrD   r$   r$   r%   _get_wrapped_value  s   
zTypeAlias._get_wrapped_valuec                 C   s   t |  gS r    )r   r   r"   r$   r$   r%   r\     s   z#TypeAlias.gather_annotation_classesc                 C   r   r    r$   r"   r$   r$   r%   get_signatures  r   zTypeAlias.get_signaturesN)rG   rH   rI   r   r   rB   rm   r   r   r\   r   r$   r$   r$   r%   r5      s    
r5   c                   @      e Zd Zdd ZdS )rW   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)r^   
IndexErrorr   warningr   !jedi.inference.gradual.annotationr   )r#   	argumentsparam_valuesresult_valuesr   r$   r$   r%   
py__call__  s   

zCallable.py__call__NrG   rH   rI   r   r$   r$   r$   r%   rW         rW   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 )rT   c                 C   
   | j  S r    )r^   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   r^   get_index_and_execute
isinstanceintr   dbgr   r#   indexr$   r$   r%   py__simple_getitem__0  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
   r^   r   ra   r]   )r#   r{   rE   r$   r$   r%   
py__iter__:  s   zTuple.py__iter__c                 C   s(   |   r
| jdS t| j  S r   )r   r^   r   r   r`   ra   r]   r}   r$   r$   r%   r   A  s   zTuple.py__getitem__c                 C   s   | j jd \}|S Ntuple)r2   r   r   r]   )r#   tuple_r$   r$   r%   r   I  s   
zTuple._get_wrapped_valuec                 C   r   r    )_wrapped_valuerB   r"   r$   r$   r%   rB   N     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   )rm   lowerrg   r$   r$   r%   rk   W  s    z'Tuple.infer_type_vars.<locals>.<lambda>)r   r   r   ro   r   _class_valuerl   rn   merge_types_of_iterateget_annotated_class_objectAttributeError)r#   rp   r   r   r   elementmethodpy_classr$   r$   r%   rn   R  s*   


zTuple.infer_type_varsr    )rG   rH   rI   r   r   r   r   r   r   rB   rn   r$   r$   r$   r%   rT   *  s    


rT   c                   @      e Zd ZdS )rU   NrG   rH   rI   r$   r$   r$   r%   rU   {      rU   c                   @   r   )rV   Nr   r$   r$   r$   r%   rV     r   rV   c                   @   r   )r=   c                 C   s   t d tS )NzUsed Any - returned no results)r   r   r   r"   r$   r$   r%   r]     s   
zAnyClass.execute_annotationN)rG   rH   rI   r]   r$   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#   func_value_setr$   r$   r%   r     s   zOverloadFunction.py__call__NrG   rH   rI   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-   r2   rx   noder&   )ry   r{   
second_argr#   r$   r%   r|     s    
z-NewTypeFunction.py__call__.<locals>.<genexpr>)unpackr   r   r   get_calling_nodes)r#   r   ordered_args_r$   r   r%   r     s   
zNewTypeFunction.py__call__Nr   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#   r2   r1   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   r]   )r#   r   r$   r$   r%   r     s   
zNewType.py__call__c                 C   s   ddl m} || dS )Nr   )CompiledValueNamer-   )jedi.inference.compiled.valuer   )r#   r   r$   r$   r%   rB     s   
zNewType.namereturnc                 C   s   d| j | jf S )Nz<NewType: %s>%s)r   r   r"   r$   r$   r%   r     rb   zNewType.__repr__)rG   rH   rI   r   r   r   r   rB   strr   __classcell__r$   r$   r   r%   r-     s    
r-   c                   @   r   )r@   ztype, object, /c                 C   s   |  S r    )r]   )r#   r   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 )rA   zr
    This class has no responsibilities and is just here to make sure that typed
    dicts can be identified.
    N)rG   rH   rI   __doc__r$   r$   r$   r%   rA     rM   rA   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    )r2   r1   r   _definition_class)r#   definition_classr$   r$   r%   r     s   
zTypedDict.__init__c                 C   s   t | | jjS r    )r   r   rB   r"   r$   r$   r%   rB     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&   )ry   ro   rB   r   r$   r%   r|     s    z1TypedDict.py__simple_getitem__.<locals>.<genexpr>T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)ry   fr$   r$   r%   r|     s
    
z+TypedDict.get_key_values.<locals>.<genexpr>Tr   c                    s   h | ]	}t  j|jqS r$   )r   r2   r0   )ry   rE   r"   r$   r%   	<setcomp>  s    z+TypedDict.get_key_values.<locals>.<setcomp>)	itertoolschainfrom_iterabler   r   r   )r#   filtered_valuesr$   r"   r%   get_key_values  s   zTypedDict.get_key_valuesc                 C   s   | j jd\}| \}|S )Ndict)r2   r   r   execute_with_values)r#   dresultr$   r$   r%   r     s   
zTypedDict._get_wrapped_valueN)
rG   rH   rI   r   r   r   rB   r   r   r   r$   r$   r$   r%   r/     s    
	
r/   )8r   r   jedir   jedi.inference.compiledr   r   jedi.inference.base_valuer   r   r   r   r	   jedi.inference.lazy_valuer
   jedi.inference.argumentsr   jedi.inference.filtersr   jedi.inference.namesr   r   jedi.inference.value.klassr   jedi.inference.gradual.baser   r   r   jedi.inference.gradual.type_varr   jedi.inference.gradual.genericsr   r   r   r8   r3   r:   r   rK   rN   r;   r   r   r9   r5   rW   rT   rU   rV   r=   r>   r?   r-   r@   rA   r/   r$   r$   r$   r%   <module>   sV    
:?%&Q