U
    #cv                     @  s\  d dl mZ d dlZd dlZd dlZd dlZd dlZd dlmZm	Z	m
Z
mZ d dlZd dlZd dlmZ d dlmZ edejddZed	Zed
ZeejefZeeje	efZejdkreejefZeeje	efZedge	f Zne	Ze	Zedge	f Ze e!e"ejej# Z$ej%dgej&dZ'e'j(dd dddddZ)G dd dZ*dS )    )annotationsN)TypeVarAnyUnionCallable)_GenericAliasUnpack
ScalarTypeT)bound	covariantT1T2   	   z"_GenericAlias | types.GenericAliasr      )dtypeF)writetypeztuple[type, ...])basereturnc                 C  s   G dd d| }|j dd  S )Nc                   @  s   e Zd ZdS )z#_get_subclass_mro.<locals>.SubclassN)__name__
__module____qualname__ r   r   I/tmp/pip-unpacked-wheel-b2rbor69/numpy/typing/tests/test_generic_alias.pySubclass(   s   r   r   )__mro__)r   r   r   r   r   _get_subclass_mro'   s    r   c                   @  s|  e Zd ZdZejdddd fddd fddd fddd fdd	d fdd
d fddd fddd fddd fddd fddd fddd fddd fddd fddd fddd fddd fddd fdd d fd!d"d fd!d#d fd$d%d fd&d'd fgd(d)d*d+d,d-Zejdd.d/d fd0d1d fgd(d)d*d+d2d3Zd*d4d5d6Z	ejd7d8d9d d:fd8d;d d:fd<d=d d:fd>d?d d:fdd@d d:fdAdBd dCfdDdEd dFfgd(d)dGd*dHdIdJZ
d*d4dKdLZejdMed(d*dNdOdPZejdQdedRd fdedSd fdedTd fdUedVd fdWedXd fdYedZd fdYed[d fd\ed]d fgd(d^d)d*d_d`daZdbS )cTestGenericAliasz7Tests for `numpy._typing._generic_alias._GenericAlias`.z	name,func__init__c                 C  s   | S Nr   nr   r   r   <lambda>1       zTestGenericAlias.<lambda>c                 C  s   t tjtS r"   r   npndarrayr   r#   r   r   r   r%   2   r&   c                 C  s   t tjtfS r"   r'   r#   r   r   r   r%   3   r&   c                 C  s   t tjttfS r"   r'   r#   r   r   r   r%   4   r&   c                 C  s   t tjtS r"   r   r(   r)   r   r#   r   r   r   r%   5   r&   c                 C  s   t tjtfS r"   r*   r#   r   r   r   r%   6   r&   c                 C  s   t tjttfS r"   )r   r(   r)   r   r   r#   r   r   r   r%   7   r&   
__origin__c                 C  s   | j S r"   )r+   r#   r   r   r   r%   8   r&   __args__c                 C  s   | j S r"   )r,   r#   r   r   r   r%   9   r&   __parameters__c                 C  s   | j S r"   )r-   r#   r   r   r   r%   :   r&   __mro_entries__c                 C  s   |  tgS r"   )r.   objectr#   r   r   r   r%   ;   r&   __hash__c                 C  s   t | S r"   )hashr#   r   r   r   r%   <   r&   __repr__c                 C  s   t | S r"   )reprr#   r   r   r   r%   =   r&   __getitem__c                 C  s
   | t j S r"   )r(   float64r#   r   r   r   r%   >   r&   c                 C  s   | t  tj S r"   )r
   r(   r5   r#   r   r   r   r%   ?   r&   c                 C  s   | t tjtf  tj S r"   )r   r(   int64r
   r5   r#   r   r   r   r%   @   r&   c                 C  s   | t ttf  tjtjf S r"   )r   r   r   r(   Zfloat32r5   r#   r   r   r   r%   A   r&   __eq__c                 C  s   | | kS r"   r   r#   r   r   r   r%   B   r&   __ne__c                 C  s
   | t jkS r"   )r(   r)   r#   r   r   r   r%   C   r&   __call__c                 C  s   | dt jtS )Nr   r(   r6   BUFFERr#   r   r   r   r%   D   r&   c                 C  s   | dt jtdS )Nr:   )shaper   bufferr;   r#   r   r   r   r%   E   r&   Zsubclassingc                 C  s   t | S r"   )r   r#   r   r   r   r%   F   r&   picklec                 C  s   | t t | kS r"   )r?   loadsdumpsr#   r   r   r   r%   G   r&   strFuncTypeNone)namefuncr   c                 C  s*   |t }tjdkr&|t}||ks&tdS )zCompare `types.GenericAlias` with its numpy-based backport.

        Checker whether ``func`` runs as intended and that both `GenericAlias`
        and `_GenericAlias` return the same result.

        r   NNDArraysysversion_infoNDArray_refAssertionError)selfrE   rF   value	value_refr   r   r   	test_pass0   s     
zTestGenericAlias.test_pass__copy__c                 C  s   | t  | kS r"   )copyr#   r   r   r   r%   W   r&   __deepcopy__c                 C  s   | t | kS r"   )rR   deepcopyr#   r   r   r   r%   X   r&   c                 C  sJ   |t }tjd d dko"tjdk}|s2tjdkrF|t}||ksFtd S )N   r   )r   r      )r   
   r   rG   )rM   rE   rF   rN   ZGE_398rO   r   r   r   	test_copyV   s    zTestGenericAlias.test_copy)r   c                 C  sR   t t}tjdk rd S tjdk r*|d tjdk r>|d |t tksNtd S )Nr   )r      r   betar   __typing_unpacked_tuple_args__)r   rY   r   rZ   r   __unpacked__)dirrH   rI   rJ   removerK   rL   )rM   rN   r   r   r   test_dire   s    




zTestGenericAlias.test_dirzname,func,dev_version__iter__c                 C  s   t t| S r"   )lenlistr#   r   r   r   r%   r   r&   )rZ   r   c                 C  s   t t| S r"   nextiterr#   r   r   r   r%   s   r&   r\   c                 C  s   | j S r"   )r\   r#   r   r   r   r%   t   r&   r	   c                 C  s   t |  S r"   r   r#   r   r   r   r%   u   r&   c                 C  s   | t t| kS r"   rc   r#   r   r   r   r%   y   r&   r[   c                 C  s   | j S r"   )r[   r#   r   r   r   r%   }   r&   )rZ   r   	__class__c                 C  s   | j t| kS r"   )rf   r   r#   r   r   r   r%      r&   )rZ      ztuple[str, int])rE   rF   dev_versionr   c                 C  s.   |t }tjd|kr*|t}||ks*tdS )zTest Python 3.11 features.r   rY   r   N)r   rY   r   rG   )rM   rE   rF   rh   rN   rO   r   r   r   test_py311_featuresq   s    z$TestGenericAlias.test_py311_featuresc                 C  s2   t t }tjdkr.t t }||ks.tdS )zTest ``__weakref__``.)r   r   r   N)weakrefrefrH   rI   rJ   rK   rL   )rM   rN   rO   r   r   r   test_weakref   s    
zTestGenericAlias.test_weakrefrE   )rE   r   c                 C  sV   t t|}t tj|}tjdkrFt t|}||  kr>|ksRn tn||ksRtdS )z[Test that `getattr` wraps around the underlying type,
        aka ``__origin__``.

        r   N)getattrrH   r(   r)   rI   rJ   rK   rL   )rM   rE   rN   Z
value_ref1Z
value_ref2r   r   r   test_getattr   s    


zTestGenericAlias.test_getattrzname,exc_type,funcc                 C  s   | d S )Nr   r   r#   r   r   r   r%      r&   c                 C  s   | t t f S r"   r   r#   r   r   r   r%      r&   c                 C  s   | t  t  S r"   ro   r#   r   r   r   r%      r&   
isinstancec                 C  s   t td| S )Nr   )rp   r(   arrayr#   r   r   r   r%      r&   Z	issublassc                 C  s   t tj| S r"   )
issubclassr(   r)   r#   r   r   r   r%      r&   setattrc                 C  s   t | dtS )Nr+   rs   intr#   r   r   r   r%      r&   c                 C  s   t | dtS Ntestrt   r#   r   r   r   r%      r&   rm   c                 C  s
   t | dS rv   )rm   r#   r   r   r   r%      r&   ztype[BaseException])rE   exc_typerF   r   c              	   C  sJ   t | |t W 5 Q R X tjdkrFt | |t W 5 Q R X dS )z+Test operations that are supposed to raise.r   N)pytestZraisesrH   rI   rJ   rK   )rM   rE   rx   rF   r   r   r   
test_raise   s
    
zTestGenericAlias.test_raiseN)r   r   r   __doc__ry   markZparametrizerP   rX   r_   ri   rl   GETATTR_NAMESrn   	TypeErrorAttributeErrorrz   r   r   r   r   r    -   sx   
























 
r    )+
__future__r   rI   rR   typesr?   rj   typingr   r   r   r   ry   Znumpyr(   Znumpy._typing._generic_aliasr   Ztyping_extensionsr	   Zgenericr
   r   r   r   ZDTyper)   rH   rJ   ZGenericAliasZ	DType_refrK   rC   sortedsetr]   Z_ATTR_EXCEPTIONSr}   rq   r6   r<   Zsetflagsr   r    r   r   r   r   <module>   s6   
