o
    ZhH                     @   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   V/var/www/html/lang_env/lib/python3.10/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    .