U
    #c                    @   s  d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dlZ	d dl
mZ d dlmZmZm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 d dlmZ d dlmZm Z! d dl"mZ# G d	d
 d
Z$G dd dZ%G dd dZ&G dd dZ'G dd dZ(G dd dZ)G dd dZ*G dd dZ+G dd dZ,G dd de-Z.G dd dZ/G dd  d Z0G d!d" d"Z1G d#d$ d$Z2G d%d& d&Z3G d'd( d(Z4d)d* Z5G d+d, d,Z6G d-d. d.Z7G d/d0 d0Z8G d1d2 d2Z9G d3d4 d4Z:G d5d6 d6Z;G d7d8 d8Z<G d9d: d:Z=G d;d< d<Z>G d=d> d>Z?G d?d@ d@Z@G dAdB dBZAG dCdD dDZBG dEdF dFZCG dGdH dHZDdIdJ ZEG dKdL dLZFG dMdN dNZGG dOdP dPZHG dQdR dRZIG dSdT dTZJdS )U    N)Decimal)umath)randrandintrandn)assert_assert_equalassert_raisesassert_raises_regexassert_array_equalassert_almost_equalassert_array_almost_equalassert_warnsassert_array_max_ulpHAS_REFCOUNTIS_WASM)rational)given
strategies)numpyc                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )
TestResizec                 C   s   t ddgddgg}t ddddgddddgg}tt |d| t ddgddgddgddgg}tt |d| t dddgdddgdddgdddgg}tt |d| d S )N            r   r   r   r   r   r   nparrayr   resizeselfAZAr1ZAr2ZAr3 r%   A/tmp/pip-unpacked-wheel-b2rbor69/numpy/core/tests/test_numeric.pytest_copies   s    "*zTestResize.test_copiesc                 C   s   t dddg}t ddddgddddgg}tt |d| t ddgddgddgddgg}tt |d| t dddgdddgdddgdddgg}tt |d| d S )Nr   r   r   r   r   r   r   r"   r%   r%   r&   test_repeats#   s    "*zTestResize.test_repeatsc                 C   st   t ddgddgg}t |d}t|t g  t|j|j t |d}t|jd t |d}t|jd d S )Nr   r   r   r   r   r   r   r   r   )r   r    r!   r   r   dtypeshaper#   r$   ZArr%   r%   r&   test_zeroresize.   s    zTestResize.test_zeroresizec                 C   sH   t jddt jfgd}t |d}t|t d|j t|j|j d S )Nr   ar,   r   r   )r   zerosfloat32r!   r   r,   r   r.   r%   r%   r&   test_reshape_from_zero:   s    z!TestResize.test_reshape_from_zeroc              	   C   sB   t jddt jd}d}tjtdd t j||d W 5 Q R X d S )Nr   
   r1   )negativematch)	new_shape)r   aranger4   pytestraises
ValueErrorr!   )r#   r$   r<   r%   r%   r&   test_negative_resizeA   s    zTestResize.test_negative_resizec                 C   s   G dd dt j}t dg|}tt |d|ks<ttt |d|ksTtt g |}tt |d|ks|td S )Nc                   @   s   e Zd ZdZdS )z)TestResize.test_subclass.<locals>.MyArray      ?N)__name__
__module____qualname__Z__array_priority__r%   r%   r%   r&   MyArrayH   s   rF   r      r   )r   ndarrayr    viewtyper!   AssertionError)r#   rF   Zmy_arrr%   r%   r&   test_subclassG   s    zTestResize.test_subclassN)	rC   rD   rE   r'   r(   r/   r5   rA   rL   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d Zdd Zdd Zejdejejejejejejejejejejejgdd Zejdej dd ejj!d!d"d#dd$e"#e"$d fde"#e"$d fgd%d& Z%d'd( Z&ejj!e'd)d*d+d, Z(d-d. Z)d/d0 Z*d1d2 Z+d3d4 Z,d5d6 Z-d7d8 Z.d9d: Z/d;d< Z0d=d> Z1d?d@ Z2dAS )BTestNonarrayArgsc                 C   sJ   dddgdddgdddgg}dddg}dddg}t ||}t|| d S )	Nr   r   r   r   r   rG         )r   chooser   )r#   choicestgtr0   outr%   r%   r&   test_chooseU   s    

zTestNonarrayArgs.test_choosec                 C   s@   dddddddg}t |dd}dddddddg}t|| d S )	Nr8   rG   r   r   r6   irO   r   clipr   )r#   arrrS   rR   r%   r%   r&   	test_clip_   s    zTestNonarrayArgs.test_clipc                 C   sN   dddddgdddd	d
gg}dddd	d
gg}t jddg|dd}t|| d S )Nr   r   r   r   r   rG   rN   rO      	   axis)r   compressr   r#   rX   rR   rS   r%   r%   r&   test_compresse   s    zTestNonarrayArgs.test_compressc                 C   sF   dddddgdddddgg}t ddg}t j|dd}t|| d S )Nr   r   rO   r   r      r\   )r   r    count_nonzeror   r_   r%   r%   r&   test_count_nonzerol   s    z#TestNonarrayArgs.test_count_nonzeroc                 C   sB   dddgdddgg}t tt|tdddddd	gk d S )
Nr   r   r   r   rG   rN      x   i  )r   r   allZ
cumproductr    r#   r$   r%   r%   r&   test_cumproducts   s    z TestNonarrayArgs.test_cumproductc                 C   sD   ddddgddddgd	d
ddgg}t |}dddg}t|| d S )Nr   r   r   r   r   rG   rN   rO   rZ   r[   r6      )r   Zdiagonalr   )r#   r0   rS   rR   r%   r%   r&   test_diagonalw   s    




zTestNonarrayArgs.test_diagonalc              	   C   s   dddgdddgg}t t|dk t tt|dtd	dd
gk t tt|dtddgk tjdd:}tddt t t	tg  t |d j
tk W 5 Q R X d S )Nr   r   r   r   rG   rN   g      @r   g      @g      @       @      @Trecordalways )r   r   meanrf   r    warningscatch_warningsfilterwarningsRuntimeWarningisnancategoryr#   r$   wr%   r%   r&   	test_mean   s    &$zTestNonarrayArgs.test_meanc                 C   s*   dddddddg}t tj|dd	d
 d S )Nr   r   rG   r6   g      @r   r\   g      .@)r   r   Zptpr#   r0   r%   r%   r&   test_ptp   s    zTestNonarrayArgs.test_ptpc                 C   sD   ddddgddddgd	dddgg}d
ddg}t tj|dd| d S )Nr   r   r   r   rG   rN   rO   r[   r6   rd   ib  iX  r8   r\   )r   r   prodr#   rX   rR   r%   r%   r&   	test_prod   s    



zTestNonarrayArgs.test_prodc                 C   sT   dddgdddgddd	gd
ddgg}ddddddddd	d
ddg}t t|| d S )Nr   r   r   r   rG   rN   rO   rZ   r[   r6   ri      )r   r   Zravel)r#   r0   rR   r%   r%   r&   
test_ravel   s    $zTestNonarrayArgs.test_ravelc                 C   s4   dddg}ddddddg}t |d}t|| d S )Nr   r   r   )r   repeatr   )r#   r0   rR   rS   r%   r%   r&   test_repeat   s    
zTestNonarrayArgs.test_repeatc                 C   sZ   dddgdddgddd	gd
ddgg}ddddddgddd	d
ddgg}t t|d| d S )Nr   r   r   r   rG   rN   rO   rZ   r[   r6   ri   r   )r   rN   )r   r   reshaper   r%   r%   r&   test_reshape   s    $ zTestNonarrayArgs.test_reshapec                 C   s\   ddddg}ddddg}t tj|d	d
| td}tt| tj t | d d S )Ng(\?g(\"R@gffffff@g      
@g?g      R@g@g	@r   )ZdecimalsrB   )r   r   Zaroundfloat64r   
isinstanceround)r#   rX   rR   sr%   r%   r&   
test_round   s    
zTestNonarrayArgs.test_roundr,   c                 C   sx   |d}t tt|t t tt|d t t tt|d dt tt|d tt|d d tt|d dd d S )Nr   ndigits)r   r   r   intr   )r#   r,   r   r%   r%   r&   test_dunder_round   s    z"TestNonarrayArgs.test_dunder_roundzval, ndigitsir8   zOut of range of int32reason)Zmarksr   c                 C   s    t t||tt|| d S N)r   r   r   int32)r#   valr   r%   r%   r&   test_dunder_round_edgecases   s    z,TestNonarrayArgs.test_dunder_round_edgecasesc                 C   s   t ddd  }ttt|dt j tt|dddd   ttt|ddt j tt|ddddd   t d}ttt|dt j tt|dd	 ttt|ddt j tt|ddd	 d S )
Nffffff@r6   I   rl   r   i  i  )r   r   r   r   r   r   int64)r#   fir%   r%   r&   test_dunder_round_accuracy   s    
z+TestNonarrayArgs.test_dunder_round_accuracyzgh-15896)r?   r   c                 C   s,   ddd  }t tt|dt|d d S )Nr   r6   r   r   )r   r   r   r   )r#   r   r%   r%   r&   test_round_py_consistency   s    z*TestNonarrayArgs.test_round_py_consistencyc                 C   s*   ddddddg}t |d}t|d d S )Nir|   r8   r   rN   r6   r   )r   Zsearchsortedr   )r#   rX   rS   r%   r%   r&   test_searchsorted   s    z"TestNonarrayArgs.test_searchsortedc                 C   sR   dddgdddgg}t t|dk t t|ddk t t|ddk d S )Nr   r   r   r   rG   rN   r   )r   r   sizerg   r%   r%   r&   	test_size   s    zTestNonarrayArgs.test_sizec                 C   s  dddgdddgdddggg}t t|jd t ttdjd t tjtdddjd	 t tjtdd
djd t tjtdddjd t ttd	gjd t tjtd	gddjd	 t tjtd	gddjd t tjtd	gd
djd d S )Nr   r   r   r   r   )r   r   r   )r   r   r\   r   r   r8   r   r   )r   r   Zsqueezer-   r3   rg   r%   r%   r&   test_squeeze   s    zTestNonarrayArgs.test_squeezec              	   C   s   dddgdddgg}t t|d t t|dtd	d	d	g t t|dtd
d
g tjdd:}tddt tt	tg  t|d j
tk W 5 Q R X d S )Nr   r   r   r   rG   rN   gbp@S?r   g      ?gɪo ?Trm   ro   rp   )r   r   stdr    rr   rs   rt   ru   r   rv   rw   rx   r%   r%   r&   test_std   s    zTestNonarrayArgs.test_stdc                 C   s\   ddgddggddgddggg}ddgddggddgddggg}t |dd}t|| d S )	Nr   r   r   rN   r   rG   r   rO   )r   swapaxesr   )r#   rR   r0   rS   r%   r%   r&   test_swapaxes   s      zTestNonarrayArgs.test_swapaxesc                 C   sJ   dddgdddgddd	gg}dgd
gdgg}t j|ddd}t|| d S )Nr   r   r   r   rG   rN   rO   rZ   r[      rd   Tr]   keepdims)r   sumr   )r#   mrR   rS   r%   r%   r&   test_sum  s    zTestNonarrayArgs.test_sumc                 C   s<   dddg}dddg}dddddg}t ||}t|| d S )Nr   r   rG   r   r   )r   Ztaker   )r#   rR   indicesr0   rS   r%   r%   r&   	test_take  s
    

zTestNonarrayArgs.test_takec                 C   s*   ddgddgddgg}t t|d d S )Nr   r   r   r   rG   rN   )r   r   trace)r#   cr%   r%   r&   
test_trace  s    zTestNonarrayArgs.test_tracec                 C   s@   ddgddgddgg}dddgdddgg}t t|d| d S )Nr   r   r   r   rG   rN   r   r   )r   r   Z	transposer   r%   r%   r&   test_transpose  s    zTestNonarrayArgs.test_transposec              	   C   s   dddgdddgg}t t|d t t|dtd	d	d	g t t|dtd
d
g tjdd:}tddt tt	tg  t|d j
tk W 5 Q R X td dg}d|d< t t|d d S )Nr   r   r   r   rG   rN   gUUUUUU@r   g      @gvWUU?Trm   ro   rp                 ?g      ?)r   r   varr    rr   rs   rt   ru   r   rv   rw   )r#   r$   ry   Br%   r%   r&   test_var  s    zTestNonarrayArgs.test_varN)3rC   rD   rE   rT   rY   r`   rc   rh   rj   rz   r~   r   r   r   r   r   r>   markparametrizer   int8int16r   r   uint8uint16uint32uint64float16r4   r   r   paramxfailmathceillog10r   r   rK   r   r   r   r   r   r   r   r   r   r   r   r%   r%   r%   r&   rM   S   s`   
	        
	

	rM   c                   @   s   e Zd Zdd ZdS )TestIsscalarc                 C   s   t td t ttd t td t td t tdg  t td   ddlm} t t|dd dd	lm} t t|  d S )
Ng@i90  Fr   r   )FractionrG      )Number)r   r   isscalarr   Z	fractionsr   Znumbersr   )r#   r   r   r%   r%   r&   test_isscalar-  s    zTestIsscalar.test_isscalarN)rC   rD   rE   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 )
TestBoolScalarc                 C   s4   t j}t j}d}t|o||k t|o(||k d S )NZxyzr   False_ZTrue_r   )r#   r   tr   r%   r%   r&   test_logical=  s
    zTestBoolScalar.test_logicalc                 C   sP   t j}t j}t||B |k t||B |k t||B |k t||B |k d S r   r   r#   r   r   r%   r%   r&   test_bitwise_orD  s    zTestBoolScalar.test_bitwise_orc                 C   sP   t j}t j}t||@ |k t||@ |k t||@ |k t||@ |k d S r   r   r   r%   r%   r&   test_bitwise_andL  s    zTestBoolScalar.test_bitwise_andc                 C   sP   t j}t j}t||A |k t||A |k t||A |k t||A |k d S r   r   r   r%   r%   r&   test_bitwise_xorT  s    zTestBoolScalar.test_bitwise_xorN)rC   rD   rE   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 )
TestBoolArrayc                 C   s   t jdgd tddd  | _t jdgd tddd  | _t jdgd tddd  | _| j | _| j | _d| jd< d| jd	< d| jd< d| jd	< d S )
NT)   r1   r   F*   r   r   r   )	r   r    boolr   r   ocopynmimr#   r%   r%   r&   setup_method^  s    


zTestBoolArray.setup_methodc                 C   s  t | j  t | j  t | j   t | j   t | j  t | j  t | j   t | j   tdD ]v}tj	dgd t
ddd  }d||< t t| tj	dgd t
ddd  }d||< t t|  t||  qttddd	d
ddg D ]l}tj	dgd t
d}d||< t t|d| d tj	dgd t
d}d||< t t| d| d qd S )N   F   r1   rO   Tr[   ip  i  iT  i_ r7   iˆ z%rmsg)r   r   rf   anyr   r   r   ranger   r    r   r   list)r#   r   der%   r%   r&   test_all_anyj  s.    zTestBoolArray.test_all_anyc                 C   s   t | j | j t t| j | j t t| j | j t t| j| j t t| j | j t t| j | j t t| j | j tj| j| jd t | j| j tj| j| jd t | j| j d S )NrS   )	r   r   r   r   absr   r   Zlogical_notr   r   r%   r%   r&   test_logical_not_abs  s    z"TestBoolArray.test_logical_not_absc                 C   sB  t | j| jB | j t | j| jB | j t | j| jB | j t | j| jB | j tj| j| j| jd t | j| j t | j| j@ | j t | j| j@ | j t | j| j@ | j t | j| j@ | j tj| j| j| jd t | j| j t | j| jA | j t | j| jA | j t | j| jA | j t | j| jA | j tj| j| j| jd t | j| j t | j| j@ | j t | j	| j@ d t | jd@ | j t | j	d@ | j t | j| jB | j t | j	| jB | j	 t | jdB | j t | j	dB | j	 t | j| jA | j	 t | j	| jA | j	 t | jdA | j	 t | j	dA | j	 d S )Nr   FT)
r   r   r   r   
logical_orr   logical_andlogical_xorr   r   r   r%   r%   r&   test_logical_and_or_xor  s<    z%TestBoolArray.test_logical_and_or_xorN)rC   rD   rE   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 )TestBoolCmpc                    sx  t jdt jd| _t j| jjtd| _t jdt jd| _t j| jjtd| _	d}t
dD ]T  fddt
dD | j||d <  fd	dt
dD | j||d < |d7 }qXd}t
d
D ]T  fddt
dD | j||d <  fddt
dD | j	||d < |d7 }q| j | _| j | _t j| j| j< t j| j| j	< | j | _| j | _t j| jd d d | jd d d < t j| jd d d | j	d d d < t j | jdd d | jdd d < t j | jdd d | j	dd d < t j| jdd d | jdd d < t j| jdd d | j	dd d < | j | _d| jdd d< | j	 | _d| jdd d< | j | _| j | _| j| j  d9  < | j| j	  d9  < t j | jdd d | jdd d < t j | jdd d | j	dd d < t j | jdd d | jdd d < t j | jdd d | j	dd d < d| jdd d | jdd d < d| jdd d | j	dd d < d S )Nr   r1      r       c                    s   g | ]} d | @ qS r   r%   .0xr   r%   r&   
<listcomp>  s     z,TestBoolCmp.setup_method.<locals>.<listcomp>rZ   c                    s   g | ]} d | @ dkqS r+   r%   r   r   r%   r&   r     s        c                    s   g | ]} d | @ qS r   r%   r   r   r%   r&   r     s     r   c                    s   g | ]} d | @ dkqS r+   r%   r   r   r%   r&   r     s     r   r   r   F      rN   g       )r   onesr4   r   r   r   efr   r   edr   r   nfndnaninffinfdinfefnonanednonansignfsignd)r#   r   r%   r   r&   r     sP    $$
$$
""$$""$$$$ zTestBoolCmp.setup_methodc                 C   s@  t dD ]0}t| j|d  dk| j|d   t| j|d  d dk| j|d   t| j|d  dk| j|d    t| j|d   dk | j|d   t| j|d   d dk| j|d   | j|d  dk}t|| j|d   | j|d  t| j|d  k}d| j|d  k}t|| t|| t|tj|tj t|tj|tj t|tj|tj tt	| j
|d  | j|d   tt| j
|d  | j|d    tt| j|d  | j|d    tt| j|d  | j|d   tt| j|d  | j|d   qd S )Nr   r   r   )r   r   r   r   r   
zeros_likerI   r   astyperv   r  isfiniter  isinfr  signbitr
  r#   r   rZr2Zr3r%   r%   r&   
test_float  s(    "&$$("

$&&$zTestBoolCmp.test_floatc                 C   s@  t dD ]0}t| j|d  dk| j|d   t| j|d  d dk| j|d   t| j|d  dk| j|d    t| j|d   dk | j|d   t| j|d   d dk| j|d   | j|d  dk}t|| j|d   | j|d  t| j|d  k}d| j|d  k}t|| t|| t|tj|tj t|tj|tj t|tj|tj tt	| j
|d  | j|d   tt| j
|d  | j|d    tt| j|d  | j|d    tt| j|d  | j|d   tt| j|d  | j|d   qd S )Nr   r   r   )r   r   r   r  r   r  rI   r   r  rv   r  r  r  r  r	  r  r  r  r%   r%   r&   test_double  s(    "&$$("

$&&$zTestBoolCmp.test_doubleN)rC   rD   rE   r   r  r  r%   r%   r%   r&   r     s   .r   c                   @   sl   e Zd Zdd Zdd Zejjeddejje	
 dkddd	d
 Zejjedddd Zdd ZdS )
TestSeterrc                 C   s"   t  }t|tddddd d S )Nwarnignore)divideinvalidoverZunder)r   geterrr   dict)r#   errr%   r%   r&   test_default  s    zTestSeterr.test_defaultc              	   C   s   t   t  }t jdd}t||k t  }t|d dk t jdd tt  d dk t|d dk t jf | tt  |k W 5 Q R X d S )Nprintr  r  raise)r  r  )r   errstateseterrr   r  )r#   r  oldnewr%   r%   r&   test_set"  s    
zTestSeterr.test_setno wasm fp exception supportr   Zarmv5telzSee gh-413.c              
   C   sl   t jddV tt t dgt dg  W 5 Q R X t jdd t dgt dg  W 5 Q R X d S )Nr!  r   rB           r  )r   r"  r	   FloatingPointErrorr    r#  r   r%   r%   r&   test_divide_err/  s
    
"zTestSeterr.test_divide_errc              
      s6  t  }d _ztjdd^}td t jdd< t ddd g t d	gt d
g  t	t
|d W 5 Q R X W 5 Q R X  fdd}t jdd. t dd|g t d	gt d
g  W 5 Q R X t	 jd t | t jdd t jd	d
dd|gd W 5 Q R X t	 jd W 5 t |  `X d S )Nr   Trm   ro   r  r   i N  r   rB   r(  c                     s6     j d7  _ | }tt|dk td|d k d S )Nr   r   r  r   )calledr   len)argsZ
extobj_errr   r%   r&   log_errE  s    z'TestSeterr.test_errobj.<locals>.log_errr  r   )Zextobjr   )r   	geterrobjr+  	seterrobjrr   rs   simplefilterr"  r    r   r,  r  )r#   	olderrobjry   r.  r%   r   r&   test_errobj9  s(    
""
 
zTestSeterr.test_errobjc              	   C   s|   t  }zbt tjtjd d g t t dg tdD ]}t tjtjd g q<t t dg W 5 t | X d S )Nr   rN   i'  )	r   r/  r0  r   ZUFUNC_BUFSIZE_DEFAULTZERR_DEFAULTrv   r    r   )r#   r2  r   r%   r%   r&   test_errobj_noerrmaskX  s     z TestSeterr.test_errobj_noerrmaskN)rC   rD   rE   r  r&  r>   r   skipifr   platformmachiner*  r3  r4  r%   r%   r%   r&   r    s   	
r  c                   @   s`   e Z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jedddd ZdS )TestFloatExceptionsc              
   C   sp   t |}z ||| tdd||f  W nB tk
rj } z$tt||dkd||f  W 5 d }~X Y nX d S )NFz%Type %s did not raise fpe error '%s'.r   z$Type %s raised wrong fpe error '%s'.)rJ   r   r)  strfind)r#   fpeerrflopr   yftypeexcr%   r%   r&   assert_raises_fpel  s    


z%TestFloatExceptions.assert_raises_fpec                 C   sT   |  |||| |  |||d | |  ||||d  |  |||d |d  d S )Nr%   )r@  )r#   r;  r<  Zsc1Zsc2r%   r%   r&   assert_op_raises_fpev  s    z(TestFloatExceptions.assert_op_raises_fper'  r   typecodeZAllFloatc              	   C   s  t jdd t |}t |jdkrRt |}|jj}|j}|j	}d}d}n@t
|dj}	t |	}||jj}||j}||j	}d}d}d}
d	}t |s| |d
d || | |dd || | |
dd ||d | |
dd ||d | |
dd |||  | |
dd | ||  | |
t j|d|d|j  | |dd |d|d | |dd |t j|t j | |dd |d|d | |dd |t j|t j | |dd |t j|t j  | |dd |d|t j W 5 Q R X d S )Nr!  rf   r   	underflowdivide by zeror   rp   overflowr  c                 S   s   | | S r   r%   r0   br%   r%   r&   <lambda>      z>TestFloatExceptions.test_floating_exceptions.<locals>.<lambda>c                 S   s   | | S r   r%   rG  r%   r%   r&   rI    rJ  c                 S   s   | | S r   r%   rG  r%   r%   r&   rI    rJ  r   c                 S   s   | | S r   r%   rG  r%   r%   r&   rI    rJ        ?c                 S   s   | | S r   r%   rG  r%   r%   r&   rI    rJ  c                 S   s   | | S r   r%   rG  r%   r%   r&   rI    rJ  c                 S   s   | | S r   r%   rG  r%   r%   r&   rI    rJ  r   c                 S   s   | | S r   r%   rG  r%   r%   r&   rI    rJ  c                 S   s   | | S r   r%   rG  r%   r%   r&   rI    rJ  c                 S   s   | | S r   r%   rG  r%   r%   r&   rI    rJ  c                 S   s   | | S r   r%   rG  r%   r%   r&   rI    rJ  c                 S   s   | | S r   r%   rG  r%   r%   r&   rI    rJ  )r   r"  Z
obj2sctyper,   kindfinfoZ_macharZtinymaxZepsrJ   realrv   r@  powerZnexpr  )r#   rB  r>  fiZft_tinyZft_maxZft_epsrD  Z	divbyzeroZrtyperF  r  r%   r%   r&   test_floating_exceptions  s    





                           
  z,TestFloatExceptions.test_floating_exceptionsc              
   C   s  t jdd}t d tjdd tdd tt|d tdt	|d	 j
k td
td
  tt|d tdt	|d j
k ttjttj  tt|d tdt	|d j
k tdtd  tt|d tdt	|d j
k W 5 Q R X W 5 Q R X d S )NTrm   ro   r  rC  r   r(  rE  r   gu <7~r   rF  r8   r   zinvalid valuegYnr   rD  )rr   rs   r1  r   r"  r  r   r,  r   r9  messager    r  )r#   ry   r%   r%   r&   test_warnings  s    
z!TestFloatExceptions.test_warningsN)rC   rD   rE   r@  rA  r>   r   r5  r   r   r   	typecodesrR  rT  r%   r%   r%   r&   r8  k  s   
:r8  c                   @   s  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zej	
dddgej	
dddgdd Zej	
ddgededgedgedgggdd Zej	
ddgededgedgeded fggededgededggdd  Zej	
d!eejd" d#d$d%d&d'd(eg d)d* Zej	jej	d+ej	
ddgejeejd" d#d%d&d'd(eg d,d-d.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8S )9	TestTypesc                 C   s~  t d}t dt dt dt df\}}}}t dt dt dt 	df\}}}	}
t 
dt dt d  }}}t dt dt d  }}}t|||t t j t|||t t j t|||t t j t|||	t t j t|||t t j t|||t t j t|||t t j t|||t t j t|||t t j t|||t t j t|||t t j t|||t t j t|||t t j t|||t t j t|||	t t j t||
|t t j t|||t t j t|||t t j t|||t t j
 t|||	t t j t|||t t j t|||t t j t|||t t j t|t |g|t t j t|t |g|t t j t|t |g|t t j t|t |g|	t t j t|t |g|t t j t||
t |gt t j t||t |	gt t j t|t dt |
gt t j t||t |gt t j
 t||t |gt t j
 t|t |g|t t j t||t |gt t j t||t |gt t j t|t dt |gt t j t|t |g|t t j t|t |g|t t j t|t |g|
t t j	 t|t |g|t t j t|t |g|t t j t|t |g|t t j t|t |g|t t j d S )Nr   r8   y              @)r   bool_r   r   r   r   r   r   r   r   r4   r   
longdouble	complex64
complex128clongdoubler   r,   r    )r#   Zpromote_funcrH  i8Zi16Zi32Zi64u8u16u32Zu64Zf32Zf64ZfldZc64Zc128Zcldr%   r%   r&   check_promotion_cases  sv    
,,""       
   


      
zTestTypes.check_promotion_casesc                 C   s  dd }|  | tddgtjddgtjdfD ]d}d| }t|jtd	d
|j  td| }t|jttjd
|j  td| }t|jtd	d
|j  td| }t|jtdd
|j  t	d| }t|jtdd
|j  d| }t|jtdd
|j  t
d| }t|jttj
d
|j  td| }t|jtdd
|j  td| }t|jtdd
|j  q4d S )Nc                 S   s   t | |jS r   )r   addr,   rG  r%   r%   r&   res_type  s    z)TestTypes.test_coercion.<locals>.res_typeTFr{   r   r1   gX9v?f8zarray type %sf4f2y        X9v?c16Zc8)r`  r   r    r   r   r,   rX  r   r4   r   r[  rZ  rY  )r#   rb  r0   rH  r%   r%   r&   test_coercion  s2    
(zTestTypes.test_coercionc                 C   s(   |  tj ttd td k d S r   )r`  r   result_typer   r,   r   r%   r%   r&   test_result_typeT  s    zTestTypes.test_result_typec                 C   s  t tddtd t tddtd t tddtd t tddtd t tddtd t tddtd t tddtd	 t td
dtd	 t tddtd	 t tdd
td	 t tddtd	 t tddtd	 t tddtd t tddtd t tddtd t tddtd d S )N<i8r\  >i8z>U16U21z<U16z<S5z<U8ZU8z>S5z>U8z<U5z>U5z<M8ZM8z>M8z<m8m8z>m8)r   r   promote_typesr,   r   r%   r%   r&   test_promote_types_endianX  s     z#TestTypes.test_promote_types_endianc              
   C   s   dddddg}d}t t}|D ]2}t |}t ||s>tt |||ks tq |D ]@}t |}t ||rvttt t || W 5 Q R X qXt d}t ||stt |||kstd S )Nr   r   r   r   r   ZBHILQPFDGmMfVdouble)	r   r,   r   can_castrK   rn  r>   r?   	TypeError)r#   Zvalid_typesZinvalid_typesZrational_dtZnumpy_dtypeZ	double_dtr%   r%   r&   #test_can_cast_and_promote_usertypesn  s    



z-TestTypes.test_can_cast_and_promote_usertypesswaprp   string_dtypeUSc                 C   s  |dkrdd }nt j}|}t|d|t |d  t|d|t |d  t|d|t |d	  t|d
|t |d  t|d|t |d  t|d|t |d  t|d|t |d  t|d|t |d  t|d|t |d  t|d|t |d  t|d|d t |d  t|d|d t |d  t|d|d t |d  t|d|d t |d  t|d|d t |d	  t|d|d t |d  t|d
|d t |d  t|d
|d t |d  t|d|d t |d  t|d|d t |d  t|d|d t |d  t|d|d t |d  t|d|d t d d S )Nrt  c                 S   s   t || S r   )r   rn  rG  r%   r%   r&   rI    rJ  z6TestTypes.test_promote_types_strings.<locals>.<lambda>r   5rH  4u13u2u410r]  Z20i1i26i4Z11r\  Z21130O)r   rn  r   r,   )r#   rt  ru  rn  rw  r%   r%   r&   test_promote_types_strings  s6    
z$TestTypes.test_promote_types_stringsdtype1dtype2ZV6V10)name1r\  )Zname2r\  c              	   C   s&   t t t|| W 5 Q R X d S r   )r>   r?   rr  r   rn  r#   r  r  r%   r%   r&   test_invalid_void_promotion  s    z%TestTypes.test_invalid_void_promotionr  r\  zi8,i8zi8,>i8i4,i4c                 C   s   t |||kstd S r   )r   rn  rK   r  r%   r%   r&   test_valid_void_promotion  s    z#TestTypes.test_valid_void_promotionr,   Allzi,iZ10iS3ZS100U3ZU100c                 C   s   ddi}t j||d}t ||}|j|jks2t| }|jrDd S t ||}|jdkrj|jd ksxtn|j|ksxt|jstd S )Nr   metadatarv  )r   r,   rn  r  rK   newbyteorderisnativechar)r#   r,   r  resr%   r%   r&   %test_promote_identical_types_metadata  s    
z/TestTypes.test_promote_identical_types_metadataz)ignore:Promotion of numbers:FutureWarningr   )r   c                 C   s  ddi}ddi}t j||d}t j||d}zt ||}W n tk
rR   Y dS X |jdksr|jdk	sr|jdkr|jdkstnV||kr||kstn@||krt ||j	|kr|jdk q|j|k n|jdkst|
 }|j|kstt ||}||kst|j|jkstdS )a  Metadata handling in promotion does not appear formalized
        right now in NumPy. This test should thus be considered to
        document behaviour, rather than test the correct definition of it.

        This test is very ugly, it was useful for rewriting part of the
        promotion, but probably should eventually be replaced/deleted
        (i.e. when metadata handling in promotion is better defined).
        r   r   r  NZUSVr%   )r   r,   rn  rr  r  namesr-   r  rK   rL  r  )r#   r  r  Z	metadata1Z	metadata2r  Zres_bsr%   r%   r&   test_promote_types_metadata  s,    z%TestTypes.test_promote_types_metadatac                 C   s  t ttjtj t ttjt t ttt  t tdd t tdd  t tdd t tddd t tddd  t tddd	 t td
dd	  t td
dd t tddd  t tddd t tddd  t tddd t tdd t tdd  t tdd t tdd  t tdd t tdd  t tdd t tdd  t tdd t tdd  t tdd t tdd  t tdd t tdd  t tdd  t tdd  t tdd t tdd  t tdd! t tdd  t tdd t tdd  t tdd" t tdd#  t tdd# t tdd$  t tdd% t tdd"  t tdd& t tdd'  t tdd( t tdd)  t tdd" t tdd#  t tdd* t tdd%  t tdd+ t tdd&  t tdd, t tdd(  tt	tjdd  tt	tjd d t tjtjtjd- d S ).Nr\  rc  rd  r  ZS11norj  rk  equivz<i4safez>i4	same_kindz>u4unsafer   ZS5ZS4rH  r  rz  ZS2r|  r}  ZS10ZS9r]  ZS20ZS19r  r  ZS6ZS21ZU4r  ZU2ZU5ZU10ZU9ZU20ZU19ZU6ZU11rl  )from_to)
r   r   rq  r   r   r   complexfloatr	   rr  r   r%   r%   r&   test_can_cast  st    zTestTypes.test_can_castc                 C   s   t tdd  t tdd  t tjdddd t tjdddd t tddg  t tjddgdd  t tjddgdd t tdd	g  t tjdd	gdd t tdd
g  t tjdd
gdd d S )Nr  r  zi4,i2r  castingr  f1r  r  )r  r  )r  z(2,3)i4r   r   rq  r   r%   r%   r&   "test_can_cast_simple_to_structured\  s    z,TestTypes.test_can_cast_simple_to_structuredc                 C   s   t tdgd  t tjdgddd t tjdgddd t tjdddd  t tddgfgd  t tjddgfgddd t td	gd  t tjd	gddd t tjd
gddd  d S )Nr  r  r  r  r  r  r  )r   r  )f0z(3,)i4)r  r  r   r  r   r%   r%   r&   "test_can_cast_structured_to_simplel  s    z,TestTypes.test_can_cast_structured_to_simplec                 C   s   t jd t jd  D ]b}t |}tt |j| tt |j| tt |jd |  tt |jd |  qt jd D ]2}t |}tt |j| tt |j| qd S )Nr   Zuintr   r  )r   sctypesiinfor   rq  minrN  rM  )r#   dtiirQ  r%   r%   r&   test_can_cast_values  s    

zTestTypes.test_can_cast_valuesN)rC   rD   rE   r`  rg  ri  ro  rs  r>   r   r   r  r   r,   r  r  r  r   rU  r   r  Zslowrt   	itertoolsproductr  r  r  r  r  r%   r%   r%   r&   rV    sZ   J6#




.MrV  c                   @   s   e Zd ZdS )
NIterErrorNrC   rD   rE   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ej	
deegej	
ddgddgdd Zej	
dddddgdd Zej	
ddgdddddddd d!d"g	fd#ddddddd d!d"g	fd$d%d&d'd(d)gfd*d%d&d'd(d)gfed+d,d-gfgej	
d.d/dgd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8S )9TestFromiterc                 C   s   dd t dD S )Nc                 s   s   | ]}|d  V  qdS )r   Nr%   r   r%   r%   r&   	<genexpr>  s     z'TestFromiter.makegen.<locals>.<genexpr>rd   )r   r   r%   r%   r&   makegen  s    zTestFromiter.makegenc                 C   sx   t |  t j}t |  t j}t |  t}t|jt t jk t|jt t jk t|jt tk d S r   )r   fromiterr  r   r   r  r   r,   )r#   Zai32Zai64afr%   r%   r&   
test_types  s    zTestFromiter.test_typesc                 C   sz   t t|  }t |  t}t |  td}tt|t|k tt|dk tt	t j|  tt|d  d S )N   r6   )
r   r    r   r  r  r   r   r,  r	   r@   r#   expectedr0   Za20r%   r%   r&   test_lengths  s      
zTestFromiter.test_lengthsc                 C   sl   t t|  }t |  t}t |  td}tt j||kdd tt j||d d kdd d S )Nr  r   r\   )r   r    r   r  r  r   r   Zalltruer  r%   r%   r&   test_values  s
    zTestFromiter.test_valuesc                 c   s,   t |D ]}||kr td| |V  qd S )Nzerror at index %s)r   r  )r#   nZeindexr   r%   r%   r&   	load_data  s    zTestFromiter.load_datar,   counterror_index)r6   rG   )r6   r[   c              	   C   s6   |  ||}tt tj|||d W 5 Q R X d S )N)r,   r  )r  r>   r?   r  r   r  )r#   r  r  r,   iterabler%   r%   r&   	test_2592  s    zTestFromiter.test_2592rw  ZS0V0ZU0c              	   C   s,   t jtdd tjg |d W 5 Q R X d S )NzMust specify lengthr:   r1   )r>   r?   r@   r   r  )r#   r,   r%   r%   r&   test_empty_not_structured  s    z&TestFromiter.test_empty_not_structureddatar   r   r   r   r   rG   rN   rO   rZ   r[   r  zi,Or   r   )rG   r   r   r   )r[   rZ   rN   rO   Z2i)r  r  )r   r   r   )r   r   rG   ))r   r   r   )rG   r   r   length_hintr   c                    sR   t |} d  G  fddd}t j| |d}t j |d}t|| d S )Nd   c                       s$   e Zd ZfddZ fddZdS )z?TestFromiter.test_growth_and_complicated_dtypes.<locals>.MyIterc                    s    S r   r%   r   )r  r%   r&   __length_hint__  s    zOTestFromiter.test_growth_and_complicated_dtypes.<locals>.MyIter.__length_hint__c                    s   t  S r   iterr   )r  r%   r&   __iter__  s    zHTestFromiter.test_growth_and_complicated_dtypes.<locals>.MyIter.__iter__NrC   rD   rE   r  r  r%   r  r  r%   r&   MyIter  s   r  r1   )r   r,   r  r    r   )r#   r,   r  r  r  r  r  r%   r  r&   "test_growth_and_complicated_dtypes  s    
	z/TestFromiter.test_growth_and_complicated_dtypesc                 C   s>   G dd d}t j| dd}|jdks,t|jdks:td S )Nc                   @   s   e Zd Zdd Zdd ZdS )z.TestFromiter.test_empty_result.<locals>.MyIterc                 S   s   dS Nr6   r%   r   r%   r%   r&   r    s    z>TestFromiter.test_empty_result.<locals>.MyIter.__length_hint__c                 S   s   t g S r   r  r   r%   r%   r&   r    s    z7TestFromiter.test_empty_result.<locals>.MyIter.__iter__Nr  r%   r%   r%   r&   r    s   r  r   r1   r)   )r   r  r-   rK   r,   )r#   r  r  r%   r%   r&   test_empty_result  s    zTestFromiter.test_empty_resultc              	   C   s8   d}t jt|d tjdddgdtd W 5 Q R X d S )Nz>iterator too short: Expected 10 but iterator had only 3 items.r:   r   r   r   r6   )r  r,   )r>   r?   r@   r   r  r   )r#   r   r%   r%   r&   test_too_few_items  s    zTestFromiter.test_too_few_itemsc              	   C   sn   t t tjdd dgtd W 5 Q R X dd tdD }t t tj|ttdfd W 5 Q R X d S )Nr   r   r1   c                 s   s   | ]
}d V  qdS )r   r   r   Nr%   )r   r   r%   r%   r&   r    s     z7TestFromiter.test_failed_itemsetting.<locals>.<genexpr>rG   r   )	r>   r?   rr  r   r  r   r   r@   r,   )r#   r  r%   r%   r&   test_failed_itemsetting  s
    z$TestFromiter.test_failed_itemsettingN)rC   rD   rE   r  r  r  r  r  r>   r   r   r   objectr  r  r   r,   r  r  r  r  r%   r%   r%   r&   r    s2   	
	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d Zdd Zdd Zdd Zdd Zdd  Zejjed!d"d#d$ Zd%S )&TestNonzeroc                 C   s   t ttg d t ttjg ddd t ttg g f t ttdgd t ttjdgddd t ttdgg f t ttdgd t ttjdgddd t ttdgdgf d S Nr   ?r1   r   )r   r   rb   r    nonzeror   r%   r%   r&   test_nonzero_trivial  s    z TestNonzero.test_nonzero_trivialc              	   C   s   t ttdd t ttjdddd tt t ttdg f W 5 Q R X t ttdd t ttjdddd tt  t ttddgf W 5 Q R X d S r  )r   r   rb   r    r   DeprecationWarningr  r   r%   r%   r&   test_nonzero_zerod  s    
"
zTestNonzero.test_nonzero_zerodc              	   C   s   t dddddddg}tt |d tt |d tt |ddddgf t jd	d
dddgddddgd}tt |d d tt |d d tt |d d tt |d d tt |d dddgf tt |d ddddgf d S )Nr   r   r   r8   rZ   r   r   rN   )r   r   r|   r{   )r   r   r   rO   )r   r   r   r   )r8   r   r   r   )r   rO   r   r   )r0   r  )rH  r  )r   r  )r   r\  r1   r0   rH  r   r   )r   r    r   rb   r  r#   r   r%   r%   r&   test_nonzero_onedim  s    
zTestNonzero.test_nonzero_onedimc                 C   sV  t dddgdddgg}tt |dd tt |dd tt |dd tt |dd tt |dddgdddgf t d}tt |dd tt |dd tt |dd tt |dd tt |dddgdddgf t jd	d
dgddd
gd
dd	ggddgd}tt |d d tt |d d tt |d ddddgddddgf tt |d dddddgdddddgf t|d jj	j
  tt |d jd tt |d jd tt |d jddddgddddgf tt |d jdddddgdddddgf d S )Nr   r   r   r   r  r  r  r\  r   r   r   r   )r   ri   r   r   r   )r   rG   )r0   rd  )rH  rz  r1   r0   r   rH  rG   )r   r    r   rb   r  r  Zeyer   Tflagsalignedr  r%   r%   r&   test_nonzero_twodim(  s6     
 (,*zTestNonzero.test_nonzero_twodimc              
   C   s   t dD ]}tjdtd}d||d d< tt|d t|d| d tjdtd}d|d| d| < d|d|d  < tt|d ttd| d| d|d  gf qd S )	Nr     r1   Tr   i  r6   r   )r   r   r3   r   r   r  r=   Zconcatenate)r#   r   r   r%   r%   r&   test_sparseE  s    "&zTestNonzero.test_sparsec                 C   s   G dd dt j}|t jfD ]}tddD ]r}ttdd| }t t |||}t || fD ],}|D ]"}t	t
|t jk t	|jj qvqnq*qd S )Nc                   @   s   e Zd ZdS )z'TestNonzero.test_return_type.<locals>.CNr  r%   r%   r%   r&   CS  s   r  r   r   r   )r   rH   r   tupler=   r   r   rI   r  r   rJ   r  	writeable)r#   r  rI   r  r-   r   ZnzxZnzx_ir%   r%   r&   test_return_typeR  s    zTestNonzero.test_return_typec                 C   s   t dddddgdddddgg}t dddddg}tt j|dd| t ddg}tt j|dd| ttt j|dd ttt j|d	d tt jt j|dd ttt j|t dgdggd d S )
Nr   r   rO   r   r   ra   r\   r  Zfoo)r   r    r   rb   r	   r@   rr  	AxisError)r#   r   r  r%   r%   r&   test_count_nonzero_axis_  s    " z#TestNonzero.test_count_nonzero_axisc                 C   s&  d}dd }t jd D ]}|t |jf }|dkrT|dkrvt jd|d}t jd	|d}|d
 |d< |d
 |d< n4t dgd }|d}d|d< d|d< ||}t jdd
d
gt j	d}|t j
|d
d||d t jd	d	d
gt j	d}|t j
|d	d||d t d}tt j
|dd||d tt j
|d d||d tt 
|||d |dkrt t d	gd d}t jd
d
d
gt j	d}|t j
|d
d||d t jd
d
gt j	d}|t j
|d	d||d t d
}tt j
|dd||d tt j
|d d||d tt 
|||d qd S )NzMismatch for dtype: %sc                 S   s$   t | j|j|d t | ||d d S )Nerr_msg)r   r,   )r0   rH  r  r%   r%   r&   assert_equal_w_dtu  s    zITestNonzero.test_count_nonzero_axis_all_dtypes.<locals>.assert_equal_w_dtr  VMr   r1   r   r   r  r   z
1970-01-01r[   z
1970-01-12r   r\   r  r  rN   r  )r   rU  r,   namer3   r   r    r   r  intprb   r   void)r#   r   r  r  r  r   r  r  r%   r%   r&   "test_count_nonzero_axis_all_dtypeso  s~    


  
  
   
  
 z.TestNonzero.test_count_nonzero_axis_all_dtypesc              	   C   s   ddl m}m} d}d}d}tjd}|jdd|d	}|t}t	t
|D ]J}	|||	D ]:}
||
D ],}ttj||d
tj||d
||f d qhq\qNd S )Nr   )combinationspermutationsr   r   r   r   )rG   rG   rG   rG   zMismatch for axis: %si  ir  r   r\   r  )r  r   r  r   randomZRandomStater   r  r  r   r,  r   rb   )r#   r   r  r]   r   r   rngr   r  lengthZcombopermr%   r%   r&   "test_count_nonzero_axis_consistent  s    
z.TestNonzero.test_count_nonzero_axis_consistentc                 C   s8   t dddgdddgg}tt j|dd|t d S )Nr   r   r%   r\   )r   r    r   rb   r  r   r}   r%   r%   r&   test_countnonzero_axis_empty  s    z(TestNonzero.test_countnonzero_axis_emptyc                 C   s   t ddddgddddgddddgg}tt j|ddd	ddddgg tt j|ddd	dgdgdgg tt j|dd
dgg d S )Nr   r   r   rG   rO   r[   r   Tr   r   rN   )r   r    r   rb   r}   r%   r%   r&   test_countnonzero_keepdims  s    

z&TestNonzero.test_countnonzero_keepdimsc                 C   s@   t dddgdddgg}dddgdddgg}t| | d S )Nr   r   r   rN   r   )r   r    r   r  )r#   r   rR   r%   r%   r&   test_array_method  s    zTestNonzero.test_array_methodc                 C   sT   t jt ddgdgtd}ttt j| G dd d}ttt jt | g d S )Nr   r   r   r1   c                   @   s   e Zd Zdd ZdS )z;TestNonzero.test_nonzero_invalid_object.<locals>.BoolErrorsc                 S   s   t dd S )NzNot allowed)r@   r   r%   r%   r&   __bool__  s    zDTestNonzero.test_nonzero_invalid_object.<locals>.BoolErrors.__bool__N)rC   rD   rE   r  r%   r%   r%   r&   
BoolErrors  s   r  )r   r    r  r	   r@   r  )r#   r0   r  r%   r%   r&   test_nonzero_invalid_object  s    z'TestNonzero.test_nonzero_invalid_objectc                 C   s   G dd d}G dd d}t d| g}ttt j| t dg| gg}ttt j| t d| g}ttt j| t dg| gg}ttt j| d S )Nc                   @   s   e Zd ZdZdd ZdS )zATestNonzero.test_nonzero_sideeffect_safety.<locals>.FalseThenTrueFc                 S   s   z
| j W S d| _ X d S )NT_valr   r%   r%   r&   r    s    
zJTestNonzero.test_nonzero_sideeffect_safety.<locals>.FalseThenTrue.__bool__NrC   rD   rE   r  r  r%   r%   r%   r&   FalseThenTrue  s   r  c                   @   s   e Zd ZdZdd ZdS )zATestNonzero.test_nonzero_sideeffect_safety.<locals>.TrueThenFalseTc                 S   s   z
| j W S d| _ X d S )NFr  r   r%   r%   r&   r    s    
zJTestNonzero.test_nonzero_sideeffect_safety.<locals>.TrueThenFalse.__bool__Nr  r%   r%   r%   r&   TrueThenFalse  s   r  TF)r   r    r	   RuntimeErrorr  )r#   r  r  r0   r%   r%   r&   test_nonzero_sideeffect_safety  s    	z*TestNonzero.test_nonzero_sideeffect_safetyc                 C   sZ   t jddd}|jjst|d jjr*tt | |jjs@tt | |jjsVtd S )NrG   zi1,i8,i8r1   re  )r   r3   r  r  rK   r  rb   r#   rX   r%   r%   r&   'test_nonzero_sideffects_structured_void
  s    

z3TestNonzero.test_nonzero_sideffects_structured_voidc                 C   sz   G dd d}t |dgd }ttt j| t |dgd }ttt j| t |dggd }ttt j| d S )Nc                   @   s   e Zd Zdd Zdd ZdS )z<TestNonzero.test_nonzero_exception_safe.<locals>.ThrowsAfterc                 S   s
   || _ d S r   )
iters_left)r#   itersr%   r%   r&   __init__  s    zETestNonzero.test_nonzero_exception_safe.<locals>.ThrowsAfter.__init__c                 S   s$   | j dkrtd|  j d8  _ dS )Nr   zcalled `iters` timesr   T)r  r@   r   r%   r%   r&   r    s    
zETestNonzero.test_nonzero_exception_safe.<locals>.ThrowsAfter.__bool__N)rC   rD   rE   r  r  r%   r%   r%   r&   ThrowsAfter  s   r  rG   r6   r   )r   r    r	   r@   r  )r#   r  r0   r%   r%   r&   test_nonzero_exception_safe  s    z'TestNonzero.test_nonzero_exception_safezwasm doesn't have threadsr   c                    s   ddl m} tdg}td|fg}td|fgd }tjjdd|d d df  dd	 |d
d fddtdD }|D ]}|  q j|kst	d S )Nr   )ThreadPoolExecutor)rp   rc  rp   r   )i  r   r  c                 S   s   |    d S r   )r  )rX   r%   r%   r&   funcC  s    z6TestNonzero.test_structured_threadsafety.<locals>.funcrZ   )max_workersc                    s   g | ]}  qS r%   )Zsubmit)r   _rX   r  Ztper%   r&   r   G  s     z<TestNonzero.test_structured_threadsafety.<locals>.<listcomp>r6   )
concurrent.futuresr  r   r,   r  uniformrI   r   resultrK   )r#   r  r  Zfuturesr   r%   r"  r&   test_structured_threadsafety7  s     

z(TestNonzero.test_structured_threadsafetyN)rC   rD   rE   r  r  r  r  r  r  r  r  r  r	  r  r  r  r  r  r  r>   r   r5  r   r&  r%   r%   r%   r&   r    s$   B !r  c                   @   s   e Zd Zdd Zdd ZdS )	TestIndexc                 C   s   t ddd}t dd}tdddd}tdddd}|||f  |||f< tt|d |dk |d |dk |d |dk g|d d |dkf k  d S )	Nr   rG   rZ   r   r   r  r   r   )r   r   r   r   r    rf   )r#   r0   r  Zg1Zg2r%   r%   r&   test_booleanO  s    
zTestIndex.test_booleanc                 C   sD   t jg dd}t jg dd}|| }t|g  t|jt d d S )Nr   r1   r   )r   r    r   r,   )r#   r0   rH  r   r%   r%   r&   test_boolean_edgecaseW  s
    
zTestIndex.test_boolean_edgecaseN)rC   rD   rE   r(  r)  r%   r%   r%   r&   r'  N  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S )TestBinaryReprc                 C   s   t tdd d S )Nr   0r   r   binary_reprr   r%   r%   r&   	test_zero`  s    zTestBinaryRepr.test_zeroc                 C   s4   t tdd t tdd t tdd d S )Nr6   Z1010i0  Z11000011101010iԣ Z101000111101010011010000r,  r   r%   r%   r&   test_positivec  s    

zTestBinaryRepr.test_positivec                 C   sD   t tdd t tdd t tdd t tdd d S )	Nr8   z-1r7   z-1010iz-11000011101010i0+\z-101000111101010011010000r,  r   r%   r%   r&   test_negativej  s    

zTestBinaryRepr.test_negativec                 C   s@   t tjdddd t tjdddd t tjdddd	 d S )
Nr   rG   widthZ00000r6   rO   Z0001010r|   Z1111011r,  r   r%   r%   r&   test_sufficient_widthr  s    z$TestBinaryRepr.test_sufficient_widthc                 C   sZ   t tjdddd tddD ]6}d|d   }d|d d	  }t tj||d| qd S )
NirZ   r1  Z10000000r   ri   r   r  r+  )r   r   r-  r   )r#   r2  numexpr%   r%   r&   test_neg_width_boundariesw  s
    z(TestBinaryRepr.test_neg_width_boundariesc                 C   s   t tjtdddd d S )Nl         @   r1  Z@1100000000000000000000000000000000000000000000000000000000000000)r   r   r-  r   r   r%   r%   r&   test_large_neg_int64  s    z#TestBinaryRepr.test_large_neg_int64N)	rC   rD   rE   r.  r/  r0  r3  r6  r8  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 )
TestBaseReprc                 C   s   t tddd d S )N   r   Z100000r   r   	base_reprr   r%   r%   r&   
test_base3  s    zTestBaseRepr.test_base3c                 C   sN   t tddd t tdddd t tddd t tddd	 d S )
Nr   r6   Z12r   Z000012r  l   5j $   Z10QR0ROFCEWr;  r   r%   r%   r&   r/    s    zTestBaseRepr.test_positivec                 C   s<   t tddd t tdddd t tddd d S )Nr6   z-12r   z-000012z-30r;  r   r%   r%   r&   r0    s    zTestBaseRepr.test_negativec              	   C   sD   t t tdd W 5 Q R X t t tdd W 5 Q R X d S )Nr   %   )r	   r@   r   r<  r   r%   r%   r&   test_base_range  s    

zTestBaseRepr.test_base_rangeN)rC   rD   rE   r=  r/  r0  rA  r%   r%   r%   r&   r9    s   r9  c                   @   sH   e Zd Zdd Zdd Zdd Zdd Zej	d	d
ddgdd Z
dS )TestArrayComparisonsc                 C   sd  t t ddgt ddg}t| tt|tk t t ddgt dddg}t|  tt|tk t t ddgt ddg}t|  tt|tk t t ddgt ddg}t|  tt|tk t t jdgddt jdgdd}t| tt|tk t t jdgd	dt jdgd	d}t| tt|tk d S )
Nr   r   r   r   r0   ZS1r1   )r0   r   zS1,u4)r   array_equalr    r   rJ   r   r#   r  r%   r%   r&   test_array_equal  s(     "
 
 
$z%TestArrayComparisons.test_array_equalc                 C   s  t ddt jg}t dt jdg}t ddt jg}tt ||  tt j||dd tt j||dd  tt j||dd  t t j}tt ||  tt j||dd t jdddgtd}tt || tt j||dd t ddgt jdgg}tt ||  tt j||dd t dggd \}}t jt j |_|_tt j||d	d  tt j||dd d S )
Nr   r   T	equal_nanr   r1   r   y      ?      ?F)	r   r    r  r  r   rC  r   rO  imag)r#   Za1a2a3r0   rH  r%   r%   r&   test_array_equal_equal_nan  s(    z/TestArrayComparisons.test_array_equal_equal_nanc                 C   sr   t jd dd gtd}t|d kdddg t|d kdddg t d}t|d kdddg t|d kdddg d S )Nr   r1   TFr   )r   r    r  r   r   r}   r%   r%   r&   test_none_compares_elementwise  s    
z3TestArrayComparisons.test_none_compares_elementwisec              
   C   s"  t t ddgt ddg}t| tt|tk t t ddgt dddg}t|  tt|tk t t ddgt ddg}t|  tt|tk t t ddgt ddg}t|  tt|tk t t ddgt dg}t| tt|tk t t ddgt dgdgg}t| tt|tk t t ddgt dg}t|  tt|tk t t ddgt dgdgg}t|  tt|tk t t ddgt dddgdddgddd	gg}t|  tt|tk d S )
Nr   r   r   r   rG   rN   rO   rZ   r[   )r   Zarray_equivr    r   rJ   r   rD  r%   r%   r&   test_array_equiv  s6     "
 
 
$
$
4
z%TestArrayComparisons.test_array_equivr,   r  ZV3r  c                 C   sl   t jd|d}t|| ||k r(t|dkr4d S t jdddg|d}||k rXt||k shtd S )Nr   r1   r     1   2   3)r   r3   r   r   rK   r    rf   )r#   r,   r3   Znonzerosr%   r%   r&   test_compare_unstructured_voids  s    
z4TestArrayComparisons.test_compare_unstructured_voidsN)rC   rD   rE   rE  rK  rL  rM  r>   r   r   rQ  r%   r%   r%   r&   rB    s   	rB  c                 C   s   t | | | jjdks&t jjdkrBtjdkrBt| j	|j	k ndt| j	j
|j	j
k t| j	j|j	jk t| j	j|j	jk t| j	j|j	jk t| j	j|j	jk t| jj|jjk d S )NrZ   r   win32)r   r,   	alignmentr   r  itemsizesysr6  r   r  Zowndatar  c_contiguousf_contiguousZwritebackifcopyr  )r   r=  r%   r%   r&   assert_array_strict_equal  s    
rX  c                   @   sH  e Zd Zdd ZdddZdd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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d.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Z d<d= Z!d>d? Z"d@dA Z#dBdC Z$dDdE Z%dFdG Z&dHdI Z'dJdK Z(dLdM Z)dNdO Z*dPdQ Z+dRdS Z,dTdU Z-dVdW Z.dXdY Z/dZd[ Z0d\d] Z1d^d_ Z2d`da Z3dbdc Z4ddde Z5dfdg Z6dhdi Z7djdk Z8dldm Z9ejdndodpe:;dqfe:<dqe:;dqfgdrds Z=ejdte:j;dqe:j>dudvdwe:j?dqdwe@dufe:j;dqdxdudp dvdve:j;dqdxdufgdydz ZAejjBd{eCd|d}ejd~e:j;dqe:j>due:De:jEe:j;dqe:jFdufgejGddd ZHejjBddejd~e:jDdpgdq dxdue:Ide:j;dqe:jFdufgejGddd ZJeKeLM eNjOeNP eNQ B eNR dddd ZSdS )TestClipc                 C   s   d| _ d| _d S )NrG   r   )nrncr   r%   r%   r&   r     s    zTestClip.setup_methodNc                 C   sZ   |d kr.|d kr| ||S |j |||dS n(|d krD| |||S |j ||||dS d S )Nr  )rW   )r#   r0   r   r  rS   r  r%   r%   r&   fastclip!  s    zTestClip.fastclipc                 C   s0   t ||dt ||  }|j|||f|dS )Nr   r   )r   ZlessZgreaterrP   )r#   r0   r   r  rS   selectorr%   r%   r&   rW   -  s    zTestClip.clipc                 C   s
   t ||S r   )r   r#   r  r   r%   r%   r&   _generate_data3  s    zTestClip._generate_datac                 C   s   t ||dt||  S )Nr   )r   r   r^  r%   r%   r&   _generate_data_complex6  s    zTestClip._generate_data_complexc                 C   s   t ||tjS r   )r   r  r   r4   r^  r%   r%   r&   _generate_flt_data9  s    zTestClip._generate_flt_datac                 C   s>   t |}tjdkr(||jd}n||jd}|S )Nlittle><)r   ZasarrayrU  	byteorderr  r,   r  r}   r%   r%   r&   _neg_byteorder<  s
    

zTestClip._neg_byteorderc                 C   s&   t ||}| |}t|jj  |S r   )r   rf  r   r,   r  )r#   r  r   r  r%   r%   r&   _generate_non_native_dataD  s    

z"TestClip._generate_non_native_datac                 C   s   dt || tjS r  )r   r  r   r   r^  r%   r%   r&   _generate_int_dataJ  s    zTestClip._generate_int_datac                 C   s   dt || tjS r  )r   r  r   r   r^  r%   r%   r&   _generate_int32_dataM  s    zTestClip._generate_int32_datar,   z?bhilqpBHILQPefdgFDGOc                 C   sV   t jd|d}t jd|d}t |dd}|dkrH| | ksRtn
t|| d S )Nr6   r1   r   r   r  )r   r   r3   rW   tolistrK   r   )r#   r,   rX   r  actualr%   r%   r&   test_ones_pathologicalR  s    zTestClip.test_ones_pathologicalc                 C   sB   |  | j| j}d}d}| |||}| |||}t|| d S )Ng?333333?r_  rZ  r[  r\  rW   rX  r#   r0   r   r  acactr%   r%   r&   test_simple_double_  s    zTestClip.test_simple_doublec                 C   sL   |  | j| j}|t}d}d}| |||}| |||}t|| d S Nr   r   )rh  rZ  r[  r  r   r\  rW   rX  ro  r%   r%   r&   test_simple_inth  s    
zTestClip.test_simple_intc                 C   sN   |  | j| j}t|j}|d }| |||}| |||}t|| d S )NrK  	r_  rZ  r[  r   r3   r-   r\  rW   rX  ro  r%   r%   r&   test_array_doubler  s    zTestClip.test_array_doublec                 C   s   |  | j| j}d}d}| |||}| |||}t|| | | j| j}d}| d}t|j	j
  | |||}| |||}t|| d S N      rm  )rg  rZ  r[  r\  rW   r   r_  rf  r   r,   r  ro  r%   r%   r&   test_simple_nonnative{  s    

zTestClip.test_simple_nonnativec                 C   s   d|  | j| j }d}d}| |||}| |||}t|| d| | j| j }d}d}| |||}| |||}t|| d S )Nr   rx  rB   y            ?y      ?       @)r`  rZ  r[  r\  rW   rX  r_  ro  r%   r%   r&   test_simple_complex  s    
zTestClip.test_simple_complexc                 C   sR   t jdtd}| }| }| ||d }| |d |}t|| t|| d S Nr6   r1   )r   r   r  r  rN  r\  rX  )r#   r0   r   r  amZaMr%   r%   r&   test_clip_complex  s    
zTestClip.test_clip_complexc                 C   sz   |  | jd | jd }|d d dd d df }t|jd   t|jd   | |dd}| |dd}t|| d S )Nr   r   F_CONTIGUOUSC_CONTIGUOUSgg333333?)r_  rZ  r[  r   r  r\  rW   rX  )r#   r0   rp  rq  r%   r%   r&   test_clip_non_contig  s    zTestClip.test_clip_non_contigc                 C   s^   |  | j| j}d}d}t|j}t|j}| |||| | |||| t|| d S rw  ru  ro  r%   r%   r&   test_simple_out  s    zTestClip.test_simple_outr  r  c              	   C   s   |  | j| j}td}td}tj|jtjd}| }|d krpt	t
 | j|||||d W 5 Q R X n| j|||||d | |||| t|| d S )Nr   r   r1   r  ri  rZ  r[  r   r   r3   r-   r   r   r   r  r\  rW   rX  )r#   r  r0   r   r  rp  rq  r%   r%   r&   test_simple_int32_inout  s    


 z TestClip.test_simple_int32_inoutc                 C   sl   |  | j| j}td}td}tj|jtjd}| }| 	|||| | 
|||| t|| d S Nr8   r   r1   ri  rZ  r[  r   r   r3   r-   r   r   r\  rW   rX  ro  r%   r%   r&   test_simple_int64_out  s    

zTestClip.test_simple_int64_outc              	   C   s   |  | j| j}t|jtj}td}tj|jtjd}| }t	t
 | |||| W 5 Q R X | |||| t|| d S Nr   r1   ri  rZ  r[  r   r3   r-   r   r   r   r   r  r\  rW   rX  ro  r%   r%   r&   test_simple_int64_inout  s    

z TestClip.test_simple_int64_inoutc              	   C   st   |  | j| j}d}d}tj|jtjd}| }tt	 | 
|||| W 5 Q R X | |||| t|| d S Nr   rk   r1   r_  rZ  r[  r   r3   r-   r   r   r   r  r\  rW   rX  ro  r%   r%   r&   test_simple_int32_out  s    
zTestClip.test_simple_int32_outc                 C   sV   |  | j| j}| }t|j}d}| |||| | |||| t	|| d S NrB   
r_  rZ  r[  r   r   r3   r-   r\  rW   rX  r#   r0   rp  r   r  r%   r%   r&   test_simple_inplace_01  s    zTestClip.test_simple_inplace_01c                 C   sN   |  | j| j}| }d}d}| |||| | |||| t|| d S rw  r_  rZ  r[  r   r\  rW   rX  r  r%   r%   r&   test_simple_inplace_02  s    zTestClip.test_simple_inplace_02c                 C   s   |  | jd | jd }|d d dd d df }t|jd   t|jd   | }d}d}| |||| | |||| t|| d S )Nr   r   r~  r  rx  rm  )	r_  rZ  r[  r   r  r   r\  rW   r   r  r%   r%   r&   test_noncontig_inplace  s    zTestClip.test_noncontig_inplacec                 C   sB   |  | j| j}d}d}| |||}| |||}t|| d S rw  rn  ro  r%   r%   r&   test_type_cast_01  s    zTestClip.test_type_cast_01c                 C   sN   |  | j| j}|tj}d}d}| |||}| |||}t|| d S rs  )	rh  rZ  r[  r  r   r   r\  rW   rX  ro  r%   r%   r&   test_type_cast_02"  s    zTestClip.test_type_cast_02c                 C   sZ   |  | j| j}d}d}| |t|t|}| |t|t|}t|| d S rs  )ri  rZ  r[  r\  r   r   rW   rX  ro  r%   r%   r&   test_type_cast_03,  s    zTestClip.test_type_cast_03c                 C   sN   |  | j| j}td}td}| |||}| |||}t|| d S rs  )ri  rZ  r[  r   r4   r\  rW   rX  )r#   r0   r   r  rq  rp  r%   r%   r&   test_type_cast_045  s    

zTestClip.test_type_cast_04c                 C   sZ   |  | j| j}d}d}| ||t|j |}| ||t|j |}t|| d S Nrx  rB   )	rh  rZ  r[  r\  r   r3   r-   rW   rX  ro  r%   r%   r&   test_type_cast_05>  s    zTestClip.test_type_cast_05c                 C   sL   |  | j| j}d}| |}d}| |||}| |||}t|| d S )NrK  rB   )r_  rZ  r[  rf  rW   r\  rX  )r#   r0   r   m_sr  rq  rp  r%   r%   r&   test_type_cast_06G  s    
zTestClip.test_type_cast_06c                 C   sd   |  | j| j}dt|j }d}| |}t|jj	  |
||}| |||}t|| d S r  )r_  rZ  r[  r   r   r-   rf  r   r,   r  rW   r\  rX  )r#   r0   r   r  a_srq  rp  r%   r%   r&   test_type_cast_07Q  s    
zTestClip.test_type_cast_07c                 C   sX   |  | j| j}d}d}| |}t|jj  | |||}|||}t	|| d S r  )
r_  rZ  r[  rf  r   r,   r  r\  rW   rX  )r#   r0   r   r  r  rp  rq  r%   r%   r&   test_type_cast_08\  s    
zTestClip.test_type_cast_08c                 C   sf   |  | j| j}dt|j }d}| |}t|jj	  | 
|||}| |||}t|| d S r  )r_  rZ  r[  r   r   r-   rf  r   r,   r  r\  rW   rX  )r#   r0   r   r  r  rp  rq  r%   r%   r&   test_type_cast_09g  s    
zTestClip.test_type_cast_09c                 C   sh   |  | j| j}tj|jtjd}td}td}| j||||d}| j||||d}t	|| d S )Nr1   rx  r   r   )
rh  rZ  r[  r   r3   r-   r4   rW   r\  rX  r#   r0   rH  r   r  rq  rp  r%   r%   r&   test_type_cast_10r  s    

zTestClip.test_type_cast_10c                 C   sl   |  | j| j}| }||jd}| }d}d}| j||||d | j||||d t	|| d S )Nrc  rx  rB   r   )
rg  rZ  r[  r   r  r,   r  r\  rW   rX  )r#   r0   rH  Zbtr   r  r%   r%   r&   test_type_cast_11|  s    zTestClip.test_type_cast_11c                 C   sh   |  | j| j}tj|jtjd}td}td}| j||||d}| j	||||d}t
|| d S )Nr1   r   r   r   )rh  rZ  r[  r   r3   r-   r4   r   rW   r\  rX  r  r%   r%   r&   test_type_cast_12  s    

zTestClip.test_type_cast_12c                 C   s^   |  | j| j}d}d}t|j}t|j}| |||| | |||| t|| d S rw  ru  ro  r%   r%   r&   test_clip_with_out_simple  s    z"TestClip.test_clip_with_out_simplec              	   C   s   |  | j| j}td}td}tj|jtjd}| }t	t
 | |||| W 5 Q R X | |||| t|| d S )Nr   r   r1   r  ro  r%   r%   r&   test_clip_with_out_simple2  s    


z#TestClip.test_clip_with_out_simple2c                 C   sl   |  | j| j}td}td}tj|jtjd}| }| 	|||| | 
|||| t|| d S r  r  ro  r%   r%   r&   test_clip_with_out_simple_int32  s    

z(TestClip.test_clip_with_out_simple_int32c              	   C   s   |  | j| j}t|jtj}td}tj|jtjd}| }t	t
 | |||| W 5 Q R X | |||| t|| d S r  r  ro  r%   r%   r&   test_clip_with_out_array_int32  s    

z'TestClip.test_clip_with_out_array_int32c              	   C   st   |  | j| j}d}d}tj|jtjd}| }tt	 | 
|||| W 5 Q R X | |||| t|| d S r  r  ro  r%   r%   r&   !test_clip_with_out_array_outint32  s    
z*TestClip.test_clip_with_out_array_outint32c                 C   sJ   t ddd}t |j}|jdd|d | |dd}t|| d S )Nr   r   r6   r   )r   r=   r   
empty_liker  rW   r   )r#   r0   rS   r  r%   r%   r&   test_clip_with_out_transposed  s
    z&TestClip.test_clip_with_out_transposedc                 C   sf   t ddd}| }|d d jdd|dd  d | |d d dd}t|dd  | d S )Nr   r   r8   r6   r   r   )r   r=   r   r   rW   r   )r#   r0   rp  r  r%   r%   r&   !test_clip_with_out_memory_overlap  s
     z*TestClip.test_clip_with_out_memory_overlapc                 C   sV   |  | j| j}| }t|j}d}| |||| | |||| t	|| d S r  r  r  r%   r%   r&   test_clip_inplace_array  s    z TestClip.test_clip_inplace_arrayc                 C   sN   |  | j| j}| }d}d}| |||| | |||| t|| d S rw  r  r  r%   r%   r&   test_clip_inplace_simple  s    z!TestClip.test_clip_inplace_simplec                 C   s\   |  | j| j}| }d}d}tj||||d}| |||| t|| t||k d S )Nrx  rm  r   )r_  rZ  r[  r   r   rW   rX  r   )r#   r0   rp  r   r  rI  r%   r%   r&   test_clip_func_takes_out  s    
z!TestClip.test_clip_func_takes_outc              	   C   s   t d}tt t|jt jd| W 5 Q R X tt t|jt jd| W 5 Q R X tt t|jt jt jd| W 5 Q R X tt t|jdt jd| W 5 Q R X tt t|jt jdd| W 5 Q R X d S )Ng      @)r  )rN  )r  rN  r   r6   )r   r=   r   r  r   rW   r  )r#   r   r%   r%   r&   test_clip_nan  s    



"
 
zTestClip.test_clip_nanc                 C   sR   t jdtd}t |dd}t ddddddddddg
}| | ksNtd S )Nr6   r1   r   rG   r   r   r   )r   r=   r  rW   r    rj  rK   )r#   r0   rk  r  r%   r%   r&   test_object_clip	  s    zTestClip.test_object_clipc              	   C   s6   t jdtd}ttd t |d d  W 5 Q R X d S )Nr6   r1   z
max or min)r   r=   r  r
   r@   rW   r}   r%   r%   r&   test_clip_all_none	  s    zTestClip.test_clip_all_nonec              	   C   s:   t jdtd}ttd | j|dddd W 5 Q R X d S )Nr6   r1   zcasting must be one ofr   rZ   garbager  )r   r=   r  r
   r@   r\  r}   r%   r%   r&   test_clip_invalid_casting	  s
    z"TestClip.test_clip_invalid_castingz
amin, amaxr   r   r6   c                 C   s@   t jdt jd}t t |||}t |||}t|| d S r{  )r   r=   r   minimummaximumrW   r   )r#   aminamaxr0   r  rk  r%   r%   r&   test_clip_value_min_max_flip	  s    	z%TestClip.test_clip_value_min_max_flipzarr, amin, amax, expr1   r   l rm  c                 C   s   t |||}t|| d S r   rV   )r#   rX   r  r  r5  rk  r%   r%   r&   test_clip_problem_cases+	  s    z TestClip.test_clip_problem_caseszno scalar nan propagation yetT)r   r?   strictzarr, amin, amaxzignore::DeprecationWarningc                 C   s0   t t |||}t |||}t|| d S r   r   r  r  rW   r   r#   rX   r  r  r  rk  r%   r%   r&    test_clip_scalar_nan_propagation=	  s    z)TestClip.test_clip_scalar_nan_propagationzpropagation doesn't match specr   NaTc                 C   s0   t t |||}t |||}t|| d S r   r  r  r%   r%   r&   test_NaT_propagationN	  s    
zTestClip.test_NaT_propagation)r,   r-   )r  rX   c                 C   s   t  t  B }|t jd|jd\}}|dd }||t j||d ddidB }||t j||d	 ddidB }t	|||}	t
|||}
tj|tj|||
d
|
d
}|	j|
kstt|	| dS )a  A property-based test using Hypothesis.

        This aims for maximum generality: it could in principle generate *any*
        valid inputs to np.clip, and in practice generates much more varied
        inputs than human testers come up with.

        Because many of the inputs have tricky dependencies - compatible dtypes
        and mutually-broadcastable shapes - we use `st.data()` strategy draw
        values *inside* the test function, from strategies we construct based
        on previous values.  An alternative would be to define a custom strategy
        with `@st.composite`, but until we have duplicated code inline is fine.

        That accounts for most of the function; the actual test is just three
        lines to calculate and compare actual vs expected results!
        r   )Z
num_shapesZ
base_shapec                 S   s   t j| ddS )NF)	allow_nan)hynpZ
from_dtyper   r%   r%   r&   rI  ~	  rJ  z-TestClip.test_clip_property.<locals>.<lambda>r   r  F)r,   r-   elementsr   r1   N)r  integer_dtypesfloating_dtypesZdrawZmutually_broadcastable_shapesr-   Zflatmaparraysr   rW   rh  r  r  r,   rK   r   )r#   r  rX   Znumeric_dtypesZ	in_shapesZresult_shaper   r  r  r%  r   r  r%   r%   r&   test_clip_property\	  s.      
 
zTestClip.test_clip_property)NN)N)TrC   rD   rE   r   r\  rW   r_  r`  ra  rf  rg  rh  ri  r>   r   r   rl  rr  rt  rv  ry  rz  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   r3   r   r  r   fullr  r  r   rK   r    r  r   rt   r  timedelta64r  r   str  r  r  r  r  Zarray_shapesr  r%   r%   r%   r&   rY    s   


	
	



	
			









rY  c                   @   sd   e Zd Zd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 )TestAllcloseh㈵>:0yE>c                 C   s   t jdd| _d S )Nr  r  r   r#  Zolderrr   r%   r%   r&   r   	  s    zTestAllclose.setup_methodc                 C   s   t jf | j d S r   r  r   r%   r%   r&   teardown_method	  s    zTestAllclose.teardown_methodc                 C   s   t t||d||f  d S Nz%s and %s not closer   r   allcloser#   r   r=  r%   r%   r&   tst_allclose	  s    zTestAllclose.tst_allclosec                 C   s    t t|| d||f  d S Nz%s and %s shouldn't be closer  r  r%   r%   r&   tst_not_allclose	  s    zTestAllclose.tst_not_allclosec              	   C   s   t ddg}t dd}| j}| j}ddgddgf|gdgfdgd| | gf||||  f||||  |d  f||||  ft jt jft jt jgfg}|D ]\}}| || qd S )Nr    }   rG   rG   rG   r   r   r   )r   r    r=   r   atolrtolr  r  )r#   rX   aranr  r  r  r   r=  r%   r%   r&   test_ip_allclose	  s    

	zTestAllclose.test_ip_allclosec                 C   s  t dd}| j}| j}t jdgdt jgft jdgddgft jt jgdt jgft jt jgddgft j dgt jdgft jdgt jdgf|d gdgfdgd| |d  gf||||  |d  ft t jdgt dt jgfg
}|D ]\}}| || qd S )Nr  r  r   r   r   )	r   r=   r   r  r  r  r  r    r  )r#   r  r  r  r  r   r=  r%   r%   r&   test_ip_not_allclose	  s     z!TestAllclose.test_ip_not_allclosec                 C   s\   t t jdg}t dt jg}t || t|t t jdg t|t dt jg d S Nr   r   )r   r    r  r  r   r  r%   r%   r&   test_no_parameter_modification	  s
    z+TestAllclose.test_no_parameter_modificationc                 C   s4   t t jj}t j|gt jd}tt || d S )Nr1   )r   r  int_r  r    r   r  )r#   Zmin_intr0   r%   r%   r&   test_min_int	  s    zTestAllclose.test_min_intc                 C   s(   t dt jg}tt j||dd d S )NrB   TrF  )r   r    r  r   r  r  r%   r%   r&   test_equalnan	  s    zTestAllclose.test_equalnanc                 C   s8   G dd dt j}|dg}ttt ||tk d S )Nc                   @   s   e Zd Zdd ZdS )z6TestAllclose.test_return_class_is_ndarray.<locals>.Fooc                 _   s   t j||| S r   )r   r    rI   )clsr-  kwargsr%   r%   r&   __new__	  s    z>TestAllclose.test_return_class_is_ndarray.<locals>.Foo.__new__N)rC   rD   rE   r  r%   r%   r%   r&   Foo	  s   r  r   )r   rH   r   rJ   r  r   )r#   r  r0   r%   r%   r&   test_return_class_is_ndarray	  s    
z)TestAllclose.test_return_class_is_ndarrayN)rC   rD   rE   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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d ZdS ) TestIscloser  r  c                 C   sN  | j }| j}tddg}tdd}ddgddgf|gdgfdgd| | gf||||  f||||  | f||||  ftjtjftjtjgftjtj gtjtj gfg	| _tjdgdtjgftjtj gddgftjtjgdtj gftjtjgddgftjdgtjtj gf|d gdgfdgd| |d  gf|||d |  |d  fttjdgtdtjgfg	| _	tjdgtj|d gf|dd	dd|   | gdtjd	gftd
dddgftjtjtjtjgfdg|tjtj tjgfd|tjtj tjgfg| _
ddgdddgdddgdddgddddgddddgg| _d S )Nr  r  r  r  r   r   r   g?g    .Ar   g @TF)r  r  r   r    r=   r   r  all_close_testsr  none_close_testssome_close_testssome_close_results)r#   r  r  rX   r  r%   r%   r&   _setup	  sL    

$	

zTestIsclose._setupc                 C   sB   |    | j}| j}t||D ]\\}}}tt||| qd S r   )r  r  r  zipr   r   isclose)r#   testsresultsr   r=  r%  r%   r%   r&   test_ip_isclose
  s
    zTestIsclose.test_ip_isclosec                 C   s$   t tt||d||f  d S r  )r   r   rf   r  r  r%   r%   r&   tst_all_isclose
  s    zTestIsclose.tst_all_isclosec                 C   s*   d}t tt|| |||f  d S r  )r   r   r   r  )r#   r   r=  r   r%   r%   r&   tst_none_isclose
  s    zTestIsclose.tst_none_isclosec                 C   sr   d}d}t |rFt |rFtt ||t ||k|||f d n(tt || t |||||f  d S )Nz4isclose.all() and allclose aren't same for %s and %sz.isclose and allclose aren't same for %s and %sr   )r   r   r   r  r  r   rf   )r#   r   r=  r   Zmsg2r%   r%   r&   tst_isclose_allclose"
  s
    *z TestIsclose.tst_isclose_allclosec                 C   s(   |    | jD ]\}}| || qd S r   )r  r  r  r  r%   r%   r&   test_ip_all_isclose*
  s    zTestIsclose.test_ip_all_isclosec                 C   s(   |    | jD ]\}}| || qd S r   )r  r  r  r  r%   r%   r&   test_ip_none_isclose/
  s    z TestIsclose.test_ip_none_isclosec                 C   s8   |    | j| j | j }|D ]\}}| || qd S r   )r  r  r  r  r  )r#   r  r   r=  r%   r%   r&   test_ip_isclose_allclose4
  s    
z$TestIsclose.test_ip_isclose_allclosec                 C   sJ   t tjtjtjdddg tdtjg}t tj||ddddg d S )NTrF  rB   )r   r   r  r  r    r  r%   r%   r&   test_equal_nan;
  s    zTestIsclose.test_equal_nanc                 C   s  t jdddgt d}tt|tt d|k tt|tt |dk t jdddgt jt jt jg}tt|tt t j|k tt|tt |t jk t jdddgt jt jt jg}t jt j|dd}tt|t|k t	dddg|j
 t j|t jdd}tt|t|k t	dddg|j
 t jdddgt jt jt jg}t j||dd}tt|t|k t	dddg|j
 d S )NTFr   r   rF  )r   maZmasked_wherer=   r   rJ   r  r  r  r   maskr  r%   r%   r&   test_masked_arrays@
  s"       zTestIsclose.test_masked_arraysc                 C   s   t ttdd d S Nr   )r   r   r   r  r   r%   r%   r&   test_scalar_return[
  s    zTestIsclose.test_scalar_returnc                 C   s\   t t jdg}t dt jg}t || t|t t jdg t|t dt jg d S r  )r   r    r  r  r   r  r%   r%   r&   r  ^
  s
    z*TestIsclose.test_no_parameter_modificationc                 C   sT   t ttjtj tjk t tdtjtjk t ttdtjtjk d S Nr   )r   r   r  r  r   rJ   rW  r   r%   r%   r&   test_non_finite_scalare
  s    z"TestIsclose.test_non_finite_scalarc                 C   s   t jddddggdd}t j||ddd	 s2tt j||t dd
dd	 sTtt j||ddd	sjtt j||t dd
dd	std S )Nr   r   r   r  zm8[ns]r1   r   T)r  rG  ns)r   r    r  rf   rK   r  r  r}   r%   r%   r&   test_timedeltal
  s
    "zTestIsclose.test_timedeltaN)rC   rD   rE   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d Zd	d
 Zdd ZdS )
TestStdVarc                 C   s   t ddddg| _d| _d S )Nr   r8   )r   r    r$   real_varr   r%   r%   r&   r   w
  s    zTestStdVar.setup_methodc                 C   s0   t t| j| j t t| jd | j d S )Nr   )r   r   r   r$   r  r   r   r%   r%   r&   
test_basic{
  s    zTestStdVar.test_basicc                 C   s$   t tdd t tdd d S r  r   r   r   r   r   r%   r%   r&   test_scalars
  s    zTestStdVar.test_scalarsc                 C   sh   t tj| jdd| jt| j t| jd   t tj| jddd | jt| j t| jd   d S )Nr   Zddofr   r   r   r   r$   r  r,  r   r   r%   r%   r&   
test_ddof1
  s    zTestStdVar.test_ddof1c                 C   sh   t tj| jdd| jt| j t| jd   t tj| jddd | jt| j t| jd   d S )Nr   r
  r  r   r%   r%   r&   
test_ddof2
  s    zTestStdVar.test_ddof2c                 C   s   t d}t d}t j||d}t||k t|| t j||d}t||k t|| t j||d}t||k t|| d S )Nr6   r(  r   )r   r=   r    r   r   r   r   rq   )r#   r   rS   r  r%   r%   r&   test_out_scalar
  s    



zTestStdVar.test_out_scalarN)	rC   rD   rE   r   r  r	  r  r  r  r%   r%   r%   r&   r  v
  s   r  c                   @   s   e Zd Zdd Zdd ZdS )TestStdVarComplexc                 C   s>   t ddddg}d}tt || tt |d | d S )Nr   r   r8   y             r   )r   r    r   r   r   )r#   r$   r  r%   r%   r&   r  
  s    zTestStdVarComplex.test_basicc                 C   s$   t tdd t tdd d S )Nr   r   r  r   r%   r%   r&   r	  
  s    zTestStdVarComplex.test_scalarsN)rC   rD   rE   r  r	  r%   r%   r%   r&   r  
  s   r  c                   @   sX   e Zd Zdd ZdddZdd Zdd	 Zd
d Zdd Ze	j
je dddd ZdS )TestCreationFuncsc                 C   sb   dd t jtj  D }dd |D }t|| dd |D B dd d| _dd	d
| _d| _d S )Nc                 S   s   h | ]}t |qS r%   )r   r,   r   tpr%   r%   r&   	<setcomp>
  s     z1TestCreationFuncs.setup_method.<locals>.<setcomp>c                 S   s   h | ]}|j d r|qS )r+  )r9  endswithr  r%   r%   r&   r  
  s      c              
   S   s4   h | ],}t d dD ]}t|jdt|qqS )r   r6   r+  )r   r   r,   r9  replace)r   r  r   r%   r%   r&   r  
  s     c                 S   s   | j S r   )r9  r1   r%   r%   r&   rI  
  rJ  z0TestCreationFuncs.setup_method.<locals>.<lambda>)keyrV  rW  )r  Fr6   )	r  chainr   r  valuessorteddtypesordersndims)r#   r  Zvariable_sizedr%   r%   r&   r   
  s    zTestCreationFuncs.setup_methodNc                 C   s   dt | j| j| jf}i }|d k	r*d|i}tj| D ]\}}}}||g }	|r\|jdr\q4||	f||d|}
t|
j	| t
t|
j| j|  |d k	r4|jdrt|}n|}t|
|| q4d S )N)r   r   r   
fill_valuez|Vorderr,   z|S)r   r  r  r  r  r  r9  
startswithr   r,   r   getattrr  rJ   )r#   r  r  par
fill_kwargr   r  r   r,   r-   rX   r   r%   r%   r&   check_function
  s,    

z TestCreationFuncs.check_functionc                 C   s   |  tj d S r   )r%  r   r3   r   r%   r%   r&   
test_zeros
  s    zTestCreationFuncs.test_zerosc                 C   s   |  tj d S r   )r%  r   r   r   r%   r%   r&   	test_ones
  s    zTestCreationFuncs.test_onesc                 C   s   |  tj d S r   )r%  r   emptyr   r%   r%   r&   
test_empty
  s    zTestCreationFuncs.test_emptyc                 C   s    |  tjd |  tjd d S )Nr   r   )r%  r   r  r   r%   r%   r&   	test_full
  s    zTestCreationFuncs.test_fullzPython lacks refcountsr   c                 C   s   d}t |}t|gd  tt ||k t|gd  tt ||k t|gd  tt ||k t|gd d tt ||k d S )Nr   r6   r   )rU  getrefcountr   r3   r   r   r(  r  )r#   Zdimbegr%   r%   r&   test_for_reference_leak
  s    
z)TestCreationFuncs.test_for_reference_leak)N)rC   rD   rE   r   r%  r&  r'  r)  r*  r>   r   r5  r   r-  r%   r%   r%   r&   r  
  s   
r  c                   @   s   e Zd ZdZdd Zdd ZdddZd	d
 Zdd Zdd Z	dd Z
ejdejejejejgejdeegdd ZdS )TestLikeFuncsz4Test ones_like, zeros_like, empty_like and full_likec                 C   s4  t dd ft ddft jdddd ft ddft dddd ft dddd	ft djd
ddd ft djdddd	ft ddddd ft dddddft djdddd ft djddddft ddddddd ft dddddddfg| _ddddg| _d S )Ng      @r   rc  rN   rd  r1   rf  r   r  r  r  )r   r   r   rd   r   r  )r   r   r   r   r   r  r%   rG   )rG   rN   rG   rN   rO   )r   r    r=   r   r   r  shapesr   r%   r%   r&   r   
  s     zTestLikeFuncs.setup_methodc                 C   sH   |d k	rD|r2t ||j}tt ||k ntt ||k d S r   )r   r    r  r,   r   rf   )r#   dzvaluer  zr%   r%   r&   compare_array_value  s
    z!TestLikeFuncs.compare_array_valueFc                 C   s  |rd|i}ni }| j D ]P\}}||fd|i|}t|j|j tt|j|jj t|j|jj  t|jj	|jj	 t|jj
|jj
 |d krt|j|j nt|jt| | ||| ||fd|d|}t|j|j t|jj	 |d krt|j|j nt|jt| | ||| ||fd|d|}t|j|j t|jj
 |d kr~t|j|j nt|jt| | ||| ||fd|d|}t|j|j |jj
rt|jj
 nt|jj	 |d kr t|j|j nt|jt| | ||| | jD ]@}dD ]}	||f|||	d|}
t|
j| |d krrt|
j|j nt|
jt| |	dks|	dkr|jj	rt|
jj	 n*|	dks|	dkr|jj
rt|
jj
 | |
|| q0|jt|kr8tt||f||d	d|jttj||dd
j n.tt||f||d	d|jt|j q&qG dd dtj}tddgddgg|}||f|}tt||k ||fddi|}tt||k	 d S )Nr  r,   r  r  r  r$   ZCFA)r,   r-   r   K)r,   r   c                   @   s   e Zd ZdS )z4TestLikeFuncs.check_like_function.<locals>.MyNDArrayNr  r%   r%   r%   r&   	MyNDArrayi  s   r8  r   r   r   r   ZsubokF)r  r   r-   r   r    stridesr,   rT  r  rV  rW  r6  r   r2  ndimr,  Zargsortr(  rH   rI   rJ   )r#   Zlike_functionr4  r  r$  r   r,   r3  r   r   szr8  r0   rH  r%   r%   r&   check_like_function  s    





  

z!TestLikeFuncs.check_like_functionc                 C   s   |  tjd d S r  )r<  r   	ones_liker   r%   r%   r&   test_ones_liket  s    zTestLikeFuncs.test_ones_likec                 C   s   |  tjd d S r  )r<  r   r  r   r%   r%   r&   test_zeros_likew  s    zTestLikeFuncs.test_zeros_likec                 C   s   |  tjd  d S r   )r<  r   r  r   r%   r%   r&   test_empty_likez  s    zTestLikeFuncs.test_empty_likec              	   C   sn   |  tjdd |  tjdd |  tjdd |  tjdd tjdd |  tjtjd W 5 Q R X d S )Nr   Tr   r  gw/^@r  r  )r<  r   	full_liker"  r  r   r%   r%   r&   test_filled_like}  s    zTestLikeFuncs.test_filled_likelikefuncr,   c                 C   s|   t ddd}|d d d d df }|t jkr:ddini }||fd|i|}|tkrj|jdksxtn|jdksxtd S )	Nr   r   rZ   r  rp   r,   )r   r   )r   r   )r   r=   r   rA  r9  r9  rK   )r#   rC  r,   r0   rH  r  r%  r%   r%   r&   test_dtype_str_bytes  s    z"TestLikeFuncs.test_dtype_str_bytesN)F)rC   rD   rE   __doc__r   r6  r<  r>  r?  r@  rB  r>   r   r   r   r  rA  r  r=  r9  bytesrD  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S )TestCorrelatec              
   C   s  t jdddddg|d| _t ddd d d | _t jdd	d
g|d| _t jdddddddg|d| _t jddddddg|d| _t jdddddddg|d| _t jdddddddg|d| _	t jdddddddg|d| _
t jdddddddddg	|d| _d S ) Nr   r   r   r   rG   r1   r  r8   r   r{   g      g       g      ,g      4g      :g      g       g      &g      .g      6g      0g      $g      r   g      >g      Hg     Pg      Ug     Yg      Kg      3)r   r    r   r=   xsr=  z1z1_4z1rz2z2rzs)r#   r  r%   r%   r&   r    s      zTestCorrelate._setupc                 C   s   |  t t| j| jd}t|| j t| j| jd d d}t|| j t| j| jd}t|| j	 t| jd d d | jd}t|| j
 t| j| jd d d d}t|| j t| j| jd}t|| j d S )Nr  r8   )r  r  r   	correlater   r=  r   rI  rJ  rL  rK  rM  rH  rN  r#   r5  r%   r%   r&   r    s    
zTestCorrelate.test_floatc                 C   sJ   |  t t| j| jd}t|| j t| j| jd}t|| j d S )Nr  )	r  r   r   rO  r   r=  r   rI  rL  rP  r%   r%   r&   test_object  s
    
zTestCorrelate.test_objectc                 C   sD   t d}t d}t || t|t d t|t d d S Nr  r   )r   r   rO  r   r#   r   kr%   r%   r&   test_no_overwrite  s
    

zTestCorrelate.test_no_overwritec                 C   st   t jddddgtd}t jdddgtd}t jd	d
ddddgtd}|d d d  }t j||dd}t|| d S )Nr   r   r   y      @      ?r1   r8   y              y      @      ?y      @      rN   y       @      ?y      &@      @y             @y            r  mode)r   r    r  	conjugaterO  r   )r#   r   r=  Zr_zr5  r%   r%   r&   test_complex  s    zTestCorrelate.test_complexc              	   C   sh   t t" tjtg tddd W 5 Q R X t t" tjtdtg dd W 5 Q R X d S )Nr  r  rV  )r>   r?   r@   r   rO  r    r   r   r%   r%   r&   test_zero_size  s    &zTestCorrelate.test_zero_sizec              	   C   s   t d}t d}t j||dd}tt t j||dd}W 5 Q R X t|| tt t j||dd W 5 Q R X tt j||dd| tt t j||d d W 5 Q R X d S )Nr  r   ZvalidrV  vr8   r   )	r   r   rO  r   r  r   r	   r@   rr  )r#   r   rT  default_modeZ
valid_moder%   r%   r&   	test_mode  s    





zTestCorrelate.test_modeN)
rC   rD   rE   r  r  rQ  rU  rY  rZ  r]  r%   r%   r%   r&   rG    s   rG  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestConvolvec                 C   s:   dgd }dgd }t t||dd tdd d S )NrB   r  r   r   r   b   )r   r   convolver  rS  r%   r%   r&   rQ    s    

zTestConvolve.test_objectc                 C   sD   t d}t d}t || t|t d t|t d d S rR  )r   r   r`  r   rS  r%   r%   r&   rU    s
    

zTestConvolve.test_no_overwritec              	   C   s   t d}t d}t j||dd}tt t j||dd}W 5 Q R X t|| tt t j||dd W 5 Q R X tt j||dd| tt t j||d d W 5 Q R X d S )Nr  r   r  rV  r   r8   r   )	r   r   r`  r   r  r   r	   r@   rr  )r#   r   rT  r\  Z	full_moder%   r%   r&   r]    s    





zTestConvolve.test_modeN)rC   rD   rE   rQ  rU  r]  r%   r%   r%   r&   r^    s   r^  c                   @   s8   e Zd Zejddddgdd Zdd Zd	d
 ZdS )TestArgwherer  r   r   r   c                 C   s   t d| t}d|d< tt |jd|f d|d< d|jd< tt |jd|f d|d< d|jd< tt |j|jd |f d|d< tt |j|j|f d S )Nr   F.r   Tr   )r   r(  r   r   argwherer-   Zflatr   )r#   r  r   r%   r%   r&   test_nd  s    

zTestArgwhere.test_ndc                 C   s@   t dd}tt |dkddgddgddgddgg d S )NrN   r  r   r   r   )r   r=   r   r   rb  r  r%   r%   r&   test_2D  s    zTestArgwhere.test_2Dc                 C   s.   t tdddddgdgdgdgdgg d S )Nr   r   r   r   r   )r   r   rb  r   r%   r%   r&   	test_list  s    zTestArgwhere.test_listN)	rC   rD   rE   r>   r   r   rc  rd  re  r%   r%   r%   r&   ra    s   
ra  c                   @   s   e Zd Zdd ZdS )TestStringFunctionc                 C   s   t dg}t jdd dd tt|d t jd dd tt|d t jdd d	d tt|d t jd d	d tt|d
 d S )Nr   c                 S   s   dS NFOOr%   r  r%   r%   r&   rI  $  rJ  z=TestStringFunction.test_set_string_function.<locals>.<lambda>T)reprrh  z
array([1])c                 S   s   dS rg  r%   r  r%   r%   r&   rI  )  rJ  Fz[1])r   r    Zset_string_functionr   ri  r9  r}   r%   r%   r&   test_set_string_function"  s    z+TestStringFunction.test_set_string_functionN)rC   rD   rE   rj  r%   r%   r%   r&   rf     s   rf  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestRollc                 C   s>   t d}t |d}t|t dddddddd	d
dg
 d S )Nr6   r   rZ   r[   r   r   r   r   rG   rN   rO   )r   r=   rollr   r    )r#   r   Zxrr%   r%   r&   test_roll1d0  s    
zTestRoll.test_roll1dc              
   C   s"  t t dd}t |d}t|t dddddgdd	d
ddgg t j|ddd}t|t d	d
dddgdddddgg t j|ddd}t|t dddddgdd	d
ddgg t j|ddd}t|t dd	d
ddgdddddgg t j|ddd}t|t d	d
dddgdddddgg t j|ddd}t|t d	d
dddgdddddgg t j|ddd}t|t dddddgdd	d
ddgg t j|ddd}t|t dddddgd
dddd	gg t j|ddd}t|t dd	d
ddgdddddgg t j|ddd}t|t d
dddd	gdddddgg t j|ddd}t|t dddddgd	d
dddgg t j|ddd}t|t dddddgddd	d
dgg t j|d
dd}t|t dddddgdd	d
ddgg t j|ddd}t|t dddddgdd	d
ddgg d S )Nr6   r   rG   r   r[   r   r   r   r   rG   rN   rO   rZ   r\   r  r   )r8   r   )r   r8   r  )r8   r8   r  rU   )r   r   r=   rl  r   r    )r#   Zx2Zx2rr%   r%   r&   test_roll2d5  s:    (((((((((((((zTestRoll.test_roll2dc                 C   s&   t g }tt |dt g  d S r  )r   r    r   rl  r  r%   r%   r&   test_roll_emptyd  s    
zTestRoll.test_roll_emptyN)rC   rD   rE   rm  ro  rp  r%   r%   r%   r&   rk  /  s   /rk  c                   @   sJ   e Zd Zdddddddddddddddd	d
ddddZdd Zdd ZdS )TestRollaxis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   )r  r  r*   )r   r   r   r   r   r  r  r   )r   r   r+   r2   r   r   r  r   r   r   r   r/  r   r   r   c                 C   sj   t ddddd}tt jt j|dd tt jt j|dd tt jt j|dd tt jt j|dd d S )	Nrd   r   r   r   r   r|   r   rG   )r   r=   r   r	   r  rollaxisr}   r%   r%   r&   test_exceptionsz  s
    zTestRollaxis.test_exceptionsc              	   C   sp  t ddddd }t |j}t|jd  | jD ].\}}t j	|||d}|t 
|jd  \}}}}	tt |||||	f |k t|j| j||f kt||f t|jd   |d }
t j	||
 |d}|t 
|jd  \}}}}	tt |||||	f |k t|j| jd|
 |f k t|jd   |dk rR|d n|}t j	||| d}|t 
|jd  \}}}}	tt |||||	f |k t|j| j|d| f k t|jd   |d }
|dk r|d n|}t j	||
 | d}|t 
|jd  \}}}}	tt |||||	f |k t|j| jd|
 d| f k t|jd   q:d S )Nrd   r   r   r   r   OWNDATA)r]   start)r   r=   r   r   r   r-   r   r  tgtshaperz  r    rf   r9  )r#   r0   Zaindr   jr  Zi0r  r  Zi3ipZjpr%   r%   r&   test_results  s8    " zTestRollaxis.test_resultsN)rC   rD   rE   r~  r{  r  r%   r%   r%   r&   rq  i  s,          rq  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S )TestMoveaxisc                 C   s<   t jddd}dD ]"\}}t ||dj}t|| qd S )NrG   rN   rO   ))r   )rN   rO   rG   )r   )rG   rO   rN   )r   r1  )r8   r1  r8   r   r  r   moveaxisr-   r   )r#   r   sourcer  rk  r%   r%   r&   test_move_to_end  s    zTestMoveaxis.test_move_to_endc                 C   s@   t jdddd}dD ]$\}}}t |||j}t|| qd S )Nr   r   r   r   ))r   r   rs  )r   r   rt  )r   r8   ru  r  r#   r   r  destinationr  rk  r%   r%   r&   test_move_new_position  s    z#TestMoveaxis.test_move_new_positionc                 C   sf   t d}dddddgddgfddgddgftdtdffD ]"\}}t |||j}t|d q>d S )	Nrr  r  )r   r8   )r8   r   r   r8   r   r   )r   r3   r   r  r-   r   )r#   r   r  r  rk  r%   r%   r&   test_preserve_order  s    
z TestMoveaxis.test_preserve_orderc                 C   s   t d}ddgddgdfddgddgdfdddgdddgdfddgddgdfddgddgdffD ]$\}}}t |||j}t|| qbd S )Nr  r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r3   r  r-   r   r  r%   r%   r&   test_move_multiples  s    
z TestMoveaxis.test_move_multiplesc                 C   s   t jddd}tt jdt j|dd tt jdt j|dd tt jdt j|dd ttd	t j|ddgddg ttd
t j|ddgddg ttdt j|dddg ttdt j|ddgdg d S )Nr   r   r   zsource.*out of boundsr   rU   zdestination.*out of boundsrG   zrepeated axis in `source`zrepeated axis in `destination`zmust have the same number)r   r  r   r
   r  r  r@   r  r%   r%   r&   test_errors  sV                         zTestMoveaxis.test_errorsc                 C   st   t jd}t |dd}t|j|j tt|t jj dddg}t |dd}t|t| tt|t j	 d S )Nr  r   r   r   r   )
r   r  r3   r  r   r-   r   ZMaskedArrayr   rH   )r#   r   r%  r%   r%   r&   test_array_likes  s    
zTestMoveaxis.test_array_likesN)	rC   rD   rE   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	d
 Zdd ZdS )	TestCrossc                 C   sF   ddg}ddg}d}t ||}t|| t ||}t||  d S )Nr   r   r   r   r   )r   crossr   r#   ur[  r5  cpr%   r%   r&   test_2x2  s    
zTestCross.test_2x2c                 C   sT   ddg}dddg}t dddg}t ||}t|| t ||}t||  d S )	Nr   r   r   r   rG   r6   r|   r   r   r    r  r   r  r%   r%   r&   test_2x3  s    

zTestCross.test_2x3c                 C   sV   dddg}dddg}t dddg}t ||}t|| t ||}t||  d S )Nr   r   r   r   rG   rN   r{   r  r  r%   r%   r&   test_3x3  s    


zTestCross.test_3x3c                 C   s  t ddgd}t ddgd}d}tt ||| tt |||  tt ||d t ddgdj}t dddgd}t d	d
dgd}tt j||dd| tt ||j|  tt ||d t dddgdj}t ddgdj}t dddgd}tt j||ddd| tt |j|j|  tt |j|jd t dddgd}t dddgdj}t dddgd}tt j||dd| tt |j||  tt ||d d S )Nr   r   )ri   r   r   r   r   r   rG   r6   r|   )axisar?  r[   r  axisb)rG   r   rN   r{   )r  )r   Ztiler   r  r  r#   r  r[  r5  r%   r%   r&   test_broadcasting  s0    zTestCross.test_broadcastingc                 C   s  t d}t d}tt ||jd t d}t d}tt j||dddjd	 tt jt j||dd
d tt jt j||ddd t d}t d}tt j||dd
djd tt jt j||dd
d tt jt j||ddd t d}tdd
D ]}tt j|||djd qd S )N)r   r   r   )rG   r   )r   rG   r   )r6   r   rG   rn  r   r   r  )r6   rG   r   r   r   )r6   r   rG   rO   )rG   rO   r   )r  axisc)r6   rG   r   rO   r|   rU   )r   r   r   r   )r  ry  )r   r   r   r  r-   r	   r  r   )r#   r  r[  r  r%   r%   r&   test_broadcasting_shapes+  s     






z"TestCross.test_broadcasting_shapesc                 C   sl   t dddggt j}t dddgt j}t jddd	ggt jd
}tt ||| tt |||  d S )N   rZ   r[         D   i  i+  i^r1   )r   r    r   r   r   r  r  r%   r%   r&   test_uint8_int32_mixed_dtypes>  s
    z'TestCross.test_uint8_int32_mixed_dtypesN)	rC   rD   rE   r  r  r  r  r  r  r%   r%   r%   r&   r    s   			r  c                  C   sj   t d} t d}t ddd}t jdd}t jdd}t | ||}t|| tt |||| d S )	Nr0  r   r   r   rG   )rG   rG   )r-   rn  )r   r   ZlinspacerH   outerr   )Zarr1Zarr2Zarr3Zout1Zout2Zres1r%   r%   r&   test_outer_out_paramG  s    


r  c                   @   sf   e Zd Zdd Zdd Zdd Zdd Zej	d	e
je
je
je
jgej	d
dddgdd ZdS )TestIndicesc              
   C   sr   t d\}}t|t dddgdddgdddgdddgg t|t dddgdddgdddgdddgg d S )Nr   r   r   r   r   r   r   r   r    r  r%   r%   r&   test_simpleT  s    zTestIndices.test_simplec                 C   sP   t d\}t|t ddddg t jddd\}t|t ddddg d S )N)r   r   r   r   r   Tsparser  r  r%   r%   r&   test_single_input_  s    zTestIndices.test_single_inputc                 C   sP   t g td t g tjddd t g gtd t g gtjddd d S )Nr%   Tr  r)   )r   r   r   r   r%   r%   r&   test_scalar_inputf  s    zTestIndices.test_scalar_inputc                 C   sN   t jddd\}}t|t dgdgdgdgg t|t dddgg d S )Nr   Tr  r   r   r   r   r  r  r%   r%   r&   r  l  s     zTestIndices.test_sparser,   dimsr%   r)   r   c                 C   sD   t j||d}t|j|k t j||ddD ]}t|j|k q,d S )Nr1   T)r,   r  )r   r   r   r,   )r#   r,   r  ZindsrX   r%   r%   r&   r  q  s    zTestIndices.test_return_typeN)rC   rD   rE   r  r  r  r  r>   r   r   r   r   r   r4   r   r  r%   r%   r%   r&   r  R  s   r  c                   @   sh   e Zd Zddddddddd	d
ddg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 )TestRequirer  r  Z
CONTIGUOUSr  r~  ZFORTRANr$   ZALIGNEDWZ	WRITEABLEr  r|  c                 C   s|   t ddd|fg}|jdd |d }t|jd   t|jd   t|jd   t|jd	   t|jd
   |S )Nrw  )Zjunkr  r0   F)writer  r  r  r  r$   )r   r3   Zsetflagsr   r  )r#   r,   rX   r0   r%   r%   r&   generate_all_false  s    zTestRequire.generate_all_falsec                 C   sv   |d kr|j }t|||g}t|j|  t|j |k t|d |g}|d dkrdt||k nt|j|  d S )Nr   r  )r,   r   requirer   r  )r#   flagr,   rX   rH  r   r%   r%   r&   set_and_check_flag  s    zTestRequire.set_and_check_flagc                 C   sJ   ddg}d ddg}t ||| jD ]"\}}}| |}| ||| q"d S )Nrc  r  rf  )r  r  
flag_namesr  r  )r#   idfdZidtypeZfdtyper  r0   r%   r%   r&   test_require_each  s
    

zTestRequire.test_require_eachc                 C   s    |  d}tttj|d d d S )Nrc  Q)r  r	   KeyErrorr   r  r}   r%   r%   r&   test_unknown_requirement  s    
z$TestRequire.test_unknown_requirementc                 C   sj   t ddddgddddg}t|jd  t|jd  t|jd  t|jdk t|ddddg d S )	Nr   r   r   r   r  r  r$   r  )r   r  r   r  r,   r   r}   r%   r%   r&   test_non_array_input  s    z TestRequire.test_non_array_inputc                 C   s$   |  d}tttj|d ddg d S )Nrc  r  r  )r  r	   r@   r   r  r}   r%   r%   r&   test_C_and_F_simul  s    
zTestRequire.test_C_and_F_simulc                 C   s@   G dd dt j}|d}t |d dg}tt|t jk d S )Nc                   @   s   e Zd ZdS )z4TestRequire.test_ensure_array.<locals>.ArraySubclassNr  r%   r%   r%   r&   ArraySubclass  s   r  rw  E)r   rH   r  r   rJ   )r#   r  r0   rH  r%   r%   r&   test_ensure_array  s    zTestRequire.test_ensure_arrayc                 C   s8   G dd dt j}| jD ]}|d}| |d | qd S )Nc                   @   s   e Zd ZdS )z8TestRequire.test_preserve_subtype.<locals>.ArraySubclassNr  r%   r%   r%   r&   r    s   r  rw  )r   rH   r  r  )r#   r  r  r0   r%   r%   r&   test_preserve_subtype  s    
z!TestRequire.test_preserve_subtypeN)rC   rD   rE   r  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 )TestBroadcastc                 C   s(  t dt dt dt dg}t j| t t j|d d  t j|dd   t t j|d d  t j|dd   t t j|d d  t j|dd   t |d t j|dd  |d g}|D ]Z}t|jd	 t|jd
 t|jd
 t|jd t||j	D ]\}}t
||jk qqd S )Nr  )rG   rN   r   )rO   )rG   r   rO   r   r   r   r8   r1  r   r   )r   r(  	broadcastr   r-   r:  r  numiterr  r  r   base)r#   arrsZmitsmitr0   iar%   r%   r&   test_broadcast_in_args  s     &&&"z$TestBroadcast.test_broadcast_in_argsc                 C   sb   t dg}t j| }t|jd t|jd t|jd t|jd t|d |j	d j
k d S )Nr1  r   r   r   )r   r(  r  r   r-   r:  r  r  r   r  r  )r#   r  r  r%   r%   r&   test_broadcast_single_arg  s    
z'TestBroadcast.test_broadcast_single_argc                 C   sX   t d}tdD ]@}|g| }|dkr<ttt jf|  qt j| }t|j| qd S )Nr0  #   r   )r   r(  r   r	   r@   r  r   r  )r#   rX   r  r  r  r%   r%   r&   test_number_of_arguments  s    


z&TestBroadcast.test_number_of_argumentsc                 C   s   t dg}t j| }t j|i }t|j|j t|j|j t|j|j t|j|j t|j	d j
|j	d j
k ttt jdfddi d S )Nr1  r   r   r   )r   r(  r  r   r-   r:  r  r  r   r  r  r	   r@   )r#   r  r  Zmit2r%   r%   r&   test_broadcast_error_kwargs  s    
z)TestBroadcast.test_broadcast_error_kwargsc              	   C   s@   t jtdd( tdddggdgdggdd	g W 5 Q R X d S )
Nz5arg 0 with shape \(1, 3\) and arg 2 with shape \(2,\)r:   r   r   r   r   rG   rN   rO   )r>   r?   r@   r   r  r   r%   r%   r&   !test_shape_mismatch_error_message  s    z/TestBroadcast.test_shape_mismatch_error_messageN)rC   rD   rE   r  r  r  r  r  r%   r%   r%   r&   r    s
   

r  c                   @   s&   e Zd ZG dd dejZdd ZdS )TestKeepdimsc                   @   s   e Zd ZdddZdS )zTestKeepdims.sub_arrayNc                 C   s   t jj| |||ddS )NTr
  )r   rH   r   )r#   r]   r,   rS   r%   r%   r&   r     s    zTestKeepdims.sub_array.sum)NNN)rC   rD   rE   r   r%   r%   r%   r&   	sub_array   s   r  c                 C   s,   | j }td|}tttj|dd d S )N   Tr
  )r  r   r=   rI   r	   rr  r   )r#   Z	sub_classr   r%   r%   r&   
test_raise  s    zTestKeepdims.test_raiseN)rC   rD   rE   r   rH   r  r  r%   r%   r%   r&   r    s   r  c                   @   s   e Zd Zdd Zdd ZdS )TestTensordotc                 C   sL   t d}t d}t ||d}t|t || t|t d|| d S )Nrx  rv  r   zij,jk)r   rH   	tensordotr   dotZeinsum)r#   r0   rH  tdr%   r%   r&   test_zero_dimension  s
    

z!TestTensordot.test_zero_dimensionc                 C   s*   t d}t ||g g f}t|| d S r  )r   r    r  r   )r#   Zarr_0dretr%   r%   r&   test_zero_dimensional  s    
z#TestTensordot.test_zero_dimensionalN)rC   rD   rE   r  r  r%   r%   r%   r&   r  
  s   r  )KrU  rr   r  r6  r>   r   decimalr   r   r   Z
numpy.corer   Znumpy.randomr   r   r   Znumpy.testingr   r   r	   r
   r   r   r   r   r   r   r   Znumpy.core._rational_testsr   Z
hypothesisr   r   r  Zhypothesis.extrar  r   rM   r   r   r   r   r  r8  rV  	Exceptionr  r  r  r'  r*  r9  rB  rX  rY  r  r  r  r  r  r.  rG  r^  ra  rf  rk  rq  r  r  r  r  r  r  r  r  r%   r%   r%   r&   <module>   s~   4< Z!WdSh   ?k  R*l    vU 'G 'H%:>JV)J9