U
    #c7                     @  s&  d dl mZ d dlZd dlZd dlmZmZmZ d dl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sejdkreje Zeje	eje f ZneejefZeeje	efZdS )    )annotationsN)	GeneratorIterableIterator)AnyClassVarNoReturn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-b2rbor69/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|| jS )zzRecursively 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><   s     z%_reconstruct_alias.<locals>.<genexpr>)__args__r   r	   r(   r   _reconstruct_aliasr"   tupler!   appendr   
__origin____unpacked__)r%   r&   r    r#   valueZprm_tupclsr   r+   r   r.   /   s    





r.   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edd fddZ	eddddZ
dQd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/d0Zdd-d1d2d3Zd4dd5d6Zdddd7d8d9Zd,dd:d;d<Zdd=dd>d?Zed@dAdBdCdDdEdFdGdHdIdJhZdKedL< d4dMdN fdOdPZ  ZS )Rr   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_hash_starredr   )r   c                   s   t  dS )Nr6   super__getattribute__self	__class__r   r   r1   \   s    z_GenericAlias.__origin__ztuple[object, ...]c                   s   t  dS )Nr7   r;   r>   r@   r   r   r-   `   s    z_GenericAlias.__args__ztuple[TypeVar, ...]c                   s   t  dS )z'Type variables in the ``GenericAlias``.r8   r;   r>   r@   r   r   r!   d   s    z_GenericAlias.__parameters__boolc                   s   t  dS )Nr:   r;   r>   r@   r   r   r2   i   s    z_GenericAlias.__unpacked__ztuple[object, ...] | Nonec                 C  s   d S r'   r   r>   r   r   r   __typing_unpacked_tuple_args__m   s    z,_GenericAlias.__typing_unpacked_tuple_args__Fzobject | tuple[object, ...]None)originr    starredr   c                 C  s6   || _ t|tr|n|f| _tt| j| _|| _d S r'   )r6   r   r/   r7   r$   r-   r8   r:   )r?   rE   r    rF   r   r   r   __init__t   s    z_GenericAlias.__init__z	type[Any]c                 C  s   | j S r'   r1   r>   r   r   r   __call__   s    z_GenericAlias.__call__r   z;tuple[type[_T], tuple[type[Any], tuple[object, ...], bool]])r?   r   c                 C  s   t | }|| j| j| jffS r'   )r   r1   r-   r2   r?   r4   r   r   r   
__reduce__   s    z_GenericAlias.__reduce__zIterable[object]ztuple[type[Any]])basesr   c                 C  s   | j fS r'   rH   )r?   rL   r   r   r   __mro_entries__   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dirr1   sorted_ATTR_EXCEPTIONS)r?   r4   Z
dir_originr   r   r   __dir__   s    z_GenericAlias.__dir__intc                   sT   zt  dW S  tk
rN   t| jt| jA t| jA | _t  d Y S X dS )zReturn ``hash(self)``.r9   N)r<   r=   AttributeErrorhashr1   r-   r2   r9   r>   r@   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)r?   r   r   r   r   __instancecheck__   s    z_GenericAlias.__instancecheck__)r4   r   c                 C  s   t ddS )zCheck if a `cls` is a subclass.z9issubclass() argument 2 cannot be a parameterized genericNrW   rJ   r   r   r   __subclasscheck__   s    z_GenericAlias.__subclasscheck__r   c                 C  sB   d dd | jD }t| j}| jr*dnd}| | d| dS )zReturn ``repr(self)``.z, c                 s  s   | ]}t |V  qd S r'   )r   )r)   r#   r   r   r   r,      s     z)_GenericAlias.__repr__.<locals>.<genexpr>* [])joinr-   r   r1   r2   )r?   r    rE   prefixr   r   r   __repr__   s    
z_GenericAlias.__repr__)r?   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   r/   lenr!   rX   iterr.   )r?   rb   Zkey_tupZkey_iterr   r   r   __getitem__   s    z_GenericAlias.__getitem__)r3   r   c                 C  s:   t |tstS | j|jko8| j|jko8| jt|d| jkS )zReturn ``self == value``.r2   )r   r   NotImplementedr1   r-   r2   getattr)r?   r3   r   r   r   __eq__   s    

  z_GenericAlias.__eq__zGenerator[_T, None, None]c                 c  s   t | }|| j| jdV  dS )zReturn ``iter(self)``.TN)r   r1   r-   rJ   r   r   r   __iter__   s    z_GenericAlias.__iter__r1   r-   r!   rM   rK   __reduce_ex____copy____deepcopy__r2   rC   rA   zClassVar[frozenset[str]]rQ   r   )namer   c                   s*   t | }||jkrt |S t| j|S )zReturn ``getattr(self, name)``.)r   rQ   r<   r=   rg   r1   )r?   rm   r4   r@   r   r   r=      s    
z_GenericAlias.__getattribute__)F)__name__r   r   __doc__	__slots__propertyr1   r-   r!   r2   rC   rG   rI   rK   rM   rR   rV   rY   rZ   ra   re   rh   ri   	frozensetrQ   __annotations__r=   __classcell__r   r   r@   r   r   F   sP   
	
 )   	   
ScalarTypeT)r   	covariant)
__future__r   systypescollections.abcr   r   r   typingr   r   r   r	   r
   Znumpynp__all__r   r   r$   r.   r   version_infoZGenericAliasr   Zgenericrw   ZdtypeZ_DTypeZndarrayr   r   r   r   r   <module>   s*    $

