U
    nufH                     @   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   sV   |D ]L}t |rJddlm} || | }|d k	rP| |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   C/tmp/pip-unpacked-wheel-ol4ehs9f/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   s:   z| |   W S  tk
r4   td||  t Y S X d S )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   s   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   "   s    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                 #   sJ    fdd}t  jtr8 jjd dD ]}||V  q&n 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   r.   r   r0   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   r/   ?   s   
z+LazyGenericManager._tuple.<locals>.<lambda>)
isinstancer&   r   Z
py__iter__)r   r1   r.   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r2| j }t|dkr2|d dkr2dS dS )N      z...TF)r2   r&   r   Zget_tree_entriesr,   )r   entriesr   r   r   is_homogenous_tupleI   s
    
z&LazyGenericManager.is_homogenous_tuplec                 C   s   dd dd |  D  S )Nz<LazyG>[%s]r   c                 s   s   | ]}t |V  qd S r$   reprr   xr   r   r   r   Q   s     z.LazyGenericManager.__repr__.<locals>.<genexpr>r   r   r   r   r   __repr__P   s    zLazyGenericManager.__repr__N)r    r!   r"   r'   r   r*   r-   r   r)   r6   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   s    zTupleGenericManager.__init__c                 C   s
   | j | S r$   r(   r   r   r   r   r*   X   s    zTupleGenericManager.__getitem__c                 C   s
   t | jS r$   r+   r   r   r   r   r-   [   s    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   r6   a   s    z'TupleGenericManager.is_homogenous_tuplec                 C   s   dd dd |  D  S )Nz
<TupG>[%s]r   c                 s   s   | ]}t |V  qd S r$   r7   r9   r   r   r   r   e   s     z/TupleGenericManager.__repr__.<locals>.<genexpr>r   r   r   r   r   r;   d   s    zTupleGenericManager.__repr__N)	r    r!   r"   r'   r*   r-   r   r6   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   .