o
    1ήc {                 
   @   s  d dl Z d dlZd dl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	 d dl
mZ d dlmZ d dlm  mZ d dlm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#m$Z$ d dl%m&Z& dd	 Z'd
d Z(dd Z)G dd dZ*G dd dZ+G dd dZ,G dd dZ-G dd dZ.G dd dZ/dd Z0dd Z1G dd dZ2G d d! d!Z3G d"d# d#Z4G d$d% d%Z5G d&d' d'Z6G d(d) d)Z7G d*d+ d+Z8G d,d- d-e*Z9G d.d/ d/Z:G d0d1 d1Z;G d2d3 d3Z<G d4d5 d5Z=G d6d7 d7Z>G d8d9 d9Z?g d:g d;g d<g d=g d;g d;g d;g d;d>Z@G d?d@ d@ZAG dAdB dBZBG dCdD dDe*ZCG dEdF dFZDG dGdH dHZEG dIdJ dJZFdKdL ZGdMdN ZHG dOdP dPZIdQdR ZJdSdT ZKdUdV ZLdWdX ZMdYdZ ZNG d[d\ d\ZOG d]d^ d^ZPG d_d` d`e*ZQG dadb dbe*ZRG dcdd dde*ZSG dedf dfe*ZTG dgdh dhZUG didj djZVG dkdl dlZWG dmdn dnZXG dodp dpZYG dqdr drZZG dsdt dtZ[G dudv dvZ\G dwdx dxZ]G dydz dzZ^G d{d| d|Z_G d}d~ d~Z`G dd dZaG dd dZbG dd dZcG dd dZdG dd dZeG dd dZfG dd dZgdddehfddZidd Zjdd Zkdd Zldd Zmejnjoepejqepejrkddejnjse t uddddd Zvdd Zwdd Zxdd Zydd Zzejnjoepejqepejrkddejnjse t uddddd Z{dd Z|dd Z}dd Z~dd Zdd Zdd Zdd Zejndejejgdd Zdd Zejndeded dged dgddgggdd ZddĄ ZddƄ ZddȄ Zejndedʡg dˢgdd̈́ ZdS )    N)Fractionreduce)
namedtuple)_umath_tests)assert_assert_equalassert_raisesassert_raises_regexassert_array_equalassert_almost_equalassert_array_almost_equalassert_array_max_ulpassert_allcloseassert_no_warningssuppress_warnings_gen_alignment_dataassert_array_almost_equal_nulp)_glibc_older_thanc           
      #   sL   d}t jd||d}t jd||d}| |d< ||d< dd }|d |d |dfV  dd }|d	 |d	 |d
fV  ||d< ||d< dD ]/ | | < || <  fdd}|||d  fV  ||  |d  dfV  || < || < qCdD ].}|dd| }|dd| }	| |d< ||	d< dd }||	|d| fV  ||d< ||	d< qudS )a  
    Helper to create "interesting" operands to cover common code paths:
    * scalar inputs
    * only first "values" is an array (e.g. scalar division fast-paths)
    * Longer array (SIMD) placing the value of interest at different positions
    * Oddly strided arrays which may not be SIMD compatible

    It does not attempt to cover unaligned access or mixed dtypes.
    These are normally handled by the casting/buffering machinery.

    This is not a fixture (currently), since I believe a fixture normally
    only yields once?
       i'  )dtype
fill_valuer   c                 S      | S N resr   r   B/tmp/pip-target-vg8gfxp4/lib/python/numpy/core/tests/test_umath.py<lambda>/       z,interesting_binop_operands.<locals>.<lambda>scalarsc                 S   r   r   r   r   r   r   r   r   2   r   )r   .zscalar-arrays)
r   r               c                    s   |   S r   r   r   posr   r   r   =       zoff-z-with-scalar)r%   q   N
   c                 S   s   | d S )Nr-   r   r   r   r   r   r   J   r+   zstride-)npfull)
val1val2r   r   arr1arr2	extractorstrideop1op2r   r)   r   interesting_binop_operands   s<   

r8   c                   C   s   t  dkpt  dS )z/ True if we are running on a Power PC platform.powerpcppc)platform	processormachine
startswithr   r   r   r   
on_powerpcQ   s   r?   c                  C   sX   t  dkr	d} nt rd} ndS tt| }tt| j}t|| d dkS )zThe blocklisted trig functions are not accurate on aarch64/PPC for
    complex256. Rather than dig through the actual problem skip the
    test. This should be fixed when we can move past glibc2.17
    which is the version in manylinux2014
    aarch64g٣wv=gz	ӯ=F      ?gQ@-(;)	r;   r=   r?   r.   arcsinhfloat128
complex256realabs)xv1v2r   r   r   bad_arcsinhW   s   rJ   c                   @      e Zd Zdd Zdd ZdS )_FilterInvalidsc                 C   s   t jdd| _d S )Nignoreinvalidr.   seterrolderrselfr   r   r   setup_methodj      z_FilterInvalids.setup_methodc                 C   s   t jdi | j d S Nr   rP   rS   r   r   r   teardown_methodm      z_FilterInvalids.teardown_methodN)__name__
__module____qualname__rU   rX   r   r   r   r   rL   i       rL   c                   @   $   e Zd Zdd Zdd Zdd ZdS )TestConstantsc                 C      t tjdd d S )Ng-DT!	@V瞯<)r   ncupirS   r   r   r   test_pir   rV   zTestConstants.test_pic                 C   r`   )NgiW
@ra   )r   rb   erS   r   r   r   test_eu   rV   zTestConstants.test_ec                 C   r`   )Ngox?ra   )r   rb   euler_gammarS   r   r   r   test_euler_gammax   rV   zTestConstants.test_euler_gammaN)rZ   r[   r\   rd   rf   rh   r   r   r   r   r_   q   s    r_   c                   @   rK   )TestOutc           
   
   C   s  dD ]c}t d}t d}t j|d||d}t||u  t j|d||d}t||u  t j|d|f|d}t||u  t d}t d}t jdt jd}t j||d |d\}}	t||u  t j|d ||d\}}	t|	|u  t j||||d\}}	t||u  t|	|u  t j||d f|d\}}	t||u  t j|d |f|d\}}	t|	|u  t j|||f|d\}}	t||u  t|	|u  tt t j|||d\}}	W d    n1 sw   Y  ttt j|d|||d ttt j|d|||d ttt j|dd ||d tt	t j|d||f|d tt	t j|dd|d ttt j|dg |d ttt j|dg |d ttt j|dg f|d d	|j
_tt	t j|d||d tt	t j|d||d tt	t j|d|f|d qd S )
NTF      ?r   r!   subokoutrm   @r   F)r.   arrayemptyaddr   int32frexpr	   	TypeError
ValueErrorflags	writeable)
rT   rm   aordo1o2r1r2r   r   r   test_out_subok}   sT   





zTestOut.test_out_subokc           
   	   C   s  G dd dt j}dD ]@}|dg}t j|d|d}|r%tt|| n	tt|t jk t j|dd |d}|rAtt|| n	tt|t jk t j|dd |d}|r]tt|| n	tt|t jk t j|dd|d}|rytt|| n	tt|t jk |d	g}t d
}t jd
t jd}t j|||d\}}	|rtt|	| n	tt|	t jk t j||d |d\}}	|rtt|	| n	tt|	t jk t j|d ||d\}}	|rtt|| n	tt|t jk t j||d f|d\}}	|rtt|	| n	tt|	t jk t j|d |f|d\}}	|r$tt|| n	tt|t jk t	t
 t j|||d\}}	W d    n	1 sGw   Y  qd S )Nc                   @       e Zd ZdZdd Zdd ZdS )z.TestOut.test_out_wrap_subok.<locals>.ArrayWrapr-   c                 S   s   t ||  S r   r.   asarrayviewcopy)clsarrr   r   r   __new__      z6TestOut.test_out_wrap_subok.<locals>.ArrayWrap.__new__c                 S      | t| S r   r   typerT   r   contextr   r   r   __array_wrap__      z=TestOut.test_out_wrap_subok.<locals>.ArrayWrap.__array_wrap__NrZ   r[   r\   __array_priority__r   r   r   r   r   r   	ArrayWrap       r   rj   rk   r!   rl   rn   r   rp   r   rq   )r.   ndarrayrt   r   
isinstancer   rs   ru   rv   r	   rw   )
rT   r   rm   r{   r}   r~   r   r   r   r   r   r   r   test_out_wrap_subok   s^   
	



zTestOut.test_out_wrap_subokN)rZ   r[   r\   r   r   r   r   r   r   ri   |   s    1ri   c                   @   r^   )TestComparisonsc                 C      t jt g dd gtd}ttt j|| G dd d}t | g}ttt j|| t jt jgtd}tt ||dg d S )Nr   r!   r"   rq   c                   @      e Zd Zdd ZdS )zGTestComparisons.test_ignore_object_identity_in_equal.<locals>.FunkyTypec                 S      t dNzI won't comparerw   rT   otherr   r   r   __eq__     zNTestComparisons.test_ignore_object_identity_in_equal.<locals>.FunkyType.__eq__N)rZ   r[   r\   r   r   r   r   r   	FunkyType      r   F)	r.   rr   objectr	   rx   equalrw   nanr   rT   r{   r   r   r   r   $test_ignore_object_identity_in_equal      z4TestComparisons.test_ignore_object_identity_in_equalc                 C   r   )Nr   rq   c                   @   r   )zKTestComparisons.test_ignore_object_identity_in_not_equal.<locals>.FunkyTypec                 S   r   r   r   r   r   r   r   __ne__  r   zRTestComparisons.test_ignore_object_identity_in_not_equal.<locals>.FunkyType.__ne__N)rZ   r[   r\   r   r   r   r   r   r     r   r   T)	r.   rr   r   r	   rx   	not_equalrw   r   r   r   r   r   r   (test_ignore_object_identity_in_not_equal  r   z8TestComparisons.test_ignore_object_identity_in_not_equalc                 C   s8   t ddg}tt jj|tdd ttt jj| d S )Nr   rq   T)r.   rr   r   r   r   boolr	   rw   rT   r{   r   r   r   test_error_in_equal_reduce  s   z*TestComparisons.test_error_in_equal_reduceN)rZ   r[   r\   r   r   r   r   r   r   r   r      s    r   c                   @   r   )TestAddc                 C   s<   t jddt jfdt jfgd}d|d< t|d  d d S )Nr!   r{   brq   r%   r   )r.   zerosru   float64r   sumr   r   r   r   test_reduce_alignment)  s   zTestAdd.test_reduce_alignmentN)rZ   r[   r\   r   r   r   r   r   r   (  r   r   c                   @   s  e Zd Zdd Zejdee	j
d e	j
d  ddd Zejdee	j
d e	j
d  d	d
d Zejde	dde	dddfe	dde	dddfe	dde	dddfe	dde	dddfe	dde	dddfe	dde	dddfe	ddde	ddfe	ddde	ddfe	ddde	ddfe	ddde	ddfe	ddde	ddfe	ddde	ddfe	ddde	ddfgdd Zdd Zdd Zdd Zd d! Zejd"e	jd# d$d% Zejd"e	jd# d&d' Zd(S ))TestDivisionc                 C   sd   t g d}ddkrt|d g d n	t|d g d t|d g d t|d g d d S )N)	r$   r-   Z   d   iirk   r   )	g?皙?g?r   g皙gr%   g333333)	r   r   r   r   r%   r%   r%   r%   r&   )	r$   r-   r   r   _   r   r-   r   P   )r.   rr   r   rT   rG   r   r   r   test_division_int4  s   zTestDivision.test_division_intzdtype,ex_valintuint)zTnp.arange(fo.max-lsize, fo.max, dtype=dtype),np.arange(lsize, dtype=dtype),range(15)zsnp.arange(fo.min, fo.min+lsize, dtype=dtype),np.arange(lsize//-2, lsize//2, dtype=dtype),range(fo.min, fo.min + 15)znp.arange(fo.max-lsize, fo.max, dtype=dtype),np.arange(lsize, dtype=dtype),[1,3,9,13,neg, fo.min+1, fo.min//2, fo.max//3, fo.max//4]c              	      s  t |jdk rdnd}d}t|\}}}| | }}	fdd t jdd | }
|
| }
|| }W d    n1 sCw   Y   fd	d
t||	D }d}t||ks`J |d}t|
|kslJ ||D ]C| }
t jddd | }|
 }
W d    n1 sw   Y   fdd
|D }t||ksJ |t|
|ksJ |qnt jddd d|v rt	j
tdd ||  W d    n1 sw   Y  n||  jrj|v rt	j
tdd |d  W d    n1 sw   Y  njr|d  t	j
tdd |d  W d    n	1 s#w   Y  t	j
tdd | }
|
d }
W d    n	1 sCw   Y  t jg |dd  W d    d S 1 s]w   Y  d S )Nr   r%   r   i  c                    s0   |dkrdS | r|  j kr|dkr j S | | S Nr   r%   minnr~   for   r   r   b  s   $z9TestDivision.test_division_int_boundary.<locals>.<lambda>rM   dividec                    s   g | ]	\}} ||qS r   r   ).0rG   y)c_divr   r   
<listcomp>k  s    z;TestDivision.test_division_int_boundary.<locals>.<listcomp>z(Integer arrays floor division check (//)z)Integer arrays floor division check (//=)r   overc                    s   g | ]} |qS r   r   r   i)r   divisorr   r   r   w      raisez*divide by zero encountered in floor_dividematchz$overflow encountered in floor_dividerq   )r.   iinfor   evaltolisterrstater   zipallpytestraisesFloatingPointErrorrr   )rT   r   ex_valneglsizer{   r   divisorsa_lstb_lstacdiv_abdiv_lstmsgmsg_eqdiv_ar   )r   r   r   r   test_division_int_boundary?  sp   






$z'TestDivision.test_division_int_boundary)z1np.array([fo.max, 1, 2, 1, 1, 2, 3], dtype=dtype)z3np.array([fo.min, 1, -2, 1, 1, 2, -3], dtype=dtype)z3np.arange(fo.min, fo.min+(100*10), 10, dtype=dtype)z1np.arange(fo.max-(100*7), fo.max, 7, dtype=dtype)c           	   	      sh  t | t|}| } fdd}t jdd t j|}W d    n1 s*w   Y  t||}d}||ks>J |t jddde tjt	dd	 t jt j
d
d|d W d    n1 sdw   Y   jrtjt	dd	 t jt j jddg|d W d    n1 sw   Y  W d    d S W d    d S W d    d S 1 sw   Y  d S )Nc                    s*   |dks| r|  j kr|dkrdS | | S r   r   r   r   r   r   r     s   *z7TestDivision.test_division_int_reduce.<locals>.<lambda>rM   r   z#Reduce floor integer division checkr   r   z$divide by zero encountered in reducer   r   r   rq   zoverflow encountered in reducer   r%   )r.   r   r   r   r   floor_divider   r   r   r   aranger   rr   )	rT   r   r   r{   lstr   r   r   r   r   r   r   test_division_int_reduce  s:   
	
"z%TestDivision.test_division_int_reducezdividend,divisor,quotientr!   YM   r&   r%   r   r   r'   Natc              	   C   s   |r8t |tst|s8d}|| |ksJ |d}t|gd }t|gd }t|| |ks6J |d S tjddd* tt	 ||  W d    n1 sTw   Y  W d    d S W d    d S 1 slw   Y  d S )NzTimedelta floor division checkz%Timedelta arrays floor division checkr$   r   r   rO   )
r   r   r.   isnatrr   r   r   r   r   r   )rT   dividendr   quotientr   dividend_arrayquotient_arrayr   r   r   test_division_int_timedelta  s   
"z(TestDivision.test_division_int_timedeltac                 C   sl   d}t jg dt jd}t|d | ||d d}t jddgt jd}|d | }t|| d	d	g|d d S )
Nz%Complex division implementation check)      ?      ?y      ?      ?      ?       @rq   r!   err_msgz)Complex division overflow/underflow checkgG0JVgys?)r   )r.   rr   
complex128r   )rT   r   rG   r   r   r   r   test_division_complex  s   z"TestDivision.test_division_complexc                 C   s   t jdddb t jdgt jd}d| }tt |d  tt jt j| }tt |d  tt jt j| }tt |d  tt jt j| }tt |d  d| }tt 	|d  W d    d S 1 slw   Y  d S )NrM   rO   r           rq   rA   r   )
r.   r   rr   r	  r   isinfcomplexinfr   isnan)rT   rG   r   r   r   r   test_zero_division_complex  s   "z'TestDivision.test_zero_division_complexc                 C   s   t jg dt jd}tt |d  W d    n1 sw   Y  tt t |d W d    n1 s9w   Y  tt t |d W d    d S 1 sUw   Y  d S )N)y?      ?y      ?y?      ?y?       @rq      )r.   rr   r	  r   r   rw   divmod	remainderr   r   r   r   test_floor_division_complex  s   
"z(TestDivision.test_floor_division_complexc                 C   s8   t d}tt |d d tt | d d d S )Nr-   r   r   )r.   r   r   signbitr   r   r   r   test_floor_division_signed_zero  s   
z,TestDivision.test_floor_division_signed_zeror   Floatc                 C   s  t jt j|d}t jd|d}t jd|d}t jt j|d}t jddd ttt j|| W d    n1 s8w   Y  t jddd t || W d    n1 sUw   Y  t jdd! t || t || t || t || W d    d S 1 sw   Y  d S )Nrq   rA   r  r   rM   r   r   )r.   rr   r   r  r   r	   r   r   )rT   r   fnanfonefzerfinfr   r   r   test_floor_division_errors  s    "z'TestDivision.test_floor_division_errorsc                 C   sL  t jd|d}t jd|d}t jt j|d}t jd|d}t jd|d}t jt j|d}t G}|td t 	||}	t 
|	sIJ dt|	f t 	||}	t 
|	s\J dt|	f t 	||}	t 
|	soJ dt|	f W d    n1 syw   Y  t jdd t 	||}
tt |
  W d    d S 1 sw   Y  d S )	Nr-   rq   rA   r  z)invalid value encountered in floor_dividedt: %s, div: %srM   r   )r.   r   onesrr   r   r  r   filterRuntimeWarningr   r  dtr   r   r  r   )rT   r   rG   r   r  r  r  r  supdivzr   r   r    test_floor_division_corner_cases  s&   	"z-TestDivision.test_floor_division_corner_casesN)rZ   r[   r\   r   r   markparametrize	itertoolsproductr.   sctypesr   r   timedelta64r  r
  r  r  r  	typecodesr  r'  r   r   r   r   r   3  sH    
:



r   c                 C   s   t | |t | |fS r   )r.   r   r  rG   r   r   r   r   floor_divide_and_remainder(  s   r0  c                 C   s   | t jd v r	dS dS )NUnsignedIntegerr   r   r%   )r.   r.  )r#  r   r   r   _signs,  s   r3  c                   @   s   e Zd Zdd Zdd Zdd Zejje	j
ddd	ejd
ejd dd Zejje	j
ddd	ejd
ejd ejdejejgdd Zdd Zdd Zdd ZdS )TestRemainderc              	   C   s  t jd t jd  }tt jfD ]o}t||D ]f\}}tt|t|D ]W\}}d}||j||||f }t j|d |d}	t j|d |d}
||	|
\}}t	||
 | |	|d |dkrmt
|
|  k ogd	kn  | q%t
|
|  kowd	kn  | q%qqd S )
N
AllIntegerr  *op: %s, dt1: %s, dt2: %s, sg1: %s, sg2: %sG   rq      r  r%   r   )r.   r.  r0  r  r*  r+  r3  rZ   rr   r   r   rT   r#  opdt1dt2sg1sg2fmtr   r{   r   r%  remr   r   r   test_remainder_basic5  s      z"TestRemainder.test_remainder_basicc                 C   s(  t tdd}t tdd}|dg | }|| }t t||}t dd |D }tj|tdj\}}tj|tdj\}	}
t	|	dk|dk |dk A @ d	|	}	t	|
dk|dk @ d	|
}
t
tjfD ]0}tjd
 D ](}d|j|f }||}||}|||\}}t||	|d t||
|d qhqad S )Nir   r      c                 s   s    | ]}t | V  qd S r   )r  )r   tr   r   r   	<genexpr>M  s    z;TestRemainder.test_float_remainder_exact.<locals>.<genexpr>rq   r         r  zop: %s, dtype: %sr  )listranger*  r+  r.   rr   r   Tfloatwherer0  r  r.  rZ   astyper   )rT   nlstplstr   r   argtgtr{   r   tgtdivtgtremr:  r#  r   fafbr%  r@  r   r   r   test_float_remainder_exactE  s(   "

z(TestRemainder.test_float_remainder_exactc              	   C   s   t jd }tt jfD ]m}t||D ]d\}}tddD ]Y\}}d}||j||||f }t j|d d |d}	t j|d |d}
||	|
\}}t||
 | |	|d |dkrft	|
|  k o`d	kn  | qt	|
|  kopd	kn  | qqq
d S )
Nr  r2  r6  N   g+i)+p>rq   r  r%   r   )
r.   r.  r0  r  r*  r+  rZ   rr   r   r   r9  r   r   r   test_float_remainder_roundoff_  s    
  z+TestRemainder.test_float_remainder_roundoffdarwinz_MacOS seems to not give the correct 'invalid' warning for `fmod`.  Hopefully, others always do.reasonr   r  c                 C   s  t jd|d}t jd|d}t jt j|d}t jt j|d}t jddd ttt j|| W d    n1 s8w   Y  t jddd ttt j|| W d    n1 sWw   Y  t jdd ttt j|| W d    n1 suw   Y  t jdd ttt j|| W d    n1 sw   Y  t jddd ttt j|| W d    n1 sw   Y  t jddd t || W d    d S 1 sw   Y  d S )Nr  rq   rA   r   rM   r   rN   )r.   rr   r  r   r   r	   r   r  )rT   r   fzeror  r  r  r   r   r   test_float_divmod_errorsq  s,   "z&TestRemainder.test_float_divmod_errorsfnc              	   C   s   t jd|d}t jd|d}t jt j|d}t jt j|d}t jdd9 tjtdd ||| W d    n1 s<w   Y  ||| ||| ||| ||| W d    d S 1 s`w   Y  d S )Nr  rq   rA   r   r  zinvalid valuer   )r.   rr   r  r   r   r   r   r   )rT   r   r\  rZ  r  r  r  r   r   r   test_float_remainder_errors  s   


"z)TestRemainder.test_float_remainder_errorsc                 C   s   t t jj}t jddd t d|\}}t | t|dk W d    n1 s,w   Y  t jddd tt	t jd| W d    n1 sKw   Y  t jddd tt	t jd| W d    d S 1 skw   Y  d S )NrM   )r   rO   r#   r   r   )rO   r   )
r.   finfor   tinyr   r  r  r   r	   r   )rT   r{   r%  modr   r   r   test_float_remainder_overflow  s   
"z+TestRemainder.test_float_remainder_overflowc           	   	   C   sv  t jd D ]2}t jt j|d}t jd|d}t jd|d}t jt j|d}t }|td |td t ||\}}t 	|sLJ d||f t 
|sYJ d||f t ||\}}t 
|snJ d||f tt 
|d||f f t ||\}}t 
|sJ d||f t 
|sJ d||f t ||\}}t 	|sJ d||f t 
|sJ d||f t ||\}}t 
|sJ d||f t 
|sJ d||f t ||\}}t 
|sJ d||f t 
|sJ d||f t ||\}}t 
|sJ d||f t 
|s(J d||f W d    n	1 s3w   Y  qd S )	Nr  rq   rA   r  z#invalid value encountered in divmodz$divide by zero encountered in divmodr  dt: %s, rem: %s)r.   r.  rr   r   r  r   r!  r"  r  r  r  r   )	rT   r#  r  r  r  r  r$  r%  r@  r   r   r   test_float_divmod_corner_cases  s@   
z,TestRemainder.test_float_divmod_corner_casesc                 C   s  t jd D ]L}t jd|d}t jd|d}t jt j|d}t jd|d}t t jd|d| }t ||}t||kd|  t | | }t|| kd|  qt &}|t	d |t	d t jd D ]
}t jd|d}t jd|d}t jt j
|d}	t jt j|d}t ||}tt |d||f  t |	|}t |	|}
tt |
d	||
f  tt |d||f  t |	|	}t |	|}
tt |d||f  tt |
d	||
f  t |	|}t |	|}
tt |d||f  tt |
d	||
f  t ||}t ||}
tt |d||f  tt |
d	||
f  t ||}t ||}
tt |d||f  tt |
d	||f  t ||}t ||}
tt |d||f  tt |
d	||f  qhW d    d S 1 sw   Y  d S )
Nr  rA   rq   r  zdt: %sz&invalid value encountered in remainderz!invalid value encountered in fmodrb  zdt: %s, fmod: %s)r.   r.  rr   r   	nextafterr  r   r   r!  r"  r  r  fmod)rT   r#  r  r  r  r   r{   r@  r$  r  re  r   r   r   !test_float_remainder_corner_cases  s\   
$z/TestRemainder.test_float_remainder_corner_casesN)rZ   r[   r\   rA  rT  rV  r   r(  xfailsysr;   r>   r)  r.   r.  r[  re  r  r]  ra  rc  rf  r   r   r   r   r4  3  s$     r4  c                   @   sV  e Zd ZedddgZdd dd dd dd d	d d
Zejeed ed ejeed ed e	j
eed ed e	jeed ed ejeed ed ejeed ed iZejdejd dd Zejdejd dd Zejdejd ejdejd ejdejejejeje	j
e	jgejddddd ZdS ) +TestDivisionIntegerOverflowsAndDivideByZeroresult_typenocastcastedc                 C      dS Nr   r   rq   r   r   r   r     r   z4TestDivisionIntegerOverflowsAndDivideByZero.<lambda>c                 C   s   t | jS r   r.   r   r   rq   r   r   r   r         c                 C   s   t | j S r   ro  rq   r   r   r   r         c                 C   s   t | jdfS rn  ro  rq   r   r   r   r         c                 C   s   t | j dfS rn  ro  rq   r   r   r   r         )zeror   neg_minmin-zeroneg_min-zerort  r   ru  rv  rw  r   Integerc           
   	   C   sX  t t|jd|}|D ]\}}}}tjtdd || }W d    n1 s(w   Y  |j|jks5J ||t|jjksBJ || }|j|jksNJ ||dksVJ t||}||dksdJ tjtdd t	||\}}	W d    n1 s~w   Y  |j|	j  kr|jksJ  J ||t|jjksJ ||	dksJ qd S )Nr%   zoverflow encounteredr   r   )
r8   r.   r   r   r   warnsr"  r   re  r  
rT   r   to_checkr6   r7   r4   operand_identifierr   res1res2r   r   r   test_signed_division_overflow  s&   
"zITestDivisionIntegerOverflowsAndDivideByZero.test_signed_division_overflowr5  c           
   	   C   s   t dd|}|D ]q\}}}}tjtdd || }W d    n1 s$w   Y  |j|jks1J ||dks9J tjtdd t||\}}	W d    n1 sSw   Y  |j|	j  krf|jksiJ  J ||dksqJ ||	dksyJ qd S )Nr   r   zdivide by zeror   )r8   r   ry  r"  r   r.   r  rz  r   r   r   test_divide_by_zero3  s   
"z?TestDivisionIntegerOverflowsAndDivideByZero.test_divide_by_zerodividend_dtyper   divisor_dtype	operationwarnr   c           	   	      s   fddt ddD }tjdg|d}t jt|jkr|tjtjtjfv rt	j
tdd! | t j|d}|| j|  ksKJ W d    n1 sUw   Y  |D ];}t	j
tdd* t|||d	}t| j|  gt|  }t|| W d    n1 sw   Y  q\d S | t j|d}|| j|  ksJ |D ]$}t|||d	}t| j|  gt|  }t|| qd S )
Nc                    s(   g | ]}t jt  jg|  d qS )rq   )r.   rr   r   r   r   r  r   r   r   S  s
    
zNTestDivisionIntegerOverflowsAndDivideByZero.test_overflows.<locals>.<listcomp>r      r%   rq   zoverflow encountered inr   f)rG  r.   rr   r   itemsizer  r   operatorfloordivr   ry  r"  r   r   overflow_resultsrk  flattenlenr   rl  )	rT   r  r  r  arraysr   resultr{   expected_arrayr   r  r   test_overflowsF  s   



z:TestDivisionIntegerOverflowsAndDivideByZero.test_overflowsN)rZ   r[   r\   r   rj  helper_lambdasr.   r  re  r  r`  r  r   r  r  r   r(  r)  r.  r  r  r,  r   r  r   r   r   r   ri     s\    

ri  c                   @   rK   )TestCbrtc                 C   s   t ttdd d d S )N      r"   )r   r.   cbrtfloat32rS   r   r   r   test_cbrt_scalar  s   zTestCbrt.test_cbrt_scalarc                 C   st   t dddt jt j g}tt |d | tt t t j tt t jt j tt t j t j  d S )NrA          @      r"   )	r.   rr   r  r   r  r   r  r   r   r   r   r   r   	test_cbrt  s
   zTestCbrt.test_cbrtN)rZ   r[   r\   r  r  r   r   r   r   r    r]   r  c                   @   sT   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )	TestPowerc                 C   sD  t g d}t|d g d t|d | t|d g d | }|dC }t|g d t|d g d t|d	 d
tdtdg tt jdddD ]#\}}}dd |D }t|d	 ||d t j||d t|||d qPtt j	dddD ]#\}}}dd |D }t|d	 ||d t j||d t|||d q|d S )N)rA   r        @r   rA   rA   rA   r   r!   )rA         @      "@r%   )rA   rk   gUUUUUU?rk   rA   r"   unary   r   r   max_sizec                 S      g | ]}t |qS r   rb   sqrtr   r   r   r   r     r   z.TestPower.test_power_float.<locals>.<listcomp>r  ro   r  c                 S   r  r   r  r   r   r   r   r     r   )
r.   rr   r   r   r   rb   r  r   r  r   )rT   rG   r   ro   inpr   expr   r   r   test_power_float  s4    zTestPower.test_power_floatc              	      s  t g d}t|d g d t|d | t|d g d t|d g d t|d	 g d
 t|d g d t|d g d t|d g d t|d tdtdtdg d|d d   t|d    fdddD  dd }tdt jtdt jfD ]<}t j|gt jd}t j	dd# ||d | ||d ||  ||d || |  W d    n1 sw   Y  qd S )N)r         @      @      @      @r   r  r   r!   )y            @y            (@y            8@r"   )y      &       y      G      "@y     @]      F@r#   )y            8y     ]      ^y     x      ur%   )y?ٿy;;?؉؉ͿyQ?{GzĿr&   )yQ{GzĿyn_YK&q-yǺa2U0*r'   )yI+Mb?y:бbpԗ|pyF̱~&|grk   r  r  r  rA      c                    s   g | ]}|  qS r   r   r   normr   r   r         z0TestPower.test_power_complex.<locals>.<listcomp>)y         ~@y   0vA   ΋Ay  A   ]Ac                 S   s    t | j|j t | j|j d S r   )r   rE   imagr/  r   r   r   assert_complex_equal  s   z:TestPower.test_power_complex.<locals>.assert_complex_equalrq   rM   rN   )
r.   rr   r   r   rb   r  r  r  complex_r   )rT   rG   r  r&  r   r  r   test_power_complex  s4   zTestPower.test_power_complexc                 C   s   t dg}t dg}t tt jt jg}dd }dD ]}|t ||| q|t |d| t jdd* |t |d	| dD ]}|t || | qD|t |d
| W d    d S 1 sew   Y  d S )Ny                y      ?        c                 S   s6   t | t |} }t| j|j t| j|j d S r   )r.   r   r   rE   r  r/  r   r   r   r    s   z7TestPower.test_power_zero.<locals>.assert_complex_equal)	gQ?rk   r         ?r!   r"   r#   r$   gffffff@r   rM   rN                 ?y      𿚙?)r.   rr   r  r   powerr   )rT   rt  onecnanr  pr   r   r   test_power_zero  s   "zTestPower.test_power_zeroc                 C   s   t g dt j}|d }t|d j|ju  t|g d tt ||  t|g d |t dggg }t|jd d S )Nr   r  g9b->  @)r   r#   	   r!   )r   r   r"   )	r.   rr   int16r   r   r   may_share_memoryr   shape)rT   rG   r   r   r   r   test_fast_power  s   zTestPower.test_fast_powerc                 C   s.   t ddgd}t ||}t|ddg d S )N   i8l   2X0)r.   rr   r  r   rT   r{   r   r   r   r   test_integer_power  s   zTestPower.test_integer_powerc                 C   sz   t jd }|D ]}t jdd|d}tt |dt | qt jd }|D ]}t jd|d}tt |dt | q%d S )Nrx  r   r-   rq   r   r1  r.   r.  r   r   r  	ones_likerT   dtypesr#  r   r   r   r   -test_integer_power_with_integer_zero_exponent  s   

z7TestPower.test_integer_power_with_integer_zero_exponentc                 C   s>   t jd }|D ]}t jd|d}tt d|t | qd S )Nr5  r-   rq   r   r  r  r   r   r   test_integer_power_of_1  s
   
z!TestPower.test_integer_power_of_1c                 C   s@   t jd }|D ]}t jdd|d}tt d|t | qd S )Nr5  r   r-   rq   r   )r.   r.  r   r   r  
zeros_liker  r   r   r   test_integer_power_of_zero  s
   
z$TestPower.test_integer_power_of_zeroc                 C   s   t jd }|D ]B}t jg d|d}t jg d|d}t jd|d}t jd|d}ttt j|| ttt j|| ttt j|| ttt j|| qd S )Nrx  )r   r   r!   r"   rq   )r   r   r!   r'   r   r%   )r.   r.  rr   r	   rx   r  )rT   r  r#  r{   r   r  minusoner   r   r   test_integer_to_negative_power  s   
z(TestPower.test_integer_to_negative_powerN)rZ   r[   r\   r  r  r  r  r  r  r  r  r  r   r   r   r   r    s    r  c                   @   r   )TestFloat_powerc                 C   s`   d}d}t ||D ]$\}}d||f }tjd|d}t||}t|jjt|jk| q	d S )Nz?bhilBHILefdgFDGddddddddddddgDDGzdtin: %s, dtout: %sr   rq   )r   r.   r   float_powerr   r   name)rT   arg_typeres_typedtindtoutr   rN  r   r   r   r   test_type_conversion  s   z$TestFloat_power.test_type_conversionN)rZ   r[   r\   r  r   r   r   r   r    r   r  c                   @   sJ   e Zd Zejdg ddd Zejdedddd	 Zd
d Z	dS )TestLog2r#  r  r~   gc                 C   s@   g d}g d}t j||d}t j||d}tt || d S )Nr   r!   r#             @   rB     i   i   r   r   r!   r"   r#   r$      r  r  r  r-   rq   )r.   rr   r   log2rT   r#  rG   r   xfyfr   r   r   test_log2_values*  s
   zTestLog2.test_log2_valuesr   r   A   c                 C   s(   t d| }t|t|d| d d S )Nr  zat exponent %dr  )r.   r  r   rI  )rT   r   vr   r   r   test_log2_ints2  s   zTestLog2.test_log2_intsc                 C   s   t tdd t ttjtj ttttj tjddK}t	ddt
 tttd ttttj  t tdtj  t|d jt
u  t|d	 jt
u  t|d
 jt
u  W d    d S 1 sqw   Y  d S )NrA   r  T)recordalways       r   r   r!   )r   r.   r  r  r   r  r   warningscatch_warningsfilterwarningsr"  category)rT   wr   r   r   test_log2_special9  s   "zTestLog2.test_log2_specialN)
rZ   r[   r\   r   r(  r)  r  rG  r  r  r   r   r   r   r  )  s    

r  c                   @   r   )TestExp2c                 C   sJ   g d}g d}dD ]}t j||d}t j||d}tt || q
d S )Nr  r  r  rq   )r.   rr   r   exp2rT   rG   r   r#  r  r  r   r   r   test_exp2_valuesI  s   zTestExp2.test_exp2_valuesN)rZ   r[   r\   r  r   r   r   r   r  H  r   r  c                   @   4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestLogAddExp2c           	      C      g d}g d}g d}t g dg dD ]-\}}ttj||d}ttj||d}ttj||d}tt||||d qd S N)r   r!   r"   r#   r$   )r$   r#   r"   r!   r   )r  r  r  r  r  r  )r  r  r  rq   decimal)r   r.   r  rr   r   
logaddexp2	rT   rG   r   r&  r#  dec_r  r  zfr   r   r   test_logaddexp2_valuesT     z%TestLogAddExp2.test_logaddexp2_valuesc                 C   b   g d}g d}g d}dD ] }t j||d}t j||d}t j||d}tt ||| qd S N)@B C )r	  r
  r  r  )r	  r  r	  r  r  rq   )r.   rr   r   r  rT   rG   r   r&  r#  logxflogyflogzfr   r   r   test_logaddexp2_range^     z$TestLogAddExp2.test_logaddexp2_rangec           	      C      t j}|| || |d| dg}||| | d|d| g}|||| ||ddg}t jdd, dD ] }t j||d}t j||d}t j||d}tt ||| q1W d    d S 1 s]w   Y  d S Nr   r   rN   r  rq   )r.   r  r   rr   r   r  	rT   r  rG   r   r&  r#  r  r  r  r   r   r   test_infh     "zTestLogAddExp2.test_infc                 C      t tttjtj t tttjtj t tttjd t ttdtj t tttjtj d S rn  )r   r.   r  r  r   r  rS   r   r   r   test_nant  
   zTestLogAddExp2.test_nanc                 C   sb   t tjjtj  t tjg tj  t tjtj gtj  t tjtj dgd d S rn  )r   r.   r  identityr  r   rS   r   r   r   test_reduce{  s   zTestLogAddExp2.test_reduceN)rZ   r[   r\   r  r  r  r  r  r   r   r   r   r  R  s    

r  c                   @   rK   )TestLogc              	   C   s   g d}g d}dD ]}d}t j||d}t j||d| }tt || q
t g d}t |}tt j||d| dD ]#}t jdd	 t |j}t | W d    n1 s]w   Y  q?d S )
Nr  r  r  9B.?rq   )r!   g      ?r"   gRQ?gl#	?r  r   r  )r.   rr   r   logr   r^  maxrT   rG   r   r#  log2_r  r  r   r   r   test_log_values  s"   
zTestLog.test_log_valuesc           	   	   C   s   t jd t g d}t dd}|D ]P}t t jjdd|d}| }d|d	d
d< t |}t |}|D ]*}t	t |d d | |d d | dd t	t |d d | |d d | dd q:qd S )N*   r(   r'   r&   r%   r   r!   r"   r#   r!   r   {Gz?      Y@lowhighsizerA   r"   r%   r#   nulp)
r.   randomseedrr   r   r   uniformr   r  r   )	rT   stridessizesiix_f64	x_specialy_true	y_specialjjr   r   r   test_log_strides  s   

(*zTestLog.test_log_stridesN)rZ   r[   r\   r!  r7  r   r   r   r   r    s    r  c                   @   rK   )TestExpc                 C   sR   g d}g d}dD ]}d}t j||d}t j||d| }tt || q
d S )Nr  r  r  r  rq   )r.   rr   r   r  r  r   r   r   test_exp_values  s   zTestExp.test_exp_valuesc              	   C   s   t jd t g d}t dd}|D ],}t t jjdd|d}t |}|D ]}tt |d d | |d d | dd q*qd S )	Nr"  r#  r!   r   r$  g(@r&  r*  )	r.   r,  r-  rr   r   r   r.  r  r   )rT   r/  r0  r1  r2  r4  r6  r   r   r   test_exp_strides  s   
*zTestExp.test_exp_stridesN)rZ   r[   r\   r9  r:  r   r   r   r   r8        	r8  c                   @   s   e Zd Zdd Zejjeddddd Zdd	 Z	d
d Z
ejdg ddd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zejjedddd(d) Zd*d+ Zd,S )-TestSpecialFloatsc                 C   s   t jddd9 t jt jt jdg}t jt j t jt j g}dD ]}t j||d}t j||d}tt || qW d    d S 1 sCw   Y  d S )Nr   )underr   r  r  rq   )r.   r   r   r  rr   r   r  r  r   r   r   r9    s   "z!TestSpecialFloats.test_exp_values2.17z<Older glibc versions may not raise appropriate FP exceptionsrX  c                 C   s   t jdd0 ttt jt d ttt jt d ttt jt d ttt jt d W d    n1 s9w   Y  t jdd1 ttt jt d ttt jt d ttt jt d ttt jt d W d    d S 1 sxw   Y  d S )	Nr   r   r%  g =`XCg      @)r=  g     @g =`X)r.   r   r	   r   r  r  r   rS   r   r   r   test_exp_exceptions  s   "z%TestSpecialFloats.test_exp_exceptionsc           	   	   C   s  t jddm t jt jt jt jt j t jg}t jt j t jt j ddg}t jt j t jt j ddg}dD ]7}t j||d}t j||d}t j||d}tt || tt || tt || tt 	|| q4W d    n1 svw   Y  t jdd	= d
D ]2}t
tt jt jd|d t
tt jt jd|d t
tt jt jd|d t
tt j	t jd|d qW d    n1 sw   Y  t jddu d
D ]j}t
tt jt jt j |d t
tt jt jd|d t
tt jt jt j |d t
tt jt jd|d t
tt jt jt j |d t
tt jt jd|d t
tt j	t jt j |d t
tt j	t jd|d qW d    n	1 sEw   Y  t  t jddd}t | W d    d S 1 sfw   Y  d S )NrM   r  r  r         r  rq   r   r   r  r~   rN   g    eAr  )r.   r   r   r  rr   r   r  r  log10log1pr	   r   r   )	rT   rG   r   y1pr#  r  r  yf1pr{   r   r   r   r!    s|   $z!TestSpecialFloats.test_log_valuesc                 C   s,  t jddA t jt jt jt jg}t jt j t jt j g}dD ] }t j||d}t j||d}tt || tt || qW d    n1 sJw   Y  t jdd7 tt	t jt 
t j  tt	t jt 
t j tt	t jt 
t j  tt	t jt 
t j W d    d S 1 sw   Y  d S )NrM   r  r  rq   r   rN   )r.   r   r   r  rr   r   sincosr	   r   r  r  r   r   r   test_sincos_values  s    	"z$TestSpecialFloats.test_sincos_valuesr#  r  c                 C   s   t jdd7 t jt jt jt jdg}t jt j t jt j dg}t j||d}t j||d}tt || W d    d S 1 s@w   Y  d S )NrM   r  r  rq   )r.   r   r   r  rr   r   r  r  r   r   r   test_sqrt_values  s   "z"TestSpecialFloats.test_sqrt_valuesc                 C   sv   t jt jt jt jddddg}t jt j t jt j ddddg}dD ]}t j||d}t j||d}tt || q d S )Nr  rA   rE  r  r  rq   )r.   r   r  rr   r   rF   r  r   r   r   test_abs_values$  s    z!TestSpecialFloats.test_abs_valuesc                 C   s   t jt jt jt jg}t jt j t jt j g}t jdd# dD ]}t j||d}t j||d}tt || qW d    n1 sBw   Y  t jdd! ttt jt jddd ttt jt jd	d
d W d    d S 1 sqw   Y  d S )NrM   r  r  rq   r   r?  gnFr  gZbtir~   )	r.   r   r  r   rr   r   squarer	   r   r  r   r   r   test_square_values,  s"   "z$TestSpecialFloats.test_square_valuesc              	   C   s   t jdd> t jt jddt jt j g}t jt j t jt j ddg}dD ]}t j||d}t j||d}tt || q$W d    n1 sGw   Y  t jdd dD ]}ttt jt jd|d qUW d    d S 1 sow   Y  d S )	NrM   r  r  rE  r  rq   r   r   )	r.   r   r   r  rr   r   
reciprocalr	   r   r  r   r   r   test_reciprocal_values;  s    "z(TestSpecialFloats.test_reciprocal_valuesc              	   C   s  t jdd= t jt j ddt jt j g}t jt jddt jt jg}dD ]}t j||d}t j||d}tt || q#W d    n1 sFw   Y  t jdd) dD ]}ttt jt jt j|d ttt jt jt j |d qTW d    d S 1 s}w   Y  d S )	NrM   r  r  rE  rB  rq   r   rN   )	r.   r   r   r  rr   r   tanr	   r   rT   in_ro   r#  in_arrout_arrr   r   r   test_tanI  s&   "zTestSpecialFloats.test_tanc                 C   s  t jddA t jt j t jt j g}t jt jt jt jg}dD ] }t j||d}t j||d}tt || tt || qW d    n1 sJw   Y  t jt jfD ]4}t jt j ddfD ](}dD ]#}t jdd tt	|t j||d W d    n1 sw   Y  qdq`qUd S )	NrM   r  rB  rq   r  rA  r   rN   )
r.   r   r   r  rr   r   arcsinarccosr	   r   )rT   rR  ro   r#  rS  rT  callablevaluer   r   r   test_arcsincosY  s,   	z TestSpecialFloats.test_arcsincosc                 C   s   t jdd1 t jt j g}t jt jg}dD ]}t j||d}t j||d}tt || qW d    d S 1 s:w   Y  d S )NrM   r  rB  rq   )r.   r   r   rr   r   arctanrQ  r   r   r   test_arctanj  s   "zTestSpecialFloats.test_arctanc                 C   s   t jt j t jt j g}t jt jt jt j g}dD ]}t j||d}t j||d}tt || qt jdd! ttt jt jddd ttt jt jddd W d    d S 1 s\w   Y  d S 	NrB  rq   r   r?  g      ^@r  g     @r~   )	r.   r   r  rr   r   sinhr   r	   r   rQ  r   r   r   	test_sinhs  s   "zTestSpecialFloats.test_sinhc                 C   s   t jt j t jt j g}t jt jt jt jg}dD ]}t j||d}t j||d}tt || qt jdd! ttt jt jddd ttt jt jddd W d    d S 1 s[w   Y  d S r]  )	r.   r   r  rr   r   coshr   r	   r   rQ  r   r   r   	test_cosh  s   "zTestSpecialFloats.test_coshc                 C   sb   t jt j t jt j g}t jt jddg}dD ]}t j||d}t j||d}tt || qd S )NrA   r  rB  rq   )r.   r   r  rr   r   tanhrQ  r   r   r   	test_tanh  s   zTestSpecialFloats.test_tanhc                 C   sh   t jt j t jt j g}t jt jt jt j g}dD ]}t j||d}t j||d}tt || qd S )NrB  rq   )r.   r   r  rr   r   rB   rQ  r   r   r   test_arcsinh  s   zTestSpecialFloats.test_arcsinhc              
   C   s   t jdd> t jt j t jt j ddg}t jt jt jt jdt jg}dD ]}t j||d}t j||d}tt || q$W d    n1 sGw   Y  dt j fD ])}t jdd dD ]}ttt jt j||d q]W d    n1 svw   Y  qRd S )	NrM   r  rA   r  rB  rq   r   rN   )	r.   r   r   r  rr   r   arccoshr	   r   rT   rR  ro   r#  rS  rT  rY  r   r   r   test_arccosh  s&   zTestSpecialFloats.test_arccoshc              
   C   s  t jddC t jt j t jt j dddg}t jt jt jt jt jt j t jg}dD ]}t j||d}t j||d}tt || q)W d    n1 sLw   Y  dt jt j ddfD ]*}t jd	d	d
 dD ]}ttt jt j||d qgW d    n1 sw   Y  q[d S )NrM   r  rA   r  r  rB  rq   g)\(?r   r  )	r.   r   r   r  rr   r   arctanhr	   r   rf  r   r   r   test_arctanh  s&   "zTestSpecialFloats.test_arctanhc              
   C   s   t jdd8 t jt j t jt j g}t jt jt jdg}dD ]}t j||d}t j||d}tt || qW d    n1 sAw   Y  dD ]*}t jddd dD ]}ttt jt j||d qTW d    n1 smw   Y  qHd S )	NrM   r  r  rB  rq   )     @@g     @r   )r   r=  )	r.   r   r   r  rr   r   r  r	   r   rf  r   r   r   	test_exp2  s&   zTestSpecialFloats.test_exp2c              	   C   s   t jdd8 t jt j t jt j g}t jt jt jdg}dD ]}t j||d}t j||d}tt || qW d    n1 sAw   Y  dD ]$}t jdd ttt jt j|d	d W d    n1 sgw   Y  qHd S )
NrM   r  r  rB  rq   )g      i@rj  r   r?  r  )	r.   r   r   r  rr   r   expm1r	   r   rf  r   r   r   
test_expm1  s"   zTestSpecialFloats.test_expm1N)rZ   r[   r\   r9  r   r(  rg  r   r@  r!  rI  r)  rJ  rK  rM  rO  rU  rZ  r\  r_  ra  rc  rd  rg  ri  rk  rm  r   r   r   r   r<    s:    

1
	
r<  c                   @   s&   e Zd Zejdg ddd ZdS )TestFPClassr5   r(   r&   r%   r   r!   r#   c                 C   s  t jt jt j t jt j ddddddg
dd}t jt jt j t jt j ddddd	d
g
dd}t g d}t g d}t g d}t g d}tt |d d | |d d |  tt |d d | |d d |  tt |d d | |d d |  tt |d d | |d d |  tt |d d | |d d |  tt |d d | |d d |  tt |d d | |d d |  tt |d d | |d d |  d S )Nr  rA   rE  r  giVQ  giVQ r~   rq   gJ-& 6gJ-& r  )
TTFFFFFFFF)
FFTTFFFFFF)
FTFTTFTFFT)
FFFFTTTTTT)	r.   rr   r   r  r   r  r  r  isfinite)rT   r5   arr_f64arr_f32r   r  signfiniter   r   r   test_fpclass  s   ..$$$$$$$(zTestFPClass.test_fpclassN)rZ   r[   r\   r   r(  r)  ru  r   r   r   r   rn    s    rn  c                   @   s8   e Zd Zejdg dejdddgdd ZdS )		TestLDExpr5   ro  r   r  r~   c                 C   s   t jg d|d}t jg ddd}t jd|d}tt j|d d | |d d | |d d | dt jd|dd d |  t|d d | t jd|dd d |  d S )N)g      ?      ?rk   rA   rA   r  r  g       @rq   )r"   r!   r   r   r   r%   r&   r'   r   r  r  )r.   rr   r   r   ldexpr   )rT   r   r5   mantr  ro   r   r   r   
test_ldexp  s
   H,zTestLDExp.test_ldexpN)rZ   r[   r\   r   r(  r)  rz  r   r   r   r   rv    s    rv  c                   @   sR   e Zd Zejdg dejdddgejjej	d ddd	d
 Z
dS )	TestFRExpr5   ro  r   r  r~   linuxzAnp.frexp gives different answers for NAN/INF on windows and linuxrX  c           
   	   C   s  t jt jt jt jt j ddddg|d}t jt jt jt jt j ddddg|d}t jg dd	d}t jd
|d}dt jd
d	d }t j|d d | |d d | |d d | fd\}}	t|d d | | t|d d | |	 t|d d | |d d |  t|d d | |d d |  d S )Nr  rE  rA   r  rq   rk         )r   r   r   r   r   r   r   r   r   r  r!   r  )r.   rr   r   r  r   rv   r   )
rT   r   r5   r   	mant_trueexp_trueout_mantout_expry  r  r   r   r   
test_frexp  s   ((4"zTestFRExp.test_frexpN)rZ   r[   r\   r   r(  r)  skipifrh  r;   r>   r  r   r   r   r   r{    s    r{  )r   r  r%  )r         Yr%  )r   rA   r%  )r   r  r%  )r  absoluterN  rL  rintfloorceiltruncc                   @   r   )TestAVXUfuncsc              	   C   s^  t g d}t jd t D ]\}}|d }|d }|d }tddD ]}tt |}t t jj	|||d}	t 
|	}
t |	}||}|dkr`t||	t | t||
t 
| nt||	t ||d t||
t 
||d |dkr||	}||
}|D ]$}t||
d d | |d d |  t||	d d | |d d |  qq&qd S )	Nr#  r"  r   r   r!   r  r&  maxulp)r.   rr   r,  r-  
avx_ufuncsitemsrG  getattrr  r.  r   
longdoubler   r   )rT   r/  funcprop	maxulperrminvalmaxvalr)  myfuncx_f32r2  x_f128	y_true128y_true32y_true64r6  r   r   r   test_avx_based_ufunc  s@   


"$z"TestAVXUfuncs.test_avx_based_ufuncN)rZ   r[   r\   r  r   r   r   r   r    r   r  c                   @   ,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestAVXFloat32Transcendentalc                 C   R   t jd t t jjdddd}t |}tt |t t |dd d S )Nr"  r  fffffV@r  r&  r"   r  )r.   r,  r-  r  r.  r   r   r  rT   r  r2  r   r   r   test_exp_float327     
$z-TestAVXFloat32Transcendental.test_exp_float32c                 C   r  )Nr"  r    r  r&  r#   r  )r.   r,  r-  r  r.  r   r   r  r  r   r   r   test_log_float32=  r  z-TestAVXFloat32Transcendental.test_log_float32c                 C   s  t jd d}t |d }t jjd||d}t t jjdd|d}tds5t d	t j| ||< t 	|}t
t |t t |d
d t
t |t t |d
d | }t
t j||dt t |d
d t
t j||dt t |d
d d S )Nr"  r     r   r&  r  r%  r>  g   vH7Br!   r  r  )r.   r,  r-  int_randintr  r.  r   randr   r   rG  rH  r   )rT   Nr   indexr  r2  tx_f32r   r   r   test_sincos_float32C  s   
  $(z0TestAVXFloat32Transcendental.test_sincos_float32c              	   C   s4  t jd t g d}t dd}|D ]}t t jjdd|d}| }d|d	d
d< t |}t 	|}t 
|}t |}	|D ]R}
tt |d d |
 |d d |
 dd tt 	|d d |
 |d d |
 dd tt 
|d d |
 |d d |
 dd tt |d d |
 |	d d |
 dd qDqd S )Nr"  r#  r!   r   r$  r  r&  g     L@r"   r%   r#   r*  )r.   r,  r-  rr   r   r  r.  r   r  r  rG  rH  r   )rT   r/  r0  r1  r  x_f32_larger  log_truesin_truecos_truer6  r   r   r   test_strided_float32U  s$   



(((*z1TestAVXFloat32Transcendental.test_strided_float32N)rZ   r[   r\   r  r  r  r  r   r   r   r   r  6  s
    r  c                   @   r  )TestLogAddExpc           	      C   r  r  )r   r.   r  rr   r   	logaddexpr   r   r   r   test_logaddexp_valuesh  r  z#TestLogAddExp.test_logaddexp_valuesc                 C   r  r  )r.   rr   r   r  r  r   r   r   test_logaddexp_ranger  r  z"TestLogAddExp.test_logaddexp_rangec           	      C   r  r  )r.   r  r   rr   r   r  r  r   r   r   r  |  r  zTestLogAddExp.test_infc                 C   r  rn  )r   r.   r  r  r   r  rS   r   r   r   r    r  zTestLogAddExp.test_nanc                 C   s,   t tjjtj  t tjg tj  d S r   )r   r.   r  r  r  r   rS   r   r   r   r       zTestLogAddExp.test_reduceN)rZ   r[   r\   r  r  r  r  r  r   r   r   r   r  g  s    

r  c                   @   rK   )	TestLog1pc                 C   s0   t tdtd t tdtd d S )N皙?g333333?ư>gzo ?)r   rb   rD  r  rS   r   r   r   
test_log1p     zTestLog1p.test_log1pc                 C   s   t jddd; ttt jt j ttt jt j ttdt j  ttdt j ttt j t j W d    d S 1 sEw   Y  d S )NrM   r  r  rA  )r.   r   r   rb   rD  r   r  rS   r   r   r   test_special  s   "zTestLog1p.test_specialN)rZ   r[   r\   r  r  r   r   r   r   r        r  c                   @   r^   )	TestExpm1c                 C   s8   t tdtdd  t tdtdd  d S )Nr  r   r  )r   rb   rl  r  rS   r   r   r   rm    s   zTestExpm1.test_expm1c                 C   s`   t ttjtj t tdd t tdd t ttjtj t ttj d d S )Nr  rE  r  )r   rb   rl  r.   r  rS   r   r   r   r    s
   zTestExpm1.test_specialc                 C   s:   t d}t|t| |t j}t|t| d S )Ng-q=)r.   r   r   rb   rl  rK  r	  r   r   r   r   test_complex  s   
zTestExpm1.test_complexN)rZ   r[   r\   rm  r  r  r   r   r   r   r    s    r  c                   @   rK   )	TestHypotc                 C   s.   t tddtd t tddd d S Nr   r!   r   )r   rb   hypotr  rS   r   r   r   test_simple  s   zTestHypot.test_simplec                 C   sX   t tjddgd t tjg dd t tjg dd ttjg d d S )Nr  r        @)r  r  r   )r  g      (@      4@g      9@r  )r   rb   r  r   r   rS   r   r   r   r    s   zTestHypot.test_reduceN)rZ   r[   r\   r  r  r   r   r   r   r    r  r  c              
   C   \   t jdd tt t| |d| |t| |f  W d    d S 1 s'w   Y  d S )NrM   rN   zhypot(%s, %s) is %s, not nan)r.   r   r   r  rb   r  r/  r   r   r   assert_hypot_isnan  
   "r  c              
   C   r  )NrM   rN   zhypot(%s, %s) is %s, not inf)r.   r   r   r  rb   r  r/  r   r   r   assert_hypot_isinf  r  r  c                   @   r^   )TestHypotSpecialValuesc                 C   s   t tjtj t tjd d S Nr   )r  r.   r   rS   r   r   r   test_nan_outputs     z'TestHypotSpecialValues.test_nan_outputsc                 C   sR   t tjtj t tjtj t tjd t dtj t tjtj t tjd d S )Nr   g      7@)r  r.   r   r  rS   r   r   r   test_nan_outputs2  s   z(TestHypotSpecialValues.test_nan_outputs2c                 C   s   t tjtjd d S rn  )r   rb   r  r.   r  rS   r   r   r   test_no_fpe  r   z"TestHypotSpecialValues.test_no_fpeN)rZ   r[   r\   r  r  r  r   r   r   r   r    s    r  c              	   C   s.   t tt| |d| |t| |f  d S )Nzarctan(%s, %s) is %s, not nan)r   r.   r  rb   arctan2r/  r   r   r   assert_arctan2_isnan  s   .r  c              	   C   s>   t tt| |ot| |dkd| |t| |f  d S )Nr   zarctan(%s, %s) is %s, not +infr   r.   r  rb   r  r/  r   r   r   assert_arctan2_ispinf     >r  c              	   C   s>   t tt| |ot| |dk d| |t| |f  d S )Nr   zarctan(%s, %s) is %s, not -infr  r/  r   r   r   assert_arctan2_isninf  r  r  c              	   C   s@   t t| |dkott| | d| |t| |f  d S )Nr   zarctan(%s, %s) is %s, not +0r   rb   r  r.   r  r/  r   r   r   assert_arctan2_ispzero  s   @r  c              	   C   s>   t t| |dkott| |d| |t| |f  d S )Nr   zarctan(%s, %s) is %s, not -0r  r/  r   r   r   assert_arctan2_isnzero  r  r  c                   @   st   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )TestArctan2SpecialValuesc                 C   sL   t tdddtj  t tdddtj  t tdddtj  d S )Nr   rw  r%         п      ?)r   rb   r  r.   rc   rS   r   r   r   test_one_one  s   z%TestArctan2SpecialValues.test_one_onec                 C   s6   t ttjtjtj t ttjtjtj  d S r   )r   rb   r  r.   PZERONZEROrc   rS   r   r   r   test_zero_nzero  s   z(TestArctan2SpecialValues.test_zero_nzeroc                 C   s    t tjtj ttjtj d S r   r  r.   r  r  r  rS   r   r   r   test_zero_pzero  s   z(TestArctan2SpecialValues.test_zero_pzeroc                 C   s2   t ttjdtj t ttjdtj  d S )Nr%   r   rb   r  r.   r  rc   r  rS   r   r   r   test_zero_negative     z+TestArctan2SpecialValues.test_zero_negativec                 C   s   t tjd ttjd d S r  r  rS   r   r   r   test_zero_positive     z+TestArctan2SpecialValues.test_zero_positivec                 C   8   t tdtjdtj  t tdtjdtj  d S )Nr   rk   r  rS   r   r   r   test_positive_zero     z+TestArctan2SpecialValues.test_positive_zeroc                 C   r  )Nr%   r}  r  rS   r   r   r   test_negative_zero  r  z+TestArctan2SpecialValues.test_negative_zeroc                 C   s2   t tdtjtj t tdtjtj  d S Nr   r%   )r   rb   r  r.   NINFrc   rS   r   r   r   test_any_ninf  r  z&TestArctan2SpecialValues.test_any_ninfc                 C   s   t dtj tdtj d S r  )r  r.   r  r  rS   r   r   r   test_any_pinf  r  z&TestArctan2SpecialValues.test_any_pinfc                 C   s:   t ttjddtj  t ttj ddtj  d S )Nr   rk   r}  r   rb   r  r.   r  rc   rS   r   r   r   test_inf_any!  s    z%TestArctan2SpecialValues.test_inf_anyc                 C   sB   t ttjtj dtj  t ttj tj dtj  d S )Nr  g      r  rS   r   r   r   test_inf_ninf&  s   $z&TestArctan2SpecialValues.test_inf_ninfc                 C   s>   t ttjtjdtj  t ttj tjdtj  d S )Nrw  r  r  rS   r   r   r   test_inf_pinf+  s   "z&TestArctan2SpecialValues.test_inf_pinfc                 C   s.   t tjtj t tjtj t tjtj d S r   )r  r.   r   r  rS   r   r   r   test_nan_any0  s   z%TestArctan2SpecialValues.test_nan_anyN)rZ   r[   r\   r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r    s    r  c                   @   r^   )	TestLdexpc                 C   sp   t ttdtjtd|d t ttdtjtd|d t ttdtjtd|d d S )Nr  r"         0@)r   rb   rx  r.   rr   r  r   r  )rT   tpr   r   r   _check_ldexp8  s   


zTestLdexp._check_ldexpc                 C   sN   t tddd | tj | tj | tj | d | d d S )Nr  r"   r  r   l)r   rb   rx  r  r.   int8r  ru   rS   r   r   r   rz  @  s   
zTestLdexp.test_ldexpc                 C   s|   t jdd. t t dj}t t dj}ttd|t j	 ttd|d W d    d S 1 s7w   Y  d S )NrM   r?  r  r  r   )
r.   r   r   r   r  r   r   rb   rx  r  )rT   imaximinr   r   r   test_ldexp_overflowJ  s   "zTestLdexp.test_ldexp_overflowN)rZ   r[   r\   r  rz  r  r   r   r   r   r  7  s    
r  c                   @   L   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )TestMaximumc           	      C      t jd }t jd }t d}|d d d }t jj}|D ]}||}||}t||d t||d q|D ]:}||}||}t||d t||d t j|d d d< t j|d d d< t||t j t||t j q9d S )NAllFloatr5  r  r%   r-   r!   )r.   r.  r   maximumr   rK  r   r   	rT   dfltdintseq1seq2r  r#  tmp1tmp2r   r   r   r  T  (   






zTestMaximum.test_reducec                 C   0   t tjddgd t tjddgd d S Nr                  @y      ?      @)r   r.   r  r   rS   r   r   r   test_reduce_complexi  r  zTestMaximum.test_reduce_complexc                 C   L   t j}t d||g}t |d|g}t |||g}tt ||| d S rn  )r.   r   rr   r   r  rT   r   arg1arg2ro   r   r   r   test_float_nansm  
   zTestMaximum.test_float_nansc                 C   ^   t dD ](}ttdt}d}ttdt}tt||dk tt||dk qd S Nr   r   rA   )rG  r.   rr   rI  r   r   r  rT   r   rG   r   r&  r   r   r   test_object_nanst     zTestMaximum.test_object_nansc                 C   z   t j}t|dtd|t||fD ])}t jd||gtd}t j|d|gtd}t j|||gtd}tt ||| qd S Nr   rq   )r.   r   r  rr   r   r  rT   r   r  r  r  ro   r   r   r   test_complex_nans      zTestMaximum.test_complex_nansc                 C   s,   t jdtd}|d }tt ||| d S Nr$   rq   r   )r.   r   r   r   r  rT   r  r  r   r   r   test_object_array     zTestMaximum.test_object_arrayc              
   C   s  t ddddt jt j t jt j g}t ddt jddt jddg}t ddt jdt jt jt jdg}t d}t ddddddt jdg}tt ||| tt |d d d	 |d d d	 |d d d	  tt |d d
 |d d d	 t dt jddg tt |d d d |d d t ddt jg tt j|d dd	 |d d d |d d d dt ddt jg t|| d S Ng      rA   g      $@r  rA  r  r  r  r!   r#   r"   r  r  )r.   rr   r   r  r   r   r  )rT   r2   r3   maxtruero   out_maxtruer   r   r   test_strided_array  s   &"
042BzTestMaximum.test_strided_arrayc                 C   s   t jt jt jt jg}|D ]P}t |j}t |j}|d}t |t j	}|t j	 |f|t j	 |f|||f|t j
t j
fg}|D ]\}}	}
tt |g|	g|
g tt j||	g|
 q?qd S Nr   )r.   float16r  r   r  r^  r   r  rd  r  r   r   r  r   rT   r  r#  dtmindtmaxd1d1_next
test_casesrH   rI   expectedr   r   r   test_precision  s    zTestMaximum.test_precisionNrZ   r[   r\   r  r  r  r  r  r!  r&  r0  r   r   r   r   r  S      r  c                   @   r  )TestMinimumc           	      C   r   )Nr  r5  r  r%   r   r!   )r.   r.  r   minimumr   rK  r   r   r  r   r   r   r    r
  zTestMinimum.test_reducec                 C   0   t tjddgd t tjddgd d S r  )r   r.   r4  r   rS   r   r   r   r    r  zTestMinimum.test_reduce_complexc                 C   r  rn  )r.   r   rr   r   r4  r  r   r   r   r    r  zTestMinimum.test_float_nansc                 C   r  r  )rG  r.   rr   rI  r   r   r4  r  r   r   r   r    r  zTestMinimum.test_object_nansc                 C   r  r  )r.   r   r  rr   r   r4  r  r   r   r   r    r  zTestMinimum.test_complex_nansc                 C   s,   t jdtd}|d }tt ||| d S r  )r.   r   r   r   r4  r   r   r   r   r!    r"  zTestMinimum.test_object_arrayc              
   C   s  t ddddt jt j t jt j g}t ddt jddt jddg}t ddt jdt jt jdt j g}t d}t ddddddt jdg}tt ||| tt |d d d	 |d d d	 |d d d	  tt |d d
 |d d d	 t dt jddg tt |d d d |d d t ddt jg tt j|d dd	 |d d d |d d d dt ddt jg t|| d S r#  )r.   rr   r   r  r   r   r4  )rT   r2   r3   mintruero   out_mintruer   r   r   r&    s   &$
042BzTestMinimum.test_strided_arrayc                 C   s   t jt jt jt jg}|D ]N}t |j}t |j}|d}t |t j	}|t j	|f|t j	|f|||f|t j
t j
fg}|D ]\}}	}
tt |g|	g|
g tt j||	g|
 q=qd S r'  )r.   r(  r  r   r  r^  r   r  rd  r  r   r   r4  r   r)  r   r   r   r0    s    

zTestMinimum.test_precisionNr1  r   r   r   r   r3    r2  r3  c                   @   r  )TestFmaxc           	      C      t jd }t jd }t d}|d d d }t jj}|D ]}||}||}t||d t||d q|D ]8}||}||}t||d t||d t j|d d d< t j|d d d< t||d t||d q9d S )Nr  r5  r  r%   r-   r!   r  )r.   r.  r   fmaxr   rK  r   r   r  r   r   r   r    (   






zTestFmax.test_reducec                 C   r  r  )r   r.   r:  r   rS   r   r   r   r  !  r  zTestFmax.test_reduce_complexc                 C   L   t j}t d||g}t |d|g}t dd|g}tt ||| d S rn  )r.   r   rr   r   r:  r  r   r   r   r  %  r  zTestFmax.test_float_nansc                 C   z   t j}t|dtd|t||fD ])}t jd||gtd}t j|d|gtd}t jdd|gtd}tt ||| qd S r  )r.   r   r  rr   r   r:  r  r   r   r   r  ,  r  zTestFmax.test_complex_nansc                 C   s   t jt jt jt jg}|D ]O}t |j}t |j}|d}t |t j	}|t j	 |f|t j	 |f|||f|t j
|fg}|D ]\}}	}
tt |g|	g|
g tt j||	g|
 q>qd S r'  )r.   r(  r  r   r  r^  r   r  rd  r  r   r   r:  r   r)  r   r   r   r0  4  s    
zTestFmax.test_precisionNrZ   r[   r\   r  r  r  r  r0  r   r   r   r   r8        r8  c                   @   r  )TestFminc           	      C   r9  )Nr  r5  r  r%   r   r!   r   )r.   r.  r   fminr   rK  r   r   r  r   r   r   r  K  r;  zTestFmin.test_reducec                 C   r5  r  )r   r.   rA  r   rS   r   r   r   r  `  r  zTestFmin.test_reduce_complexc                 C   r<  rn  )r.   r   rr   r   rA  r  r   r   r   r  d  r  zTestFmin.test_float_nansc                 C   r=  r  )r.   r   r  rr   r   rA  r  r   r   r   r  k  r  zTestFmin.test_complex_nansc                 C   s   t jt jt jt jg}|D ]M}t |j}t |j}|d}t |t j	}|t j	|f|t j	|f|||f|t j
|fg}|D ]\}}	}
tt |g|	g|
g tt j||	g|
 q<qd S r'  )r.   r(  r  r   r  r^  r   r  rd  r  r   r   rA  r   r)  r   r   r   r0  s  s    


zTestFmin.test_precisionNr>  r   r   r   r   r@  J  r?  r@  c                   @   r  )
TestBoolc                 C   s@   t jdt jd}ttt j| ttt j| ttt j|| d S )Nr   rq   )r.   r   bool_r	   rw   negativepositivesubtractr   r   r   r   test_exceptions  s   zTestBool.test_exceptionsc           	      C   s   g d}g d}t jd t jd  d }tt j|D ]X}t j||d}t j||d}g d}t jt jfD ]}t|||t	| q4g d}t j
t jfD ]}t|||t	| qLg d	}t jt jfD ]}t|||t	| qdqd S )
N)r   r   r"   r!   )r   r#   r   r!   r  r5  ?rq   FTTTFFFTFTTF)r.   r.  mapr   r   
logical_orr  r   rK  r   logical_andr4  logical_xorr   )	rT   input1input2r.  r   r  r  ro   r  r   r   r   test_truth_table_logical  s*   z!TestBool.test_truth_table_logicalc                 C   sb   g d}g d}g d}t t||| g d}t t||| g d}t t||| d S )N)FFTT)FTFTrI  rJ  rK  )r   r.   
bitwise_orbitwise_andbitwise_xor)rT   r  r  ro   r   r   r   test_truth_table_bitwise  s   z!TestBool.test_truth_table_bitwisec                 C   s   t g dt}t g dt}t g dt}t g t}||||g}|D ]}tt j|t| q&|D ]}tt j|t| q6|D ]}tt j	||
 d dk qFd S )N)r   r   r   r   )r   r   r   r   )r   r   r   r   r!   r   )r.   rr   r   r   rN  r   r   rM  anyrO  r   )rT   nonesomeeveryrs   arrsr   r   r   r   r    s    zTestBool.test_reduceN)rZ   r[   r\   rG  rR  rV  r  r   r   r   r   rB    s
    rB  c                   @   s:   e Zd Zdd dD Zdd Zdd Zdd	 Zd
d ZdS )TestBitwiseUFuncsc                 C   r  r   )r.   r   )r   cr   r   r   r     r   zTestBitwiseUFuncs.<listcomp>z?bBhHiIlLqQOc                 C   sj  | j D ]}tjdg|d}tjdg|d}d|j }tt|||d tt|||d tt||||d tt||||d tt||||d tt||||d tt||||d tt||||d tt||||d tt||||d tt||||d tt||||d tt||||d tt||||d qd S )Nr   rq   r%   	dt = '%s'r  )	bitwise_typesr.   rr   charr   bitwise_notrS  rU  rT  rT   r#  r   r   r   r   r   r   test_values  s&   

zTestBitwiseUFuncs.test_valuesc                 C   s   | j D ]F}tjdg|d}tjdg|d}d|j }tt|j|k| tt||j|k| tt||j|k| tt	||j|k| qd S )Nr   rq   r%   r^  )
r_  r.   rr   r`  r   ra  r   rS  rU  rT  rb  r   r   r   
test_types  s   

zTestBitwiseUFuncs.test_typesc                 C   s:   t tjjdkd t tjjdkd t tjjdkd d S )Nr   rS  rU  r%   rT  )r   r.   rS  r  rU  rT  rS   r   r   r   test_identity  s   zTestBitwiseUFuncs.test_identityc                 C   sl  t jt jt jf}| jD ]1}t jdg|d}t jdg|d}|D ]}d||f }t||||d t||||d qq| jd d D ]1}t jg |d}|D ]%}d||f }t j|j|d}||}	t|	||d t	|	j
|j
k| qOqD|D ]}d|f }t jg td}|j}||}	t|	||d qx|D ]}d|f }t jdgtd}
t	t||
tu | qd S )Nr   rq   r%   zdt: '%s', f: '%s'r  zdt: '%s'T)r.   rS  rU  rT  r_  rr   r   r   r  r   r   r   r   r   )rT   binary_funcsr#  r   r   r  r   rs   rO  r   btyper   r   r   test_reduction  s:   




z TestBitwiseUFuncs.test_reductionN)rZ   r[   r\   r_  rc  rd  re  rh  r   r   r   r   r\    s    r\  c                   @   r   )TestIntc                 C   sd   t jdt jd}t jdtd}| }d|d d d< |d d d }tt j||dd t|| d S )Nr-   rq   r  Fr!   r  )r.   r   r  r   r   r   logical_not)rT   rG   r|   rO  osr   r   r   test_logical_not	  s   zTestInt.test_logical_notN)rZ   r[   r\   rl  r   r   r   r   ri  	  r   ri  c                   @   r   )TestFloatingPointc                 C   s   t tjd d S r  )r   rb   FLOATING_POINT_SUPPORTrS   r   r   r   test_floating_point(	     z%TestFloatingPoint.test_floating_pointN)rZ   r[   r\   ro  r   r   r   r   rm  '	  r   rm  c                   @   r   )TestDegreesc                 C   s,   t ttjd t tdtj d d S )N     f@r}       V)r   rb   degreesr.   rc   rS   r   r   r   test_degrees-	  r  zTestDegrees.test_degreesN)rZ   r[   r\   ru  r   r   r   r   rq  ,	  r   rq  c                   @   r   )TestRadiansc                 C   s,   t tdtj t tddtj  d S )Nrr  rs  r}  )r   rb   radiansr.   rc   rS   r   r   r   test_radians3	  r  zTestRadians.test_radiansN)rZ   r[   r\   rx  r   r   r   r   rv  2	  r   rv  c                   @   r   )TestHeavsidec                 C   s   t g ddt jt jt j gg}t g ddt jddgg}| }d|d< t|d}t|| t|d}t|| |t j	}t|t 	d}t||t j	 t|t 	d}t||t j	 d S )	N)g      >r   r  r  g      @)r  r  rk   rA   rA   r  r   r   r!   rk   )
r.   rr   r   r  r   rb   	heavisider   rK  r  )rT   rG   expectedhalf	expected1hr   r   r   test_heaviside9	  s   "

zTestHeavside.test_heavisideN)rZ   r[   r\   r  r   r   r   r   ry  8	  r   ry  c                   @   r^   )TestSignc                 C   s   t t jt j t jdddg}t |j}t ddt jdddg}t jdd# t|}t	|| t||}t	|| t	|| W d    d S 1 sMw   Y  d S )Nr  r  r  rA   r  rM   rN   )
r.   rr   r  r   r   r  r   rb   rs  r   )rT   r{   ro   rO  r   r   r   r   	test_signO	  s   


"zTestSign.test_signc                 C   s6   t g d}t |t}t |}t|| d S )N)r   r   r   )r.   rr   rs  rK  r   r   )rT   foor{   r   r   r   r   test_sign_dtype_object[	  s   
zTestSign.test_sign_dtype_objectc                 C   s   dd }t t| d S )Nc                  S   s"   t t jg} t | t}d S r   )r.   rr   r   rs  rK  r   )r  r{   r   r   r   r  f	  s   z5TestSign.test_sign_dtype_nan_object.<locals>.test_nan)r	   rw   )rT   r  r   r   r   test_sign_dtype_nan_objectd	  s   z#TestSign.test_sign_dtype_nan_objectN)rZ   r[   r\   r  r  r  r   r   r   r   r  N	  s    	r  c                   @   r  )

TestMinMaxc                    s  t jdft jdffD ]z\}}t|d|dD ]n\} t jD ]c}t j j|d d d < t j |<  fdd}t $}|	t
d tt   |d	 tt   |d	 W d    n1 scw   Y  d
 |< t  d
d d |< t  dd qqq
d S )Nr  r  r  r  rq   c                      s   d f S )Nz%r
%sr   r   r  r   r   r   r   w	  rp  z0TestMinMax.test_minmax_blocked.<locals>.<lambda>z#invalid value encountered in reduce)r   g    _Br  g    _)r.   r  r   r   rG  r)  r   r   r   r!  r"  r   r  r  r   r   )rT   r#  szro   r   emsgr$  r   r  r   test_minmax_blockedn	  s,   
zTestMinMax.test_minmax_blockedc                 C   sH   t jdt jddd t j}t| |d  t| |d  d S )N   rq   r#   r(   r   )r.   r   r  r   r   r   r  r   rT   r~   r   r   r   test_lower_align	  s    zTestMinMax.test_lower_alignc                 C   sX   dD ]'}t jt jt jfD ]}t t jt jg| |dD ]}tt |t j qqqd S )N)r!   r#   r  r  r  rq   )	r.   r  r(  	complex64diagflatrr   r   r   r   )rT   r   r#  r}   r   r   r   test_reduce_reorder	  s    zTestMinMax.test_reduce_reorderc                 C   s   t t jd}t|t j d S r  )r.   r4  r   r   r   r   r   r   test_minimize_no_warns	  r  z!TestMinMax.test_minimize_no_warnsN)rZ   r[   r\   r  r  r  r  r   r   r   r   r  m	  s
    	r  c                   @   rK   )TestAbsoluteNegativec           
   	   C   sp  t jdft jdffD ]\}}t|d|dD ]\}}}dd |D }t j||d t|||d t|d	k  d
d |D }t j||d t|||d t j	t j
 t j
fD ]^}t|jD ]V}t j|j|d}	|	 |d d < |||< |t j
 krz| n||	|< tt ||	|d t j||d t||	|d t| d| |d d| }	t j||d t||	|d q\qUqq
d S )Nr  r$   r  r  c                 S   r  r   )rb   r  r   r   r   r   r   	  r   z=TestAbsoluteNegative.test_abs_neg_blocked.<locals>.<listcomp>r  r  r   c                 S   s   g | ]}d | qS )r%   r   r   r   r   r   r   	  r  rq   r%   )r.   r  r   r   r  r   r   r   rD  r   r  rG  r)  r   r   rF   )
rT   r#  r  ro   r  r   rO  r  r   r~   r   r   r   test_abs_neg_blocked	  s8   z)TestAbsoluteNegative.test_abs_neg_blockedc                 C   s   t jdt jddd t j}tt || tt ||  t j||d t jt ||d t j||d t jt ||d d S )Nr  rq   r#   r(   r  )	r.   r   r  r   r   r   rF   rD  r  r  r   r   r   r  	  s    z%TestAbsoluteNegative.test_lower_alignN)rZ   r[   r\   r  r  r   r   r   r   r  	  s    r  c                   @   rK   )TestPositivec                 C   sD   t tttg}|D ]}tjd|d}t|}t||t|d qd S )Nr$   rq   r  )	r   rI  r  r   r.   r   rE  r   str)rT   valid_dtypesr   rG   r  r   r   r   
test_valid	  s   
zTestPositive.test_validc                 C   s   t t td W d    n1 sw   Y  t t ttd W d    n1 s0w   Y  t t ttjdgtd W d    n1 sOw   Y  t t ttjdgtd W d    d S 1 sow   Y  d S )NTz
2000-01-01r  rq   bar)r	   rw   r.   rE  
datetime64rr   r  r   rS   r   r   r   test_invalid	  s   



"zTestPositive.test_invalidN)rZ   r[   r\   r  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d Z	dd Z
dd Zdd Zejdddgdd Zejdddgdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2S )3TestSpecialMethodsc                    s   G  fddd   }t ||}t|jtd |j\}}}t|t ju  tt|d t|d | t|d | t|d d S )Nc                           e Zd Zdd Z fddZdS )z/TestSpecialMethods.test_wrap.<locals>.with_wrapc                 S   
   t dS r  r.   r   rS   r   r   r   	__array__	     
z9TestSpecialMethods.test_wrap.<locals>.with_wrap.__array__c                    s     }||_ ||_|S r   )r   r   rT   r   r   r}   	with_wrapr   r   r   	  s   z>TestSpecialMethods.test_wrap.<locals>.with_wrap.__array_wrap__NrZ   r[   r\   r  r   r   r  r   r   r  	      r  r   r!   r   )	rb   r4  r   r   r.   r   r   r   r  )rT   r{   rG   r  argsr   r   r  r   	test_wrap	  s   
zTestSpecialMethods.test_wrapc                    s   G dd dt j  fdd}|dd dd  |dd d	d  |d
d dd  |dd dd  |dd dd  |dd dd  |dd dd  |dd dd  |dd dd  d S )Nc                   @   s@   e Zd ZdZdZdd Zdd Zdd Zedd	 Z	d
d Z
dS )zKTestSpecialMethods.test_wrap_and_prepare_out.<locals>.StoreArrayPrepareWrapNc                 S   s   t d| S rW   )r.   r   r   r   r   r   r   r   	  rp  zSTestSpecialMethods.test_wrap_and_prepare_out.<locals>.StoreArrayPrepareWrap.__new__c                 S      |d | _ |S r  )
_wrap_argsrT   objr   r   r   r   r   	     
zZTestSpecialMethods.test_wrap_and_prepare_out.<locals>.StoreArrayPrepareWrap.__array_wrap__c                 S   r  r  )_prepare_argsr  r   r   r   __array_prepare__	  r  z]TestSpecialMethods.test_wrap_and_prepare_out.<locals>.StoreArrayPrepareWrap.__array_prepare__c                 S   s   | j | jfS r   )r  r  rS   r   r   r   r  	  s   zPTestSpecialMethods.test_wrap_and_prepare_out.<locals>.StoreArrayPrepareWrap.argsc                 S   rm  )Nr{   r   rS   r   r   r   __repr__ 
     zTTestSpecialMethods.test_wrap_and_prepare_out.<locals>.StoreArrayPrepareWrap.__repr__)rZ   r[   r\   r  r  r   r   r  propertyr  r  r   r   r   r   StoreArrayPrepareWrap	  s    
r  c                    s|     }| | |j \}}||}zt|| t|| W d S  ty= } ztddd|d|d|gd }~ww )N
z"Bad arguments passed in ufunc callz expected:              {}z __array_prepare__ got: {}z __array_wrap__ got:    {})r  r   AssertionErrorjoinformat)f_call
f_expectedr{   r  r  r/  re   r  r   r   do_test
  s    

z=TestSpecialMethods.test_wrap_and_prepare_out.<locals>.do_testc                 S   s   t | dS rn  r.   rt   r{   r   r   r   r   
  rp  z>TestSpecialMethods.test_wrap_and_prepare_out.<locals>.<lambda>c                 S      | dfS rn  r   r  r   r   r   r   
  r+   c                 S   s   t | dd S rn  r  r  r   r   r   r   
  rq  c                 S   r  rn  r   r  r   r   r   r   
  r+   c                 S   s   t j| dd dS Nr   r  r  r  r   r   r   r   
  rr  c                 S   r  rn  r   r  r   r   r   r   
  r+   c                 S      t j| dddS )Nr   r   r  r  r  r   r   r   r   
  rr  c                 S   r  rn  r   r  r   r   r   r   
  r+   c                 S   s   t dd| S rn  r  r  r   r   r   r   
  rq  c                 S   
   dd| fS rn  r   r  r   r   r   r   
     
 c                 S   s   t jdd| dS r  r  r  r   r   r   r   
  rr  c                 S   r  rn  r   r  r   r   r   r   
  r  c                 S   s   t jdd| fdS r  r  r  r   r   r   r   
  rs  c                 S   r  rn  r   r  r   r   r   r   
  r  c                 S   r  Nr   FrJ  r  r  r   r   r   r    
  rr  c                 S   r  rn  r   r  r   r   r   r    
  r+   c                 S   s   t jdd| ddS r  r  r  r   r   r   r   !
  rs  c                 S   r  rn  r   r  r   r   r   r   !
  r  )r.   r   )rT   r  r   r  r   test_wrap_and_prepare_out	  s   z,TestSpecialMethods.test_wrap_and_prepare_outc                 C   sF   G dd dt j}| }t|d}tt|| t|t d d S )Nc                   @   r   )z=TestSpecialMethods.test_wrap_with_iterable.<locals>.with_wrapr-   c                 S   s   t d|  S r  r   r  r   r   r   r   )
  r   zETestSpecialMethods.test_wrap_with_iterable.<locals>.with_wrap.__new__c                 S   r   r   r   r   r   r   r   r   ,
  r   zLTestSpecialMethods.test_wrap_with_iterable.<locals>.with_wrap.__array_wrap__Nr   r   r   r   r   r  &
  r   r  r   )r.   r   rb   multiplyr   r   r   rr   rT   r  r{   rG   r   r   r   test_wrap_with_iterable#
  s
   	z*TestSpecialMethods.test_wrap_with_iterablec                 C   sH   G dd dt j}| }t d| }tt|| t|t d d S )Nc                   @   s   e Zd ZdZdd ZdS )z7TestSpecialMethods.test_priority_with_scalar.<locals>.Ar-   c                 S   s   t dd|  S )NrA   r   r   r  r   r   r   r   :
  rY   z?TestSpecialMethods.test_priority_with_scalar.<locals>.A.__new__N)rZ   r[   r\   r   r   r   r   r   r   A7
  s    r  r   )r.   r   r   r   r   r   rr   )rT   r  r{   rG   r   r   r   test_priority_with_scalar4
  s
   z,TestSpecialMethods.test_priority_with_scalarc                    s:   G  fddd   }t ||}t|jtd d S )Nc                       r  )z3TestSpecialMethods.test_old_wrap.<locals>.with_wrapc                 S   r  r  r  rS   r   r   r   r  E
  r  z=TestSpecialMethods.test_old_wrap.<locals>.with_wrap.__array__c                    s     }||_ |S r   )r   )rT   r   r}   r  r   r   r   H
  s   zBTestSpecialMethods.test_old_wrap.<locals>.with_wrap.__array_wrap__Nr  r   r  r   r   r  D
  r  r  r   )rb   r4  r   r   r.   r   )rT   r{   rG   r   r  r   test_old_wrapB
  s   	z TestSpecialMethods.test_old_wrapc           	      C   s  G dd d}G dd d|}G dd d|}t d}| }| }| }tj}tt|||t ju  tt||||u  tt||||u  tt||||u  tt||||u  tt||||u  tt||||u  tt||||u  tt||||u  tt||||u  tt||||u  tt||||u  tt||||u  tt||||u  ttt||u  ttt||u  ttt||u  d S )Nc                   @   rK   )z+TestSpecialMethods.test_priority.<locals>.Ac                 S   r  r  r  rS   r   r   r   r  T
  r  z5TestSpecialMethods.test_priority.<locals>.A.__array__c                 S   s   t |  }||_||_|S r   )r   r   r   r  r   r   r   r   W
  s   
z:TestSpecialMethods.test_priority.<locals>.A.__array_wrap__Nr  r   r   r   r   r  S
  r]   r  c                   @      e Zd ZdZdS )z+TestSpecialMethods.test_priority.<locals>.Br  NrZ   r[   r\   r   r   r   r   r   B]
      r  c                   @   r  )z+TestSpecialMethods.test_priority.<locals>.Cg      D@Nr  r   r   r   r   C`
  r  r  r   )r.   r   rb   r4  r   r   r   r  )	rT   r  r  r  rG   r{   r   r]  r  r   r   r   test_priorityQ
  s2   

z TestSpecialMethods.test_priorityc                 C   s8   G dd d}| }t ttj|| t ttjj| d S )Nc                   @   rK   )z/TestSpecialMethods.test_failing_wrap.<locals>.Ac                 S   r  Nr!   r  rS   r   r   r   r  
  r  z9TestSpecialMethods.test_failing_wrap.<locals>.A.__array__c                 S      t r   RuntimeErrorr   r   r   r   r   
  r  z>TestSpecialMethods.test_failing_wrap.<locals>.A.__array_wrap__Nr  r   r   r   r   r  ~
  r]   r  )r	   r  rb   r  r   rT   r  r{   r   r   r   test_failing_wrap|
  s   z$TestSpecialMethods.test_failing_wrapc                    sx   t dg G  fdddt j}G dd dt j}t d|}t d|}tdD ]}tttj	d|| q.d S )NrA   c                          e Zd Z fddZdS )z4TestSpecialMethods.test_failing_out_wrap.<locals>.Okc                    s    S r   r   rT   r  	singletonr   r   r   
  r  zCTestSpecialMethods.test_failing_out_wrap.<locals>.Ok.__array_wrap__NrZ   r[   r\   r   r   r  r   r   Ok
      r  c                   @   r   )z5TestSpecialMethods.test_failing_out_wrap.<locals>.Badc                 S   r  r   r  r  r   r   r   r   
  r  zDTestSpecialMethods.test_failing_out_wrap.<locals>.Bad.__array_wrap__Nr  r   r   r   r   Bad
  r   r  r   r-   )
r.   rr   r   rs   r   rG  r	   r  rb   rv   )rT   r  r  okbadr   r   r  r   test_failing_out_wrap
  s   z(TestSpecialMethods.test_failing_out_wrapc                 C   s*   G dd d}| }t t||d  d S )Nc                   @      e Zd Zdd ZdddZdS )z,TestSpecialMethods.test_none_wrap.<locals>.Ac                 S   r  r  r  rS   r   r   r   r  
  r  z6TestSpecialMethods.test_none_wrap.<locals>.A.__array__Nc                 S   s   d S r   r   r   r   r   r   r   
  r  z;TestSpecialMethods.test_none_wrap.<locals>.A.__array_wrap__r   r  r   r   r   r   r  
      r  )r   rb   r  r  r   r   r   test_none_wrap
  s   z!TestSpecialMethods.test_none_wrapc                 C   sD   G dd d}| }t ||}t|td tt|tj d S )Nc                   @   r   )z:TestSpecialMethods.test_default_prepare.<locals>.with_wrapr-   c                 S   r  r  r  rS   r   r   r   r  
  r  zDTestSpecialMethods.test_default_prepare.<locals>.with_wrap.__array__c                 S      |S r   r   r   r   r   r   r   
  r  zITestSpecialMethods.test_default_prepare.<locals>.with_wrap.__array_wrap__N)rZ   r[   r\   r   r  r   r   r   r   r   r  
  r   r  r   )rb   r4  r   r.   r   r   r   r  r   r   r   test_default_prepare
  s
   	z'TestSpecialMethods.test_default_prepare	use_whereTFc                    sr   G  fdddt j t dj d}|r"t j||t dd}nt ||}t|t d tt|  d S )Nc                          e Zd ZdZ fddZdS )z5TestSpecialMethods.test_prepare.<locals>.with_preparer-   c                       t |j dS Nr   r.   rr   r   r   with_preparer   r   r  
  s   zGTestSpecialMethods.test_prepare.<locals>.with_prepare.__array_prepare__NrZ   r[   r\   r   r  r   r  r   r   r  
      r  r   r  Tr  r!   )r.   r   rr   r   rt   r   r   rT   r  r{   rG   r   r  r   test_prepare
  s   zTestSpecialMethods.test_preparec                    s   G  fdddt j t dgj d}|r"t j|||dgd}nt |||}tt ||  t|t dg tt|  d S )Nc                       r  )z9TestSpecialMethods.test_prepare_out.<locals>.with_preparer-   c                    r  r  r  r   r  r   r   r  
  rV   zKTestSpecialMethods.test_prepare_out.<locals>.with_prepare.__array_prepare__Nr  r   r  r   r   r  
  r  r  r   r  Tr  r!   )	r.   r   rr   r   rt   r   shares_memoryr   r   r  r   r  r   test_prepare_out
  s   z#TestSpecialMethods.test_prepare_outc                 C   s<   G dd d}| }t ttj|| t ttj||dd d S )Nc                   @   r  )z2TestSpecialMethods.test_failing_prepare.<locals>.Ac                 S   r  r  r  rS   r   r   r   r  
  r  z<TestSpecialMethods.test_failing_prepare.<locals>.A.__array__Nc                 S   r  r   r  r   r   r   r   r  
  r  zDTestSpecialMethods.test_failing_prepare.<locals>.A.__array_prepare__r   )rZ   r[   r\   r  r  r   r   r   r   r  
  r  r  Fr  )r	   r  rb   r  r  r   r   r   test_failing_prepare
  s   z'TestSpecialMethods.test_failing_preparec                 C   s(   G dd d}| }t tdtj| d S )Nc                   @   r   )z6TestSpecialMethods.test_array_too_many_args.<locals>.Ac                 S   r  r  r  )rT   r   r   r   r   r   r  
  r  z@TestSpecialMethods.test_array_too_many_args.<locals>.A.__array__N)rZ   r[   r\   r  r   r   r   r   r  
  r   r  z2 required positional)r
   rw   r.   r   r  r   r   r   test_array_too_many_args
  s   z+TestSpecialMethods.test_array_too_many_argsc                 C   s   G dd d}G dd dt j}| }t dg|}t ||}t j|||d}t|d | t|d | t|d t j t|d t j t|d d	 t|d d	 t|d
 ||f t|d
 ||f t|d i  t|d d|fi d S )Nc                   @   r   )z1TestSpecialMethods.test_ufunc_override.<locals>.Ac                 _      | ||||fS r   r   rT   r  methodinputskwargsr   r   r   __array_ufunc__
  r   zATestSpecialMethods.test_ufunc_override.<locals>.A.__array_ufunc__NrZ   r[   r\   r  r   r   r   r   r  
  r   r  c                   @   r  )z9TestSpecialMethods.test_ufunc_override.<locals>.MyNDArrayr   Nr  r   r   r   r   	MyNDArray
  r  r  r   r  r   r!   __call__r"   r#   ro   )r.   r   rr   r   r  r   )rT   r  r  r{   r   res0r}  r   r   r   test_ufunc_override
  s    z&TestSpecialMethods.test_ufunc_overridec                 C   s  dd }dd }t |dd}t |dd}G dd	 d	}G d
d d|}G dd d}G dd d}G dd d|}	| }
| }| }| }t |
|}t|d t ||}t|d t ||
}t|d	 t|jd t ||
}t|jd | }|	 }ttt j|| t|jd t|jd d |_|_ttt j|| t|jd t|jd d|_ttt j|| t|jd d|_ttt jd| t|jd t||
ddd	 t|d|
dd	 t|dd|
d	 t||
|
dd	 t||
d|
d	 t||
d|d	 t||
d|d t||
|dd d|_t|||dd t|jd d|_t|d||d t|jd d|_t||
||d	 t|jd d|_t||
||d	 t|jd t|dd|d tt|dd| tt||d| tt||dd t||
dddd	 t|d|
ddd	 t|dd|
dd	 t|ddd|
d	 t||
|ddd	 t|d|
d|d	 t||d|
dd t||dd|
d t||
dd|d | }|	 }tt|ddd| t|jd d|_tt|dd|| t|jd t|jd | }d |_|_tt|d||| t|jd t|jd t|jd d |_ |_|_tt||||| t|jd t|jd t|jd d S )Nc                 S   s   | | | S r   r   )r{   r   r]  r   r   r   tres_mul  s   z<TestSpecialMethods.test_ufunc_override_mro.<locals>.tres_mulc                 S   s   | | | | S r   r   )r{   r   r]  r~   r   r   r   
quatro_mul  rp  z>TestSpecialMethods.test_ufunc_override_mro.<locals>.quatro_mulr"   r   r#   c                   @   r   )z5TestSpecialMethods.test_ufunc_override_mro.<locals>.Ac                 _   rm  )Nr  r   r  r   r   r   r    r  zETestSpecialMethods.test_ufunc_override_mro.<locals>.A.__array_ufunc__Nr  r   r   r   r   r    r   r  c                   @   r   )z8TestSpecialMethods.test_ufunc_override_mro.<locals>.ASubc                 _   rm  )NASubr   r  r   r   r   r     r  zHTestSpecialMethods.test_ufunc_override_mro.<locals>.ASub.__array_ufunc__Nr  r   r   r   r   r    r   r  c                   @   r   )z5TestSpecialMethods.test_ufunc_override_mro.<locals>.Bc                 _   rm  )Nr  r   r  r   r   r   r  $  r  zETestSpecialMethods.test_ufunc_override_mro.<locals>.B.__array_ufunc__Nr  r   r   r   r   r  #  r   r  c                   @   rK   )z5TestSpecialMethods.test_ufunc_override_mro.<locals>.Cc                 S   s
   d| _ d S rn  )countrS   r   r   r   __init__(  r  z>TestSpecialMethods.test_ufunc_override_mro.<locals>.C.__init__c                 _      |  j d7  _ tS r  r  NotImplementedr  r   r   r   r  +     zETestSpecialMethods.test_ufunc_override_mro.<locals>.C.__array_ufunc__N)rZ   r[   r\   r  r  r   r   r   r   r  '  r]   r  c                   @   r   )z8TestSpecialMethods.test_ufunc_override_mro.<locals>.CSubc                 _   r  r  r  r  r   r   r   r  0  r
  zHTestSpecialMethods.test_ufunc_override_mro.<locals>.CSub.__array_ufunc__Nr  r   r   r   r   CSub/  r   r  r!   r   r  )r.   
frompyfuncr  r   r  r	   rw   )rT   r  r  three_mul_ufuncfour_mul_ufuncr  r  r  r  r  r{   a_subr   r]  r   c_subc2r   r   r   test_ufunc_override_mro  s   


z*TestSpecialMethods.test_ufunc_override_mroc              	   C   s  G dd d}| }t t tjjd|ddd W d    n1 s#w   Y  tjjd|ddd}t|d | t|d tj t|d	 d
 t|d d|f t|d ddd t ttj| t ttj|||| t ttj||ddd t ttj||dddgd tj|dddd}t|d | t|d tj t|d	 d t|d |f t|d ddddd tjj|ddddddd}t|d | t|d tj t|d	 d t|d |f t|d ddddddd tj|dd d d}t|d dd dd tjj|d ddd}t|d ddd tjj|d d d d!}t|d d d d" tj|dd d dd	d}t|d dd dd	dd# tj|dd d dtj	d}t|d dd ddd$ tj|dd d dd d}t|d dd dd dd# t t
tjj|d%d& t t
tjj|d'd& t ttjj|ddd( tj|ddd}t|d | t|d tj t|d	 d) t|d |f t|d dddd* tjj|dddd+}t|d | t|d tj t|d	 d) t|d |f t|d dddd* tj|dd d }t|d dd d" tjj|d dd,d-}t|d dd,d" tjj|d d d d!}t|d d d d" t t
tjj|d%d& t t
tjj|d'd& t ttjj|ddd( tj|dd	gddd}t|d | t|d tj t|d	 d. t|d |dd	gf t|d dddd* tjj|dd	gdddd+}t|d | t|d tj t|d	 d. t|d |dd	gf t|d dddd* tj|dd	gdd d }t|d dd d" tjj|dd	gd d d/d0}t|d d d/d" tjj|dd	gd d d d&}t|d d d d" t t
tjj|dd	gd%d& t t
tjj|dd	gd'd& t ttjj|dd	gddd( tj|d}t|d | t|d tj t|d	 d1 t|d |df t|d i  t ttjj| t ttjj|||| t ttjj||ddd tj|dd	gd2}t|d | t|d tj t|d	 d3 t|d |dd	gd2f t ttjj| t ttjj|||| d S )4Nc                   @   r   )z9TestSpecialMethods.test_ufunc_override_methods.<locals>.Ac                 _   r  r   r   rT   ufuncr  r  r  r   r   r   r    r   zITestSpecialMethods.test_ufunc_override_methods.<locals>.A.__array_ufunc__Nr  r   r   r   r   r    r   r  r   r  r"  )r  answer)rm   rJ  r   r!   r  r"   r#   r{   )sig	signature)axisaxesaxis0dtype0out0keep0r   )r  )r   ro   keepdimsr  init0where0)r  r   ro   r  initialrJ  )r   ro   r  r  r!  rJ  F)r  r   r  T)ro   r  r  )r  r  r   )ro   r   )r  r   )r  r   r  r!  rJ  )r  r   r  rJ  r   r  )r  out1r  
accumulate)r   ro   r  )r  r   ro   dtype1)ro   r  r   reduceatr#  )r  ro   r   outerb0at)r	   rw   r.   r  r  r   	ncu_testsinner1dr   _NoValuerx   r$  r&  r'  r)  )rT   r  r{   r   r   r   r   test_ufunc_override_methods  s"  


	



z.TestSpecialMethods.test_ufunc_override_methodsc                 C   s  G dd d}G dd d}| }| }t ||d}t j||dd}t d|d}t jd|dd}t |d	d}	t j|d
dd}
t|d d d t|d d d t|d d d t|d d d t|	d d d t|
d d d t |dd}t |dd}t|d d d t|d d d t|d d d t|d d d tt |d i k tt j|d di k tt j|ddi k tt |d i k tt |d d i k tt j|ddi k tt t j|d d W d    n1 sw   Y  ttt j||ddd ttt j||dd tt	t j||dd ttt j|dd ttt j|ddd ttt j|ddd tt	t j|dd tt	t j|dd d S )Nc                   @   r   )z5TestSpecialMethods.test_ufunc_override_out.<locals>.Ac                 _      |S r   r   r  r   r   r   r  C  r  zETestSpecialMethods.test_ufunc_override_out.<locals>.A.__array_ufunc__Nr  r   r   r   r   r  B  r   r  c                   @   r   )z5TestSpecialMethods.test_ufunc_override_out.<locals>.Bc                 _   r.  r   r   r  r   r   r   r  G  r  zETestSpecialMethods.test_ufunc_override_out.<locals>.B.__array_ufunc__Nr  r   r   r   r   r  F  r   r  out_argr  r!   r"   r#   r$   ro   r   r  r"  r   r   )NNr  twor  r0  r   )r0  threer2  )r  r0  r2  )r  )
r.   r  r   modfrv   r   rG  r	   rw   rx   )rT   r  r  r{   r   r   r}  r~  res3res4res5res6res7r   r   r   test_ufunc_override_out@  sN   
z*TestSpecialMethods.test_ufunc_override_outc                 C   sH   G dd d}| }t ttjd|d t ttj| t ttjd| d S )Nc                   @   r   )z;TestSpecialMethods.test_ufunc_override_exception.<locals>.Ac                 _   r   )Noops)rx   )rT   r{   r  r   r   r   r  {  r   zKTestSpecialMethods.test_ufunc_override_exception.<locals>.A.__array_ufunc__Nr  r   r   r   r   r  z  r   r  r   r  rA   )r	   rx   r.   rD  r   r  r   r   r   test_ufunc_override_exceptionx  s
   z0TestSpecialMethods.test_ufunc_override_exceptionc                 C   s   G dd d}d}t tt| t|  W d    n1 s"w   Y  d}t tt| tj| t dd W d    d S 1 sGw   Y  d S )Nc                   @   r   )zATestSpecialMethods.test_ufunc_override_not_implemented.<locals>.Ac                 _   s   t S r   )r	  rT   r  r  r   r   r   r    r  zQTestSpecialMethods.test_ufunc_override_not_implemented.<locals>.A.__array_ufunc__Nr  r   r   r   r   r    r   r  zjoperand type(s) all returned NotImplemented from __array_ufunc__(<ufunc 'negative'>, '__call__', <*>): 'A'zoperand type(s) all returned NotImplemented from __array_ufunc__(<ufunc 'add'>, '__call__', <*>, <object *>, out=(1,)): 'A', 'object', 'int'r   r  )r
   rw   fnmatch	translater.   rD  rt   r   )rT   r  r   r   r   r   #test_ufunc_override_not_implemented  s   "z6TestSpecialMethods.test_ufunc_override_not_implementedc                 C   sT  G dd d}| }d}t t| t|d W d    n1 s"w   Y  t t| td| W d    n1 s=w   Y  t t| t| W d    n1 sWw   Y  G dd d}| }tt||u  t t| t|| W d    n1 sw   Y  t t| tj|d|d W d    d S 1 sw   Y  d S )Nc                   @   s   e Zd ZdZdS )z?TestSpecialMethods.test_ufunc_override_disabled.<locals>.OptOutNr  r   r   r   r   OptOut  r  r@  z(operand 'OptOut' does not support ufuncsr   c                   @   r   )zDTestSpecialMethods.test_ufunc_override_disabled.<locals>.GreedyArrayc                 _   r   r   r   r<  r   r   r   r    r  zTTestSpecialMethods.test_ufunc_override_disabled.<locals>.GreedyArray.__array_ufunc__Nr  r   r   r   r   GreedyArray  r   rA  r  )r
   rw   r.   rt   rD  r   )rT   r@  opt_outr   rA  greedyr   r   r   test_ufunc_override_disabled  s*   "z/TestSpecialMethods.test_ufunc_override_disabledc                 C   s&  G dd d}t j}| }|||}t|d | t|d | t|d d t|d ||f t|d i  |dd|d	}t|d | t|d | t|d d t|d d
 t|d d|fi tt||dd	 tt|||ddd	 tt|||dd tt|||dd	 tt|||dd	 d S )Nc                   @   r   )z2TestSpecialMethods.test_gufunc_override.<locals>.Ac                 _   r  r   r   r  r   r   r   r    r   zBTestSpecialMethods.test_gufunc_override.<locals>.A.__array_ufunc__Nr  r   r   r   r   r    r   r  r   r   r!   r  r"   r#   r  )r   r   ro   r0  r  r1  r   )r*  r+  r   r	   rw   rx   )rT   r  r+  r{   r   r   r   r   test_gufunc_override  s(   
z'TestSpecialMethods.test_gufunc_overridec                    sP  G  fdddt j G  fddd}t d}t d }t |}t |}tt ||k t|jddgi t j||fd}tt ||k t|jd	dgi t||u  t d }t j||d}tt ||k t|jdgdgd
 t d }t 	|\}}t|jddgi t j	|d |fd\}}t||u  t|jd	dgi t d }t d }t j	|||fd\}}	t||u  t|	|u  t|jdgddgd
 t d }t d }t j
|||d}
t|
|u  t|
jddgdgd
 t d}| }t|t j
d||tu  t|t j
d||tu  ttt j
|| | }t|t j
d||tu  t|t j
d||dk tt 
||dk t g dg dg}| }| }
| }t|
| t|
jddgi | }
| }t|
| t|
jddgi t d }|j|d}
t|
| t|
|u  t|
jdgdgd
 |jdd}t | }|jd|d}
t|
| t|
|u  t|
jdgdgd
 t j
j|dd}t j
j|dd}
t|
| t|
jddgi t |
}t j
|dd |}
t|
| t|
|u  t|
jdgdgd
 t j
j|dd}t j
j|dd}
t|
| t|
jddgi t |
}t j
|dd |}
t|
| t|
|u  t|
jdgdgd
 g d}t j
j||dd}t j
j||dd}
t|
| t|
jddgi t |
}t j
||dd |}
t|
| t|
|u  t|
jdgdgd
 t g dg dg}| }|  }t j
|ddgddgfd t j
|ddgddgfd t|| t|jddgi t d }|  }t j
|ddgddgf| t|| t|jdddgi d S )Nc                       s$   e Zd Zdd fdd
Z  ZS )z<TestSpecialMethods.test_ufunc_override_with_super.<locals>.ANr  c                   s  g }g }t |D ]\}}	t|	 r || ||	tj q||	 q|}
g }|
rWg }t |
D ]\}}t| rJ|| ||tj q2|| q2t||d< nd|j }
i }|rd||d< |rj||d< t j	||g|R i |}|t
u r~t
S |dkrt|d  r||d _d S |jdkr|f}t fdd	t||
D }|rt|d  r||d _t|dkr|d S |S )
Nro   r   r  outputsr)  r   r   c                 3   s0    | ]\}}|d u rt | n|V  qd S r   )r.   r   r   )r   r  outputr  r   r   rD    s    
z_TestSpecialMethods.test_ufunc_override_with_super.<locals>.A.__array_ufunc__.<locals>.<genexpr>)	enumerater   appendr   r.   r   tuplenoutsuperr  r	  infor   r  )rT   r  r  ro   r  r  r  in_nor   input_rF  out_noout_argsjrG  rN  results)r  	__class__r   r   r    sT   







zLTestSpecialMethods.test_ufunc_override_with_super.<locals>.A.__array_ufunc__)rZ   r[   r\   r  __classcell__r   rH  )rU  r   r    s    r  c                       r  )z<TestSpecialMethods.test_ufunc_override_with_super.<locals>.Bc                    s   t  fdd|D rdS tS )Nc                 3   s    | ]}t | V  qd S r   )r   )r   rP  rH  r   r   rD  	  s    z_TestSpecialMethods.test_ufunc_override_with_super.<locals>.B.__array_ufunc__.<locals>.<genexpr>A!)rW  r	  r  rH  r   r   r    s   zLTestSpecialMethods.test_ufunc_override_with_super.<locals>.B.__array_ufunc__Nr  r   rH  r   r   r    r  r  r  r  r   r  rF  )r  rF  r   r  rW  r   r#  )r  ro   )r   r!   r   r!   rA   )r.   r   r   r   rG  r   r   r   rN  r3  rt   r  r	  r	   rw   rr   rW  r  r  r   r$  r&  r   r)  )rT   r  r~   r{   r   checkb1b2c1r  r]  indicesr   rH  r   test_ufunc_override_with_super  s   4




















z1TestSpecialMethods.test_ufunc_override_with_superN)rZ   r[   r\   r  r  r  r  r  r  r  r  r  r  r   r(  r)  r  r  r  r  r  r  r-  r9  r;  r?  rD  rE  r]  r   r   r   r   r  	  s8    7+

	  ,8r  c                   @   r   )
TestChoosec                 C   s@   t ddg}t ddg}tt ||dft ddg d S )NTr   )r.   rr   r   choose)rT   r]  r{   r   r   r   
test_mixed  s   $zTestChoose.test_mixedN)rZ   r[   r\   r`  r   r   r   r   r^  ~  r   r^  c                   @   sd   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd ZdS )TestRationalFunctionsc                 C   s   |  tj |  tj d S r   )_test_lcm_innerr.   r  uint16rS   r   r   r   test_lcm     zTestRationalFunctions.test_lcmc                 C      |  tj d S r   )rb  r.   object_rS   r   r   r   test_lcm_object  rp  z%TestRationalFunctions.test_lcm_objectc                 C   s   |  tj | tj d S r   )_test_gcd_innerr.   r  rb  rc  rS   r   r   r   test_gcd  re  zTestRationalFunctions.test_gcdc                 C   rf  r   )ri  r.   rg  rS   r   r   r   test_gcd_object  rp  z%TestRationalFunctions.test_gcd_objectc                 C   s   t jddg|d}t jddg|d}tt ||ddg t|t jsAt jg d|d}t jg d	|d}tt ||dgd
  t jg d|d}tt jg dd t d|}d}tt ||g d d S )Nr   x   rq   r     <   iX  r   r   r   r   r  r  rq  r#   )r"   r   r  r  )r   r  r  rn  r  r  )	r.   rr   r   lcm
issubclassunsignedintegerr   r   rK  rT   r   r{   r   r   r   r   rb    s   z%TestRationalFunctions._test_lcm_innerc                 C   s   t jddg|d}t jddg|d}tt ||ddg t|t jsAt jg d|d}t jg d	|d}tt ||dgd  t jg d
|d}tt j|d t d|}d}tt ||g d d S )Nr   rl  rq   r  rm  r#   (   ro  rp  )r     #   r$   r  )r  r   r!   r   r#   r$   )	r.   rr   r   gcdrs  rt  r   r   rK  ru  r   r   r   ri    s   z%TestRationalFunctions._test_gcd_innerc                 C   sB   t t t jjd }d| }d| }tt ||d|  d S )Nr  r!   r$   r-   )r.   ru   r   r  r   rr  )rT   bigr{   r   r   r   r   test_lcm_overflow  s   z'TestRationalFunctions.test_lcm_overflowc                 C   s^   t jt jfD ]&}|t |j}|d  }tt ||d | tt || d | qd S )Nr#   r"   )r.   ru   int64r   r   r   ry  )rT   r   r{   qr   r   r   test_gcd_overflow  s   
z'TestRationalFunctions.test_gcd_overflowc                 C   st   ddl m} tg d|d }tg d|d }tt||d|dg  tt||d|d	g  d S )
Nr   )Decimal)r   r   r%   r%   z0.20)r   r%   r   r%   z0.12r#   z0.04z0.60)r  r  r.   rr   r   ry  rr  )rT   r  r{   r   r   r   r   test_decimal  s
    z"TestRationalFunctions.test_decimalc                 C   s$   t ttjdd t ttjdd d S )Ng333333?g?)r	   rw   r.   ry  rr  rS   r   r   r   
test_float  s   z TestRationalFunctions.test_floatc                 C   s   t tdd  dd  tdd d }tdd d dg}t t||dd dg t t||dd d d dd d g t tdd d	d d
 d S )Nr!   rm  r      i-1 l          U9 l         `i  r"   r   )r   r.   rr   itemry  rr  r  r   r   r   test_builtin_long  s   *z'TestRationalFunctions.test_builtin_longN)rZ   r[   r\   rd  rh  rj  rk  rb  ri  r{  r~  r  r  r  r   r   r   r   ra    s    	ra  c                   @   r^   )TestRoundingFunctionsc                 C   s`   G dd d}t | | g}tt |ddg tt |ddg tt |ddg dS )z3 test direct implementation of these magic methods c                   @   r^   )z3TestRoundingFunctions.test_object_direct.<locals>.Cc                 S   rm  r  r   rS   r   r   r   	__floor__  r  z=TestRoundingFunctions.test_object_direct.<locals>.C.__floor__c                 S   rm  r  r   rS   r   r   r   __ceil__  r  z<TestRoundingFunctions.test_object_direct.<locals>.C.__ceil__c                 S   rm  )Nr"   r   rS   r   r   r   	__trunc__  r  z=TestRoundingFunctions.test_object_direct.<locals>.C.__trunc__N)rZ   r[   r\   r  r  r  r   r   r   r   r    s    r  r   r!   r"   N)r.   rr   r   r  r  r  rT   r  r   r   r   r   test_object_direct  s
   z(TestRoundingFunctions.test_object_directc                 C   s   G dd d}t | | g}tt |ddg tt |ddg tt t | W d   dS 1 s:w   Y  dS )z$ test implementations via __float__ c                   @   r   )z5TestRoundingFunctions.test_object_indirect.<locals>.Cc                 S   rm  )Nr  r   rS   r   r   r   	__float__  r  z?TestRoundingFunctions.test_object_indirect.<locals>.C.__float__N)rZ   r[   r\   r  r   r   r   r   r    r   r  r'   r&   N)	r.   rr   r   r  r  r   r   rw   r  r  r   r   r   test_object_indirect  s   "z*TestRoundingFunctions.test_object_indirectc                 C   s>   t dd}tt|d tt|d tt|d d S )Nr(   r"   r&   r%   )r   r   r.   r  r  r  )rT   r  r   r   r   test_fraction  s   
z#TestRoundingFunctions.test_fractionN)rZ   r[   r\   r  r  r  r   r   r   r   r    s    r  c                   @   s   e Zd Zejejejejejej	ej
ejejejejejejejejejgZdd Zdd Zdd Zdd Zd	d
 Zejdejejejgdd Z dS )TestComplexFunctionsc                 C   s`   | j D ]*}|tju rd}nd}||}|t|}t|j|d| d t|jdd| d qd S )Nr  rk   zreal part %sr  r  zimag part %s)funcsr.   re  r  r   rE   r  )rT   r  rG   frfzr   r   r   test_it  s   

zTestComplexFunctions.test_itc                 C   sf   d}| j D ]+}|t|}|t|}|t|}t||dd| d t||dd| d qd S )Nr  r  z
fch-fcd %s)r  r  r  z
fch-fcl %s)r  r.   csinglecdoubleclongdoubler   )rT   r&  r  fcffcdfclr   r   r   test_precisions_consistent  s   
z/TestComplexFunctions.test_precisions_consistentc                 C   s  t tjddddd t tjddddd t tjddddd t tjddddd t tjddddd t tjddgddgddd t tjddgddgddd t tj	d	d
gddgddd t tj
d	d
gddgddd t tjddgddgddd t tjddgddgddd t tjd	d
gddgdd t tjd	d
gddgdd t tj	ddgddgdd t tj
g dg ddd t tjg dg ddd t tjg dg ddd d S )Nr}  r  r   r%   T      r&   r!                  r  rk   r&   r!   r   r  r  r   r  r  r!   r   r   r  r  r  r   )_check_branch_cutr.   r  r  rC  rD  r  rV  rW  r[  rB   re  rh  rS   r   r   r   test_branch_cuts&  s"   z%TestComplexFunctions.test_branch_cutsc                 C   s  t tjdddddtj t tjdddddtj t tjdddddtj t tjdddddtj t tjdddddtj t tjddgddgdddtj t tj	ddgddgdddtj t tj
d	d
gddgdddtj t tjd	d
gddgdddtj t tjddgddgdddtj t tjddgddgdddtj t tjd	d
gddgdddtj t tj	d	d
gddgdddtj t tj
ddgddgdddtj t tjg dg ddddtj t tjg dg ddddtj t tjg dg ddddtj d S )Nr}  r  r   r%   Tr  r&   r!   r  r  rk   Fr  r  r  r  r  )r  r.   r  r  r  rC  rD  r  rV  rW  r[  rB   re  rh  rS   r   r   r   test_branch_cuts_complex64?  s"              $z/TestComplexFunctions.test_branch_cuts_complex64c              	   C   s   dd l }g d}ddddddd	}d
ttj }| jD ]D}|jdd }|||}zt	||}W n	 t
y<   Y qw |D ] }	t|t|	}
||	}tt|
| |k d||	|
|f  q?qd S )Nr   )y            y            ?y      ?      r  asinacosatanasinhacoshatanh)rV  rW  r[  rB   re  rh  r#   .r%   z%s %s: %s; cmath: %s)cmathr.   r^  r  epsr  rZ   splitgetr  AttributeErrorr  r   rF   )rT   r  pointsname_mapatolr  fnamecnamecfuncr  r{   r   r   r   r   test_against_cmathX  s(   
$z'TestComplexFunctions.test_against_cmathr   c                    s  t  } djj|j fdd}t ddd}t jddd	d
d} t ju r:t r2t	d ||d  n||d  ||d d  t j
dg d}d}t dt ||  }tt |dk  d}t dt ||  }tt |dk  d}t dt ||  }tt |dk  d}t dt ||  }tt |dk  d  fdd	}t jt jt jt jt jfD ]}	dd dD }
||	|
d ||	|
d ||	|
d qdS )!z1Check loss of precision in complex arc* functionsr  c                    s~  |  } |   }tt| t|j d }tt||k t|| t| | df d|    }tt| t	|j
 d }tt||k t|| t| | df |   }tt| t|j d }tt||k t|| t| | df d|    }tt| t|j
 d }tt||k t|| t| | df d S )Nr   rB   r  rV  rh  r[  )rK  r.   r  rB   rE   r   r   argmaxr  rV  r  rh  r[  )rG   rtolr&  r~   )r   
real_dtyper   r   rX  u  s*   

 ( (
 ( (
z:TestComplexFunctions.test_loss_of_precision.<locals>.checkrq  g5^Irm  gˡEr   r-   F)endpointzvTrig functions of np.longcomplex values known to be inaccurate on aarch64 and PPC for some compilation configurations.g      I@ @r  MbP?yh㈵>h㈵>rq   yg݈>+j鈵>r   ra   yi戵>Sh>y+j鈵>g݈>ySh>i戵>c                    s   t j| d}|t||  d  }|t||  d  }tt ||k||f t| || | d k }tt || ||  f d S )Nrq   r!   )r.   r   rF   r   r   )r  z0r~   zpzmgood)r   r  r   r   rX    s   c                 S   s2   g | ]}d D ]}|dks|dkr|d|  qqS )gMbPr   r  r   r  r   )r   rpipr   r   r   r     s
    z?TestComplexFunctions.test_loss_of_precision.<locals>.<listcomp>r  r  r  Nr   )r.   r^  rE   r   r  logspacelongcomplexrJ   r   skiprr   r  rh  r   r   rB   r[  rV  )rT   r   rN  rX  x_seriesx_basicr&  r  r~   r  ptsr   )r   r  r  r   test_loss_of_precisionk  s@   



z+TestComplexFunctions.test_loss_of_precisionN)!rZ   r[   r\   r.   rV  rW  r[  rB   re  rh  rG  rH  rP  r  r  r  r  rC  r  rD  r  r  r  r  r  r  r   r(  r)  r  r  r  r  r   r   r   r   r    s    	r  c                   @   rK   )TestAttributesc                 C   sV   t j}t|jd t|jdk td|jv  t|jd t|jd t|j	d d S )Nrt      zii->ir!   r   r   )
rb   rt   r   rZ   r   ntypestypesninrL  r  )rT   rt   r   r   r   test_attributes  s   zTestAttributes.test_attributesc                 C   s(   t tjjd t tjjd d S )Nz&add(x1, x2, /, out=None, *, where=Truez<frexp(x[, out1, out2], / [, out=(None, None)], *, where=True)r   rb   rt   __doc__r>   rv   rS   r   r   r   test_doc  s   


zTestAttributes.test_docN)rZ   r[   r\   r  r  r   r   r   r   r    r;  r  c                   @   r   )TestSubclassc                 C   s,   G dd dt j}|d}t|| | d S )Nc                   @   r   )z-TestSubclass.test_subclass_op.<locals>.simplec                 S   s    t jj| |td}|d |S )Nrq   r   )r.   r   r   r   fill)subtyper  rT   r   r   r   r     s   
z5TestSubclass.test_subclass_op.<locals>.simple.__new__N)rZ   r[   r\   r   r   r   r   r   simple  r   r  )r"   r#   )r.   r   r   )rT   r  r{   r   r   r   test_subclass_op  s   zTestSubclass.test_subclass_opN)rZ   r[   r\   r  r   r   r   r   r        r  c                   @   r   )TestFrompyfuncc                    s   dd }t j|dddd t g dd t jt dd	d
d t g d t j|ddd d t g dd t jt dd	d
d tt fdd t j|ddd t g dd tt fdd tt fdd d S )Nc                 S   s   | | S r   r   )r{   r   r   r   r   mul  r   z)TestFrompyfunc.test_identity.<locals>.mulr!   r   )r  rL  r  )r!   r"   r#      r!   r!   r   r   r#  c                      
     g S r   r   r   	mul_ufuncr   r   r     r  z.TestFrompyfunc.test_identity.<locals>.<lambda>)r  rL  c                      s    j tdddS )Nr  r  r#  )r   r.   r   r   r  r   r   r     r  c                      r  r   r   r   r  r   r   r     r  )r.   r  r   r   r   r	   rx   )rT   r  r   r  r   re    s   zTestFrompyfunc.test_identityN)rZ   r[   r\   re  r   r   r   r   r    r  r  r   r%   Fc                 C   s  t ||}t ||}t |jdkr&t |jd }t d}n
t |jd }d}| |}	| ||| t | t |  }
| ||| t | t |  }t	t 
t |	j|
j |k |	|
f t	t 
t |	j|
j |k |	|
f t	t 
t |	j|j|  |k |	|f t	t 
t |	j|j|  |k |	|f |rI|jdk|jdk@ }|jdk|jdk@ }t |r|| }t j|_| |}t	t 
t |	| j|j|  |k |	| |f t	t 
t |	| j|j|  |k |	| |f t |rK|| }t j|_| |}t	t 
t |	| j|j|  |k |	| |f t	t 
t |	| j|j|  |k |	| |f dS dS dS )aR  
    Check for a branch cut in a function.

    Assert that `x0` lies on a branch cut of function `f` and `f` is
    continuous from the direction `dx`.

    Parameters
    ----------
    f : func
        Function to check
    x0 : array-like
        Point on branch cut
    dx : array-like
        Direction to check continuity in
    re_sign, im_sign : {1, -1}
        Change of sign of the real or imaginary part expected
    sig_zero_ok : bool
        Whether to check if the branch cut respects signed zero (if applicable)
    dtype : dtype
        Dtype to check (should be complex)

    Fr%  r$  g     @@g-C6?r   N)r.   
atleast_1drK  r   r`  r^  r  r  r  r   r   rE   r  rW  r  )r  x0dxre_signim_signsig_zero_okr   scaler  y0ypymjrjirG   r   r   r   r     s>   $$&&**2226r  c                   C   s   t tdddk tjdd  t dtdd dk  t dtdd dk W d    n1 s3w   Y  t tttjd t tttjd  d S )Nr   r%   rM   r   r   )r   r.   copysignr   r  r   r   r   r   r   test_copysign=  s   r  c                 C   s   | d}| d}| d}t | j}tt ||| |k tt ||| dk  tt t t j| tt t |t j tt |||k d S r  )r.   r^  r  r   rd  r  r   )rC  r  r0  rt  r  r   r   r   _test_nextafterE  s   r  c                   C   
   t tjS r   )r  r.   r   r   r   r   r   test_nextafterP  r  r  c                   C   r  r   )r  r.   r  r   r   r   r   test_nextafterfT  r  r  zlong double is same as doublerX  ppc64zIBM double double)	conditionrY  c                   C   r  r   )r  r.   r  r   r   r   r   test_nextafterlX     
r  c               
   C   s   t tjd dD ]V\} }t 4}|t tt| j	s=t| j	}t
d|t| d| |   k o9|k n   W d    n1 sGw   Y  tt| d| || d |d  q	d S )NrI  r2  r  r   r  )r*  r+  r.   r,  r   r!  UserWarningr  r^  r_  r   rd  r   )rC  	directionr$  r_  r   r   r   test_nextafter_0`  s   
*(r  c                 C   s   | d}t | j}| t j}| t j}t jdd< tt ||k tt t | tt t | tt t |  tt | ddk W d    d S 1 sYw   Y  d S )Nr   rM   rN   gꌠ9Y>)Fr   )	r.   r^  r  r   r  r   r   spacingr  )rC  r  r  r   r  r   r   r   _test_spacingl  s   

"r  c                   C   r  r   )r  r.   r   r   r   r   r   test_spacingx  r  r  c                   C   r  r   )r  r.   r  r   r   r   r   test_spacingf{  r  r  c                   C   r  r   )r  r.   r  r   r   r   r   test_spacingl  r  r  c                  C   sb   t jg dt jg di} tt jt jgdD ]\}}t jg d|d}tt || | |d qd S )N)g      ;g      <g      @=g      =)g5(   p=g  >gK8   ?g      P?)r-   r  )h㈵>r   r  i)  rq   r  )r.   r   r  r   rr   r   r  )refr#  r  rG   r   r   r   test_spacing_gfortran  s   

	r  c                  C   sR   t jt jfD ] } dD ]}| |}| |d }tt ||| t |k q
qd S )N)r   r   r  r   )r.   r  r   r   rd  r  )rC  _fr  f1r   r   r   test_nextafter_vs_spacing  s    r  c                   C   s   t ttjdk dS )zCheck np.nan is a positive nan.r   N)r   r.   r  r   r   r   r   r   test_pos_nan  s   r  c                  C   s  t ddt jfdt jfg} t jdg| d}d|d< d|d< d|d< g d	}g }|d
 }|dd D ]}|t j|d ||  |}q2|t j|d |d  t |}t j	|d |}t
|| t d t j	|d |}t t j t
|| dS )z;Test bug in reduceat when structured arrays are not copied.)r  S11timerY  r   rq   Simpler  r-   )r   r  r  rw  r   r   Nr  )r.   r   r|  r  rs   rJ  rt   r   rr   r&  r   
setbufsizeUFUNC_BUFSIZE_DEFAULT)dbr{   indxh2r0   r1   h1r   r   r   test_reduceat  s&   


r  c                  C   s   t g d} t g d}t j|| }t|j|j t|jd t d}t jj|g dd}t|j|j t|jd t jj|g dd}t|j|j t|jd	 d
S )z&Reduceat should work with empty arraysi4f8)r   )r$   r!   r   r#  rz  r   )r$   r   N)r.   rr   rt   r&  r   r   r  r   )r\  rG   r  r   r   r   test_reduceat_empty  s   
r  c               	   C   s^  t tjdt dtjt tjtjg} t ddt ddt ddt ddt ddt ddt ddg}tjddo | | D ]a}t|g}| | D ]T}t|g}t|rZt|rZqGt||k dd||f d t||kdd	||f d t||kdd
||f d t||kdd||f d t||kdd||f d qGq;W d    d S 1 sw   Y  d S )Nr   r   r%   rM   rN   Fz%r < %rr  z%r > %rz%r <= %rz%r >= %rz%r == %r)r  r.   r   r   rr   rp  r   )nansfinsrG   r   r   r   r   test_complex_nan_comparisons  s&   $ "r  c                  C   s*   d} t | tt|  t | t|  d S )Nl    *n )r   r   rI  r.   r  )valr   r   r   test_rint_big_int  s   r  ftypec                 C   s^   t jg d| d}t jg d| d}t jg d| d}tt j|| tt j|| d S )N)Q?333333?p=
ף?=
ףp=?RQ?rq   )r  r  r  r  r  )r  r  r  r  r  )r.   rr   r   r  r$  r4  )r  r   out_maxout_minr   r   r   test_memoverlap_accumulate  s
   r!  c                  C   sF   t   tjdddd} t|  W d    d S 1 sw   Y  d S )Nr   r  s    )r  r   buffer)r   r.   r   r  r  r   r   r   test_signaling_nan_exceptions  s   "r#  r   r!   r$   c                 C   s@   G dd dt j}t j| || |}|jjdksJ d S )Nc                   @   s   e Zd ZdS )z)test_outer_subclass_preserve.<locals>.fooN)rZ   r[   r\   r   r   r   r   r    rp  r  )r.   r   r  r'  r   rU  rZ   )r   r  actualr   r   r   test_outer_subclass_preserve  s   r%  c               	      s   G dd dt j} G  fdddt j |  fD ]>}t d|}tt}t j|ddg W d    n1 s:w   Y  t d|}tt jddg||u sVJ qd S )Nc                   @   r  )z(test_outer_bad_subclass.<locals>.BadArr1c                 S   s   | j dkr| jd | _d S d S )Nr"   r   )ndimr  r  r   r   r   __array_finalize__  s   
z;test_outer_bad_subclass.<locals>.BadArr1.__array_finalize__Nc                 S   r  r   r   r  r   r   r   r    r  z:test_outer_bad_subclass.<locals>.BadArr1.__array_prepare__r   rZ   r[   r\   r'  r  r   r   r   r   BadArr1  s    r)  c                       s"   e Zd Z fddZdddZdS )z(test_outer_bad_subclass.<locals>.BadArr2c                    s6   t | r| jd dkr| jd d d | _d S d S d S )Nr%   r   )r   r  r  BadArr2r   r   r'    s
   
z;test_outer_bad_subclass.<locals>.BadArr2.__array_finalize__Nc                 S   r  r   r   r  r   r   r   r  $  r  z:test_outer_bad_subclass.<locals>.BadArr2.__array_prepare__r   r(  r   r*  r   r   r+    s    r+  )r!   r"   r   r!   )	r.   r   r   r   r	   rw   rt   r'  r   )r)  r   r   r{   r   r*  r   test_outer_bad_subclass  s   	

 r,  c                  C   sF   t d} tt t j| |  W d    d S 1 sw   Y  d S )N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r.   r   r	   rx   rt   r'  )deepr   r   r   test_outer_exceeds_maxdims1  s   

"r.  c                  C   s  t dt j} tjtdd t| |  W d    n1 s!w   Y  tjtdd  | 	d
ddd d d d df }t||  W d    n1 sPw   Y  tjtdd tj| |  W d    n1 snw   Y  tjtdd tj|  W d    n1 sw   Y  tjtdd tj| dd	g W d    n1 sw   Y  tjtdd tj|  W d    n1 sw   Y  tjtdd tj| g d
|  W d    d S 1 sw   Y  d S )Nr"   How unexpected :\)!r   r  r%   r  r!   r   r   )r   r   r!   )r.   r   rK  r   r   r   r  r*  always_errorrepeatreshaper'  r   r&  r$  r)  )r   
non_contigr   r   r   #test_bad_legacy_ufunc_silent_errors6  s.   $"r4  x1r  )r  rA   r  c                 C   s@   t jtdd t| d W d    d S 1 sw   Y  d S )Nr/  r   r  )r   r   r  r*  always_error_gufunc)r5  r   r   r   $test_bad_legacy_gufunc_silent_errorsT  s   "r7  )r;   r  r=  r*  r   rh  rk  r  	fractionsr   	functoolsr   collectionsr   numpy.core.umathcoreumathrb   
numpy.corer   r*  numpyr.   numpy.testingr   r   r	   r
   r   r   r   r   r   r   r   r   r   numpy.testing._private.utilsr   r8   r?   rJ   rL   r_   ri   r   r   r   r0  r3  r4  ri  r  r  r  r  r  r  r  r8  r<  rn  rv  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r3  r8  r@  rB  r\  ri  rm  rq  rv  ry  r  r  r  r  r  r^  ra  r  r  r  r  r  r  r  r  r  r  r  r(  r  r^  doubler  rg  r=   r>   r  r  r  r  r  r  r  r  r  r  r  r  r  r)  r  r   r!  r#  r   matrixr%  r,  r.  r4  r7  r   r   r   r   <module>   s*   <8~. v N  
0#  (
	 1-E\\???T+*       0c$ ;
=	

