o
    ð›hÂ<  ã                   @   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   úQc:\Users\shubh\Videos\agent\nova\Lib\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