o
    ˷e<                     @   s6  d dl mZ d dl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 d dlmZ d dlmZmZ d dlmZ d d	lmZ G d
d deZG dd dZG dd deZG dd deZG dd deeZG dd 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!d S )!    )inference_state_method_cache)ValueSet	NO_VALUESValueiterator_to_value_setLazyValueWrapperValueWrapper)builtin_from_nameClassFilter)
ClassMixin)to_list)AbstractNameDefinition	ValueName)ClassContext)TupleGenericManagerc                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )_BoundTypeVarNamez>
    This type var was bound to a certain type, e.g. int.
    c                 C   s   || _ |j| _|| _d S N)	_type_varparent_context
_value_set)selftype_var	value_set r   R/var/www/ideatree/venv/lib/python3.10/site-packages/jedi/inference/gradual/base.py__init__   s   
z_BoundTypeVarName.__init__c                    s    fdd}t | S )Nc                  3   s>     j D ]} ddlm} t| |r jjE d H  q| V  qd S )Nr   )AnyClass)r   jedi.inference.gradual.typingr   
isinstancer   constraints)valuer   r   r   r   iter_   s   

z&_BoundTypeVarName.infer.<locals>.iter_)r   )r   r#   r   r"   r   infer   s   
z_BoundTypeVarName.inferc                 C   
   | j  S r   )r   
py__name__r"   r   r   r   r&   !      
z_BoundTypeVarName.py__name__c                 C   s   d| j j|  | jf S )Nz<%s %s -> %s>)	__class____name__r&   r   r"   r   r   r   __repr__$   s   z_BoundTypeVarName.__repr__N)r)   
__module____qualname____doc__r   r$   r&   r*   r   r   r   r   r      s    r   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	_TypeVarFilterz
    A filter for all given variables in a class.

        A = TypeVar('A')
        B = TypeVar('B')
        class Foo(Mapping[A, B]):
            ...

    In this example we would have two type vars given: A and B
    c                 C   s   || _ || _d S r   )	_generics
_type_vars)r   generics	type_varsr   r   r   r   3   s   
z_TypeVarFilter.__init__c              	   C   s\   t | jD ]&\}}| |kr+zt|| j| gW   S  ty*   |jg Y   S w qg S r   )	enumerater0   r&   r   r/   
IndexErrorname)r   r5   ir   r   r   r   get7   s   z_TypeVarFilter.getc                 C      g S r   r   r"   r   r   r   values@   s   z_TypeVarFilter.valuesN)r)   r+   r,   r-   r   r7   r9   r   r   r   r   r.   (   s
    
	r.   c                       s   e Zd Z fddZ  ZS )_AnnotatedClassContextc                 /   s.    t  j|i |}|E d H  | j V  d S r   )superget_filters_valueget_type_var_filter)r   argskwargsfiltersr(   r   r   r<   G   s   
z"_AnnotatedClassContext.get_filters)r)   r+   r,   r<   __classcell__r   r   rB   r   r:   F   s    r:   c                   @   sJ   e Zd Zdd Zdd Ze dd Zdd Zd	d
 Zdd Z	dd Z
dS )DefineGenericBaseClassc                 C   s
   || _ d S r   )_generics_managerr   generics_managerr   r   r   r   S   r'   zDefineGenericBaseClass.__init__c                 C   s   t r   )NotImplementedErrorrF   r   r   r   _create_instance_with_genericsV      z5DefineGenericBaseClass._create_instance_with_genericsc                 C   r%   r   )rE   to_tupler"   r   r   r   get_genericsY   s   
z#DefineGenericBaseClass.get_genericsc           	      C   s   ddl m} d}g }|  D ]/}t}|D ]#}t|t|fr0||}||O }|t|hkr/d}q|t|gO }q|| q|sEt| gS t| 	t
t|gS )Nr   TypeVarFT)jedi.inference.gradual.type_varrN   rL   r   r   rD   define_genericsr   appendrI   r   tuple)	r   type_var_dictrN   changednew_genericsgeneric_setr9   genericresultr   r   r   rP   ]   s&   


z&DefineGenericBaseClass.define_genericsc                 C   sZ   t |tsdS | j|jkrdS |  }| }t|t|kr!dS tdd t||D S )NFc                 3   s.    | ]\} t  fd d| D V  qdS )c                 3   s(    | ]}   D ]}||V  qqd S r   )gather_annotation_classesis_same_class).0cls1cls2
class_set2r   r   	<genexpr>   s    	zADefineGenericBaseClass.is_same_class.<locals>.<genexpr>.<genexpr>N)anyrY   )r[   
class_set1r   r^   r   r`      s    
z7DefineGenericBaseClass.is_same_class.<locals>.<genexpr>)r   rD   	tree_noderL   lenallzip)r   othergiven_params1given_params2r   r   r   rZ   w   s   
z$DefineGenericBaseClass.is_same_classc                 C   r8   r   r   r"   r   r   r   get_signatures   rJ   z%DefineGenericBaseClass.get_signaturesc                 C   s   d| j j| jt|  f S )Nz
<%s: %s%s>)r(   r)   _wrapped_valuelistrL   r"   r   r   r   r*      s
   
zDefineGenericBaseClass.__repr__N)r)   r+   r,   r   rI   r   rL   rP   rZ   rj   r*   r   r   r   r   rD   R   s    
rD   c                       s~   e Zd ZdZ fddZdd ZdddZd	d
 Z fddZdd Z	e
dd Zdd Z fddZdd Zdd Z  ZS )GenericClassz
    A class that is defined with generics, might be something simple like:

        class Foo(Generic[T]): ...
        my_foo_int_cls = Foo[int]
    c                    s   t  | || _d S r   )r;   r   _class_value)r   class_valuerG   rB   r   r   r      s   
zGenericClass.__init__c                 C      | j S r   rn   r"   r   r   r   _get_wrapped_value      zGenericClass._get_wrapped_valueTc                 C   s>   |   }tddddd||}|| j  }|rd| S |S )NListDictSetTuple)rl   dictsetrR   zType[%s])r&   rx   r7   rE   get_type_hint)r   add_class_infonsr   r   r   rz      s   zGenericClass.get_type_hintc                 C   s   t |  |  S r   )r.   rL   list_type_varsr"   r   r   r   r>         z GenericClass.get_type_var_filterc                    s   t  |\}tt|gS r   )r;   
py__call__r   _GenericInstanceWrapper)r   	argumentsinstancerB   r   r   r      s   zGenericClass.py__call__c                 C   s   t | S r   )r:   r"   r   r   r   _as_context   s   zGenericClass._as_contextc                 c   s&    | j  D ]
}t| || jV  qd S r   )rk   py__bases___LazyGenericBaseClassrE   r   baser   r   r   r      s   zGenericClass.py__bases__c                 C   s   t | j|S r   )rm   rn   rF   r   r   r   rI         z+GenericClass._create_instance_with_genericsc                    s   t  |rdS | j|S )NT)r;   is_sub_class_ofrn   )r   ro   rB   r   r   r      s   zGenericClass.is_sub_class_ofc                 C   s   | j |S r   )rn   with_generics)r   generics_tupler   r   r   r      r   zGenericClass.with_genericsc           
      C   s   ddl m}m} |  }i }|dkr#|  }|r!|d | S |S |D ]/}| r4| s4|	 }nq%|j
dkr;q%| D ]}| }	||	krS|||| |  nq?q%|S )Nr   )merge_pairwise_genericsmerge_type_var_dictsIterableclass)!jedi.inference.gradual.annotationr   r   r&   rL   infer_type_varsmerge_types_of_iterateis_instanceis_compiledget_annotated_class_objectapi_type	py__mro__)
r   r   r   r   annotation_namerS   annotation_genericspy_classparent_class
class_namer   r   r   r      s6   

zGenericClass.infer_type_varsT)r)   r+   r,   r-   r   rr   rz   r>   r   r   r   r   rI   r   r   r   rC   r   r   rB   r   rm      s    

rm   c                   @   s0   e Zd Zdd Zedd Zdd Zdd Zd	S )
r   c                 C   s   || _ || _|| _d S r   )rn   _lazy_base_classrE   )r   ro   lazy_base_classrG   r   r   r   r      s   
z_LazyGenericBaseClass.__init__c              
   c   sh    | j  D ]+}t|trt|j|jtt| 	|V  q|
 r.t|j|| jV  q|V  qd S r   )r   r$   r   rm   create_cachedinference_staterk   r   rR   _remap_type_varsis_class_mixinrE   r   r   r   r   r$     s    
z_LazyGenericBaseClass.inferc                 c   s~    ddl m} | j }| D ],}t}|D ]"}t||r1|| }|t	
dd |D O }q|t	|gO }q|V  qd S )Nr   rM   c                 s   s    | ]}|  V  qd S r   )r$   )r[   r5   r   r   r   r`   !  s    
z9_LazyGenericBaseClass._remap_type_vars.<locals>.<genexpr>)rO   rN   rn   r>   rL   r   r   r7   r&   r   	from_sets)r   r   rN   filtertype_var_setnewr   namesr   r   r   r     s   

z&_LazyGenericBaseClass._remap_type_varsc                 C      d| j j| jf S Nz<%s: %s>)r(   r)   r   r"   r   r   r   r*   +  r   z_LazyGenericBaseClass.__repr__N)r)   r+   r,   r   r   r$   r   r*   r   r   r   r   r      s    
r   c                   @   s   e Zd Zdd ZdddZdS )r   c              	   C   sx   | j j D ]0}| dkr%| }z	|d  W   S  ty$   Y qw | dkr6tt| j	dg  S q| j 
 S )N	Generator   IteratorNone)rk   ro   r   r&   rL   execute_annotationr4   r   r	   r   py__stop_iteration_returns)r   clsr1   r   r   r   r   0  s   
z2_GenericInstanceWrapper.py__stop_iteration_returnsTc                 C   s   | j jjddS )NF)r{   )rk   ro   rz   )r   r{   r   r   r   rz   <  s   z%_GenericInstanceWrapper.get_type_hintNr   )r)   r+   r,   r   rz   r   r   r   r   r   /  s    r   c                       s\   e Zd ZdZdZ fddZedd Zdd Zd	d
 Z	edd Z
dd Zdd Z  ZS )_PseudoTreeNameClassa2  
    In typeshed, some classes are defined like this:

        Tuple: _SpecialForm = ...

    Now this is not a real class, therefore we have to do some workarounds like
    this class. Essentially this class makes it possible to goto that `Tuple`
    name, without affecting anything else negatively.
    r   c                    s   t  |j| || _d S r   )r;   r   r   
_tree_namer   r   	tree_namerB   r   r   r   L  s
   
z_PseudoTreeNameClass.__init__c                 C   rp   r   )r   r"   r   r   r   rc   S  s   z_PseudoTreeNameClass.tree_nodec                 o   s    G dd dt }| V  d S )Nc                   @   s$   e Zd Zdd Zdd Zdd ZdS )z5_PseudoTreeNameClass.get_filters.<locals>.EmptyFilterc                 S   s   d S r   r   r"   r   r   r   r   Z  rJ   z>_PseudoTreeNameClass.get_filters.<locals>.EmptyFilter.__init__c                 [   r8   r   r   )r   r5   r@   r   r   r   r7   ]  rJ   z9_PseudoTreeNameClass.get_filters.<locals>.EmptyFilter.getc                 [   r8   r   r   )r   r@   r   r   r   r9   `  rJ   z<_PseudoTreeNameClass.get_filters.<locals>.EmptyFilter.valuesN)r)   r+   r,   r   r7   r9   r   r   r   r   EmptyFilterY  s    r   r
   )r   r?   r@   r   r   r   r   r<   W  s   
z _PseudoTreeNameClass.get_filtersc                 C   s   t | jdS )Ntype)r	   r   r"   r   r   r   py__class__e  s   z _PseudoTreeNameClass.py__class__c                 C      t | | jS r   r   r   r"   r   r   r   r5   j     z_PseudoTreeNameClass.namec                 C   s
   | j jfS r   )r   r!   r"   r   r   r   get_qualified_namesn  r'   z(_PseudoTreeNameClass.get_qualified_namesc                 C      d| j j| jjf S Nz%s(%s)r(   r)   r   r!   r"   r   r   r   r*   q     z_PseudoTreeNameClass.__repr__)r)   r+   r,   r-   r   r   propertyrc   r<   r   r5   r   r*   rC   r   r   rB   r   r   @  s    	

r   c                   @   s8   e Zd Zdd Zedd Zdd Zdd Zd	d
 ZdS )BaseTypingValuec                 C   s   |j | _ || _|| _d S r   )r   r   r   r   r   r   r   r   v  s   
zBaseTypingValue.__init__c                 C   r   r   r   r"   r   r   r   r5   {  r   zBaseTypingValue.namec                 C      t | j| jS r   r   r   r   r"   r   r   r   rr        z"BaseTypingValue._get_wrapped_valuec                 C   r%   r   )rk   rj   r"   r   r   r   rj     r'   zBaseTypingValue.get_signaturesc                 C   r   r   r   r"   r   r   r   r*     r   zBaseTypingValue.__repr__N)	r)   r+   r,   r   r   r5   rr   rj   r*   r   r   r   r   r   u  s    
r   c                       s,   e Zd Z fddZdd Zdd Z  ZS )BaseTypingClassWithGenericsc                    s$   t  | |j| _|| _|| _d S r   )r;   r   r   r   r   )r   r   r   rG   rB   r   r   r     s   
z$BaseTypingClassWithGenerics.__init__c                 C   r   r   r   r"   r   r   r   rr     r   z.BaseTypingClassWithGenerics._get_wrapped_valuec                 C   s   d| j j| jj| jf S )Nz%s(%s%s))r(   r)   r   r!   rE   r"   r   r   r   r*     s   z$BaseTypingClassWithGenerics.__repr__)r)   r+   r,   r   rr   r*   rC   r   r   rB   r   r     s    r   c                   @   sH   e Zd Zdd Zdd Zdd Zdd Zed	d
 Zdd Z	dd Z
dS )BaseTypingInstancec                 C   s$   |j | _ || _|| _|| _|| _d S r   )r   r   rn   r   rE   )r   r   ro   r   rG   r   r   r   r     s
   
zBaseTypingInstance.__init__c                 C   rp   r   rq   r"   r   r   r   r     rs   zBaseTypingInstance.py__class__c                 C   rp   r   rq   r"   r   r   r   r     rs   z-BaseTypingInstance.get_annotated_class_objectc                 C   s
   |   fS r   )r&   r"   r   r   r   r     r'   z&BaseTypingInstance.get_qualified_namesc                 C   r   r   r   r"   r   r   r   r5     r   zBaseTypingInstance.namec                 C   s   t | jd \}|S )Nobject)r	   r   r   )r   object_r   r   r   rr     s   z%BaseTypingInstance._get_wrapped_valuec                 C   r   r   )r(   r)   rE   r"   r   r   r   r*     r   zBaseTypingInstance.__repr__N)r)   r+   r,   r   r   r   r   r   r5   rr   r*   r   r   r   r   r     s    
r   N)"jedi.inference.cacher   jedi.inference.base_valuer   r   r   r   r   r   jedi.inference.compiledr	   jedi.inference.value.klassr   r   jedi.inference.utilsr   jedi.inference.namesr   r   jedi.inference.contextr   jedi.inference.gradual.genericsr   r   r.   r:   rD   rm   r   r   r   r   r   r   r   r   r   r   <module>   s(     N\35