o
    ð›hgC  ã                	   @   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 ClassVar Annotatedc                   @   ó   e Zd Zdd„ Zdd„ ZdS )ÚTypingModuleNamec                 C   s   t |  ¡ ƒS ©N)r   Ú_remap©Úself© r$   úSc:\Users\shubh\Videos\agent\nova\Lib\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w t || j| j|¡V  d S |tv r5t	 || j| j¡V  d S |t
v rEt || j| j¡V  d S |dkrKd S |dkr^| j ¡ \}t ||¡V  d S |dkrnt || j| j¡V  d S |dkrzt|dƒV  d S |dkrŠt || j| j¡V  d S |dkr�| j ¡ \}t ||¡V  d S |dkr°| j ¡ \}t ||¡V  d S |d	krÀt || j| j¡V  d S | 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#   Únamer1   ÚactualÚclsÚvZcast_fnr$   r$   r%   r!   *   s\   €ÿÿ

ÿ

ÿ

ÿ

ÿ

ÿzTypingModuleName._remapN)Ú__name__Ú
__module__Ú__qualname__r&   r!   r$   r$   r$   r%   r   &   s    r   c                   @   ó   e Zd ZeZdS )ÚTypingModuleFilterWrapperN)rC   rD   rE   r   Zname_wrapper_classr$   r$   r$   r%   rG   `   ó    rG   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r!|  ¡  ¡ tt| jdƒgƒB S |dkr*| jd S |dv r5| jd  ¡ S tt	t
tdœ}|| }t|| j| | j | jd�gƒS )	NÚUnionÚOptionalÚNoneÚTyper   )ÚClassVarÚ	Annotated)ÚTupleÚGenericÚProtocolÚCallable©Úgenerics_manager)Ú
_tree_nameÚvalueÚgather_annotation_classesÚexecute_annotationr   r   r1   Ú_generics_managerrP   rQ   rR   rS   r0   )r#   r/   ZmappedrA   r$   r$   r%   rY   e   s.   
ÿ
ü
üz$ProxyWithGenerics.execute_annotationc                 C   s   t  | j ¡ ¡S r    )r   Ú	from_setsrZ   Úto_tupler"   r$   r$   r%   rX   †   ó   z+ProxyWithGenerics.gather_annotation_classesc                 C   ó   t | j| j|ƒS r    )rI   r0   rV   ©r#   rU   r$   r$   r%   Ú_create_instance_with_generics‰   ó
   ýz0ProxyWithGenerics._create_instance_with_genericsc                    sL   |   ¡ }|si S |  ¡ }|dkr$t| jdƒ‰ |d  | ‡ fdd„¡¡S i S )NrK   rL   r   c                    s   | ˆ kS r    r$   ©Úx©Únoner$   r%   Ú<lambda>�   s    z3ProxyWithGenerics.infer_type_vars.<locals>.<lambda>)Úget_genericsÚ
py__name__r   r1   Úinfer_type_varsÚfilter)r#   Ú	value_setÚannotation_genericsÚannotation_namer$   rd   r%   ri   �   s   ÿz!ProxyWithGenerics.infer_type_varsN)rC   rD   rE   rY   rX   r`   ri   r$   r$   r$   r%   rI   d   s
    !rI   c                   @   s    e Zd ZeZdd„ Zdd„ ZdS )r9   c                 C   s   | j j| j| j| jt|ƒd�S )NrT   )Úindex_classr5   r1   r0   rV   r   )r#   Zgenerics_tupler$   r$   r%   Úwith_generics¦   s   üzProxyTypingValue.with_genericsc                    s   t ‡ ‡fdd„|D ƒƒS )Nc              	   3   s4   � | ]}ˆj jˆjˆjˆjtˆ j|d �d�V  qdS ))Zcontext_of_indexÚindex_valuerT   N)rn   r5   r1   r0   rV   r   Úcontext)Ú.0rp   ©Úcontextualized_noder#   r$   r%   Ú	<genexpr>¯   s   € 	øþü
ÿz1ProxyTypingValue.py__getitem__.<locals>.<genexpr>©r   ©r#   Zindex_value_setrt   r$   rs   r%   Úpy__getitem__®   s   	÷zProxyTypingValue.py__getitem__N)rC   rD   rE   rI   rn   ro   rx   r$   r$   r$   r%   r9   £   s    r9   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
   r1   Úbuiltins_moduleÚpy__getattribute__r"   r$   r$   r%   Úpy__bases__½   s   ÿz_TypingClassMixin.py__bases__c                 C   ó   g S r    r$   r"   r$   r$   r%   Úget_metaclassesÂ   ó   z!_TypingClassMixin.get_metaclassesc                 C   ó   t | | jƒS r    )r   rV   r"   r$   r$   r%   r?   Å   ó   z_TypingClassMixin.nameN)rC   rD   rE   r}   r   Úpropertyr?   r$   r$   r$   r%   ry   ¼   s
    ry   c                   @   r   )ÚTypingClassWithGenericsc                 C   s€   i }|   ¡ }|s
|S |  ¡ }|dkr|d  | ¡ ¡S |dkr0t|ƒdkr.|d  | ¡ ¡S |S |dkr>|  ¡ \}| |¡S |S )NrM   r   rS   é   é   rP   )rg   rh   ri   rY   Úlen)r#   rk   Útype_var_dictrl   rm   Ztuple_annotationr$   r$   r%   ri   Ë   s&   üÿü

z'TypingClassWithGenerics.infer_type_varsc                 C   r^   r    )r„   r0   rV   r_   r$   r$   r%   r`   ç   ra   z6TypingClassWithGenerics._create_instance_with_genericsN)rC   rD   rE   ri   r`   r$   r$   r$   r%   r„   Ê   s    r„   c                   @   rF   )r7   N)rC   rD   rE   r„   rn   r$   r$   r$   r%   r7   ï   rH   r7   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 )r4   c                 C   s   |j | _ || _|| _|| _d S r    )r1   r0   Ú_origin_tree_nameÚ_actual)r#   r0   Zorigin_tree_namer@   r$   r$   r%   Ú__init__ô   s   
zTypeAlias.__init__c                 C   r�   r    )r   r‰   r"   r$   r$   r%   r?   ú   r‚   zTypeAlias.namec                 C   ó   | j jS r    )r?   r/   r"   r$   r$   r%   rh   þ   s   zTypeAlias.py__name__c                 C   s   d| j j| jf S )Nz<%s: %s>)Ú	__class__rC   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s*J |ƒ‚t	t
|ƒƒ}|S )NÚ.r   )ÚImporterr†   )rŠ   ÚsplitZjedi.inference.importsr�   r1   r{   Úfollowr|   r‡   ÚnextÚiter)r#   Úmodule_nameÚ
class_namer�   ÚmoduleÚclassesrA   r$   r$   r%   Ú_get_wrapped_value  s   ÿþ
zTypeAlias._get_wrapped_valuec                 C   s   t |  ¡ gƒS r    )r   r™   r"   r$   r$   r%   rX     s   z#TypeAlias.gather_annotation_classesc                 C   r~   r    r$   r"   r$   r$   r%   Úget_signatures  r€   zTypeAlias.get_signaturesN)rC   rD   rE   r‹   rƒ   r?   rh   rŽ   r™   rX   rš   r$   r$   r$   r%   r4   ó   s    
r4   c                   @   r   )rS   c                 C   sR   z| j d }| j d }W n ty   t d¡ t Y S w ddlm} ||||ƒS )zG
            def x() -> Callable[[Callable[..., _T]], _T]: ...
        r   r†   z+Callable[...] defined without two arguments)Úinfer_return_for_callable)rZ   Ú
IndexErrorr   Úwarningr   Ú!jedi.inference.gradual.annotationr›   )r#   Ú	argumentsZparam_valuesZresult_valuesr›   r$   r$   r%   Ú
py__call__  s   

þzCallable.py__call__c                 C   s
   t | gƒS r    rv   )r#   ÚinstanceZclass_valuer$   r$   r%   Ú	py__get__)  ó   
zCallable.py__get__N)rC   rD   rE   r    r¢   r$   r$   r$   r%   rS     s    rS   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 )rP   c                 C   ó
   | j  ¡ S r    )rZ   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 )Nr   z The getitem type on Tuple was %s)r¥   rZ   Úget_index_and_executeÚ
isinstanceÚintr   Zdbgr   ©r#   Úindexr$   r$   r%   Úpy__simple_getitem__3  s   
zTuple.py__simple_getitem__Nc                 c   sB   � |   ¡ rt| j d¡ƒV  d S | j ¡ D ]	}t| ¡ ƒV  qd S ©Nr   )r¥   r
   rZ   r¦   r\   rY   )r#   rt   rB   r$   r$   r%   Ú
py__iter__=  s   €ÿzTuple.py__iter__c                 C   s(   |   ¡ r
| j d¡S t | j ¡ ¡ ¡ S r¬   )r¥   rZ   r¦   r   r[   r\   rY   rw   r$   r$   r%   rx   D  s   ÿþzTuple.py__getitem__c                 C   s   | j j d¡ ¡ \}|S ©NÚtuple)r1   r{   r|   rY   )r#   Útuple_r$   r$   r%   r™   L  s   
ÿzTuple._get_wrapped_valuec                 C   rŒ   r    )Z_wrapped_valuer?   r"   r$   r$   r%   r?   Q  ó   z
Tuple.namec              	   C   s†   ddl m}m} | dd„ ¡}|  ¡ r| j ¡ d  | ¡ ¡S i }|D ]}z|j	}W n	 t
y3   Y q#w |ƒ }|||| j|ƒƒ q#|S )Nr   )Úmerge_pairwise_genericsÚmerge_type_var_dictsc                 S   s   |   ¡  ¡ dkS r®   )rh   Úlowerrb   r$   r$   r%   rf   Z  s    z'Tuple.infer_type_vars.<locals>.<lambda>)rž   r²   r³   rj   r¥   Z_class_valuerg   ri   Zmerge_types_of_iterateZget_annotated_class_objectÚAttributeError)r#   rk   r²   r³   rˆ   ÚelementÚmethodZpy_classr$   r$   r%   ri   U  s*   ÿÿ

ü
þzTuple.infer_type_varsr    )rC   rD   rE   r¥   r«   r­   rx   r™   rƒ   r?   ri   r$   r$   r$   r%   rP   -  s    


rP   c                   @   ó   e Zd ZdS )rQ   N©rC   rD   rE   r$   r$   r$   r%   rQ   ~  ó    rQ   c                   @   r¸   )rR   Nr¹   r$   r$   r$   r%   rR   ‚  rº   rR   c                   @   ó   e Zd Zdd„ ZdS )r:   c                 C   s   t  d¡ tS )NzUsed Any - returned no results)r   r�   r   r"   r$   r$   r%   rY   ‡  s   
zAnyClass.execute_annotationN)rC   rD   rE   rY   r$   r$   r$   r%   r:   †  ó    r:   c                   @   ó   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©rC   rD   rE   r   r    r$   r$   r$   r%   r;   Œ  ó    r;   c                   @   r»   )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,   r1   rq   Únoder&   )rr   rt   ©Z
second_argr#   r$   r%   ru   š  s   € ûü
ÿz-NewTypeFunction.py__call__.<locals>.<genexpr>)Úunpackr“   r   r   Zget_calling_nodes)r#   rŸ   Zordered_argsÚ_r$   rÁ   r%   r    ”  s   
úzNewTypeFunction.py__call__N)rC   rD   rE   r    r$   r$   r$   r%   r<   “  r¼   r<   c                       sF   e Zd Z‡ fdd„Zdd„ Zdd„ Zedd„ ƒZd	efd
d„Z	‡  Z
S )r,   c                    s   t ƒ  ||¡ || _|| _d S r    )Úsuperr‹   Ú_type_value_setÚ	tree_node)r#   r1   r0   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   r¤   r    )rÅ   rY   )r#   rŸ   r$   r$   r%   r    ­  r£   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Ž   µ  r]   zNewType.__repr__)rC   rD   rE   r‹   rÉ   r    rƒ   r?   ÚstrrŽ   Ú__classcell__r$   r$   rÈ   r%   r,   £  s    
r,   c                   @   r½   )r=   ztype, object, /c                 C   s   |  ¡ S r    )rY   )r#   rÇ   Zobject_value_setr$   r$   r%   r    º  r±   zCastFunction.py__call__Nr¾   r$   r$   r$   r%   r=   ¹  r¿   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)rC   rD   rE   Ú__doc__r$   r$   r$   r%   r>   ¿  rH   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    )r1   r0   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&   )rr   rj   r?   ©rª   r$   r%   ru   Ô  s   € ýþÿz1TypedDict.py__simple_getitem__.<locals>.<genexpr>T©Zis_instance)r§   rÍ   r   r[   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)rr   Úfr$   r$   r%   ru   Ü  s
   € ÿ
ÿz+TypedDict.get_key_values.<locals>.<genexpr>TrÓ   c                    s   h | ]	}t ˆ j|jƒ’qS r$   )r   r1   r/   )rr   rB   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)r1   r{   r|   Zexecute_with_values)r#   ÚdÚresultr$   r$   r%   r™   å  s   
zTypedDict._get_wrapped_valueN)
rC   rD   rE   rÏ   r‹   rƒ   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‘   r6   r2   r8   r   rG   rI   r9   ry   r„   r7   r4   rS   rP   rQ   rR   r:   r;   r<   r,   r=   r>   r.   r$   r$   r$   r%   Ú<module>   sV    ø
:?%&Q