a
    bB                  	   @   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                   @   s   e Zd Zdd Zdd ZdS )TypingModuleNamec                 C   s   t |  S N)r   _remapself r#   <lib/python3.9/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0 t|| j| j|V  d S |tv rht	|| j| jV  n |t
v rt|| j| jV  n |dkrd S |dkr| j \}t||V  n|dkrt|| j| jV  n|dkrt|dV  n|dkrt|| j| jV  n||dkr2| j \}t||V  nV|dkrX| j \}t||V  n0|d	krxt|| j| jV  n| 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"   namer0   actualclsvZcast_fnr#   r#   r$   r    *   sX    










zTypingModuleName._remapN)__name__
__module____qualname__r%   r    r#   r#   r#   r$   r   &   s   r   c                   @   s   e Zd ZeZdS )TypingModuleFilterWrapperN)rB   rC   rD   r   Zname_wrapper_classr#   r#   r#   r$   rE   `   s   rE   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rB|   tt| jdgB S |dkrT| jd S |dkrj| 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   r0   _generics_managerrL   rM   rN   rO   r/   )r"   r.   Zmappedr@   r#   r#   r$   rU   e   s.    

z$ProxyWithGenerics.execute_annotationc                 C   s   t | j S r   )r   	from_setsrV   to_tupler!   r#   r#   r$   rT      s    z+ProxyWithGenerics.gather_annotation_classesc                 C   s   t | j| j|S r   )rF   r/   rR   r"   rQ   r#   r#   r$   _create_instance_with_generics   s
    z0ProxyWithGenerics._create_instance_with_genericsc                    sL   |   }|si S |  }|dkrHt| jd |d | fddS i S )NrH   rI   r   c                    s   |  kS r   r#   xZnoner#   r$   <lambda>       z3ProxyWithGenerics.infer_type_vars.<locals>.<lambda>)get_generics
py__name__r   r0   infer_type_varsfilter)r"   	value_setannotation_genericsannotation_namer#   r]   r$   rb      s    z!ProxyWithGenerics.infer_type_varsN)rB   rC   rD   rU   rT   rZ   rb   r#   r#   r#   r$   rF   d   s   !rF   c                   @   s    e Zd ZeZdd Zdd ZdS )r8   c                 C   s   | j j| j| j| jt|dS )NrP   )index_classr4   r0   r/   rR   r   )r"   Zgenerics_tupler#   r#   r$   with_generics   s    zProxyTypingValue.with_genericsc                    s   t  fdd|D S )Nc              	   3   s2   | ]*}j jjjjt j|d dV  qdS ))Zcontext_of_indexindex_valuerP   N)rg   r4   r0   r/   rR   r   context).0ri   contextualized_noder"   r#   r$   	<genexpr>   s   	z1ProxyTypingValue.py__getitem__.<locals>.<genexpr>)r   r"   Zindex_value_setrm   r#   rl   r$   py__getitem__   s    	zProxyTypingValue.py__getitem__N)rB   rC   rD   rF   rg   rh   rp   r#   r#   r#   r$   r8      s   r8   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
   r0   builtins_modulepy__getattribute__r!   r#   r#   r$   py__bases__   s    z_TypingClassMixin.py__bases__c                 C   s   g S r   r#   r!   r#   r#   r$   get_metaclasses   s    z!_TypingClassMixin.get_metaclassesc                 C   s   t | | jS r   )r   rR   r!   r#   r#   r$   r>      s    z_TypingClassMixin.nameN)rB   rC   rD   ru   rv   propertyr>   r#   r#   r#   r$   rq      s   rq   c                   @   s   e Zd Zdd Zdd ZdS )TypingClassWithGenericsc                 C   s~   i }|   }|s|S |  }|dkr6|d | S |dkr^t|dkrz|d | S n|dkrz|  \}||S |S )NrJ   r   rO         rL   )r`   ra   rb   rU   len)r"   rd   type_var_dictre   rf   Ztuple_annotationr#   r#   r$   rb      s$    

z'TypingClassWithGenerics.infer_type_varsc                 C   s   t | j| j|S r   )rx   r/   rR   rY   r#   r#   r$   rZ      s
    z6TypingClassWithGenerics._create_instance_with_genericsN)rB   rC   rD   rb   rZ   r#   r#   r#   r$   rx      s   rx   c                   @   s   e Zd ZeZdS )r6   N)rB   rC   rD   rx   rg   r#   r#   r#   r$   r6      s   r6   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 )r3   c                 C   s   |j | _ || _|| _|| _d S r   )r0   r/   _origin_tree_name_actual)r"   r/   Zorigin_tree_namer?   r#   r#   r$   __init__   s    zTypeAlias.__init__c                 C   s   t | | jS r   )r   r}   r!   r#   r#   r$   r>      s    zTypeAlias.namec                 C   s   | j jS r   )r>   r.   r!   r#   r#   r$   ra      s    zTypeAlias.py__name__c                 C   s   d| j j| jf S )Nz<%s: %s>)	__class__rB   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sTJ |t	t
|}|S )N.r   )Importerrz   )r~   splitZjedi.inference.importsr   r0   rs   Zfollowrt   r{   nextiter)r"   Zmodule_name
class_namer   moduleclassesr@   r#   r#   r$   _get_wrapped_value  s    

zTypeAlias._get_wrapped_valuec                 C   s   t |  gS r   )r   r   r!   r#   r#   r$   rT     s    z#TypeAlias.gather_annotation_classesc                 C   s   g S r   r#   r!   r#   r#   r$   get_signatures  s    zTypeAlias.get_signaturesN)rB   rC   rD   r   rw   r>   ra   r   r   rT   r   r#   r#   r#   r$   r3      s   
r3   c                   @   s   e Zd Zdd ZdS )rO   c                 C   sV   z| j d }| j d }W n  ty8   td t Y S 0 ddlm} ||||S dS )zG
            def x() -> Callable[[Callable[..., _T]], _T]: ...
        r   rz   z+Callable[...] defined without two arguments)infer_return_for_callableN)rV   
IndexErrorr   warningr   !jedi.inference.gradual.annotationr   )r"   	argumentsZparam_valuesZresult_valuesr   r#   r#   r$   
py__call__  s    


zCallable.py__call__NrB   rC   rD   r   r#   r#   r#   r$   rO     s   rO   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 )rL   c                 C   s
   | j  S r   )rV   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 d S )Nr   z The getitem type on Tuple was %s)r   rV   get_index_and_execute
isinstanceintr   Zdbgr   r"   indexr#   r#   r$   py__simple_getitem__0  s    
zTuple.py__simple_getitem__Nc                 c   s>   |   rt| jdV  n| j D ]}t| V  q&d S Nr   )r   r
   rV   r   rX   rU   )r"   rm   rA   r#   r#   r$   
py__iter__:  s    zTuple.py__iter__c                 C   s(   |   r| jdS t| j  S r   )r   rV   r   r   rW   rX   rU   ro   r#   r#   r$   rp   A  s
    zTuple.py__getitem__c                 C   s   | j jd \}|S Ntuple)r0   rs   rt   rU   )r"   Ztuple_r#   r#   r$   r   I  s    
zTuple._get_wrapped_valuec                 C   s   | j jS r   )Z_wrapped_valuer>   r!   r#   r#   r$   r>   N  s    z
Tuple.namec              	   C   s   ddl m}m} |dd }|  r>| j d | S i }|D ]>}z
|j	}W n t
yj   Y qFY n0 | }|||| j| qF|S d S )Nr   )merge_pairwise_genericsmerge_type_var_dictsc                 S   s   |    dkS r   )ra   lowerr[   r#   r#   r$   r^   W  r_   z'Tuple.infer_type_vars.<locals>.<lambda>)r   r   r   rc   r   Z_class_valuer`   rb   Zmerge_types_of_iterateZget_annotated_class_objectAttributeError)r"   rd   r   r   r|   elementmethodZpy_classr#   r#   r$   rb   R  s(    



zTuple.infer_type_vars)N)rB   rC   rD   r   r   r   rp   r   rw   r>   rb   r#   r#   r#   r$   rL   *  s   


rL   c                   @   s   e Zd ZdS )rM   NrB   rC   rD   r#   r#   r#   r$   rM   {  s   rM   c                   @   s   e Zd ZdS )rN   Nr   r#   r#   r#   r$   rN     s   rN   c                   @   s   e Zd Zdd ZdS )r9   c                 C   s   t d tS )NzUsed Any - returned no results)r   r   r   r!   r#   r#   r$   rU     s    
zAnyClass.execute_annotationN)rB   rC   rD   rU   r#   r#   r#   r$   r9     s   r9   c                   @   s   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rB   rC   rD   r   r   r#   r#   r#   r$   r:     s   r:   c                   @   s   e Zd Zdd ZdS )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+   r0   rj   Znoder%   )rk   rm   Z
second_argr"   r#   r$   rn     s   z-NewTypeFunction.py__call__.<locals>.<genexpr>)Zunpackr   r   r   Zget_calling_nodes)r"   r   Zordered_args_r#   r   r$   r     s    
zNewTypeFunction.py__call__Nr   r#   r#   r#   r$   r;     s   r;   c                       sF   e Zd Z fddZdd Zdd Zedd Zed	d
dZ	  Z
S )r+   c                    s   t  || || _|| _d S r   )superr   _type_value_set	tree_node)r"   r0   r/   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   s
   | j  S r   )r   rU   )r"   r   r#   r#   r$   r     s    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     s    zNewType.__repr__)rB   rC   rD   r   r   r   rw   r>   strr   __classcell__r#   r#   r   r$   r+     s   
r+   c                   @   s   e Zd Zeddd ZdS )r<   ztype, object, /c                 C   s   |  S r   )rU   )r"   r   Zobject_value_setr#   r#   r$   r     s    zCastFunction.py__call__Nr   r#   r#   r#   r$   r<     s   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)rB   rC   rD   __doc__r#   r#   r#   r$   r=     s   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   )r0   r/   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%   )rk   rc   r>   r   r#   r$   rn     s   z1TypedDict.py__simple_getitem__.<locals>.<genexpr>TZis_instance)r   r   r   rW   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)rk   fr#   r#   r$   rn     s   z+TypedDict.get_key_values.<locals>.<genexpr>Tr   c                    s   h | ]}t  j|jqS r#   )r   r0   r.   )rk   rA   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)r0   rs   rt   Zexecute_with_values)r"   dresultr#   r#   r$   r     s    
zTypedDict._get_wrapped_valueN)
rB   rC   rD   r   r   rw   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   r5   r1   r7   r   rE   rF   r8   rq   rx   r6   r3   rO   rL   rM   rN   r9   r:   r;   r+   r<   r=   r-   r#   r#   r#   r$   <module>   sT   
:?%&Q