a
    lc<                     @   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   W/var/www/html/django/DPS/env/lib/python3.9/site-packages/jedi/inference/gradual/base.py__init__   s    z_BoundTypeVarName.__init__c                    s    fdd}t | S )Nc                  3   s<    j D ]0} ddlm} t| |r0 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   s
   | j  S r   )r   
py__name__r!   r   r   r   r$   !   s    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 ]L\}}| |kr
zt|| j| gW   S  tyT   |jg Y   S 0 q
g S r   )	enumerater-   r$   r   r,   
IndexErrorname)r   r1   ir   r   r   r   get7   s    z_TypeVarFilter.getc                 C   s   g S r   r   r!   r   r   r   values@   s    z_TypeVarFilter.valuesN)r&   r(   r)   r*   r   r3   r4   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   r7   G   s    
z"_AnnotatedClassContext.get_filters)r&   r(   r)   r7   __classcell__r   r   r=   r   r5   F   s   r5   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   s    zDefineGenericBaseClass.__init__c                 C   s   t d S r   )NotImplementedErrorrA   r   r   r   _create_instance_with_genericsV   s    z5DefineGenericBaseClass._create_instance_with_genericsc                 C   s
   | j  S r   )r@   Zto_tupler!   r   r   r   get_genericsY   s    z#DefineGenericBaseClass.get_genericsc           	      C   s   ddl m} d}g }|  D ]^}t}|D ]F}t|t|fr`||}||O }|t|hkrnd}q(|t|gO }q(|| q|st| gS t| 	t
t|gS )Nr   TypeVarFT)jedi.inference.gradual.type_varrG   rE   r   r   r?   define_genericsr   appendrD   r   tuple)	r   type_var_dictrG   changedZnew_genericsZgeneric_setr4   Zgenericresultr   r   r   rI   ]   s$    


z&DefineGenericBaseClass.define_genericsc                 C   sZ   t |tsdS | j|jkrdS |  }| }t|t|krBd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)anyrO   )rQ   Z
class_set1r   rR   r   rS      s   z7DefineGenericBaseClass.is_same_class.<locals>.<genexpr>)r   r?   	tree_noderE   lenallzip)r   otherZgiven_params1Zgiven_params2r   r   r   rP   w   s    
z$DefineGenericBaseClass.is_same_classc                 C   s   g S r   r   r!   r   r   r   get_signatures   s    z%DefineGenericBaseClass.get_signaturesc                 C   s   d| j j| jt|  f S )Nz
<%s: %s%s>)r%   r&   _wrapped_valuelistrE   r!   r   r   r   r'      s
    
zDefineGenericBaseClass.__repr__N)r&   r(   r)   r   rD   r   rE   rI   rP   rZ   r'   r   r   r   r   r?   R   s   
r?   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   )r6   r   _class_value)r   class_valuerB   r=   r   r   r      s    zGenericClass.__init__c                 C   s   | j S r   r^   r!   r   r   r   _get_wrapped_value   s    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setrK   zType[%s])r$   rf   r3   r@   get_type_hint)r   add_class_infonsr   r   r   rh      s    zGenericClass.get_type_hintc                 C   s   t |  |  S r   )r+   rE   Zlist_type_varsr!   r   r   r   r9      s    z GenericClass.get_type_var_filterc                    s   t  |\}tt|gS r   )r6   
py__call__r   _GenericInstanceWrapper)r   	argumentsinstancer=   r   r   rl      s    zGenericClass.py__call__c                 C   s   t | S r   )r5   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___LazyGenericBaseClassr@   r   baser   r   r   rq      s    zGenericClass.py__bases__c                 C   s   t | j|S r   )r]   r^   rA   r   r   r   rD      s    z+GenericClass._create_instance_with_genericsc                    s   t  |rdS | j|S )NT)r6   is_sub_class_ofr^   )r   r_   r=   r   r   ru      s    zGenericClass.is_sub_class_ofc                 C   s   | j |S r   )r^   with_generics)r   Zgenerics_tupler   r   r   rv      s    zGenericClass.with_genericsc           
      C   s   ddl m}m} |  }i }|dkrD|  }|r|d | S nd|D ]^}| rH| sH|	 }nqH|j
dkrtqH| D ](}| }	||	kr||||| |  qHq|qH|S )Nr   )merge_pairwise_genericsmerge_type_var_dictsIterableclass)Z!jedi.inference.gradual.annotationrw   rx   r$   rE   infer_type_varsZmerge_types_of_iterateZis_instanceZis_compiledget_annotated_class_objectapi_type	py__mro__)
r   r   rw   rx   Zannotation_namerL   Zannotation_genericsZpy_classZparent_class
class_namer   r   r   r{      s0    

zGenericClass.infer_type_vars)T)r&   r(   r)   r*   r   ra   rh   r9   rl   rp   r   rq   rD   ru   rv   r{   r>   r   r   r=   r   r]      s   

r]   c                   @   s0   e Zd Zdd Zedd Zdd Zdd Zd	S )
rr   c                 C   s   || _ || _|| _d S r   )r^   _lazy_base_classr@   )r   r_   Zlazy_base_classrB   r   r   r   r      s    z_LazyGenericBaseClass.__init__c              
   c   sf   | j  D ]V}t|tr<t|j|jtt| 	|V  q
|
 rZt|j|| jV  q
|V  q
d S r   )r   r#   r   r]   Zcreate_cachedinference_stater[   r   rK   _remap_type_varsZis_class_mixinr@   rs   r   r   r   r#     s    
z_LazyGenericBaseClass.inferc                 c   s|   ddl m} | j }| D ]X}t}|D ]D}t||r`|| }|t	
dd |D O }q*|t	|gO }q*|V  qd S )Nr   rF   c                 s   s   | ]}|  V  qd S r   )r#   )rQ   r1   r   r   r   rS   !  s   z9_LazyGenericBaseClass._remap_type_vars.<locals>.<genexpr>)rH   rG   r^   r9   rE   r   r   r3   r$   r   Z	from_sets)r   rt   rG   filterZtype_var_setnewr   namesr   r   r   r     s    

z&_LazyGenericBaseClass._remap_type_varsc                 C   s   d| j j| jf S Nz<%s: %s>)r%   r&   r   r!   r   r   r   r'   +  s    z_LazyGenericBaseClass.__repr__N)r&   r(   r)   r   r   r#   r   r'   r   r   r   r   rr      s
   
rr   c                   @   s   e Zd Zdd ZdddZdS )rm   c              	   C   sz   | j j D ]b}| dkrL| }z|d  W   S  tyH   Y qn0 q| dkrtt| j	dg  S q| j 
 S )N	Generator   IteratorNone)r[   r_   r~   r$   rE   execute_annotationr0   r   r	   r   py__stop_iteration_returns)r   clsr.   r   r   r   r   0  s    z2_GenericInstanceWrapper.py__stop_iteration_returnsTc                 C   s   | j jjddS )NF)ri   )r[   r_   rh   )r   ri   r   r   r   rh   <  s    z%_GenericInstanceWrapper.get_type_hintN)T)r&   r(   r)   r   rh   r   r   r   r   rm   /  s   rm   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.
    rz   c                    s   t  |j| || _d S r   )r6   r   r   
_tree_namer   r   	tree_namer=   r   r   r   L  s
    z_PseudoTreeNameClass.__init__c                 C   s   | j S r   )r   r!   r   r   r   rU   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  s    z>_PseudoTreeNameClass.get_filters.<locals>.EmptyFilter.__init__c                 [   s   g S r   r   )r   r1   r;   r   r   r   r3   ]  s    z9_PseudoTreeNameClass.get_filters.<locals>.EmptyFilter.getc                 [   s   g S r   r   )r   r;   r   r   r   r4   `  s    z<_PseudoTreeNameClass.get_filters.<locals>.EmptyFilter.valuesN)r&   r(   r)   r   r3   r4   r   r   r   r   EmptyFilterY  s   r   r
   )r   r:   r;   r   r   r   r   r7   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   s   t | | jS r   r   r   r!   r   r   r   r1   j  s    z_PseudoTreeNameClass.namec                 C   s
   | j jfS r   )r   r    r!   r   r   r   get_qualified_namesn  s    z(_PseudoTreeNameClass.get_qualified_namesc                 C   s   d| j j| jjf S Nz%s(%s)r%   r&   r   r    r!   r   r   r   r'   q  s    z_PseudoTreeNameClass.__repr__)r&   r(   r)   r*   r}   r   propertyrU   r7   r   r1   r   r'   r>   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   s   t | | jS r   r   r!   r   r   r   r1   {  s    zBaseTypingValue.namec                 C   s   t | j| jS r   r   r   r   r!   r   r   r   ra     s    z"BaseTypingValue._get_wrapped_valuec                 C   s
   | j  S r   )r[   rZ   r!   r   r   r   rZ     s    zBaseTypingValue.get_signaturesc                 C   s   d| j j| jjf S r   r   r!   r   r   r   r'     s    zBaseTypingValue.__repr__N)	r&   r(   r)   r   r   r1   ra   rZ   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   )r6   r   r   r   r   )r   r   r   rB   r=   r   r   r     s    z$BaseTypingClassWithGenerics.__init__c                 C   s   t | j| jS r   r   r!   r   r   r   ra     s    z.BaseTypingClassWithGenerics._get_wrapped_valuec                 C   s   d| j j| jj| jf S )Nz%s(%s%s))r%   r&   r   r    r@   r!   r   r   r   r'     s    z$BaseTypingClassWithGenerics.__repr__)r&   r(   r)   r   ra   r'   r>   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   r^   r   r@   )r   r   r_   r   rB   r   r   r   r     s
    zBaseTypingInstance.__init__c                 C   s   | j S r   r`   r!   r   r   r   r     s    zBaseTypingInstance.py__class__c                 C   s   | j S r   r`   r!   r   r   r   r|     s    z-BaseTypingInstance.get_annotated_class_objectc                 C   s
   |   fS r   )r$   r!   r   r   r   r     s    z&BaseTypingInstance.get_qualified_namesc                 C   s   t | | jS r   r   r!   r   r   r   r1     s    zBaseTypingInstance.namec                 C   s   t | jd \}|S )Nobject)r	   r   r   )r   Zobject_r   r   r   ra     s    z%BaseTypingInstance._get_wrapped_valuec                 C   s   d| j j| jf S r   )r%   r&   r@   r!   r   r   r   r'     s    zBaseTypingInstance.__repr__N)r&   r(   r)   r   r   r|   r   r   r1   ra   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+   r5   r?   r]   rr   rm   r   r   r   r   r   r   r   r   <module>   s&    N\35