o
    ð›hH  ã                   @   sŠ   d 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 dd	„ ZG d
d„ dƒZG dd„ deƒZG dd„ deƒZdS )za
This module is about generics, like the `int` in `List[int]`. It's not about
the Generic class.
é    )Údebug)Úmemoize_method)Úto_tuple)ÚValueSetÚ	NO_VALUES)ÚSequenceLiteralValue)Ú	is_stringc                 c   sX   � |D ]&}t |ƒr&ddlm} || | ¡ ƒ}|d ur%|  |¡D ]}|V  qq|V  qd S )Nr   )Ú_get_forward_reference_node)r   Z!jedi.inference.gradual.annotationr	   Zget_safe_valueZ
infer_node)ÚcontextZ	value_setÚvaluer	   ÚnodeÚc© r   úUc:\Users\shubh\Videos\agent\nova\Lib\site-packages\jedi/inference/gradual/generics.pyÚ_resolve_forward_references   s   €€ør   c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú_AbstractGenericManagerc                 C   s4   z| |   ¡ W S  ty   t d|| ¡ t Y S w )Nz$No param #%s found for annotation %s)Zexecute_annotationÚ
IndexErrorr   Úwarningr   ©ÚselfÚindexr   r   r   Úget_index_and_execute   s   þz-_AbstractGenericManager.get_index_and_executec                 C   ó   dd  dd„ |  ¡ D ƒ¡ S )Nz[%s]ú, c                 s   s   � | ]	}|j d d�V  qdS )F)Zadd_class_infoN)Úget_type_hint)Ú.0Útr   r   r   Ú	<genexpr>#   s   € z8_AbstractGenericManager.get_type_hint.<locals>.<genexpr>©Újoinr   ©r   r   r   r   r   "   ó   z%_AbstractGenericManager.get_type_hintN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r      s    r   c                   @   sT   e Zd Zdd„ Zedd„ ƒZdd„ Zeedd„ ƒƒZed	d
„ ƒZdd„ Z	dd„ Z
dS )ÚLazyGenericManagerc                 C   s   || _ || _d S ©N)Ú_context_of_indexÚ_index_value)r   Zcontext_of_indexZindex_valuer   r   r   Ú__init__'   s   
zLazyGenericManager.__init__c                 C   s   |   ¡ | ƒ S r&   ©Ú_tupler   r   r   r   Ú__getitem__+   s   zLazyGenericManager.__getitem__c                 C   s   t |  ¡ ƒS r&   ©Úlenr+   r    r   r   r   Ú__len__/   s   zLazyGenericManager.__len__c                 #   sN   � ‡ fdd„}t ˆ jtƒrˆ jjd d�D ]}||ƒV  qd S ‡ fdd„V  d S )Nc                    s   ‡ ‡fdd„S )Nc                      s   t tˆjˆ  ¡ ƒƒS r&   )r   r   r'   Zinferr   )Ú
lazy_valuer   r   r   Ú<lambda>6   s    þzULazyGenericManager._tuple.<locals>.lambda_scoping_in_for_loop_sucks.<locals>.<lambda>r   ©r0   r    r2   r   Ú lambda_scoping_in_for_loop_sucks5   s   zCLazyGenericManager._tuple.<locals>.lambda_scoping_in_for_loop_sucks)Zcontextualized_nodec                      s   t tˆ jt ˆ jgƒƒƒS r&   )r   r   r'   r(   r   r    r   r   r1   ?   s    
þz+LazyGenericManager._tuple.<locals>.<lambda>)Ú
isinstancer(   r   Z
py__iter__)r   r3   r0   r   r    r   r+   2   s   €ÿzLazyGenericManager._tuplec                 c   s   � |   ¡ D ]}|ƒ V  qd S r&   r*   )r   Z	callable_r   r   r   r   D   s   €
ÿzLazyGenericManager.to_tuplec                 C   s6   t | jtƒr| j ¡ }t|ƒdkr|d dkrdS dS )Né   é   z...TF)r4   r(   r   Zget_tree_entriesr.   )r   Úentriesr   r   r   Úis_homogenous_tupleI   s
   
z&LazyGenericManager.is_homogenous_tuplec                 C   r   )Nz<LazyG>[%s]r   c                 s   ó   � | ]}t |ƒV  qd S r&   ©Úrepr©r   Úxr   r   r   r   Q   ó   € z.LazyGenericManager.__repr__.<locals>.<genexpr>r   r    r   r   r   Ú__repr__P   r!   zLazyGenericManager.__repr__N)r"   r#   r$   r)   r   r,   r/   r   r+   r8   r?   r   r   r   r   r%   &   s    

r%   c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚTupleGenericManagerc                 C   s
   || _ d S r&   r*   )r   Útupr   r   r   r)   U   ó   
zTupleGenericManager.__init__c                 C   s
   | j | S r&   r*   r   r   r   r   r,   X   rB   zTupleGenericManager.__getitem__c                 C   s
   t | jƒS r&   r-   r    r   r   r   r/   [   rB   zTupleGenericManager.__len__c                 C   s   | j S r&   r*   r    r   r   r   r   ^   s   zTupleGenericManager.to_tuplec                 C   s   dS )NFr   r    r   r   r   r8   a   s   z'TupleGenericManager.is_homogenous_tuplec                 C   r   )Nz
<TupG>[%s]r   c                 s   r9   r&   r:   r<   r   r   r   r   e   r>   z/TupleGenericManager.__repr__.<locals>.<genexpr>r   r    r   r   r   r?   d   r!   zTupleGenericManager.__repr__N)	r"   r#   r$   r)   r,   r/   r   r8   r?   r   r   r   r   r@   T   s    r@   N)Ú__doc__Zjedir   Z
jedi.cacher   Zjedi.inference.utilsr   Zjedi.inference.base_valuer   r   Zjedi.inference.value.iterabler   Zjedi.inference.helpersr   r   r   r%   r@   r   r   r   r   Ú<module>   s    .