U
    X	a                     @  sH  d dl mZ d dlZd dlZd dlmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZ d dlZddgZedddZdd	d
ddZdddddZddddddZG dd dZejdkreejfZnefZedejddZerejeeje f Z nNejdkr&eejefZ!eejee!fZ neejefZ!eejee!fZ dS )    )annotationsN)AnyClassVar	FrozenSet	GeneratorIterableIteratorListNoReturnTupleTypeTypeVarTYPE_CHECKING_GenericAliasNDArray_T)boundobjectstrobjreturnc                 C  sP   | t krdS t| trDt| tsD| jdkr0| jS | j d| j S nt| S dS )z-Helper function for `_GenericAlias.__repr__`.z...builtins.N)Ellipsis
isinstancetype_GENERIC_ALIAS_TYPE
__module____qualname__repr)r    r!   ?/tmp/pip-unpacked-wheel-zbzmve17/numpy/typing/_generic_alias.py_to_str   s    
r#   zIterable[Any]zGenerator[TypeVar, None, None])argsr   c                 c  s6   | D ],}t |dr |jE dH  qt|tr|V  qdS )zzSearch for all typevars and typevar-containing objects in `args`.

    Helper function for `_GenericAlias.__init__`.

    __parameters__N)hasattrr%   r   r   )r$   ir!   r!   r"   _parse_parameters(   s
    

r(   zIterator[TypeVar])alias
parametersr   c                   s   g }| j D ]h}t|tr"t }nFt|tr8t| }n0t|drdt fdd|jD }|| }n|}|	| q
t
| }|| jt|S )z{Recursivelly replace all typevars with those from `parameters`.

    Helper function for `_GenericAlias.__getitem__`.

    r%   c                 3  s   | ]}t  V  qd S N)next).0_r*   r!   r"   	<genexpr>B   s     z%_reconstruct_alias.<locals>.<genexpr>)__args__r   r   r,   r   _reconstruct_aliasr&   tupler%   appendr   
__origin__)r)   r*   r$   r'   valueZprm_tupclsr!   r/   r"   r2   5   s    





r2   c                      s@  e Zd ZU dZdZedd fddZedd fdd	Zed
d fddZddddddZ	eddddZ
dddddZdddddZdddd Zd!d fd"d#Zd$d%d&d'd(Zdd%d)d*d+Zd,dd-d.Zdddd/d0d1Zd$d2d3d4d5Zed6d7d8d9d:d;hZd<ed=< d,dd> fd?d@Z  ZS )Ar   a  A python-based backport of the `types.GenericAlias` class.

    E.g. for ``t = list[int]``, ``t.__origin__`` is ``list`` and
    ``t.__args__`` is ``(int,)``.

    See Also
    --------
    :pep:`585`
        The PEP responsible for introducing `types.GenericAlias`.

    )__weakref___origin_args_parameters_hashr   )r   c                   s   t  dS )Nr9   super__getattribute__self	__class__r!   r"   r5   [   s    z_GenericAlias.__origin__zTuple[Any, ...]c                   s   t  dS )Nr:   r=   r@   rB   r!   r"   r1   _   s    z_GenericAlias.__args__zTuple[TypeVar, ...]c                   s   t  dS )z'Type variables in the ``GenericAlias``.r;   r=   r@   rB   r!   r"   r%   c   s    z_GenericAlias.__parameters__r   None)originr$   r   c                 C  s.   || _ t|tr|n|f| _tt|| _d S r+   )r9   r   r3   r:   r(   r;   )rA   rE   r$   r!   r!   r"   __init__h   s    z_GenericAlias.__init__c                 C  s   | j S r+   r5   r@   r!   r!   r"   __call__m   s    z_GenericAlias.__call__r   z-Tuple[Type[_T], Tuple[type, Tuple[Any, ...]]])rA   r   c                 C  s   t | }|| j| jffS r+   )r   r5   r1   rA   r7   r!   r!   r"   
__reduce__q   s    z_GenericAlias.__reduce__zIterable[object]zTuple[type])basesr   c                 C  s   | j fS r+   rG   )rA   rK   r!   r!   r"   __mro_entries__u   s    z_GenericAlias.__mro_entries__z	List[str]c                 C  s$   t | }tt| j}t|j|B S )zImplement ``dir(self)``.)r   setdirr5   sorted_ATTR_EXCEPTIONS)rA   r7   Z
dir_originr!   r!   r"   __dir__x   s    z_GenericAlias.__dir__intc                   sJ   zt  dW S  tk
rD   t| jt| jA | _t  d Y S X dS )zReturn ``hash(self)``.r<   N)r>   r?   AttributeErrorhashr5   r1   r<   r@   rB   r!   r"   __hash__~   s
    z_GenericAlias.__hash__r   r
   r   c                 C  s   t ddS )z!Check if an `obj` is an instance.z9isinstance() argument 2 cannot be a parameterized genericN	TypeError)rA   r   r!   r!   r"   __instancecheck__   s    z_GenericAlias.__instancecheck__)r7   r   c                 C  s   t ddS )zCheck if a `cls` is a subclass.z9issubclass() argument 2 cannot be a parameterized genericNrV   rI   r!   r!   r"   __subclasscheck__   s    z_GenericAlias.__subclasscheck__r   c                 C  s0   d dd | jD }t| j}| d| dS )zReturn ``repr(self)``.z, c                 s  s   | ]}t |V  qd S r+   )r#   )r-   r'   r!   r!   r"   r0      s     z)_GenericAlias.__repr__.<locals>.<genexpr>[])joinr1   r#   r5   )rA   r$   rE   r!   r!   r"   __repr__   s    
z_GenericAlias.__repr__)rA   keyr   c                 C  s   t |tr|n|f}t| jdkr2td|  nBt|t| jkrTtd|  n t|t| jk rttd|  t|}t| |S )zReturn ``self[key]``.r   z$There are no type variables left in zToo many arguments for zToo few arguments for )r   r3   lenr%   rW   iterr2   )rA   r^   Zkey_tupZkey_iterr!   r!   r"   __getitem__   s    z_GenericAlias.__getitem__bool)r6   r   c                 C  s&   t |tstS | j|jko$| j|jkS )zReturn ``self == value``.)r   r   NotImplementedr5   r1   )rA   r6   r!   r!   r"   __eq__   s
    

z_GenericAlias.__eq__r5   r1   r%   rL   rJ   __reduce_ex__zClassVar[FrozenSet[str]]rP   )namer   c                   s*   t | }||jkrt |S t| j|S )zReturn ``getattr(self, name)``.)r   rP   r>   r?   getattrr5   )rA   rf   r7   rB   r!   r"   r?      s    
z_GenericAlias.__getattribute__)__name__r   r   __doc__	__slots__propertyr5   r1   r%   rF   rH   rJ   rL   rQ   rU   rX   rY   r]   ra   rd   	frozensetrP   __annotations__r?   __classcell__r!   r!   rB   r"   r   L   s:   
			)   	   
ScalarTypeT)r   	covariant)"
__future__r   systypestypingr   r   r   r   r   r   r	   r
   r   r   r   r   Znumpynp__all__r   r#   r(   r2   r   version_infoZGenericAliasr   Zgenericrq   ZndarrayZdtyper   Z_DTyper!   r!   r!   r"   <module>   s*   8v
