U
    #ce                 
   @   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$m%Z% d dl&m'Z' dd	 ejjj() D Z*d
d	 e*D Z+dd	 e+D Z,dd	 e*D Z-dd	 e-D Z.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Z7d d! Z8d"d# Z9G 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?G d0d1 d1Z@G d2d3 d3e2ZAG d4d5 d5ZBG d6d7 d7ZCG d8d9 d9ZDG d:d; d;ZEG d<d= d=ZFG d>d? d?ZGd@dAdBgd dCdBgd@dDdBgd@dCdBgd dCdBgd dCdBgd dCdBgd dCdBgdEZHG dFdG dGZIG dHdI dIZJG dJdK dKe2ZKG dLdM dMZLG dNdO dOZMG dPdQ dQZNdRdS ZOdTdU ZPG dVdW dWZQdXdY ZRdZd[ ZSd\d] ZTd^d_ ZUd`da ZVG dbdc dcZWG ddde deZXG dfdg dge2ZYG dhdi die2ZZG djdk dke2Z[G dldm dme2Z\G dndo doZ]G dpdq dqZ^G drds dsZ_G dtdu duZ`G dvdw dwZaG dxdy dyZbG dzd{ d{ZcG d|d} d}ZdG d~d dZeG dd dZfG dd dZgG dd dZhG dd dZiG dd dZjG dd dZkG dd dZlG dd dZmG dd dZnG dd dZod@ddepfddZqdd Zrdd Zsdd Ztdd Zuejvjwexejyexejzkddejvj{e | }ddddd Z~dd Zdd Zdd Zdd Zejvjwexejyexejzkddejvj{e | }ddddd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zejvdejejgdd Zejvddd	 e.D ddń Zejvddd	 e.D ddȄ Zddʄ Zejvded̡ed d@ged d@gddgggddτ Zddф Zddӄ ZddՄ ZejvdedסdAdDdg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IS_WASM)_glibc_older_thanc                 C   s   g | ]}t |tjr|qS  )
isinstancenpufunc).0objr   r   ?/tmp/pip-unpacked-wheel-b2rbor69/numpy/core/tests/test_umath.py
<listcomp>   s    r   c                 C   s   g | ]}|j d kr|qS    ninr   Zufr   r   r   r      s    
 c                 C   s   g | ]}d |j kr|qS )zf->ftypesr"   r   r   r   r      s    
 c                 C   s   g | ]}|j d kr|qS )   r    r"   r   r   r   r   "   s    
 c                 C   s$   g | ]}t |d r|jdkr|qS )
accumulater   )hasattrnoutr"   r   r   r   r   %   s    
 
 c           
      #   sJ  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  || < || < qdD ]\}|dd| }|dd| }	| |d< ||	d< dd }||	|d| fV  ||d< ||	d< qd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?
    r   i'  )dtype
fill_valuer   c                 S   s   | S Nr   resr   r   r   <lambda>?       z,interesting_binop_operands.<locals>.<lambda>Zscalarsc                 S   s   | S r+   r   r,   r   r   r   r.   B   r/   )r   .zscalar-arrays)
r   r   r%            c                    s   |   S r+   r   r,   posr   r   r.   M   r/   zoff-z-with-scalar)r3   q   N
   c                 S   s   | d S )Nr:   r   r,   r   r   r   r.   Z   r/   zstride-)r   full)
val1val2r)   r*   arr1arr2	extractorstrideop1op2r   r7   r   interesting_binop_operands)   s8    
rD   c                   C   s   t  dkpt  dS )z/ True if we are running on a Power PC platform.Zpowerpcppc)platform	processormachine
startswithr   r   r   r   
on_powerpca   s    rJ   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@-(;)	rF   rH   rJ   r   arcsinhZfloat128Z
complex256realabs)xv1v2r   r   r   bad_arcsinhg   s    rS   c                   @   s   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   ZseterrZolderrselfr   r   r   setup_methodz   s    z_FilterInvalids.setup_methodc                 C   s   t jf | j d S r+   rX   rY   r   r   r   teardown_method}   s    z_FilterInvalids.teardown_methodN)__name__
__module____qualname__r[   r\   r   r   r   r   rT   y   s   rT   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestConstantsc                 C   s   t tjdd d S )Ng-DT!	@V瞯<)r   ncupirY   r   r   r   test_pi   s    zTestConstants.test_pic                 C   s   t tjdd d S )NgiW
@ra   )r   rb   erY   r   r   r   test_e   s    zTestConstants.test_ec                 C   s   t tjdd d S )Ngox?ra   )r   rb   Zeuler_gammarY   r   r   r   test_euler_gamma   s    zTestConstants.test_euler_gammaN)r]   r^   r_   rd   rf   rg   r   r   r   r   r`      s   r`   c                   @   s   e Zd Zdd Zdd ZdS )TestOutc           
   
   C   s  dD ]}t d}t d}t j|d||d}t||k t j|d||d}t||k t j|d|f|d}t||k t d}t d}t jdt jd}t j||d |d\}}	t||k t j|d ||d\}}	t|	|k t j||||d\}}	t||k t|	|k t j||d f|d\}}	t||k t j|d |f|d\}}	t|	|k t j|||f|d\}}	t||k t|	|k tt t j|||d\}}	W 5 Q R X 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outrl   @r)   F)r   arrayemptyaddr   int32frexpr	   	TypeError
ValueErrorflagsZ	writeable)
rZ   rl   aordo1o2r1r2r   r   r   test_out_subok   sP    





zTestOut.test_out_subokc           
   
   C   s  G dd dt j}dD ]p}|dg}t j|d|d}|rJtt|| ntt|t jk t j|dd |d}|rtt|| ntt|t jk t j|dd |d}|rtt|| ntt|t jk t j|dd|d}|rtt|| ntt|t jk |d	g}t d
}t jd
t jd}t j|||d\}}	|rRt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\}}	|rNtt|| ntt|t jk t	t
 t j|||d\}}	W 5 Q R X qd S )Nc                   @   s    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__   s    z6TestOut.test_out_wrap_subok.<locals>.ArrayWrap.__new__c                 S   s   | t| S r+   r   typerZ   r   contextr   r   r   __array_wrap__   s    z=TestOut.test_out_wrap_subok.<locals>.ArrayWrap.__array_wrap__Nr]   r^   r_   __array_priority__r   r   r   r   r   r   	ArrayWrap   s   r   ri   rj   r%   rk   rm   r+   ro   r   rp   )r   ndarrayrs   r   r   r   rr   rt   ru   r	   rv   )
rZ   r   rl   ry   r{   r|   r}   r~   r   r   r   r   r   test_out_wrap_subok   sX    	




zTestOut.test_out_wrap_subokN)r]   r^   r_   r   r   r   r   r   r   rh      s   1rh   c                   @   s   e Zd ZddlZejdejd ejd  ejd  ej	g ejdej
ejfejejfejejfejejfejejfejejfgdd	 Zd
d Zdd Zdd Zdd Zdd ZdS )TestComparisonsr   Nr)   uintintfloatzpy_comp,np_compc                    sZ  |t jkr8t jjddgdd}t jjddgdd}dn4t jjdddd|}t jjdddd|}dt |}| }| }|||	t j
}	 fd	d
t||D }
|||	t j
} fdd
|D }|||	t j
} fdd
|D }t|	 |
kd j d t| |kd j d t| |kd j d d S )NFT  )ry   sizer   r:   lowhighr   r2   c                    s   g | ]\}}t  ||qS r   r   r   rP   y)py_compr   r   r   '  s     z=TestComparisons.test_comparison_functions.<locals>.<listcomp>c                    s   g | ]}t  |qS r   r   r   rP   r   Zscalarr   r   r   +  s     c                    s   g | ]}t  |qS r   r   r   r   r   r   r   /  s     zFailed comparison ())r   bool_randomchoicerandintastyper)   r   tolistr   uint8zipr   r]   )rZ   r)   r   Znp_compry   bZ	np_scalara_lstb_lstZcomp_bZcomp_b_listZcomp_s1Zcomp_s1_listZcomp_s2Zcomp_s2_listr   r   r   test_comparison_functions  s2    
z)TestComparisons.test_comparison_functionsc                 C   s   t jt dddg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 )Nr   r%   r0   rp   c                   @   s   e Zd Zdd ZdS )zGTestComparisons.test_ignore_object_identity_in_equal.<locals>.FunkyTypec                 S   s   t dd S NzI won't comparerv   rZ   otherr   r   r   __eq__A  s    zNTestComparisons.test_ignore_object_identity_in_equal.<locals>.FunkyType.__eq__N)r]   r^   r_   r   r   r   r   r   	FunkyType@  s   r   F)	r   rq   objectr	   rw   equalrv   nanr   rZ   ry   r   r   r   r   $test_ignore_object_identity_in_equal9  s    z4TestComparisons.test_ignore_object_identity_in_equalc                 C   s   t jt dddg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 )Nr   r%   r0   rp   c                   @   s   e Zd Zdd ZdS )zKTestComparisons.test_ignore_object_identity_in_not_equal.<locals>.FunkyTypec                 S   s   t dd S r   r   r   r   r   r   __ne__S  s    zRTestComparisons.test_ignore_object_identity_in_not_equal.<locals>.FunkyType.__ne__N)r]   r^   r_   r   r   r   r   r   r   R  s   r   T)	r   rq   r   r	   rw   	not_equalrv   r   r   r   r   r   r   (test_ignore_object_identity_in_not_equalK  s    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   rp   T)r   rq   r   r   r   boolr	   rv   rZ   ry   r   r   r   test_error_in_equal_reduce]  s    z*TestComparisons.test_error_in_equal_reducec                 C   s<   t jddgtdjtkstt jddgddjtks8td S )Nr   rp   )NNO)	signature)r   r   r   r)   AssertionErrorrY   r   r   r   test_object_dtypee  s    z!TestComparisons.test_object_dtypec              	   C   sv   t jddgtdjtksttjtdd t jddt jd W 5 Q R X tjtdd t jdddd W 5 Q R X d S )Nr   rp   zNo loop matchingmatch)NNl)sig)	r   r   r   r)   r   pytestraisesrv   int64rY   r   r   r   test_object_nonbool_dtype_errori  s
    z/TestComparisons.test_object_nonbool_dtype_error)r]   r^   r_   operatorr   markparametrizer   sctypesr   ltZlessleZ
less_equalgtZgreatergeZgreater_equaleqr   ner   r   r   r   r   r   r   r   r   r   r   r   
  s(   





"r   c                   @   s   e Zd Zdd ZdS )TestAddc                 C   s<   t jddt jfdt jfgd}d|d< t|d  d d S )Nr%   ry   r   rp   r3   r   )r   zerosrt   float64r   sumr   r   r   r   test_reduce_alignmentv  s    zTestAdd.test_reduce_alignmentN)r]   r^   r_   r   r   r   r   r   r   u  s   r   c                   @   sF  e Zd Zdd Zejjeddejde	
ejd ejd  dd	d
 Zejjedd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jeddejd$ejd% d&d' Zejd$ejd% d(d) Zd*S )+TestDivisionc                 C   s   t ddddddddd	g	}d
d
krFt|d dddddddddg	 n t|d dddddddddg	 t|d dddddddddg	 t|d dddddddddg	 d S )Nr2   r:   Z   d   iirj   g?皙?g?r   g皙gr3   g333333r   r4   _   P   )r   rq   r   rZ   rP   r   r   r   test_division_int  s          zTestDivision.test_division_intfp errors don't work in wasmreasonzdtype,ex_valr   r   )z\np.array(range(fo.max-lsize, fo.max)).astype(dtype),np.arange(lsize).astype(dtype),range(15)zunp.arange(fo.min, fo.min+lsize).astype(dtype),np.arange(lsize//-2, lsize//2).astype(dtype),range(fo.min, fo.min + 15)znp.array(range(fo.max-lsize, fo.max)).astype(dtype),np.arange(lsize).astype(dtype),[1,3,9,13,neg, fo.min+1, fo.min//2, fo.max//3, fo.max//4]c              
      s8  t |jdk rdnd}d}t|\}}}| |  }}	fdd t jdd | }
|
| }
|| }W 5 Q R X  fd	d
t||	D }d}t||kst	|d}t|
|kst	||D ]t| }
t jddd | }|
 }
W 5 Q R X  fdd
|D }t||ks(t	|t|
|kst	|qt jddd d|kr|t
jtdd ||  W 5 Q R X n||  jrj|krt
jtdd |d  W 5 Q R X njr|d  t
jtdd |d  W 5 Q R X t
jtdd | }
|
d }
W 5 Q R X t jg |dd  W 5 Q R X d S )Nr   r3   r   i  c                    s0   |dkrdS | r(|  j kr(|dkr( j S | | S Nr   r3   minnr|   for   r   r.     s    z9TestDivision.test_division_int_boundary.<locals>.<lambda>rU   dividec                    s   g | ]\}} ||qS r   r   r   )c_divr   r   r     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     s     raisez*divide by zero encountered in floor_divider   z$overflow encountered in floor_dividerp   )r   iinfor   evalr   errstater   r   allr   r   r   FloatingPointErrorrq   )rZ   r)   ex_valnegZlsizery   r   Zdivisorsr   r   acZdiv_abdiv_lstmsgZmsg_eqdiv_ar   )r   r   r   r   test_division_int_boundary  s^    

z'TestDivision.test_division_int_boundary)z1np.array([fo.max, 1, 2, 1, 1, 2, 3], dtype=dtype)z4np.array([fo.min, 1, -2, 1, 1, 2, -3]).astype(dtype)z3np.arange(fo.min, fo.min+(100*10), 10, dtype=dtype)z8np.array(range(fo.max-(100*7), fo.max, 7)).astype(dtype)c           	   
      s   t | t|}| } fdd}t jdd t j|}W 5 Q R X t||}d}||ksht|t jdddx tj	t
dd	  t jt d
d| W 5 Q R X  jrtj	t
dd	$ t jt j jddg|d W 5 Q R X W 5 Q R X 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>rU   r   z#Reduce floor integer division checkr   r   z$divide by zero encountered in reducer   r   r   zoverflow encountered in reducer   r3   rp   )r   r   r   r   r   floor_divider   r   r   r   r   aranger   r   rq   )	rZ   r)   r   ry   lstr   r  r  r  r   r   r   test_division_int_reduce  s*    


$z%TestDivision.test_division_int_reducezdividend,divisor,quotientr%   YM   r4   r3   r   r   r5   ZNatc              
   C   s   |rnt |tst|snd}|| |ks0t|d}t|gd }t|gd }t|| |kst|nFtr|t	d tj
ddd$ tt ||  W 5 Q R X W 5 Q R X d S )NzTimedelta floor division checkz%Timedelta arrays floor division checkr2   r   r   r   rW   )r   r   r   Zisnatr   rq   r   r   r   skipr   r   r   )rZ   dividendr   Zquotientr  Zdividend_arrayZquotient_arrayr   r   r   test_division_int_timedelta  s    
z(TestDivision.test_division_int_timedeltac                 C   sn   d}t jdddg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      ?      ?      ?       @rp   r%   err_msgz)Complex division overflow/underflow checkgG0JVgys?)r   )r   rq   
complex128r   )rZ   r  rP   r   r   r   r   test_division_complex&  s    z"TestDivision.test_division_complexc              	   C   s   t jddd 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 5 Q R X d S )NrU   rW   r           rp   rL   r   )
r   r   rq   r  r   isinfcomplexinfr   isnan)rZ   rP   r   r   r   r   test_zero_division_complex1  s    z'TestDivision.test_zero_division_complexc              	   C   s~   t jddddgt jd}tt |d  W 5 Q R X tt t |d W 5 Q R X tt t |d W 5 Q R X d S )Ny?      ?y      ?y?      ?y?       @rp      )r   rq   r  r   r   rv   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_zeroI  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 5 Q R X t jddd t || W 5 Q R X t jdd6 t || t || t || t || W 5 Q R X d S )Nrp   rL   r  r   rU   r  r   )r   rq   r   r  r   r	   r   r  )rZ   r)   fnanfonefzerfinfr   r   r   test_floor_division_errorsP  s    z'TestDivision.test_floor_division_errorsc              	   C   s"  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 }|td t 	||}	t 
|	stdt|	f t 	||}	t 
|	stdt|	f t 	||}	t 
|	stdt|	f W 5 Q R X t jdd$ t 	||}
tt |
  W 5 Q R X d S )	Nr:   rp   rL   r  z)invalid value encountered in floor_dividedt: %s, div: %srU   r   )r   r   onesrq   r   r  r   filterRuntimeWarningr  r  r   dtr   r   r  r   )rZ   r)   rP   r   r'  r(  r)  r*  supdivzr   r   r    test_floor_division_corner_casesd  s"    $z-TestDivision.test_floor_division_corner_casesN)r]   r^   r_   r   r   r   skipifr   r   	itertoolsproductr   r   r  r	  Ztimedelta64r  r  r  r"  r$  	typecodesr+  r4  r   r   r   r   r     sP    : 

r   c                 C   s   t | |t | |fS r+   )r   r  r!  rP   r   r   r   r   floor_divide_and_remainderz  s    r:  c                 C   s   | t jd krdS dS d S )NUnsignedIntegerr   r   r3   )r   r8  )r0  r   r   r   _signs~  s    r=  c                   @   s   e Zd Zdd Zdd Zdd Zejje	ddejj
ejd	d
dejdejd dd Zejje	dd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ejje	dd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 ]}t||D ]\}}tt|t|D ]\}}d}||j||||f }t j|d |d}	t j|d |d}
||	|
\}}t	||
 | |	|d |dkrt
|
|  k od	kn  | qJt
|
|  kod	kn  | qJq.qd S )
N
AllIntegerr%  *op: %s, dt1: %s, dt2: %s, sg1: %s, sg2: %sG   rp      r  r3   r   )r   r8  r:  r   r6  r7  r=  r]   rq   r   r   rZ   r0  opZdt1Zdt2Zsg1Zsg2fmtr  ry   r   r2  remr   r   r   test_remainder_basic  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 ]`}tjd
 D ]P}d|j|f }||}||}|||\}}t||	|d t||
|d qqd S )Nir   r      c                 s   s   | ]}t | V  qd S r+   )r   )r   tr   r   r   	<genexpr>  s     z;TestRemainder.test_float_remainder_exact.<locals>.<genexpr>rp   r         r%  zop: %s, dtype: %sr  )listranger6  r7  r   rq   r   Tr   wherer:  r   r8  r]   r   r   )rZ   ZnlstZplstr  r   argtgtry   r   ZtgtdivZtgtremrD  r0  r  faZfbr2  rF  r   r   r   test_float_remainder_exact  s$    "

z(TestRemainder.test_float_remainder_exactc              	   C   s   t jd }tt jfD ]}t||D ]\}}tddD ]\}}d}||j||||f }t j|d d |d}	t j|d |d}
||	|
\}}t||
 | |	|d |dkrt	|
|  k od	kn  | q8t	|
|  kod	kn  | q8q$qd S )
Nr%  r<  r@  N   g+i)+p>rp   r  r3   r   )
r   r8  r:  r   r6  r7  r]   rq   r   r   rC  r   r   r   test_float_remainder_roundoff  s    
 z+TestRemainder.test_float_remainder_roundoffr   r   darwinz_MacOS seems to not give the correct 'invalid' warning for `fmod`.  Hopefully, others always do.r)   r%  c              	   C   s4  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 5 Q R X t jddd ttt j|| W 5 Q R X t jdd ttt j|| W 5 Q R X t jdd ttt j|| W 5 Q R X t jddd ttt j|| W 5 Q R X t jddd t || W 5 Q R X d S )Nr  rp   rL   r   rU   r  rV   )r   rq   r  r   r   r	   r   r   )rZ   r)   fzeror(  r*  r'  r   r   r   test_float_divmod_errors  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R tjtdd ||| W 5 Q R X ||| ||| ||| ||| W 5 Q R X d S )Nr  rp   rL   r   r&  zinvalid valuer   )r   rq   r  r   r   r   r   r   )rZ   r)   rY  rW  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 5 Q R X t jddd tt	t jd| W 5 Q R X t jddd tt	t jd| W 5 Q R X d S )NrU   )r   rW   r1   r   r   )rW   r   )
r   finfor   tinyr   r   r  r   r	   r   )rZ   ry   r2  modr   r   r   test_float_remainder_overflow  s    
z+TestRemainder.test_float_remainder_overflowc           	   
   C   sn  t jd D ]\}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 	|st
d||f t |st
d||f t ||\}}t |st
d||f tt |d||f f t ||\}}t |s"t
d||f t |s>t
d||f t ||\}}t 	|sjt
d||f t |st
d||f t ||\}}t |st
d||f t |st
d||f t ||\}}t |st
d||f t |st
d||f t ||\}}t |sBt
d||f t |s^t
d||f W 5 Q R X q
d S )	Nr%  rp   rL   r  z#invalid value encountered in divmodz$divide by zero encountered in divmodr,  dt: %s, rem: %s)r   r8  rq   r   r  r   r.  r/  r   r  r   r  r   )	rZ   r0  r'  r(  r)  r*  r1  r2  rF  r   r   r   test_float_divmod_corner_cases   s:    
z,TestRemainder.test_float_divmod_corner_casesc              	   C   s  t jd D ]}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  qW 5 Q R X d S )
Nr%  rL   rp   r  zdt: %sz&invalid value encountered in remainderz!invalid value encountered in fmodr_  zdt: %s, fmod: %s)r   r8  rq   r   	nextafterr!  r   r   r.  r/  r  r  fmod)rZ   r0  r(  r)  r'  r   ry   rF  r1  r*  rb  r   r   r   !test_float_remainder_corner_cases   sX    
z/TestRemainder.test_float_remainder_corner_casesN)r]   r^   r_   rG  rS  rU  r   r   r5  r   xfailsysrF   rI   r   r   r8  rX  rb  r!  rZ  r^  r`  rc  r   r   r   r   r>    s(   
 r>  c                   @   s  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jeddejdejd dd Zejjeddejdejd dd Zejjedd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   s   dS Nr   r   rp   r   r   r   r.   Y  r/   z4TestDivisionIntegerOverflowsAndDivideByZero.<lambda>c                 C   s   t | jS r+   r   r   r   rp   r   r   r   r.   Z  r/   c                 C   s   t | j S r+   rk  rp   r   r   r   r.   [  r/   c                 C   s   t | jdfS rj  rk  rp   r   r   r   r.   \  r/   c                 C   s   t | j dfS rj  rk  rp   r   r   r   r.   ]  r/   )zeror   neg_minmin-zeroneg_min-zerorl  r   rm  rn  ro  r   r   r)   Integerc           
   
   C   s4  t t|jd|}|D ]\}}}}tjtdd || }W 5 Q R X |j|jksXt||t|jjksrt|| }|j|jkst||dkstt	||}||dksttjtdd t
||\}}	W 5 Q R X |j|	j  kr|jksn t||t|jjkst||	dkstqd S )Nr3   zoverflow encounteredr   r   )rD   r   r   r   r   warnsr/  r)   r   rb  r   
rZ   r)   Zto_checkrB   rC   r@   Zoperand_identifierr-   res1res2r   r   r   test_signed_division_overflown  s     "zITestDivisionIntegerOverflowsAndDivideByZero.test_signed_division_overflowr?  c           
   
   C   s   t dd|}|D ]\}}}}tjtdd || }W 5 Q R X |j|jksNt||dks^ttjtdd t||\}}	W 5 Q R X |j|	j  kr|jksn t||dkst||	dkstqd S )Nr   r   zdivide by zeror   )rD   r   rq  r/  r)   r   r   r   rr  r   r   r   test_divide_by_zero  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krt	j
tdd8 | t j|d}|| j|  kstW 5 Q R X |D ]b}t	j
tddJ t|||d	}t| j|  gt|  }t|| W 5 Q R X qn| t j|d}|| j|  ksBt|D ]J}t|||d	}t| j|  gt|  }t|| qFd S )
Nc                    s(   g | ] }t jt  jg|  d qS )rp   )r   rq   r   r   r   rw  r   r   r     s   zNTestDivisionIntegerOverflowsAndDivideByZero.test_overflows.<locals>.<listcomp>r      r3   rp   zoverflow encountered inr   f)rM  r   rq   r)   itemsizer   r  r   floordivr   rq  r/  r   r   overflow_resultsrh  r   flattenlenr   ri  )	rZ   rw  rx  ry  Zarraysr   resultry   Zexpected_arrayr   r{  r   test_overflows  sn    

  

z:TestDivisionIntegerOverflowsAndDivideByZero.test_overflowsN)r]   r^   r_   r   rg  Zhelper_lambdasr   r!  rb  r   r]  r  r  r   r  r   r   r5  r   r   r8  ru  rv  r   r   r  r   r   r   r   rf  U  sz                rf  c                   @   s   e Zd Zdd Zdd ZdS )TestCbrtc                 C   s   t ttdd d d S )N      r0   )r   r   cbrtfloat32rY   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 )NrL          @      r0   )	r   rq   r  r   r  r   r  r   r   r   r   r   r   	test_cbrt  s
    zTestCbrt.test_cbrtN)r]   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dS )	TestPowerc                 C   sP  t dddg}t|d dddg t|d | t|d dddg | }|dC }t|dddg t|d	 dd
dg t|d
 dtdtdg tt jdddD ]F\}}}dd |D }t|d
 ||d t j||d t|||d qtt j	dddD ]H\}}}dd |D }t|d
 ||d t j||d t|||d qd S )NrL   r        @r   r   r%         @      "@r3   rj   gUUUUUU?r0   unary   r)   r   max_sizec                 S   s   g | ]}t |qS r   rb   sqrtr   r   r   r   r     s     z.TestPower.test_power_float.<locals>.<listcomp>r  rn   r  c                 S   s   g | ]}t |qS r   r  r   r   r   r   r     s     )
r   rq   r   r   r   rb   r  r   r  r   )rZ   rP   r   rn   inpr  expr   r   r   test_power_float  s2     zTestPower.test_power_floatc              
      s  t dddg}t|d dddg t|d | t|d dd	d
g t|d dddg t|d dddg t|d dddg t|d dddg t|d dddg 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 ]f}t j|gt jd&}t j	d'd(< ||d | ||d ||  ||d || |  W 5 Q R X q d S ))Nr  y       @      @y      @      @r   rL   r   r%   y            @y            (@y            8@r0   y      &       y      G      "@y     @]      F@r1   y            8y     ]      ^y     x      ur3   y?ٿy;;?؉؉ͿyQ?{GzĿr4   yQ{GzĿyn_YK&q-yǺa2U0*r5   yI+Mb?y:бbpԗ|pyF̱~&|grj      c                    s   g | ]}|  qS r   r   r   Znormr   r   r     s     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   rN   imagr9  r   r   r   assert_complex_equal  s    z:TestPower.test_power_complex.<locals>.assert_complex_equalrp   rU   rV   )
r   rq   r   r   rb   r  r  r  complex_r   )rZ   rP   r  r3  r   r  r   test_power_complex  s2    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H |t |d	| dD ]}|t || | q|t |d
| W 5 Q R X d S )Ny                y      ?        c                 S   s6   t | t | } }t| j|j t| j|j d S r+   )r   r   r   rN   r  r9  r   r   r   r  -  s    z7TestPower.test_power_zero.<locals>.assert_complex_equal)	gQ?rj   r         ?r%   r0   r1   r2   gffffff@r   rU   rV                 ?y      𿚙?)r   rq   r  r   powerr   )rZ   rl  onecnanr  pr   r   r   test_power_zero%  s    zTestPower.test_power_zeroc                 C   s   t dddgt j}|d }t|d j|jk t|dddg tt ||  t|dddg |t dggg }t|jd d S )	Nr   r%   r0   r  g9b->  @r1   	   )r   r   r0   )	r   rq   int16r   r)   r   Zmay_share_memoryr   shape)rZ   rP   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   rq   r  r   rZ   ry   r   r   r   r   test_integer_powerM  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 | qJd S )Nrp  r   r:   rp   r   r;  r   r8  r  r   r  	ones_likerZ   dtypesr0  r   r   r   r   -test_integer_power_with_integer_zero_exponentR  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 )Nr?  r:   rp   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 )Nr?  r   r:   rp   r   )r   r8  r  r   r  
zeros_liker  r   r   r   test_integer_power_of_zeroc  s    
z$TestPower.test_integer_power_of_zeroc                 C   s   t jd }|D ]}t jddddg|d}t jddddg|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 )	Nrp  r   r   r%   r0   rp   r5   r3   )r   r8  rq   r	   rw   r  )rZ   r  r0  ry   r   r  Zminusoner   r   r   test_integer_to_negative_poweri  s    
z(TestPower.test_integer_to_negative_powerc                 C   s   t jt jfD ]}t ddddddt jt j g|}t t jt j t jt j t jt j t jt j g|}t ddt jdt jdt jdg|}tt ||| qd S )Nr   r%   r4   r   )r   r  r   rq   r  r   r  )rZ   r0  ry   r   r{   r   r   r   test_float_to_inf_poweru  s    "   "z!TestPower.test_float_to_inf_powerN)r]   r^   r_   r  r  r  r  r  r  r  r  r  r  r   r   r   r   r    s   r  c                   @   s   e Zd Zdd ZdS )TestFloat_powerc                 C   s`   d}d}t ||D ]H\}}d||f }tjd|d}t||}t|jjt|jk| qd S )Nz?bhilBHILefdgFDGZddddddddddddgDDGzdtin: %s, dtout: %sr   rp   )r   r   r-  Zfloat_powerr   r)   name)rZ   Zarg_typeZres_typeZdtinZdtoutr  rP  r-   r   r   r   test_type_conversion  s    z$TestFloat_power.test_type_conversionN)r]   r^   r_   r  r   r   r   r   r  ~  s   r  c                   @   s\   e Zd Zejddddgdd Zejdedd	d
d Zejj	e
dddd ZdS )TestLog2r0  r}  r|   gc                 C   sd   ddddddddd	d
dg}dddddddddddg}t j||d}t j||d}tt || d S )Nr   r%   r1             @   rH           r   r0   r2      r  r  r:   rp   )r   rq   r   log2rZ   r0  rP   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   r   )rZ   r   vr   r   r   test_log2_ints  s    zTestLog2.test_log2_intsr   r   c              	   C   s   t tdd t ttjtj ttttj tjdd}t	ddt
 tttd ttttj  t tdtj  t|d jt
k t|d	 jt
k t|d
 jt
k W 5 Q R X d S )NrL   r  T)recordalways       r   r   r%   )r   r   r  r  r   r  r   warningscatch_warningsfilterwarningsr/  category)rZ   wr   r   r   test_log2_special  s    zTestLog2.test_log2_specialN)r]   r^   r_   r   r   r   r  rM  r  r5  r   r  r   r   r   r   r    s   

r  c                   @   s   e Zd Zdd ZdS )TestExp2c                 C   sn   ddddddddd	d
dg}dddddddddddg}dD ]0}t j||d}t j||d}tt || q8d S )Nr   r%   r1   r  r  r  r  rH  r  r  r  r   r0   r2   r  r  r  r:   r}  r|   r  rp   )r   rq   r   exp2rZ   rP   r   r0  r  r  r   r   r   test_exp2_values  s    zTestExp2.test_exp2_valuesN)r]   r^   r_   r  r   r   r   r   r    s   r  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestLogAddExp2c           	      C   s   dddddg}dddddg}dddddg}t ddd	gdd
d
gD ]Z\}}ttj||d}ttj||d}ttj||d}tt||||d q@d S Nr   r%   r0   r1   r2   r  r}  r|   r  r  rp   decimal)r   r   r  rq   r   
logaddexp2	rZ   rP   r   r3  r0  dec_r  r  zfr   r   r   test_logaddexp2_values  s    z%TestLogAddExp2.test_logaddexp2_valuesc                 C   sn   ddddg}ddddg}ddddg}dD ]@}t j||d}t j||d}t j||d}tt ||| q(d S N@B iiC ir  rp   )r   rq   r   r  rZ   rP   r   r3  r0  logxflogyflogzfr   r   r   test_logaddexp2_range  s    z$TestLogAddExp2.test_logaddexp2_rangec           	   	   C   s   t j}|| || |d| dg}||| | d|d| g}|||| ||ddg}t jddL dD ]@}t j||d}t j||d}t j||d}tt ||| qbW 5 Q R X d S Nr   r   rV   r  rp   )r   r  r   rq   r   r  	rZ   r  rP   r   r3  r0  r  r  r  r   r   r   test_inf  s    zTestLogAddExp2.test_infc                 C   s   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 rj  )r   r   r  r  r   r  rY   r   r   r   test_nan  s
    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 rj  )r   r   r  identityr  r   rY   r   r   r   test_reduce  s    zTestLogAddExp2.test_reduceN)r]   r^   r_   r  r  r  r  r  r   r   r   r   r    s
   

r  c                   @   s   e Zd Zdd Zdd ZdS )TestLogc                 C   s   ddddddddd	d
dg}dddddddddddg}dD ]8}d}t j||d}t j||d| }tt || q8t dddddg}t |}tt j||d| dD ]2}t jdd t |j}t | W 5 Q R X qd S )Nr   r%   r1   r  r  r  r  rH  r  r  r  r   r0   r2   r  r  r  r:   r  9B.?rp   g      ?gRQ?gl#	?r  r   r&  )r   rq   r   logr   r[  maxrZ   rP   r   r0  Zlog2_r  r  r   r   r   test_log_values  s    
zTestLog.test_log_valuesc           	   
   C   s   t jd t dddddddd	g}t dd
}|D ]}t t jjdd|d}| }d|ddd	< t |}t |}|D ]T}t	t |d d | |d d | dd t	t |d d | |d d | dd qq6d S )N*   r6   r5   r4   r3   r   r%   r0   r1   r   {Gz?      Y@r   rL   Znulp)
r   r   seedrq   r  r   uniformr   r  r   )	rZ   stridessizesiix_f64Z	x_specialy_trueZ	y_specialjjr   r   r   test_log_strides  s    

(zTestLog.test_log_stridesN)r]   r^   r_   r  r  r   r   r   r   r    s   r  c                   @   s   e Zd Zdd Zdd ZdS )TestExpc                 C   sv   ddddddddd	d
dg}dddddddddddg}dD ]8}d}t j||d}t j||d| }tt || q8d S )Nr   r%   r1   r  r  r  r  rH  r  r  r  r   r0   r2   r  r  r  r:   r  r  rp   )r   rq   r   r  r  r   r   r   test_exp_values  s    zTestExp.test_exp_valuesc              
   C   s   t jd t dddddddd	g}t dd
}|D ]X}t t jjdd|d}t |}|D ],}tt |d d | |d d | dd q`q6d S )Nr  r6   r5   r4   r3   r   r%   r0   r1   r   r  g(@r   r  )	r   r   r  rq   r  r   r  r  r   )rZ   r   r  r  r  r  r  r   r   r   test_exp_strides  s    
zTestExp.test_exp_stridesN)r]   r^   r_   r  r	  r   r   r   r   r    s   	r  c                #   @   s  e Zd Zdd Zejjeddddd Zejj	e
ddd	d
 Zejj	e
dddd Zejdddddgdd Zdd Zejj	e
dddd Zejj	e
dddd Zejj	e
dddd Zejj	e
dddd Zdd Zejj	e
ddd d! Zejj	e
ddd"d# Zd$d% Zd&d' Zejj	e
ddd(d) Zejj	e
ddd*d+ Zejjedddd,d- Zejj	e
ddd.d/ Zejejej ej!ej"ej#ej$gZ%ej&ej'ej(ej)ej*ej+ej$gZ,ej$gZ-ej+gZ.ej&ej'ej(ej/ej+gZ0ejd0e1ejd1d2ejd3d4ge.fd4gd5 e.fd6ge,fd6gd5 e,fd7ge-fd7gd5 e-fd8ge0fd8gd5 e0fd9ge0fd9gd5 e0fd:d:d:ej2ge.fd:d:d:ej2gd5 e.fej2d7d7d7ge-fej2d7d7d7gd5 e-fej2gg fej2gd5 g fd:d:d:ej3ge%e. fd:d:d:ej3gd5 e%e. fej3d7d7d7ge%fej3d7d7d7gd5 e%fej3ge%fej3gd5 e%fd:d:d:ej3 ge,e% e. fd:d:d:ej3 gd5 e,e% e. fej3 d7d7d7ge,e% fej3 d7d7d7gd5 e,e% fej3 ge,e% fej3 gd5 e,e% ffd;d< Z4d=S )>TestSpecialFloatsc              	   C   s~   t jdddf t jt jt jdg}t jt j t jt j g}dD ]0}t j||d}t j||d}tt || q>W 5 Q R X d S )Nr   )underr   r  re   r}  r|   r  rp   )r   r   r   r  rq   r   r  r  r   r   r   r    s    z!TestSpecialFloats.test_exp_values2.17z<Older glibc versions may not raise appropriate FP exceptionsr   c              	   C   s   t jddj ttt jt d 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 5 Q R X t jddj ttt jt d 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 5 Q R X d S )Nr   r   g o_.&@r  g =`XCg      @)r  g     1g     @g =`X)r   r   r	   r   r  float16r  r   rY   r   r   r   test_exp_exceptions%  s    z%TestSpecialFloats.test_exp_exceptionsr   c           	   	   C   s  t jdd 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 ]n}t j||d}t j||d}t j||d}tt || tt || tt || tt 	|| qhW 5 Q R X t jdd	p d
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 t
tt j	t jd|d qW 5 Q R X t jdd 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 t
tt j	t jt j |d t
tt j	t jd|d qvW 5 Q R X t  t jddd}t | W 5 Q R X d S )NrU   r&  r  r         r  rp   r   r   re   r}  r|   rV   g    eAr  )r   r   r   r  rq   r   r  r  log10log1pr	   r   r   )	rZ   rP   r   Zy1pr0  r  r  Zyf1pry   r   r   r   r  8  sn    z!TestSpecialFloats.test_log_valuesc                 C   s   t jddx 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 5 Q R X t jddN t jt jfD ]:}t jt j fD ]&}dD ]}tt	|t j|g|d qqqW 5 Q R X d S )NrU   r&  r  rp   r   rV   r  )
r   r   r   r  rq   r   sincosr	   r   )rZ   rP   r   r0  r  r  callablevaluer   r   r   test_sincos_valuesj  s    z$TestSpecialFloats.test_sincos_valuesr0  re   r}  r|   r  c              	   C   sx   t jddb 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 5 Q R X d S )NrU   r&  r  rp   )r   r   r   r  rq   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 ]0}t j||d}t j||d}tt || q@d S )Nr  rL   rK  r  r  rp   )r   r   r  rq   r   rO   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 ]0}t j||d}t j||d}tt || q>W 5 Q R X t jddN ttt jt jddd ttt jt jd	d
d ttt jt jddd W 5 Q R X d S )NrU   r&  r  rp   r   r       @@re   gnFr}  gZbtir|   )	r   r   r  r   rq   r   squarer	   r   r  r   r   r   test_square_values  s"    z$TestSpecialFloats.test_square_valuesc              	   C   s   t jddr t jt jddt jt j g}t jt j t jt j ddg}dD ]0}t j||d}t j||d}tt || qHW 5 Q R X t jdd( dD ]}ttt jt jd|d qW 5 Q R X d S )	NrU   r&  r  rK  r  rp   r   r   )	r   r   r   r  rq   r   
reciprocalr	   r   r  r   r   r   test_reciprocal_values  s    z(TestSpecialFloats.test_reciprocal_valuesc              	   C   s   t jddp t jt j ddt jt j g}t jt jddt jt jg}dD ]0}t j||d}t j||d}tt || qFW 5 Q R X t jddF dD ]:}ttt jt jt j|d ttt jt jt j |d qW 5 Q R X d S )	NrU   r&  r  rK  r  rp   r   rV   )	r   r   r   r  rq   r   tanr	   r   rZ   in_rn   r0  in_arrout_arrr   r   r   test_tan  s    zTestSpecialFloats.test_tanc                 C   s   t jddx 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 5 Q R X t jt jfD ]T}t jt j ddfD ]<}dD ]2}t jdd tt	|t j||d W 5 Q R X qqqd S )	NrU   r&  r  rp   r  r  r   rV   )
r   r   r   r  rq   r   arcsinarccosr	   r   )rZ   r#  rn   r0  r$  r%  r  r  r   r   r   test_arcsincos  s    z TestSpecialFloats.test_arcsincosc              	   C   sl   t jddV t jt j g}t jt jg}dD ]0}t j||d}t j||d}tt || q,W 5 Q R X d S )NrU   r&  r  rp   )r   r   r   rq   r   arctanr"  r   r   r   test_arctan  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 ]0}t j||d}t j||d}tt || q2t jddN ttt jt jddd ttt jt jddd ttt jt jd	d
d W 5 Q R X d S Nr  rp   r   r        (@re   g      ^@r}  g     @r|   )	r   r   r  rq   r   sinhr   r	   r   r"  r   r   r   	test_sinh  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 ]0}t j||d}t j||d}tt || q0t jddN ttt jt jddd ttt jt jddd ttt jt jd	d
d W 5 Q R X d S r,  )	r   r   r  rq   r   coshr   r	   r   r"  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 ]0}t j||d}t j||d}tt || q,d S )NrL   r  r  rp   )r   r   r  rq   r   tanhr"  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 ]0}t j||d}t j||d}tt || q2d S )Nr  rp   )r   r   r  rq   r   rM   r"  r   r   r   test_arcsinh
  s    zTestSpecialFloats.test_arcsinhc              
   C   s   t jddr 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 ]0}t j||d}t j||d}tt || qHW 5 Q R X dt j fD ]>}t jdd( dD ]}ttt jt j||d qW 5 Q R X qd S )	NrU   r&  rL   r  r  rp   r   rV   )	r   r   r   r  rq   r   arccoshr	   r   rZ   r#  rn   r0  r$  r%  r  r   r   r   test_arccosh  s    zTestSpecialFloats.test_arccoshc              
   C   s   t jdd| 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 ]0}t j||d}t j||d}tt || qRW 5 Q R X dt jt j ddfD ]@}t jd	d	d
( dD ]}ttt jt j||d qW 5 Q R X qd S )NrU   r&  rL   r  r  r  rp   g)\(?r   r  )	r   r   r   r  rq   r   arctanhr	   r   r6  r   r   r   test_arctanh"  s    "zTestSpecialFloats.test_arctanhc              
   C   s   t jddf t jt j t jt j g}t jt jt jdg}dD ]0}t j||d}t j||d}tt || q<W 5 Q R X dD ]@}t jddd( dD ]}ttt jt j||d qW 5 Q R X q|d S )	NrU   r&  r  r  rp   )     @@g     @r   )r   r  )	r   r   r   r  rq   r   r  r	   r   r6  r   r   r   	test_exp23  s    zTestSpecialFloats.test_exp2c              
   C   s   t jddf t jt j t jt j g}t jt jt jdg}dD ]0}t j||d}t j||d}tt || q<W 5 Q R X dD ]>}t jdd( d	D ]}ttt jt j||d qW 5 Q R X q|d S )
NrU   r&  r  r  rp   )g      i@r:  r   r  )re   r}  )	r   r   r   r  rq   r   expm1r	   r   r6  r   r   r   
test_expm1F  s    zTestSpecialFloats.test_expm1r   r)   r  zdata, escapegQ?r  r  rL   r  rK  rj   c              	   C   sX   |r||krd S |t jt jfkr,|dkr,d S t j||d}t  || W 5 Q R X d S )Nre   rp   )r   spacingceilrq   r   )rZ   r   r)   dataescaperq   r   r   r   test_unary_spurious_fpexceptionh  s    )z1TestSpecialFloats.test_unary_spurious_fpexceptionN)5r]   r^   r_   r  r   r   rd  r   r  r5  r   r  r  r   r  r  r  r   r&  r)  r+  r/  r1  r3  r4  r7  r9  r;  r=  r   r  r  r!  r(  r'  r>  r8  ZINF_INVALID_ERRr  r  r  r  r  r5  ZNEG_INVALID_ERRZONE_INVALID_ERRZLTONE_INVALID_ERRr  Z
BYZERO_ERRUFUNCS_UNARY_FPr   r  rB  r   r   r   r   r
    s   


1





	





               



&r
  c                	   @   s.   e Zd Zejdddddddgdd	 Zd
S )TestFPClassrA   r6   r4   r3   r   r%   r1   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 ddddddddddg
}t ddddddddddg
}t ddddddddddg
}t ddddddddddg
}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  rL   rK  r  giVQ  giVQ r|   rp   gJ-& 6gJ-& r}  TF)	r   rq   r   r  r   r  r  r#  isfinite)rZ   rA   Zarr_f64Zarr_f32r   r  signZfiniter   r   r   test_fpclass  s    ..$$$$$$$zTestFPClass.test_fpclassN)r]   r^   r_   r   r   r   rG  r   r   r   r   rD    s   rD  c                	   @   s@   e Zd Zejdddddddgejdd	d
gdd ZdS )	TestLDExprA   r6   r4   r3   r   r%   r1   r)   r}  r|   c              	   C   s   t jddddddddg|d}t jd	d
ddddddg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 )Ng      ?      ?rj   rL   r  r  g       @rp   r0   r%   r   r   r3   r4   r5   r   r  r  )r   rq   r   r   ldexpr-  )rZ   r)   rA   mantr  rn   r   r   r   
test_ldexp  s
    HzTestLDExp.test_ldexpN)r]   r^   r_   r   r   r   rL  r   r   r   r   rH    s   rH  c                	   @   sZ   e Zd Zejdddddddgejdd	d
gejjej	d dddd Z
dS )	TestFRExprA   r6   r4   r3   r   r%   r1   r)   r}  r|   linuxzAnp.frexp gives different answers for NAN/INF on windows and linuxr   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ddddddd	d	g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  rK  rL   r  rp   rj         r   r   r   r  r%   r  )r   rq   r   r  r-  ru   r   )
rZ   r)   rA   r   Z	mant_trueexp_trueZout_mantZout_exprK  r  r   r   r   
test_frexp  s    ((4zTestFRExp.test_frexpN)r]   r^   r_   r   r   r   r5  re  rF   rI   rQ  r   r   r   r   rM    s   rM  r   r  r        YrL   )r  absoluter  r  rintfloorr?  truncc                   @   s   e Zd Zdd ZdS )TestAVXUfuncsc              
   C   sp  t ddddddddg}t jd	 t D ]:\}}|d
 }|d }|d }tddD ]}tt |}t t jj	|||d}	t 
|	}
t |	}||}|d
krt||	t | t||
t 
| n0t||	t ||d t||
t 
||d |dkrZ||	}||
}|D ]J}t||
d d | |d d |  t||	d d | |d d |  qqZq.d S )Nr6   r5   r4   r3   r   r%   r0   r1   r  r   r  r   Zmaxulp)r   rq   r   r  
avx_ufuncsitemsrM  getattrr  r  r   
longdoubler   r   )rZ   r   funcpropZ	maxulperrminvalmaxvalr   Zmyfuncx_f32r  Zx_f128Z	y_true128Zy_true32Zy_true64r  r   r   r   test_avx_based_ufunc  s:    


"z"TestAVXUfuncs.test_avx_based_ufuncN)r]   r^   r_   rb  r   r   r   r   rW    s   rW  c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestAVXFloat32Transcendentalc                 C   sR   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   r0   rX  )r   r   r  r  r  r   r   r  rZ   ra  r  r   r   r   test_exp_float32  s    
z-TestAVXFloat32Transcendental.test_exp_float32c                 C   sR   t jd t t jjdddd}t |}tt |t t |dd d S )Nr  r  r   r  r   r1   rX  )r   r   r  r  r  r   r   r  re  r   r   r   test_log_float32  s    
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sjt 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   rR  r  r  g   vH7Br%   rX  r  )r   r   r  int_r   r  r  r   Zrandr   r   r  r  r   )rZ   Nr  indexra  r  Ztx_f32r   r   r   test_sincos_float32   s    
  $z0TestAVXFloat32Transcendental.test_sincos_float32c              
   C   sB  t jd t dddddddd	g}t dd
}|D ]}t t jjdd|d}| }d|ddd	< t |}t 	|}t 
|}t |}	|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 tt |d d |
 |	d d |
 dd qq6d S )Nr  r6   r5   r4   r3   r   r%   r0   r1   r   r  rd  r   g     L@r  )r   r   r  rq   r  r  r  r   r  r  r  r  r   )rZ   r   r  r  ra  Zx_f32_largerP  Zlog_trueZsin_trueZcos_truer  r   r   r   test_strided_float32  s     




(((z1TestAVXFloat32Transcendental.test_strided_float32N)r]   r^   r_   rf  rg  rl  rm  r   r   r   r   rc    s   rc  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestLogAddExpc           	      C   s   dddddg}dddddg}dddddg}t ddd	gdd
d
gD ]Z\}}ttj||d}ttj||d}ttj||d}tt||||d q@d S r  )r   r   r  rq   r   	logaddexpr  r   r   r   test_logaddexp_values%  s    z#TestLogAddExp.test_logaddexp_valuesc                 C   sn   ddddg}ddddg}ddddg}dD ]@}t j||d}t j||d}t j||d}tt ||| q(d S r  )r   rq   r   ro  r  r   r   r   test_logaddexp_range/  s    z"TestLogAddExp.test_logaddexp_rangec           	   	   C   s   t j}|| || |d| dg}||| | d|d| g}|||| ||ddg}t jddL dD ]@}t j||d}t j||d}t j||d}tt ||| qbW 5 Q R X d S r  )r   r  r   rq   r   ro  r  r   r   r   r  9  s    zTestLogAddExp.test_infc                 C   s   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 rj  )r   r   r  ro  r   r  rY   r   r   r   r  E  s
    zTestLogAddExp.test_nanc                 C   s,   t tjjtj  t tjg tj  d S r+   )r   r   ro  r  r  r   rY   r   r   r   r  L  s    zTestLogAddExp.test_reduceN)r]   r^   r_   rp  rq  r  r  r  r   r   r   r   rn  $  s
   

rn  c                   @   s   e Zd Zdd Zdd ZdS )	TestLog1pc                 C   s0   t tdtd t tdtd d S )N皙?g333333?ư>gzo ?)r   rb   r  r  rY   r   r   r   
test_log1pR  s    zTestLog1p.test_log1pc              	   C   s   t jdddj 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 5 Q R X d S )NrU   r  r  r  )r   r   r   rb   r  r   r  rY   r   r   r   test_specialV  s    zTestLog1p.test_specialN)r]   r^   r_   ru  rv  r   r   r   r   rr  Q  s   rr  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )	TestExpm1c                 C   s8   t tdtdd  t tdtdd  d S )Nrs  r   rt  )r   rb   r<  r  rY   r   r   r   r=  `  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  rK  r  )r   rb   r<  r   r  rY   r   r   r   rv  d  s
    zTestExpm1.test_specialc                 C   s:   t d}t|t| |t j}t|t| d S )Ng-q=)r   r   r   rb   r<  r   r  r   r   r   r   test_complexk  s    
zTestExpm1.test_complexN)r]   r^   r_   r=  rv  rx  r   r   r   r   rw  _  s   rw  c                   @   s   e Zd Zdd Zdd ZdS )	TestHypotc                 C   s.   t tddtd t tddd d S Nr   r%   r   )r   rb   hypotr  rY   r   r   r   test_simples  s    zTestHypot.test_simplec                 C   s\   t tjddgd t tjdddgd t tjdddgd ttjg d	 d S )
Nr  r        @r   r  r-        4@g      9@r  )r   rb   r{  r   r   rY   r   r   r   r  w  s    zTestHypot.test_reduceN)r]   r^   r_   r|  r  r   r   r   r   ry  r  s   ry  c              
   C   sF   t jdd0 tt t| |d| |t| |f  W 5 Q R X d S )NrU   rV   zhypot(%s, %s) is %s, not nan)r   r   r   r  rb   r{  r9  r   r   r   assert_hypot_isnan~  s    r  c              
   C   sF   t jdd0 tt t| |d| |t| |f  W 5 Q R X d S )NrU   rV   zhypot(%s, %s) is %s, not inf)r   r   r   r  rb   r{  r9  r   r   r   assert_hypot_isinf  s    r  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestHypotSpecialValuesc                 C   s   t tjtj t tjd d S Nr   )r  r   r   rY   r   r   r   test_nan_outputs  s    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  rY   r   r   r   test_nan_outputs2  s    z(TestHypotSpecialValues.test_nan_outputs2c                 C   s   t tjtjd d S rj  )r   rb   r{  r   r  rY   r   r   r   test_no_fpe  s    z"TestHypotSpecialValues.test_no_fpeN)r]   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   arctan2r9  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  r9  r   r   r   assert_arctan2_ispinf  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 -infr  r9  r   r   r   assert_arctan2_isninf  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 +0r   rb   r  r   r#  r9  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  r9  r   r   r   assert_arctan2_isnzero  s    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   rI  r3         п      ?)r   rb   r  r   rc   rY   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   rY   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  rY   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 )Nr3   r   rb   r  r   r  rc   r  rY   r   r   r   test_zero_negative  s    z+TestArctan2SpecialValues.test_zero_negativec                 C   s   t tjd ttjd d S r  r  rY   r   r   r   test_zero_positive  s    z+TestArctan2SpecialValues.test_zero_positivec                 C   s8   t tdtjdtj  t tdtjdtj  d S )Nr   rj   r  rY   r   r   r   test_positive_zero  s    z+TestArctan2SpecialValues.test_positive_zeroc                 C   s8   t tdtjdtj  t tdtjdtj  d S )Nr3   rO  r  rY   r   r   r   test_negative_zero  s    z+TestArctan2SpecialValues.test_negative_zeroc                 C   s2   t tdtjtj t tdtjtj  d S Nr   r3   )r   rb   r  r   ZNINFrc   rY   r   r   r   test_any_ninf  s    z&TestArctan2SpecialValues.test_any_ninfc                 C   s   t dtj tdtj d S r  )r  r   r  r  rY   r   r   r   test_any_pinf  s    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   rj   rO  r   rb   r  r   r  rc   rY   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  rY   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 )NrI  r  r  rY   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  rY   r   r   r   test_nan_any  s    z%TestArctan2SpecialValues.test_nan_anyN)r]   r^   r_   r  r  r  r  r  r  r  r  r  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S )	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  r0         0@)r   rb   rJ  r   rq   r  r   r\  )rZ   tpr   r   r   _check_ldexp  s    


zTestLdexp._check_ldexpc                 C   sN   t tddd | tj | tj | tj | d | d d S )Nr  r0   r  r   r   )r   rb   rJ  r  r   int8r  rt   rY   r   r   r   rL    s    
zTestLdexp.test_ldexpc              	   C   sf   t jddP t t dj}t t dj}ttd|t j	 ttd|d W 5 Q R X d S )NrU   r  r   r  r   )
r   r   r   r)   r  r   r   rb   rJ  r  )rZ   ZimaxZiminr   r   r   test_ldexp_overflow  s
    zTestLdexp.test_ldexp_overflowN)r]   r^   r_   r  rL  r  r   r   r   r   r    s   
r  c                   @   sL   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   s   t jd }t jd }t d}|d d d }t jj}|D ]4}||}||}t||d t||d q8|D ]t}||}||}t||d t||d t j|d d d< t j|d d d< t||t j t||t j qrd S )NAllFloatr?  r  r3   r:   r%   )r   r8  r  maximumr   r   r   r   	rZ   ZdfltZdintZseq1Zseq2r]  r0  Ztmp1Ztmp2r   r   r   r    s&    






zTestMaximum.test_reducec                 C   s0   t tjddgd t tjddgd d S Nr                  @y      ?      @)r   r   r  r   rY   r   r   r   test_reduce_complex&  s    zTestMaximum.test_reduce_complexc                 C   sL   t j}t d||g}t |d|g}t |||g}tt ||| d S rj  )r   r   rq   r   r  rZ   r   arg1arg2rn   r   r   r   test_float_nans*  s
    zTestMaximum.test_float_nansc                 C   s^   t dD ]P}ttdt}d}ttdt}tt||dk tt||dk qd S Nr   r   rL   )rM  r   rq   r   r   r   r  rZ   r   rP   r   r3  r   r   r   test_object_nans1  s    zTestMaximum.test_object_nansc                 C   sz   t j}t|dtd|t||fD ]R}t jd||gtd}t j|d|gtd}t j|||gtd}tt ||| q"d S Nr   rp   )r   r   r  rq   r   r  rZ   r   r  r  r  rn   r   r   r   test_complex_nans<  s     zTestMaximum.test_complex_nansc                 C   s,   t jdtd}|d }tt ||| d S Nr2   rp   r   )r   r  r   r   r  rZ   r  r  r   r   r   test_object_arrayD  s    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      rL   g      $@r  r  r  r  r  r%   r1   r0   r  r  )r   rq   r   r  r-  r   r  )rZ   r>   r?   Zmaxtruern   Zout_maxtruer   r   r   test_strided_arrayI  s    &"
042BzTestMaximum.test_strided_arrayc                 C   s   t jt jt jt jg}|D ]}t |j}t |j}|d}t |t j	}|t j	 |f|t j	 |f|||f|t j
t j
fg}|D ]8\}}	}
tt |g|	g|
g tt j||	g|
 q~qd S Nr   )r   r  r  r   r\  r[  r   r  ra  r  r   r   r  r   rZ   r  r0  ZdtminZdtmaxd1Zd1_nextZ
test_casesrQ   rR   expectedr   r   r   test_precisionV  s    zTestMaximum.test_precisionNr]   r^   r_   r  r  r  r  r  r  r  r  r   r   r   r   r    s   r  c                   @   sL   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 )TestMinimumc           	      C   s   t jd }t jd }t d}|d d d }t jj}|D ]4}||}||}t||d t||d q8|D ]t}||}||}t||d t||d t j|d d d< t j|d d d< t||t j t||t j qrd S )Nr  r?  r  r3   r   r%   )r   r8  r  minimumr   r   r   r   r  r   r   r   r  m  s&    






zTestMinimum.test_reducec                 C   s0   t tjddgd t tjddgd d S r  )r   r   r  r   rY   r   r   r   r    s    zTestMinimum.test_reduce_complexc                 C   sL   t j}t d||g}t |d|g}t |||g}tt ||| d S rj  )r   r   rq   r   r  r  r   r   r   r    s
    zTestMinimum.test_float_nansc                 C   s^   t dD ]P}ttdt}d}ttdt}tt||dk tt||dk qd S r  )rM  r   rq   r   r   r   r  r  r   r   r   r    s    zTestMinimum.test_object_nansc                 C   sz   t j}t|dtd|t||fD ]R}t jd||gtd}t j|d|gtd}t j|||gtd}tt ||| q"d S r  )r   r   r  rq   r   r  r  r   r   r   r    s     zTestMinimum.test_complex_nansc                 C   s,   t jdtd}|d }tt ||| d S r  )r   r  r   r   r  r  r   r   r   r    s    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   rq   r   r  r-  r   r  )rZ   r>   r?   Zmintruern   Z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 ]}t |j}t |j}|d}t |t j	}|t j	|f|t j	|f|||f|t j
t j
fg}|D ]8\}}	}
tt |g|	g|
g tt j||	g|
 qzqd S r  )r   r  r  r   r\  r[  r   r  ra  r  r   r   r  r   r  r   r   r   r    s    

zTestMinimum.test_precisionNr  r   r   r   r   r  l  s   r  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestFmaxc           	      C   s   t jd }t jd }t d}|d d d }t jj}|D ]4}||}||}t||d t||d q8|D ]p}||}||}t||d t||d t j|d d d< t j|d d d< t||d t||d qrd S )Nr  r?  r  r3   r:   r%   r  )r   r8  r  fmaxr   r   r   r   r  r   r   r   r    s&    






zTestFmax.test_reducec                 C   s0   t tjddgd t tjddgd d S r  )r   r   r  r   rY   r   r   r   r    s    zTestFmax.test_reduce_complexc                 C   sL   t j}t d||g}t |d|g}t dd|g}tt ||| d S rj  )r   r   rq   r   r  r  r   r   r   r    s
    zTestFmax.test_float_nansc                 C   sz   t j}t|dtd|t||fD ]R}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  rq   r   r  r  r   r   r   r    s     zTestFmax.test_complex_nansc                 C   s   t jt jt jt jg}|D ]}t |j}t |j}|d}t |t j	}|t j	 |f|t j	 |f|||f|t j
|fg}|D ]8\}}	}
tt |g|	g|
g tt j||	g|
 q|qd S r  )r   r  r  r   r\  r[  r   r  ra  r  r   r   r  r   r  r   r   r   r    s    
zTestFmax.test_precisionNr]   r^   r_   r  r  r  r  r  r   r   r   r   r    s
   r  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestFminc           	      C   s   t jd }t jd }t d}|d d d }t jj}|D ]4}||}||}t||d t||d q8|D ]p}||}||}t||d t||d t j|d d d< t j|d d d< t||d t||d qrd S )Nr  r?  r  r3   r   r%   r   )r   r8  r  fminr   r   r   r   r  r   r   r   r  	  s&    






zTestFmin.test_reducec                 C   s0   t tjddgd t tjddgd d S r  )r   r   r  r   rY   r   r   r   r  	  s    zTestFmin.test_reduce_complexc                 C   sL   t j}t d||g}t |d|g}t dd|g}tt ||| d S rj  )r   r   rq   r   r  r  r   r   r   r  !	  s
    zTestFmin.test_float_nansc                 C   sz   t j}t|dtd|t||fD ]R}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  rq   r   r  r  r   r   r   r  (	  s     zTestFmin.test_complex_nansc                 C   s   t jt jt jt jg}|D ]}t |j}t |j}|d}t |t j	}|t j	|f|t j	|f|||f|t j
|fg}|D ]8\}}	}
tt |g|	g|
g tt j||	g|
 qxqd S r  )r   r  r  r   r\  r[  r   r  ra  r  r   r   r  r   r  r   r   r   r  0	  s    


zTestFmin.test_precisionNr  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	S )
TestBoolc                 C   s@   t jdt jd}ttt j| ttt j| ttt j|| d S )Nr   rp   )r   r-  r   r	   rv   negativepositivesubtractr   r   r   r   test_exceptionsG	  s    zTestBool.test_exceptionsc           	      C   s   ddddg}ddddg}t jd t jd  d }tt j|D ]}t j||d}t j||d}d	d
d
d
g}t jt jfD ]}t|||t	| qtd	d	d	d
g}t j
t jfD ]}t|||t	| qd	d
d
d	g}t jt jfD ]}t|||t	| qq<d S )Nr   r0   r%   r1   r  r?  ?rp   FT)r   r8  mapr)   r   
logical_orr  r   r   r   logical_andr  logical_xorr   )	rZ   Zinput1Zinput2r8  r)   r  r  rn   r]  r   r   r   test_truth_table_logicalM	  s&    z!TestBool.test_truth_table_logicalc                 C   sv   ddddg}ddddg}ddddg}t t||| ddddg}t t||| ddddg}t t||| d S )NFT)r   r   
bitwise_orbitwise_andbitwise_xor)rZ   r  r  rn   r   r   r   test_truth_table_bitwisef	  s    z!TestBool.test_truth_table_bitwisec                 C   s   t ddddgt}t ddddgt}t ddddgt}t g t}||||g}|D ]}tt j|t| qX|D ]}tt j|t| qx|D ]"}tt j	||
 d dk qd S )Nr   r   r%   )r   rq   r   r   r  r   r   r  anyr  r   )rZ   noneZsomeZeveryrr   Zarrsr   r   r   r   r  s	  s    zTestBool.test_reduceN)r]   r^   r_   r  r  r  r  r   r   r   r   r  F	  s   r  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   s   g | ]}t |qS r   )r   r)   )r   cr   r   r   r   	  s     zTestBitwiseUFuncs.<listcomp>z?bBhHiIlLqQOc                 C   sn  | j D ]`}tjdg|d}tdg|}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   rp   r3   	dt = '%s'r  )
bitwise_typesr   rq   r   charr   bitwise_notr  r  r  rZ   r0  r   r-  r  r   r   r   test_values	  s$    
zTestBitwiseUFuncs.test_valuesc                 C   s   | j D ]}tjdg|d}tdg|}d|j }tt|j|k| tt||j|k| tt	||j|k| tt
||j|k| qd S )Nr   rp   r3   r  )r  r   rq   r   r  r   r  r)   r  r  r  r  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   r  r  r3   r  )r   r   r  r  r  r  rY   r   r   r   test_identity	  s    zTestBitwiseUFuncs.test_identityc                 C   sr  t jt jt jf}| jD ]d}t jdg|d}t dg|}|D ]8}d||f }t||||d t||||d q@q| jd d D ]d}t jg |d}|D ]L}d||f }t |j	|}||}	t|	||d t
|	j|jk| qq|D ]:}d|f }t jg td}|j	}||}	t|	||d q|D ]8}d|f }t jdgtd}
t
t||
tk| q4d S )Nr   rp   r3   zdt: '%s', f: '%s'r  zdt: '%s'T)r   r  r  r  r  rq   r   r   r   r  r   r)   r   r   r   )rZ   Zbinary_funcsr0  r   r-  r}  r  rr   rQ  r-   Zbtyper   r   r   test_reduction	  s4    




z TestBitwiseUFuncs.test_reductionN)r]   r^   r_   r  r  r  r  r  r   r   r   r   r  	  s
   r  c                   @   s   e Zd Zdd ZdS )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:   rp   rh  Fr%   r  )r   r-  r  r   r   r   Zlogical_not)rZ   rP   rz   rQ  osr   r   r   test_logical_not	  s    zTestInt.test_logical_notN)r]   r^   r_   r  r   r   r   r   r  	  s   r  c                   @   s   e Zd Zdd ZdS )TestFloatingPointc                 C   s   t tjd d S r  )r   rb   ZFLOATING_POINT_SUPPORTrY   r   r   r   test_floating_point	  s    z%TestFloatingPoint.test_floating_pointN)r]   r^   r_   r  r   r   r   r   r  	  s   r  c                   @   s   e Zd Zdd ZdS )TestDegreesc                 C   s,   t ttjd t tdtj d d S )N     f@rO       V)r   rb   degreesr   rc   rY   r   r   r   test_degrees	  s    zTestDegrees.test_degreesN)r]   r^   r_   r  r   r   r   r   r  	  s   r  c                   @   s   e Zd Zdd ZdS )TestRadiansc                 C   s,   t tdtj t tddtj  d S )Nr  r  rO  )r   rb   radiansr   rc   rY   r   r   r   test_radians	  s    zTestRadians.test_radiansN)r]   r^   r_   r  r   r   r   r   r  	  s   r  c                   @   s   e Zd Zdd ZdS )TestHeavsidec                 C   s   t ddddgdt jt jt j gg}t ddddg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 )
Ng      >r   r  rs  g      @rj   rL   r   r   r%   )
r   rq   r   r  r   rb   Z	heavisider   r   r  )rZ   rP   ZexpectedhalfZ	expected1hr   r   r   test_heaviside	  s    & 

zTestHeavside.test_heavisideN)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S )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 5 Q R X d S )Nr  r  r  rL   r  rU   rV   )
r   rq   r  r   r   r  r   rb   rF  r   )rZ   ry   rn   rQ  r-   r   r   r   	test_sign
  s    


zTestSign.test_signc                 C   s8   t dddg}t |t}t |}t|| d S )Nr   r   r   )r   rq   rF  r   r   r   )rZ   foory   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   rq   r   rF  r   r   )r  ry   r   r   r   r  #
  s    z5TestSign.test_sign_dtype_nan_object.<locals>.test_nan)r	   rv   )rZ   r  r   r   r   test_sign_dtype_nan_object!
  s    z#TestSign.test_sign_dtype_nan_objectN)r]   r^   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	S )

TestMinMaxc                    s   t jdft jdffD ]\}}t|d|dD ]\} t jD ]}t j j|d d d < t j |<  fdd}t >}|	t
d tt   |d	 tt   |d	 W 5 Q R X d
 |< t  d
d d |< t  dd q>q*qd S )Nr  r  r  r  rp   c                      s   d f S )Nz%r
%sr   r   r  r  r   r   r.   4
  r/   z0TestMinMax.test_minmax_blocked.<locals>.<lambda>z#invalid value encountered in reduce)r  g    _Br  g    _)r   r  r   r   rM  r   r  r   r   r.  r/  r   r  r  r   r   )rZ   r0  szrn   r   emsgr1  r   r   r   test_minmax_blocked+
  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   rp   r1   r6   r   )r   r   r  r   r   r   r  r   rZ   r|   r   r   r   test_lower_align@
  s     zTestMinMax.test_lower_alignc                 C   sX   dD ]N}t jt jt jfD ]8}t t jt jg| |dD ]}tt |t j q8qqd S )N)r%   r1   r  r  r  rp   )	r   r  r  	complex64Zdiagflatrq   r   r   r   )rZ   r   r0  r{   r   r   r   test_reduce_reorderG
  s     zTestMinMax.test_reduce_reorderc                 C   s   t t jd}t|t j d S r  )r   r  r   r   r   r   r   r   test_minimize_no_warnsP
  s    z!TestMinMax.test_minimize_no_warnsN)r]   r^   r_   r  r  r  r	  r   r   r   r   r  *
  s   	r  c                   @   s   e Zd Zdd Zdd ZdS )TestAbsoluteNegativec           
   	   C   st  t jdft jdffD ]X\}}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 ]}t j|j|d}	|	 |d d < |||< |t j
 kr| n||	|< tt ||	|d t j||d t||	|d t| d| |d d| }	t j||d t||	|d qqq,qd S )Nr  r2   r  r  c                 S   s   g | ]}t |qS r   )rb   rS  r   r   r   r   r   [
  s     z=TestAbsoluteNegative.test_abs_neg_blocked.<locals>.<listcomp>r  r  r   c                 S   s   g | ]}d | qS )r3   r   r   r   r   r   r   `
  s     rp   r3   )r   r  r   r   rS  r   r   r   r  r   r  rM  r   r  r   rO   )
rZ   r0  r  rn   r  r  rQ  r  r   r|   r   r   r   test_abs_neg_blockedV
  s0    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  rp   r1   r6   r  )	r   r   r  r   r   r   rO   r  r  r  r   r   r   r  s
  s     z%TestAbsoluteNegative.test_lower_alignN)r]   r^   r_   r  r  r   r   r   r   r
  U
  s   r
  c                   @   s   e Zd Zdd Zdd ZdS )TestPositivec                 C   sD   t tttg}|D ].}tjd|d}t|}t||t|d qd S )Nr2   rp   r  )	r   r   r  r   r   r  r  r   str)rZ   Zvalid_dtypesr)   rP   r  r   r   r   
test_valid
  s
    
zTestPositive.test_validc              	   C   s   t t td W 5 Q R X t t ttd W 5 Q R X t t ttjdgtd W 5 Q R X t t ttjdgtd W 5 Q R X d S )NTz
2000-01-01r  rp   bar)r	   rv   r   r  Z
datetime64rq   r  r   rY   r   r   r   test_invalid
  s    


 
zTestPositive.test_invalidN)r]   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k tt|d t|d | t|d | t|d d S )Nc                       s    e Zd Zdd Z fddZdS )z/TestSpecialMethods.test_wrap.<locals>.with_wrapc                 S   s
   t dS r  r   r   rY   r   r   r   	__array__
  s    z9TestSpecialMethods.test_wrap.<locals>.with_wrap.__array__c                    s     }||_ ||_|S r+   )r   r   rZ   r   r   r{   	with_wrapr   r   r   
  s    z>TestSpecialMethods.test_wrap.<locals>.with_wrap.__array_wrap__Nr]   r^   r_   r  r   r   r  r   r   r  
  s   r  r   r%   r   )	rb   r  r   r   r   r   r   r   r  )rZ   ry   rP   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 )Nr   )r   r   r   r   r   r   r   r   
  s    zSTestSpecialMethods.test_wrap_and_prepare_out.<locals>.StoreArrayPrepareWrap.__new__c                 S   s   |d | _ |S r  )
_wrap_argsrZ   r   r   r   r   r   r   
  s    
zZTestSpecialMethods.test_wrap_and_prepare_out.<locals>.StoreArrayPrepareWrap.__array_wrap__c                 S   s   |d | _ |S r  )_prepare_argsr  r   r   r   __array_prepare__
  s    
z]TestSpecialMethods.test_wrap_and_prepare_out.<locals>.StoreArrayPrepareWrap.__array_prepare__c                 S   s   | j | jfS r+   )r  r  rY   r   r   r   r  
  s    zPTestSpecialMethods.test_wrap_and_prepare_out.<locals>.StoreArrayPrepareWrap.argsc                 S   s   dS )Nry   r   rY   r   r   r   __repr__
  s    zTTestSpecialMethods.test_wrap_and_prepare_out.<locals>.StoreArrayPrepareWrap.__repr__)r]   r^   r_   r  r  r   r   r  propertyr  r  r   r   r   r   StoreArrayPrepareWrap
  s   
r!  c                    s     }| | |j \}}||}zt|| t|| W nJ tk
r } z,tddd|d|d|gW 5 d }~X Y nX d S )N
z"Bad arguments passed in ufunc callz expected:              {}z __array_prepare__ got: {}z __array_wrap__ got:    {})r  r   r   joinformat)Zf_callZ
f_expectedry   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 rj  r   rs   ry   r   r   r   r.   
  r/   z>TestSpecialMethods.test_wrap_and_prepare_out.<locals>.<lambda>c                 S   s   | dfS rj  r   r(  r   r   r   r.   
  r/   c                 S   s   t | dd S rj  r'  r(  r   r   r   r.   
  r/   c                 S   s   | dfS rj  r   r(  r   r   r   r.   
  r/   c                 S   s   t j| dd dS Nr   r  r'  r(  r   r   r   r.   
  r/   c                 S   s   | dfS rj  r   r(  r   r   r   r.   
  r/   c                 S   s   t j| dddS )Nr   r+   r  r'  r(  r   r   r   r.   
  r/   c                 S   s   | dfS rj  r   r(  r   r   r   r.   
  r/   c                 S   s   t dd| S rj  r'  r(  r   r   r   r.   
  r/   c                 S   s
   dd| fS rj  r   r(  r   r   r   r.   
  r/   c                 S   s   t jdd| dS r)  r'  r(  r   r   r   r.   
  r/   c                 S   s
   dd| fS rj  r   r(  r   r   r   r.   
  r/   c                 S   s   t jdd| fdS r)  r'  r(  r   r   r   r.   
  r/   c                 S   s
   dd| fS rj  r   r(  r   r   r   r.   
  r/   c                 S   s   t j| dddS Nr   FrO  r'  r(  r   r   r   r.   
  r/   c                 S   s   | dfS rj  r   r(  r   r   r   r.   
  r/   c                 S   s   t jdd| ddS r*  r'  r(  r   r   r   r.   
  r/   c                 S   s
   dd| fS rj  r   r(  r   r   r   r.   
  r/   )r   r   )rZ   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                   @   s    e Zd ZdZdd Zdd ZdS )z=TestSpecialMethods.test_wrap_with_iterable.<locals>.with_wrapr:   c                 S   s   t d|  S r  r   r  r   r   r   r   
  s    zETestSpecialMethods.test_wrap_with_iterable.<locals>.with_wrap.__new__c                 S   s   | t| S r+   r   r   r   r   r   r   
  s    zLTestSpecialMethods.test_wrap_with_iterable.<locals>.with_wrap.__array_wrap__Nr   r   r   r   r   r  
  s   r  )r   r%   r0   )r   r   rb   multiplyr   r   r   rq   rZ   r  ry   rP   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 )NrL   r   r   r  r   r   r   r   
  s    z?TestSpecialMethods.test_priority_with_scalar.<locals>.A.__new__N)r]   r^   r_   r   r   r   r   r   r   A
  s   r0  r   )r   r   r   r   r   r   rq   )rZ   r0  ry   rP   r   r   r   test_priority_with_scalar
  s
    z,TestSpecialMethods.test_priority_with_scalarc                    s:   G  fddd   }t ||}t|jtd d S )Nc                       s    e Zd Zdd Z fddZdS )z3TestSpecialMethods.test_old_wrap.<locals>.with_wrapc                 S   s
   t dS r  r  rY   r   r   r   r    s    z=TestSpecialMethods.test_old_wrap.<locals>.with_wrap.__array__c                    s     }||_ |S r+   )r   )rZ   r   r{   r  r   r   r     s    zBTestSpecialMethods.test_old_wrap.<locals>.with_wrap.__array_wrap__Nr  r   r  r   r   r    s   r  r   )rb   r  r   r   r   r   )rZ   ry   rP   r   r  r   test_old_wrap
  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k tt||||k tt||||k tt||||k tt||||k tt||||k tt||||k tt||||k tt||||k tt||||k tt||||k tt||||k tt||||k tt||||k ttt||k ttt||k ttt||k d S )Nc                   @   s   e Zd Zdd Zdd ZdS )z+TestSpecialMethods.test_priority.<locals>.Ac                 S   s
   t dS r  r  rY   r   r   r   r    s    z5TestSpecialMethods.test_priority.<locals>.A.__array__c                 S   s   t |  }||_||_|S r+   )r   r   r   r  r   r   r   r     s    
z:TestSpecialMethods.test_priority.<locals>.A.__array_wrap__Nr  r   r   r   r   r0    s   r0  c                   @   s   e Zd ZdZdS )z+TestSpecialMethods.test_priority.<locals>.Br~  Nr]   r^   r_   r   r   r   r   r   B  s   r4  c                   @   s   e Zd ZdZdS )z+TestSpecialMethods.test_priority.<locals>.Cg      D@Nr3  r   r   r   r   C  s   r5  r   )r   r   rb   r  r   r   r   r  )	rZ   r0  r4  r5  rP   ry   r   r  r}  r   r   r   test_priority  s2    

z TestSpecialMethods.test_priorityc                 C   s8   G dd d}| }t ttj|| t ttjj| d S )Nc                   @   s   e Zd Zdd Zdd ZdS )z/TestSpecialMethods.test_failing_wrap.<locals>.Ac                 S   s
   t dS Nr%   r  rY   r   r   r   r  <  s    z9TestSpecialMethods.test_failing_wrap.<locals>.A.__array__c                 S   s   t d S r+   RuntimeErrorr   r   r   r   r   ?  s    z>TestSpecialMethods.test_failing_wrap.<locals>.A.__array_wrap__Nr  r   r   r   r   r0  ;  s   r0  )r	   r9  rb   r  r   rZ   r0  ry   r   r   r   test_failing_wrap9  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 )NrL   c                       s   e Zd Z fddZdS )z4TestSpecialMethods.test_failing_out_wrap.<locals>.Okc                    s    S r+   r   rZ   r   Z	singletonr   r   r   K  s    zCTestSpecialMethods.test_failing_out_wrap.<locals>.Ok.__array_wrap__Nr]   r^   r_   r   r   r=  r   r   OkJ  s   r?  c                   @   s   e Zd Zdd ZdS )z5TestSpecialMethods.test_failing_out_wrap.<locals>.Badc                 S   s   t d S r+   r8  r<  r   r   r   r   O  s    zDTestSpecialMethods.test_failing_out_wrap.<locals>.Bad.__array_wrap__Nr>  r   r   r   r   BadN  s   r@  r   r:   )
r   rq   r   rr   r   rM  r	   r9  rb   ru   )rZ   r?  r@  okbadr   r   r=  r   test_failing_out_wrapF  s    z(TestSpecialMethods.test_failing_out_wrapc                 C   s*   G dd d}| }t t||d  d S )Nc                   @   s   e Zd Zdd ZdddZdS )z,TestSpecialMethods.test_none_wrap.<locals>.Ac                 S   s
   t dS r  r  rY   r   r   r   r  \  s    z6TestSpecialMethods.test_none_wrap.<locals>.A.__array__Nc                 S   s   d S r+   r   r   r   r   r   r   _  s    z;TestSpecialMethods.test_none_wrap.<locals>.A.__array_wrap__)Nr  r   r   r   r   r0  [  s   r0  )r   rb   r  r:  r   r   r   test_none_wrapX  s    z!TestSpecialMethods.test_none_wrapc                 C   sD   G dd d}| }t ||}t|td tt|tj d S )Nc                   @   s    e Zd ZdZdd Zdd ZdS )z:TestSpecialMethods.test_default_prepare.<locals>.with_wrapr:   c                 S   s
   t dS r  r  rY   r   r   r   r  j  s    zDTestSpecialMethods.test_default_prepare.<locals>.with_wrap.__array__c                 S   s   |S r+   r   r   r   r   r   r   m  s    zITestSpecialMethods.test_default_prepare.<locals>.with_wrap.__array_wrap__N)r]   r^   r_   r   r  r   r   r   r   r   r  g  s   r  r   )rb   r  r   r   r   r   r   r.  r   r   r   test_default_preparee  s
    	z'TestSpecialMethods.test_default_prepare	use_whereTFc                    sr   G  fdddt j t dj d}|rDt j||t dd}nt ||}t|t d tt|  d S )Nc                       s   e Zd ZdZ fddZdS )z5TestSpecialMethods.test_prepare.<locals>.with_preparer:   c                    s   t |j dS Nr   r   rq   r   r   with_preparer   r   r  {  s    zGTestSpecialMethods.test_prepare.<locals>.with_prepare.__array_prepare__Nr]   r^   r_   r   r  r   rJ  r   r   rK  x  s   rK  r   rH  Tr+  r%   )r   r   rq   r   rs   r   r   rZ   rF  ry   rP   r   rJ  r   test_prepareu  s    zTestSpecialMethods.test_preparec                    s   G  fdddt j t dgj d}|rDt j|||dgd}nt |||}tt ||  t|t dg tt|  d S )Nc                       s   e Zd ZdZ fddZdS )z9TestSpecialMethods.test_prepare_out.<locals>.with_preparer:   c                    s   t |j dS rG  rI  r   rJ  r   r   r    s    zKTestSpecialMethods.test_prepare_out.<locals>.with_prepare.__array_prepare__NrL  r   rJ  r   r   rK    s   rK  r   rH  Tr+  r%   )	r   r   rq   r   rs   r   Zshares_memoryr   r   rM  r   rJ  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                   @   s   e Zd Zdd ZdddZdS )z2TestSpecialMethods.test_failing_prepare.<locals>.Ac                 S   s
   t dS r  r  rY   r   r   r   r    s    z<TestSpecialMethods.test_failing_prepare.<locals>.A.__array__Nc                 S   s   t d S r+   r8  r   r   r   r   r    s    zDTestSpecialMethods.test_failing_prepare.<locals>.A.__array_prepare__)N)r]   r^   r_   r  r  r   r   r   r   r0    s   r0  Fr+  )r	   r9  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                   @   s   e Zd Zdd ZdS )z6TestSpecialMethods.test_array_too_many_args.<locals>.Ac                 S   s
   t dS r  r  )rZ   r)   r   r   r   r   r    s    z@TestSpecialMethods.test_array_too_many_args.<locals>.A.__array__N)r]   r^   r_   r  r   r   r   r   r0    s   r0  z2 required positional)r
   rv   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                   @   s   e Zd Zdd ZdS )z1TestSpecialMethods.test_ufunc_override.<locals>.Ac                 _   s   | ||||fS r+   r   rZ   r]  methodinputskwargsr   r   r   __array_ufunc__  s    zATestSpecialMethods.test_ufunc_override.<locals>.A.__array_ufunc__Nr]   r^   r_   rV  r   r   r   r   r0    s   r0  c                   @   s   e Zd ZdZdS )z9TestSpecialMethods.test_ufunc_override.<locals>.MyNDArrayr   Nr3  r   r   r   r   	MyNDArray  s   rX  r   r  r   r%   __call__r0   r1   rn   )r   r   rq   r   r-  r   )rZ   r0  rX  ry   r   res0rs  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   )ry   r   r  r   r   r   tres_mul  s    z<TestSpecialMethods.test_ufunc_override_mro.<locals>.tres_mulc                 S   s   | | | | S r+   r   )ry   r   r  r|   r   r   r   
quatro_mul  s    z>TestSpecialMethods.test_ufunc_override_mro.<locals>.quatro_mulr0   r   r1   c                   @   s   e Zd Zdd ZdS )z5TestSpecialMethods.test_ufunc_override_mro.<locals>.Ac                 _   s   dS )Nr0  r   rR  r   r   r   rV    s    zETestSpecialMethods.test_ufunc_override_mro.<locals>.A.__array_ufunc__NrW  r   r   r   r   r0    s   r0  c                   @   s   e Zd Zdd ZdS )z8TestSpecialMethods.test_ufunc_override_mro.<locals>.ASubc                 _   s   dS )NASubr   rR  r   r   r   rV    s    zHTestSpecialMethods.test_ufunc_override_mro.<locals>.ASub.__array_ufunc__NrW  r   r   r   r   r^    s   r^  c                   @   s   e Zd Zdd ZdS )z5TestSpecialMethods.test_ufunc_override_mro.<locals>.Bc                 _   s   dS )Nr4  r   rR  r   r   r   rV    s    zETestSpecialMethods.test_ufunc_override_mro.<locals>.B.__array_ufunc__NrW  r   r   r   r   r4    s   r4  c                   @   s   e Zd Zdd Zdd ZdS )z5TestSpecialMethods.test_ufunc_override_mro.<locals>.Cc                 S   s
   d| _ d S rj  )countrY   r   r   r   __init__  s    z>TestSpecialMethods.test_ufunc_override_mro.<locals>.C.__init__c                 _   s   |  j d7  _ tS r  r_  NotImplementedrR  r   r   r   rV    s    zETestSpecialMethods.test_ufunc_override_mro.<locals>.C.__array_ufunc__N)r]   r^   r_   r`  rV  r   r   r   r   r5    s   r5  c                   @   s   e Zd Zdd ZdS )z8TestSpecialMethods.test_ufunc_override_mro.<locals>.CSubc                 _   s   |  j d7  _ tS r  ra  rR  r   r   r   rV    s    zHTestSpecialMethods.test_ufunc_override_mro.<locals>.CSub.__array_ufunc__NrW  r   r   r   r   CSub  s   rc  r%   r   r  )r   
frompyfuncr-  r   r_  r	   rv   )rZ   r\  r]  Zthree_mul_ufuncZfour_mul_ufuncr0  r^  r4  r5  rc  ry   Za_subr   r  r-   Zc_subc2r   r   r   test_ufunc_override_mro  s    


z*TestSpecialMethods.test_ufunc_override_mroc              	   C   sn  G dd d}| }t t tjjd|ddd W 5 Q R X 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                   @   s   e Zd Zdd ZdS )z9TestSpecialMethods.test_ufunc_override_methods.<locals>.Ac                 _   s   | ||||fS r+   r   rZ   r   rS  rT  rU  r   r   r   rV  U  s    zITestSpecialMethods.test_ufunc_override_methods.<locals>.A.__array_ufunc__NrW  r   r   r   r   r0  T  s   r0  r   r  r  )r  Zanswer)rl   rO  r   r%   rY  r0   r1   ry   )r   r   )axisZaxesZaxis0Zdtype0out0Zkeep0r   )ri  )r)   rn   keepdimsrh  Zinit0Zwhere0)rh  r)   rn   rj  initialrO  )r)   rn   rj  rh  rk  rO  F)rh  r)   rj  T)rn   rh  rj  )rh  rj  r+   )rn   r)   )rh  r)   )rh  r)   rj  rk  rO  )rh  r)   rj  rO  r   r  )ri  out1rh  r&   )r)   rn   rh  )rh  r)   rn   Zdtype1)rn   rh  r)   reduceatr0  )rh  rn   r)   outerZb0at)r	   rv   r   r-  rY  r   	ncu_testsinner1dr   Z_NoValuerw   r&   rn  ro  rp  )rZ   r0  ry   r-   r   r   r   test_ufunc_override_methodsR  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 5 Q R X 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                   @   s   e Zd Zdd ZdS )z5TestSpecialMethods.test_ufunc_override_out.<locals>.Ac                 _   s   |S r+   r   rg  r   r   r   rV     s    zETestSpecialMethods.test_ufunc_override_out.<locals>.A.__array_ufunc__NrW  r   r   r   r   r0    s   r0  c                   @   s   e Zd Zdd ZdS )z5TestSpecialMethods.test_ufunc_override_out.<locals>.Bc                 _   s   |S r+   r   rg  r   r   r   rV    s    zETestSpecialMethods.test_ufunc_override_out.<locals>.B.__array_ufunc__NrW  r   r   r   r   r4    s   r4  Zout_argr  r%   r0   r1   r2   rn   r   ri  rl  r   r+   )NNr  twor  rt  r   )rt  threerv  )r  rt  rv  )r  )
r   r-  r   modfru   r   r  r	   rv   rw   )rZ   r0  r4  ry   r   rZ  rs  rt  Zres3Zres4Zres5Zres6Zres7r   r   r   test_ufunc_override_out  sL    
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                   @   s   e Zd Zdd ZdS )z;TestSpecialMethods.test_ufunc_override_exception.<locals>.Ac                 _   s   t dd S )NZoops)rw   )rZ   ry   rU  r   r   r   rV  8  s    zKTestSpecialMethods.test_ufunc_override_exception.<locals>.A.__array_ufunc__NrW  r   r   r   r   r0  7  s   r0  r   r  rL   )r	   rw   r   r  r   r:  r   r   r   test_ufunc_override_exception5  s
    z0TestSpecialMethods.test_ufunc_override_exceptionc              	   C   sr   G dd d}d}t tt| t|  W 5 Q R X d}t tt| tj| t dd W 5 Q R X d S )Nc                   @   s   e Zd Zdd ZdS )zATestSpecialMethods.test_ufunc_override_not_implemented.<locals>.Ac                 _   s   t S r+   )rb  rZ   r  rU  r   r   r   rV  C  s    zQTestSpecialMethods.test_ufunc_override_not_implemented.<locals>.A.__array_ufunc__NrW  r   r   r   r   r0  B  s   r0  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
   rv   fnmatch	translater   r  rs   r   )rZ   r0  r  r   r   r   #test_ufunc_override_not_implemented@  s    z6TestSpecialMethods.test_ufunc_override_not_implementedc              	   C   s   G dd d}| }d}t t| t|d W 5 Q R X t t| td| W 5 Q R X t t| t| W 5 Q R X G dd d}| }tt||k t t| t|| W 5 Q R X t t| tj|d|d W 5 Q R X d S )Nc                   @   s   e Zd ZdZdS )z?TestSpecialMethods.test_ufunc_override_disabled.<locals>.OptOutNrW  r   r   r   r   OptOutS  s   r~  z(operand 'OptOut' does not support ufuncsr   c                   @   s   e Zd Zdd ZdS )zDTestSpecialMethods.test_ufunc_override_disabled.<locals>.GreedyArrayc                 _   s   | S r+   r   rz  r   r   r   rV  e  s    zTTestSpecialMethods.test_ufunc_override_disabled.<locals>.GreedyArray.__array_ufunc__NrW  r   r   r   r   GreedyArrayd  s   r  r  )r
   rv   r   rs   r  r   )rZ   r~  Zopt_outr  r  Zgreedyr   r   r   test_ufunc_override_disabledQ  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                   @   s   e Zd Zdd ZdS )z2TestSpecialMethods.test_gufunc_override.<locals>.Ac                 _   s   | ||||fS r+   r   rg  r   r   r   rV  s  s    zBTestSpecialMethods.test_gufunc_override.<locals>.A.__array_ufunc__NrW  r   r   r   r   r0  r  s   r0  r   r   r%   rY  r0   r1   r  )r   r   rn   rt  r  ru  r   )rq  rr  r   r	   rv   rw   )rZ   r0  rr  ry   r-   r   r   r   test_gufunc_overrideo  s(    
z'TestSpecialMethods.test_gufunc_overridec                    sZ  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||k 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||k t|jd	dgi t d }t d }t j	|||fd\}}	t||k t|	|k t|jdgddgd
 t d }t d }t j
|||d}
t|
|k t|
jddgdgd
 t d}| }t|t j
d||tk t|t j
d||tk ttt j
|| | }t|t j
d||tk t|t j
d||dk tt 
||dk t dddgdddgg}| }| }
| }t|
| t|
jddgi | }
| }t|
| t|
jddgi t d }|j|d}
t|
| t|
|k t|
jdgdgd
 |jdd}t | }|jd|d}
t|
| t|
|k 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|
|k 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|
|k t|
jdgdgd
 dddg}t j
j||dd}t j
j||dd}
t|
| t|
jddgi t |
}t j
||dd |}
t|
| t|
|k t|
jdgdgd
 t dddgdddg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 }|
rg }t |
D ]:\}}t| r|| ||tj qd|| qdt||d< n
d|j }
i }|r||d< |r||d< t j	||f||}|t
krt
S |dkrt|d  r||d _d S |jdkr0|f}t fdd	t||
D }|rlt|d  rl||d _t|dkr|d S |S )
Nrn   r+   rT  outputsrp  r   r   c                 3   s.   | ]&\}}|d kr"t | n|V  qd S r+   )r   r   r   )r   r  outputr0  r   r   rJ    s   z_TestSpecialMethods.test_ufunc_override_with_super.<locals>.A.__array_ufunc__.<locals>.<genexpr>)	enumerater   appendr   r   r   tupler(   superrV  rb  infor   r  )rZ   r   rS  rn   rT  rU  r  Zin_nor   input_r  Zout_noZout_argsjr  r  results)r0  	__class__r   r   rV    sT    







zLTestSpecialMethods.test_ufunc_override_with_super.<locals>.A.__array_ufunc__)r]   r^   r_   rV  __classcell__r   r  )r  r   r0    s   r0  c                       s   e Zd Z fddZdS )z<TestSpecialMethods.test_ufunc_override_with_super.<locals>.Bc                    s"   t  fdd|D rdS tS d S )Nc                 3   s   | ]}t | V  qd S r+   )r   )r   r  r  r   r   rJ    s     z_TestSpecialMethods.test_ufunc_override_with_super.<locals>.B.__array_ufunc__.<locals>.<genexpr>A!)r  rb  rg  r  r   r   rV    s    zLTestSpecialMethods.test_ufunc_override_with_super.<locals>.B.__array_ufunc__NrW  r   r  r   r   r4    s   r4  r}  rT  r   r  r  )rT  r  r   rY  r  r%   r0   rm  )rh  rn   rL   )r   r   r  r   r  r   r   r   r  rw  rs   rV  rb  r	   rv   rq   r  r  r  r   r&   rn  r   rp  )rZ   r4  r|   ry   r   checkZb1Zb2Zc1re  r  indicesr   r  r   test_ufunc_override_with_super  s    4





















z1TestSpecialMethods.test_ufunc_override_with_superN)r]   r^   r_   r  r,  r/  r1  r2  r6  r;  rC  rD  rE  r   r   r   rN  rO  rP  rQ  r[  rf  rs  rx  ry  r}  r  r  r  r   r   r   r   r  
  s6   7+

	  ,8r  c                   @   s   e Zd Zdd ZdS )
TestChoosec                 C   s@   t ddg}t ddg}tt ||dft ddg d S )NTr   )r   rq   r   choose)rZ   r  ry   r   r   r   
test_mixed<  s    zTestChoose.test_mixedN)r]   r^   r_   r  r   r   r   r   r  ;  s   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  uint16rY   r   r   r   test_lcmC  s    zTestRationalFunctions.test_lcmc                 C   s   |  tj d S r+   )r  r   object_rY   r   r   r   test_lcm_objectG  s    z%TestRationalFunctions.test_lcm_objectc                 C   s   |  tj | tj d S r+   )_test_gcd_innerr   r  r  r  rY   r   r   r   test_gcdJ  s    zTestRationalFunctions.test_gcdc                 C   s   |  tj d S r+   )r  r   r  rY   r   r   r   test_gcd_objectN  s    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st jddddg|d}t jddd	d	g|d}tt ||dgd
  t jdddg|d}tt jdddgd t d|}d}tt ||ddddddg d S )Nr  x   rp   rh     <   iX  r  r1   r0   r  r   )	r   rq   r   lcm
issubclassunsignedintegerr   r  r   rZ   r)   ry   r   r   r   r   r  Q  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st jddddg|d}t jddd	d	g|d}tt ||dgd  t jd
ddg|d}tt j|d t d|}d}tt ||ddddddg d S )Nr  r  rp   rh  r  r1   (   r  r  r     #   r2   r  r   r%   )	r   rq   r   gcdr  r  r   r  r   r  r   r   r   r  f  s    z%TestRationalFunctions._test_gcd_innerc                 C   sB   t t t jjd }d| }d| }tt ||d|  d S )Nr  r%   r2   r:   )r   rt   r   r  r   r  )rZ   bigry   r   r   r   r   test_lcm_overflow{  s    z'TestRationalFunctions.test_lcm_overflowc                 C   s^   t jt jfD ]L}|t |j}|d  }tt ||d | tt || d | qd S )Nr1   r0   )r   rt   r   r   r   r   r  )rZ   r)   ry   qr   r   r   test_gcd_overflow  s
    
z'TestRationalFunctions.test_gcd_overflowc                 C   s|   ddl m} tddddg|d }tddddg|d }tt||d|dg  tt||d|d	g  d S )
Nr   )Decimalr   r3   z0.20z0.12r1   z0.04z0.60)r  r  r   rq   r   r  r  )rZ   r  ry   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	   rv   r   r  r  rY   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%   r  r      i-1 l          U9 l         `i  r0   r   )r   r   rq   itemr  r  r  r   r   r   test_builtin_long  s    *z'TestRationalFunctions.test_builtin_longN)r]   r^   r_   r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r  B  s   	r  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )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                   @   s$   e Zd Zdd Zdd Zdd ZdS )z3TestRoundingFunctions.test_object_direct.<locals>.Cc                 S   s   dS r  r   rY   r   r   r   	__floor__  s    z=TestRoundingFunctions.test_object_direct.<locals>.C.__floor__c                 S   s   dS r7  r   rY   r   r   r   __ceil__  s    z<TestRoundingFunctions.test_object_direct.<locals>.C.__ceil__c                 S   s   dS )Nr0   r   rY   r   r   r   	__trunc__  s    z=TestRoundingFunctions.test_object_direct.<locals>.C.__trunc__N)r]   r^   r_   r  r  r  r   r   r   r   r5    s   r5  r   r%   r0   N)r   rq   r   rU  r?  rV  rZ   r5  r   r   r   r   test_object_direct  s
    z(TestRoundingFunctions.test_object_directc              	   C   sl   G dd d}t | | g}tt |ddg tt |ddg tt t | W 5 Q R X dS )z$ test implementations via __float__ c                   @   s   e Zd Zdd ZdS )z5TestRoundingFunctions.test_object_indirect.<locals>.Cc                 S   s   dS )Nr  r   rY   r   r   r   	__float__  s    z?TestRoundingFunctions.test_object_indirect.<locals>.C.__float__N)r]   r^   r_   r  r   r   r   r   r5    s   r5  r5   r4   N)	r   rq   r   rU  r?  r   r   rv   rV  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 )Nr6   r0   r4   r3   )r   r   r   rU  r?  rV  )rZ   r}  r   r   r   test_fraction  s    
z#TestRoundingFunctions.test_fractionN)r]   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ejjedddd Zejjedddd Zejjeddd	d
 Zdd Zejjeddejdejej ej!gdd Z"dS )TestComplexFunctionsc                 C   s`   | j D ]T}|tjkrd}nd}||}|t|}t|j|d| d t|jdd| d qd S )Nr  rj   zreal part %sr  r  zimag part %s)funcsr   r5  r  r   rN   r  )rZ   r}  rP   frZfzr   r   r   test_it  s    

zTestComplexFunctions.test_itzdoesn't workr   c                 C   sf   d}| j D ]V}|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   ZcsingleZcdoubleZclongdoubler   )rZ   r3  r}  ZfcfZfcdZ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
dddgdddgdd t tjd	d
dgdddgdd t tjd	d
dgdddgdd d S )NrO  r  r   r3   T      r4   r%                  r  rj   r   )_check_branch_cutr   r  r  r  r  r  r'  r(  r*  rM   r5  r8  rY   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dddgdddgdddtj t tjd	d
dgdddgdddtj t tjd	d
dgdddgdddtj d S )NrO  r  r   r3   Tr  r4   r%   r  r  rj   Fr   )r  r   r  r  r  r  r  r  r'  r(  r*  rM   r5  r8  rY   r   r   r   test_branch_cuts_complex64  s"             $$z/TestComplexFunctions.test_branch_cuts_complex64c              	   C   s   dd l }ddddg}dddd	d
dd}dttj }| jD ]}|jdd }|||}zt	||}W n t
k
r   Y q<Y nX |D ]@}	t|t|	}
||	}tt|
| |k d||	|
|f  qq<d S )Nr   y            y            ?y      ?      r  asinacosatanasinhacoshatanh)r'  r(  r*  rM   r5  r8  r1   .r3   z%s %s: %s; cmath: %s)cmathr   r[  r  epsr  r]   splitgetr[  AttributeErrorr  r   rO   )rZ   r  ZpointsZname_mapatolr]  fnamecnameZcfuncr  ry   r   r   r   r   test_against_cmath  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krtt rdt	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 ]8}	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   rM   r  r'  r8  r*  )r   r   rS  rM   rN   r   r   Zargmaxr  r'  r  r8  r*  )rP   Zrtolr3  r|   )r)   
real_dtyper   r   r  6  s*    

 ( (
 ( (z:TestComplexFunctions.test_loss_of_precision.<locals>.checkr  g5^Ir  gˡEr   r:   F)ZendpointzvTrig functions of np.longcomplex values known to be inaccurate on aarch64 and PPC for some compilation configurations.g      I@ @r  MbP?yh㈵>h㈵>rp   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 )Nrp   r%   )r   r   rO   r   r   )r]  Zz0r|   ZzpZzmZgood)r)   r  r   r   r  u  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  N)r   )r   r[  rN   r)   r  ZlogspacelongcomplexrS   r   r  rq   rS  r8  r   r   rM   r*  r'  )rZ   r)   r  r  Zx_seriesZx_basicr3  r  r|   r]  Zptsr   )r)   r  r  r   test_loss_of_precision+  s>    



z+TestComplexFunctions.test_loss_of_precisionN)#r]   r^   r_   r   r'  r(  r*  rM   r5  r8  r  r  r!  r  r  r  r  r  r  r  r  r  r   r   rd  r   r  r  r  r  r   r  r  r  r  r   r   r   r   r    s0           
	

r  c                   @   s   e Zd Zdd Zdd ZdS )TestAttributesc                 C   sV   t j}t|jd t|jdk td|jk t|jd t|jd t|j	d d S )Nrs      zii->ir%   r   r   )
rb   rs   r   r]   r   Zntypesr$   r!   r(   r  )rZ   rs   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   rs   __doc__rI   ru   rY   r   r   r   test_doc  s    

zTestAttributes.test_docN)r]   r^   r_   r  r  r   r   r   r   r    s   	r  c                   @   s   e Zd Zdd ZdS )TestSubclassc                 C   s,   G dd dt j}|d}t|| | d S )Nc                   @   s   e Zd Zdd ZdS )z-TestSubclass.test_subclass_op.<locals>.simplec                 S   s    t jj| |td}|d |S )Nrp   r   )r   r   r   r   fill)subtyper  rZ   r   r   r   r     s    
z5TestSubclass.test_subclass_op.<locals>.simple.__new__N)r]   r^   r_   r   r   r   r   r   simple  s   r  )r0   r1   )r   r   r   )rZ   r  ry   r   r   r   test_subclass_op  s    zTestSubclass.test_subclass_opN)r]   r^   r_   r  r   r   r   r   r    s   r  c                   @   s   e Zd Zdd ZdS )TestFrompyfuncc                    s   dd }t j|dddd t dddgd t jt d	d
dd t g d t j|ddd d t dddgd t jt d	d
dd tt fdd t j|ddd t dddgd tt fdd tt fdd d S )Nc                 S   s   | | S r+   r   )ry   r   r   r   r   mul  s    z)TestFrompyfunc.test_identity.<locals>.mulr%   r   )r!   r(   r  r0   r1      r%   r%   r   r   rm  c                      s
     g S r+   r   r   Z	mul_ufuncr   r   r.     r/   z.TestFrompyfunc.test_identity.<locals>.<lambda>)r!   r(   c                      s    j tdddS )Nr  r  rm  )r   r   r-  r   r  r   r   r.     r/   c                      s
     g S r+   r   r   r  r   r   r.     r/   )r   rd  r   r   r-  r	   rw   )rZ   r  r   r  r   r    s    zTestFrompyfunc.test_identityN)r]   r^   r_   r  r   r   r   r   r    s   r  r3   Fc                 C   s  t ||}t ||}t |jdkrLt |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 |r|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 |r|| }t j|_| |}t	t 
t |	| j|j|  |k |	| |f t	t 
t |	| j|j|  |k |	| |f 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  r  g-C6?r   N)r   Z
atleast_1dr   r)   r  r[  r  r  rS  r   r   rN   r  r  r  )r}  Zx0ZdxZre_signZim_signZsig_zero_okr)   Zscaler  Zy0ZypZymZjrZjirP   r   r   r   r    s:    $$&&**222r  c                	   C   s   t tdddk tjdd6 t dtdd dk  t dtdd dk W 5 Q R X t tttjd t tttjd  d S )Nr   r3   rU   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 rz  )r   r[  r  r   ra  r  r   )rI  r  rt  rl  r  r   r   r   _test_nextafter  s    r  c                   C   s
   t tjS r+   )r  r   r   r   r   r   r   test_nextafter  s    r  c                   C   s
   t tjS r+   )r  r   r  r   r   r   r   test_nextafterf  s    r  zlong double is same as doubler   ppc64zIBM double double)	conditionr   c                   C   s
   t tjS r+   )r  r   r\  r   r   r   r   test_nextafterl  s    r  c               
   C   s   t tjd dD ]\} }t ^}|t tt| j	szt| j	}t
d|t| d| |   k or|k n   W 5 Q R X tt| d| || d |d  qd S )Nr   r<  r  r   r  )r6  r7  r   r   r   r.  UserWarningr  r[  r\  r   ra  r   )rI  	directionr1  r\  r   r   r   test_nextafter_0!  s    
*r  c              	   C   s   | d}t | j}| t j}| t j}t jddl tt ||k tt t | tt t | tt t |  tt | ddk W 5 Q R X d S )Nr   rU   rV   gꌠ9Y>)Fr   )	r   r[  r  r   r  r   r   r>  r  )rI  r  r  r   r  r   r   r   _test_spacing-  s    

r  c                   C   s
   t tjS r+   )r  r   r   r   r   r   r   test_spacing9  s    r  c                   C   s
   t tjS r+   )r  r   r  r   r   r   r   test_spacingf<  s    r  c                   C   s
   t tjS r+   )r  r   r\  r   r   r   r   test_spacingl@  s    r  c                  C   sn   t jddddgt jddddgi} tt jt jgd	D ]6\}}t jd
dddg|d}tt || | |d q2d S )Ng      ;g      <g      @=g      =g5(   p=g  >gK8   ?g      P?)r:   rh  h㈵>r   r   i)  rp   r  )r   r   r  r   rq   r   r>  )refr0  r  rP   r   r   r   test_spacing_gfortranG  s     	r  c                  C   sR   t jt jfD ]@} dD ]6}| |}| |d }tt ||| t |k qqd S )N)r   r   r   r   )r   r  r   r   ra  r>  )rI  _fr}  f1r   r   r   test_nextafter_vs_spacinge  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_nanm  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< d	d
ddg}g }|d	 }|dd D ]&}|t j|d ||  |}qh|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  ZS11timer  r   rp   ZSimpler  r:   r   r  r  r  r   Nr  )r   r)   r   r  rr   r  rs   r   rq   rn  r   Z
setbufsizeZUFUNC_BUFSIZE_DEFAULT)dbry   Zindxh2r<   r=   h1r   r   r   test_reduceatq  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i4Zf8)r   )r2   r%   r   rm  r  r   )r2   r   N)r   rq   rs   rn  r   r)   r  r-  )r  rP   r  r   r   r   test_reduceat_empty  s    
r  c               	   C   sH  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 | | D ]}t|g}| | D ]}t|g}t|rt|rqt||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 qqvW 5 Q R X d S )Nr   r   r3   rU   rV   Fz%r < %rr  z%r > %rz%r <= %rz%r >= %rz%r == %r)r  r   r   r   rq   rE  r   )ZnansZfinsrP   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   r   r   rT  )valr   r   r   test_rint_big_int  s    r  ftypec                 C   sp   t jdddddg| d}t jdddddg| d}t jdddddg| d}tt j|| tt j|| d S )NgQ?g333333?gp=
ף?g=
ףp=?gRQ?rp   )r   rq   r   r  r&   r  )r  r   Zout_maxZout_minr   r   r   test_memoverlap_accumulate  s
    r  zufunc, dtypec                 C   s<   g | ]4}|j D ](}|d  dkr|d dkr||d fqqS )r3   r  r   ZDFGMmOr#   r   r   rI  r   r   r   r     s     c                 C   sv   | j rtd dD ]\}tjdddg| |d}| j|dd}|tj}tjtt	|| tjd}t
|| qd S )NFor generic signatures onlyr%   r  r  r  rH  r  r   r   rp   r  )r   r   r  r   rq   r&   r   r   rL  r6  r   )r   r)   r   r   accZacc_u8r  r   r   r   test_memoverlap_accumulate_cmp  s    
r  c                 C   sP   g | ]H}|j D ]<}|d  |d kr|d  |d kr|d  dkr||d  fqqS )r   r   r3   zDFGMmO?r#   r  r   r   r   r     s      c              	   C   s   | j rtd tjdd\ dD ]P}tdddg| |}| j||d}tjtt	|| |d}t
|| q"W 5 Q R X d S )	Nr  rU   r&  r  r   r   r%   rp   )r   r   r  r   r   rq   r   r&   rL  r6  r   )r   r)   r   r   r  r  r   r   r   $test_memoverlap_accumulate_symmetric  s    
r  c               	   C   s0   t    tjdddd} t|  W 5 Q R X d S )Nr   r  s    )r  r)   buffer)r   r   r   r  r(  r   r   r   test_signaling_nan_exceptions  s    r  r   r%   r2   c                 C   s@   G dd dt j}t j| || |}|jjdks<td S )Nc                   @   s   e Zd ZdS )z)test_outer_subclass_preserve.<locals>.fooN)r]   r^   r_   r   r   r   r   r    s    r  )r   r   r-  ro  r   r  r]   r   )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 ]h}t d|}tt}t j|ddg W 5 Q R X t d|}tt jddg||ks0t	q0d S )Nc                   @   s   e Zd Zdd ZdddZdS )z(test_outer_bad_subclass.<locals>.BadArr1c                 S   s   | j dkr| jd | _d S )Nr0   r   )ndimr  r<  r   r   r   __array_finalize__  s    
z;test_outer_bad_subclass.<locals>.BadArr1.__array_finalize__Nc                 S   s   |S r+   r   r  r   r   r   r    s    z:test_outer_bad_subclass.<locals>.BadArr1.__array_prepare__)Nr]   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                    s.   t | r*| jd dkr*| jd d d | _d S )Nr3   r   )r   r  r<  BadArr2r   r   r     s    
z;test_outer_bad_subclass.<locals>.BadArr2.__array_finalize__Nc                 S   s   |S r+   r   r  r   r   r   r    s    z:test_outer_bad_subclass.<locals>.BadArr2.__array_prepare__)Nr  r   r!  r   r   r"    s   r"  )r%   r0   r   r%   )
r   r   r-  r   r	   rv   rs   ro  r   r   )r   r   r   ry   r   r!  r   test_outer_bad_subclass  s    	

r#  c               	   C   s0   t d} tt t j| |  W 5 Q R X d S )N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r-  r	   rw   rs   ro  )deepr   r   r   test_outer_exceeds_maxdims  s    

r%  c               	   C   sV  t dt j} tjtdd t| |  W 5 Q R X tjtdd6 | 	d
ddd d d d df }t||  W 5 Q R X tjtdd tj| |  W 5 Q R X tjtdd tj|  W 5 Q R X tjtdd tj| dd	g W 5 Q R X tjtdd tj|  W 5 Q R X tjtdd tj| dd	dg|  W 5 Q R X d S )
Nr0   How unexpected :\)!r   rh  r3   r  r%   r   r   )r   r  r   r   r   r   r9  rq  Zalways_errorrepeatZreshapero  r   rn  r&   rp  )r   Z
non_contigr   r   r   #test_bad_legacy_ufunc_silent_errors  s     $r(  x1r  r  c              	   C   s*   t jtdd t| d W 5 Q R X d S )Nr&  r   r  )r   r   r9  rq  Zalways_error_gufunc)r)  r   r   r   $test_bad_legacy_gufunc_silent_errors6  s    r*  )rF   r  r{  r6  r   re  r  r   Z	fractionsr   	functoolsr   collectionsr   Znumpy.core.umathcoreZumathrb   Z
numpy.corer   rq  Znumpyr   Znumpy.testingr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   Znumpy.testing._private.utilsr   __dict__valuesZUFUNCSZUFUNCS_UNARYrC  ZUFUNCS_BINARYZUFUNCS_BINARY_ACCrD   rJ   rS   rT   r`   rh   r   r   r   r:  r=  r>  rf  r  r  r  r  r  r  r  r  r
  rD  rH  rM  rY  rW  rc  rn  rr  rw  ry  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r5  r[  doubler\  rd  rH   rI   r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r   r  r  r  r  r  Zmatrixr  r#  r%  r(  r*  r   r   r   r   <module>   sT  @8~k { Q 
  
0#   
	 1-E\\???T+*       0c$ ?
=






