o
    Zh<                     @   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/html/lang_env/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   Z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   genericsZ	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   )	enumerater/   r%   r   r.   
IndexErrorname)r   r3   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   r5   r7   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   r@   r   r8   F   s    r8   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   )NotImplementedErrorrD   r   r   r   _create_instance_with_genericsV      z5DefineGenericBaseClass._create_instance_with_genericsc                 C   r$   r   )rC   Z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_varrK   rI   r   r   rB   define_genericsr   appendrG   r   tuple)	r   type_var_dictrK   changedZnew_genericsZgeneric_setr7   Zgenericresultr   r   r   rM   ]   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).0Zcls1Zcls2Z
class_set2r   r   	<genexpr>   s    	zADefineGenericBaseClass.is_same_class.<locals>.<genexpr>.<genexpr>N)anyrS   )rU   Z
class_set1r   rV   r   rW      s    
z7DefineGenericBaseClass.is_same_class.<locals>.<genexpr>)r   rB   	tree_noderI   lenallzip)r   otherZgiven_params1Zgiven_params2r   r   r   rT   w   s   
z$DefineGenericBaseClass.is_same_classc                 C   r6   r   r   r!   r   r   r   get_signatures   rH   z%DefineGenericBaseClass.get_signaturesc                 C   s   d| j j| jt|  f S )Nz
<%s: %s%s>)r'   r(   _wrapped_valuelistrI   r!   r   r   r   r)      s
   
zDefineGenericBaseClass.__repr__N)r(   r*   r+   r   rG   r   rI   rM   rT   r^   r)   r   r   r   r   rB   R   s    
rB   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   )r9   r   _class_value)r   class_valuerE   r@   r   r   r      s   
zGenericClass.__init__c                 C      | j S r   rb   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)r`   dictsetrO   zType[%s])r%   rl   r5   rC   get_type_hint)r   add_class_infonsr   r   r   rn      s   zGenericClass.get_type_hintc                 C   s   t |  |  S r   )r-   rI   Zlist_type_varsr!   r   r   r   r<         z GenericClass.get_type_var_filterc                    s   t  |\}tt|gS r   )r9   
py__call__r   _GenericInstanceWrapper)r   	argumentsinstancer@   r   r   rs      s   zGenericClass.py__call__c                 C   s   t | S r   )r8   r!   r   r   r   _as_context   s   zGenericClass._as_contextc                 c   s&    | j  D ]
}t| || jV  qd S r   )r_   py__bases___LazyGenericBaseClassrC   r   baser   r   r   rx      s   zGenericClass.py__bases__c                 C   s   t | j|S r   )ra   rb   rD   r   r   r   rG         z+GenericClass._create_instance_with_genericsc                    s   t  |rdS | j|S )NT)r9   is_sub_class_ofrb   )r   rc   r@   r   r   r}      s   zGenericClass.is_sub_class_ofc                 C   s   | j |S r   )rb   with_generics)r   Z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)Z!jedi.inference.gradual.annotationr   r   r%   rI   infer_type_varsZmerge_types_of_iterateZis_instanceZis_compiledget_annotated_class_objectapi_type	py__mro__)
r   r   r   r   Zannotation_namerP   Zannotation_genericsZpy_classZparent_class
class_namer   r   r   r      s6   

zGenericClass.infer_type_varsT)r(   r*   r+   r,   r   rf   rn   r<   rs   rw   r   rx   rG   r}   r~   r   rA   r   r   r@   r   ra      s    

ra   c                   @   s0   e Zd Zdd Zedd Zdd Zdd Zd	S )
ry   c                 C   s   || _ || _|| _d S r   )rb   _lazy_base_classrC   )r   rc   Zlazy_base_classrE   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   ra   Zcreate_cachedinference_stater_   r   rO   _remap_type_varsZis_class_mixinrC   rz   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   rJ   c                 s   s    | ]}|  V  qd S r   )r#   )rU   r3   r   r   r   rW   !  s    
z9_LazyGenericBaseClass._remap_type_vars.<locals>.<genexpr>)rL   rK   rb   r<   rI   r   r   r5   r%   r   Z	from_sets)r   r{   rK   filterZ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)   +  rr   z_LazyGenericBaseClass.__repr__N)r(   r*   r+   r   r   r#   r   r)   r   r   r   r   ry      s    
ry   c                   @   s   e Zd Zdd ZdddZdS )rt   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)r_   rc   r   r%   rI   execute_annotationr2   r   r	   r   py__stop_iteration_returns)r   clsr0   r   r   r   r   0  s   
z2_GenericInstanceWrapper.py__stop_iteration_returnsTc                 C   s   | j jjddS )NF)ro   )r_   rc   rn   )r   ro   r   r   r   rn   <  s   z%_GenericInstanceWrapper.get_type_hintNr   )r(   r*   r+   r   rn   r   r   r   r   rt   /  s    rt   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   )r9   r   r   
_tree_namer   r   	tree_namer@   r   r   r   L  s
   
z_PseudoTreeNameClass.__init__c                 C   rd   r   )r   r!   r   r   r   rY   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  rH   z>_PseudoTreeNameClass.get_filters.<locals>.EmptyFilter.__init__c                 [   r6   r   r   )r   r3   r>   r   r   r   r5   ]  rH   z9_PseudoTreeNameClass.get_filters.<locals>.EmptyFilter.getc                 [   r6   r   r   )r   r>   r   r   r   r7   `  rH   z<_PseudoTreeNameClass.get_filters.<locals>.EmptyFilter.valuesN)r(   r*   r+   r   r5   r7   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   r3   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   propertyrY   r:   r   r3   r   r)   rA   r   r   r@   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   r3   {  r   zBaseTypingValue.namec                 C      t | j| jS r   r   r   r   r!   r   r   r   rf        z"BaseTypingValue._get_wrapped_valuec                 C   r$   r   )r_   r^   r!   r   r   r   r^     r&   zBaseTypingValue.get_signaturesc                 C   r   r   r   r!   r   r   r   r)     r   zBaseTypingValue.__repr__N)	r(   r*   r+   r   r   r3   rf   r^   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   )r9   r   r   r   r   )r   r   r   rE   r@   r   r   r     s   
z$BaseTypingClassWithGenerics.__init__c                 C   r   r   r   r!   r   r   r   rf     r   z.BaseTypingClassWithGenerics._get_wrapped_valuec                 C   s   d| j j| jj| jf S )Nz%s(%s%s))r'   r(   r   r    rC   r!   r   r   r   r)     s   z$BaseTypingClassWithGenerics.__repr__)r(   r*   r+   r   rf   r)   rA   r   r   r@   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   rb   r   rC   )r   r   rc   r   rE   r   r   r   r     s
   
zBaseTypingInstance.__init__c                 C   rd   r   re   r!   r   r   r   r     rg   zBaseTypingInstance.py__class__c                 C   rd   r   re   r!   r   r   r   r     rg   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   r3     r   zBaseTypingInstance.namec                 C   s   t | jd \}|S )Nobject)r	   r   r   )r   Zobject_r   r   r   rf     s   z%BaseTypingInstance._get_wrapped_valuec                 C   r   r   )r'   r(   rC   r!   r   r   r   r)     rr   zBaseTypingInstance.__repr__N)r(   r*   r+   r   r   r   r   r   r3   rf   r)   r   r   r   r   r     s    
r   N)"Zjedi.inference.cacher   Zjedi.inference.base_valuer   r   r   r   r   r   Zjedi.inference.compiledr	   Zjedi.inference.value.klassr   r   Zjedi.inference.utilsr   Zjedi.inference.namesr   r   Zjedi.inference.contextr   Zjedi.inference.gradual.genericsr   r   r-   r8   rB   ra   ry   rt   r   r   r   r   r   r   r   r   <module>   s(     N\35