o
    1ήcv                     @  sV  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rwe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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basetypereturntuple[type, ...]c                 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   L/tmp/pip-target-vg8gfxp4/lib/python/numpy/typing/tests/test_generic_alias.pySubclass(   s    r   r   )__mro__)r   r   r   r   r   _get_subclass_mro'   s   r    c                   @  sJ  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dbd.d/Zejdd0d1d fd2d3d fgdbd4d5Zdcd6d7Z	ejd8d9d:d d;fd9d<d d;fd=d>d d;fd?d@d d;fddAd d;fdBdCd dDfdEdFd dGfgdddJdKZ
dcdLdMZejd(ededNdOZejdPdedQd fdedRd fdedSd fdTedUd fdVedWd fdXedYd fdXedZd fd[ed\d fgdfd_d`ZdaS )gTestGenericAliasz7Tests for `numpy._typing._generic_alias._GenericAlias`.z	name,func__init__c                 C  s   | S Nr   nr   r   r   <lambda>1   s    zTestGenericAlias.<lambda>c                 C     t tjtS r#   r   npndarrayr   r$   r   r   r   r&   2       c                 C     t tjtfS r#   r(   r$   r   r   r   r&   3       c                 C  s   t tjttfS r#   r(   r$   r   r   r   r&   4       c                 C  r'   r#   r   r)   r*   r   r$   r   r   r   r&   5   r+   c                 C  r,   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     | j S r#   )r0   r$   r   r   r   r&   8       __args__c                 C  r1   r#   )r3   r$   r   r   r   r&   9   r2   __parameters__c                 C  r1   r#   )r4   r$   r   r   r   r&   :   r2   __mro_entries__c                 C  s   |  tgS r#   )r5   objectr$   r   r   r   r&   ;   r+   __hash__c                 C     t | S r#   )hashr$   r   r   r   r&   <       __repr__c                 C  r8   r#   )reprr$   r   r   r   r&   =   r:   __getitem__c                 C  s
   | t j S r#   )r)   float64r$   r   r   r   r&   >      
 c                 C  s   | t  tj S r#   )r
   r)   r>   r$   r   r   r   r&   ?   r-   c                 C  s   | t tjtf  tj S r#   )r   r)   int64r
   r>   r$   r   r   r   r&   @   s    c                 C  s   | t ttf  tjtjf S r#   )r   r   r   r)   float32r>   r$   r   r   r   r&   A   s    __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)   r@   BUFFERr$   r   r   r   r&   D   r-   c                 C  s   | dt jtdS )NrE   )shaper   bufferrF   r$   r   r   r   r&   E   r.   subclassingc                 C  r8   r#   )r    r$   r   r   r   r&   F   r:   picklec                 C  s   | t t | kS r#   )rK   loadsdumpsr$   r   r   r   r&   G   s    namestrfuncFuncTyper   Nonec                 C  s.   |t }tjdkr|t}||ksJ dS 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)selfrN   rP   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#   )r]   deepcopyr$   r   r   r   r&   X   r-   c                 C  sN   |t }tjd d dkotjdk}|stjdkr%|t}||ks#J d S d S )N   r   )r   r      )r   
   r   rS   )rX   rN   rP   rY   GE_398rZ   r   r   r   	test_copyV   s   zTestGenericAlias.test_copyc                 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s'J d S )Nr   )r      r   betar   __typing_unpacked_tuple_args__)r   re   r   rf   r   __unpacked__)dirrT   rU   rV   removerW   )rX   rY   r   r   r   test_dire   s   




zTestGenericAlias.test_dirzname,func,dev_version__iter__c                 C     t t| S r#   )lenlistr$   r   r   r   r&   r   r+   )rf   r   c                 C  rm   r#   nextiterr$   r   r   r   r&   s   r+   rh   c                 C  r1   r#   )rh   r$   r   r   r   r&   t   r2   r	   c                 C  s   t |  S r#   r   r$   r   r   r   r&   u   r:   c                 C  s   | t t| kS r#   rp   r$   r   r   r   r&   y   r.   rg   c                 C  r1   r#   )rg   r$   r   r   r   r&   }   r2   )rf   r   	__class__c                 C  s   | j t| kS r#   )rs   r   r$   r   r   r   r&      r-   )rf      dev_versiontuple[str, int]c                 C  s:   |t }tjdddg|R kr|t}||ksJ dS dS )zTest Python 3.11 features.r   re   r   NrS   )rX   rN   rP   ru   rY   rZ   r   r   r   test_py311_featuresq   s   z$TestGenericAlias.test_py311_featuresc                 C  s6   t t }tjdkrt t }||ksJ dS dS )zTest ``__weakref__``.)r   r   r   N)weakrefrefrT   rU   rV   rW   )rX   rY   rZ   r   r   r   test_weakref   s   
zTestGenericAlias.test_weakrefc                 C  sZ   t t|}t tj|}tjdkr%t t|}||  kr |ks#J  J dS ||ks+J dS )z[Test that `getattr` wraps around the underlying type,
        aka ``__origin__``.

        r   N)getattrrT   r)   r*   rU   rV   rW   )rX   rN   rY   
value_ref1
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#   r   r$   r   r   r   r&      r+   
isinstancec                 C  s   t td| S )Nr   )r   r)   arrayr$   r   r   r   r&      r.   	issublassc                 C  s   t tj| S r#   )
issubclassr)   r*   r$   r   r   r   r&      r+   setattrc                 C     t | dtS )Nr0   r   intr$   r   r   r   r&      r+   c                 C  r   Ntestr   r$   r   r   r   r&      r+   r{   c                 C  s
   t | dS r   )r{   r$   r   r   r   r&      r?   exc_typetype[BaseException]c                 C  sx   t | |t W d   n1 sw   Y  tjdkr:t | |t W d   dS 1 s3w   Y  dS dS )z+Test operations that are supposed to raise.Nr   )pytestraisesrT   rU   rV   rW   )rX   rN   r   rP   r   r   r   
test_raise   s   


"zTestGenericAlias.test_raiseN)rN   rO   rP   rQ   r   rR   )r   rR   )rN   rO   rP   rQ   ru   rv   r   rR   )rN   rO   r   rR   )rN   rO   r   r   rP   rQ   r   rR   )r   r   r   __doc__r   markparametrizer[   rd   rk   rw   rz   GETATTR_NAMESr~   	TypeErrorAttributeErrorr   r   r   r   r   r!   -   sx    



























r!   )r   r   r   r   )+
__future__r   rU   r]   typesrK   rx   typingr   r   r   r   r   numpyr)   numpy._typing._generic_aliasr   typing_extensionsr	   genericr
   r   r   r   DTyper*   rT   rV   GenericAlias	DType_refrW   rQ   sortedsetri   _ATTR_EXCEPTIONSr   r   r@   rG   setflagsr    r!   r   r   r   r   <module>   s8    

