o
    1ήc9                    @   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 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 Z/G d!d" d"Z0G d#d$ d$Z1G d%d& d&Z2G d'd( d(Z3d)d* Z4G d+d, d,Z5G d-d. d.Z6G d/d0 d0Z7G d1d2 d2Z8G d3d4 d4Z9G 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Z@G dCdD dDZAG dEdF dFZBG dGdH dHZCdIdJ ZDG dKdL dLZEG dMdN dNZFG dOdP dPZGG dQdR dRZHG dSdT dTZId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)rational)given
strategies)numpyc                   @   <   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 g dg dg}tt |d| t ddgddgddgddgg}tt |d| t g dg d	g d
g dg}tt |d| d S )N            r   r   r   r   r   r   r   r   r   r   r   )r   r   r   )r   r   r   r   r   r   r   r   nparrayr   resizeselfAAr1Ar2Ar3 r+   D/tmp/pip-target-vg8gfxp4/lib/python/numpy/core/tests/test_numeric.pytest_copies   s   ""zTestResize.test_copiesc                 C   s   t g d}t g dg dg}tt |d| t ddgddgddgddgg}tt |d| t g dg dg dg dg}tt |d	| d S )
Nr   )r   r   r   r   )r   r   r   r   r   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'   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r2   r   r   )r"   zerosfloat32r$   r   r2   r   r4   r+   r+   r,   test_reshape_from_zero:   s   z!TestResize.test_reshape_from_zeroc                 C   sX   t jddt jd}d}tjtdd t j||d W d    d S 1 s%w   Y  d S )Nr   
   r8   )negativematch)	new_shape)r"   aranger;   pytestraises
ValueErrorr$   )r&   r'   rC   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|u sJ tt |d|u s*J t g |}tt |d|u s>J d S )Nc                   @   s   e Zd ZdZdS )z)TestResize.test_subclass.<locals>.MyArray      ?N)__name__
__module____qualname____array_priority__r+   r+   r+   r,   MyArrayH   s    rN   r      r   )r"   ndarrayr#   viewtyper$   )r&   rN   my_arrr+   r+   r,   test_subclassG   s   zTestResize.test_subclassN)	rJ   rK   rL   r-   r.   r6   r<   rH   rT   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   s@   g dg dg dg}g d}g d}t ||}t|| d S )Nr   r   r   r   r   rO   rO         )rO   r   rO   )r   r   r   )r"   chooser   )r&   choicestgtr7   outr+   r+   r,   test_chooseU   s   zTestNonarrayArgs.test_choosec                 C   s,   g d}t |dd}g d}t|| d S )N)r?   rO   r   r   r=   ir   rZ   )r   rO   r   r   rZ   r   r   r"   clipr   )r&   arrr^   r]   r+   r+   r,   	test_clip_   s   zTestNonarrayArgs.test_clipc                 C   s<   g dg dg}g dg}t jddg|dd}t|| d S )Nr   r   r   r   r   rO   rY   rZ      	   r   r   axis)r"   compressr   r&   rc   r]   r^   r+   r+   r,   test_compresse   s   
zTestNonarrayArgs.test_compressc                 C   s:   g dg dg}t ddg}t j|dd}t|| d S )Nr   r   rZ   r   r   r   r   r   r      r   r   r   ri   )r"   r#   count_nonzeror   rl   r+   r+   r,   test_count_nonzerol   s   z#TestNonarrayArgs.test_count_nonzeroc                 C   s6   g dg dg}t tt|tg dk d S )Nr   r   rO   rY   )r   r   rY      x   i  )r   r"   all
cumproductr#   r&   r'   r+   r+   r,   test_cumproducts   s   &z TestNonarrayArgs.test_cumproductc                 C   s6   g dg dg dg}t |}g d}t|| d S )Nr   r   r   r   )r   rO   rY   rZ   )rg   rh   r=      )r   rO   r=   )r"   diagonalr   )r&   r7   r^   r]   r+   r+   r,   test_diagonalw   s   
zTestNonarrayArgs.test_diagonalc                 C   s   g dg dg}t t|dk t tt|dtg d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u  W d    d S 1 saw   Y  d S )Nr   rs         @r   )g      @r~   g      @r          @      @Trecordalways )r   r"   meanrv   r#   warningscatch_warningsfilterwarningsRuntimeWarningisnancategoryr&   r'   wr+   r+   r,   	test_mean   s   $$"zTestNonarrayArgs.test_meanc                 C   s    g d}t tj|ddd d S )N)r   r   rO   r=   g      @r   ri   g      .@)r   r"   ptpr&   r7   r+   r+   r,   test_ptp   s   zTestNonarrayArgs.test_ptpc                 C   s6   g dg dg dg}g d}t tj|dd| d S )Nr   )rO   rY   rZ   rh   )r=   r   r   rO   )rt   ib  iX  r?   ri   )r   r"   prodr&   rc   r]   r+   r+   r,   	test_prod   s   zTestNonarrayArgs.test_prodc                 C   s8   g dg dg dg dg}g d}t t|| d S )Nr   rs   rZ   rg   rh   r=   r{      )r   r   r   r   rO   rY   rZ   rg   rh   r=   r{   r   )r   r"   ravel)r&   r7   r]   r+   r+   r,   
test_ravel   s   zTestNonarrayArgs.test_ravelc                 C   s*   g d}g d}t |d}t|| d S )Nr   )r   r   r   r   r   r   r   )r"   repeatr   )r&   r7   r]   r^   r+   r+   r,   test_repeat   s   zTestNonarrayArgs.test_repeatc                 C   sB   g dg dg dg dg}g dg dg}t t|d| d S )Nr   rs   r   r   )r   r   r   r   rO   rY   )rZ   rg   rh   r=   r{   r   )r   rY   )r   r"   reshaper   r+   r+   r,   test_reshape   s   zTestNonarrayArgs.test_reshapec                 C   sT   g d}g d}t tj|dd| td}tt| tj t | d d S )N)g(\?g(\"R@gffffff@g      
@)g?g      R@g@g	@r   )decimalsrI   )r   r"   aroundfloat64r   
isinstanceround)r&   rc   r]   sr+   r+   r,   
test_round   s   
zTestNonarrayArgs.test_roundr2   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&   r2   r   r+   r+   r,   test_dunder_round   s   z"TestNonarrayArgs.test_dunder_roundzval, ndigitsir?   zOut of range of int32reason)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@r=   I   r   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)rF   r   c                 C   s,   ddd  }t tt|dt|d d S )Nr   r=   r   r   )r   r   r"   r   )r&   r   r+   r+   r,   test_round_py_consistency   s    z*TestNonarrayArgs.test_round_py_consistencyc                 C   s"   g d}t |d}t|d d S )N)ir   r?   r   rY   r=   r   r   )r"   searchsortedr   )r&   rc   r^   r+   r+   r,   test_searchsorted   s   z"TestNonarrayArgs.test_searchsortedc                 C   sN   g dg dg}t t|dk t t|ddk t t|ddk d S )Nr   rs   rY   r   r   r   r   )r   r"   sizerx   r+   r+   r,   	test_size   s   zTestNonarrayArgs.test_sizec                 C   s  g dg dg d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 )Nr   r   r   r   r   r   r   r   r   r   r   )r   r   r   )r   r   ri   r   r   r?   r   r   r   )r   r"   squeezer3   r:   rx   r+   r+   r,   test_squeeze   s   "zTestNonarrayArgs.test_squeezec                 C   s   g dg dg}t t|d t t|dtg d t t|dtddg tjdd	#}td
dt tt	tg  t|d j
tu  W d    d S 1 sXw   Y  d S )Nr   rs   gbp@S?r   )      ?r   r   r   gɪo ?Tr   r   r   )r   r"   stdr#   r   r   r   r   r   r   r   r   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   rY   r   rO   r   rZ   )r"   swapaxesr   )r&   r]   r7   r^   r+   r+   r,   test_swapaxes   s     zTestNonarrayArgs.test_swapaxesc                 C   sD   g dg dg dg}dgdgdgg}t j|ddd	}t|| d S )
Nr   rs   r   rY      rt   r   Trj   keepdims)r"   sumr   )r&   mr]   r^   r+   r+   r,   test_sum  s   zTestNonarrayArgs.test_sumc                 C   s2   g d}g d}g d}t ||}t|| d S )N)r   r   rO   )r   r   r   r   r   r   r   rO   )r"   taker   )r&   r]   indicesr7   r^   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   rO   rY   )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}g dg dg}t t|d	| d S )
Nr   r   r   r   rO   rY   )r   r   rO   )r   r   rY   r   r   )r   r"   	transposer   r+   r+   r,   test_transpose  s   zTestNonarrayArgs.test_transposec                 C   s   g dg dg}t t|d t t|dtg d t t|dtddg tjdd	"}td
dt tt	tg  t|d j
tu  W d    n1 sWw   Y  td dg}d|d< t t|d d S )Nr   rs   gUUUUUU@r   )      @r   r   r   gvWUU?Tr   r   r                 ?g      ?)r   r"   varr#   r   r   r   r   r   r   r   )r&   r'   r   Br+   r+   r,   test_var  s   zTestNonarrayArgs.test_varN)3rJ   rK   rL   r_   rd   rm   rr   ry   r}   r   r   r   r   r   r   r   rE   markparametrizer"   int8int16r   r   uint8uint16uint32uint64float16r;   r   r   paramxfailmathceillog10r   r   AssertionErrorr   r   r   r   r   r   r   r   r   r   r   r+   r+   r+   r,   rU   S   sR    
	
	

	rU   c                   @      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   )FractionrO      )Number)r   r"   isscalarr   	fractionsr   numbersr   )r&   r   r   r+   r+   r,   test_isscalar-  s   zTestIsscalar.test_isscalarN)rJ   rK   rL   r   r+   r+   r+   r,   r   ,      r   c                   @   ,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestBoolScalarc                 C   s4   t j}t j}d}t|o||u  t|o||u  d S )Nxyzr"   False_True_r   )r&   r   tr   r+   r+   r,   test_logical=  s
   zTestBoolScalar.test_logicalc                 C   sP   t j}t j}t||B |u  t||B |u  t||B |u  t||B |u  d S r   r   r&   r   r   r+   r+   r,   test_bitwise_orD     zTestBoolScalar.test_bitwise_orc                 C   sP   t j}t j}t||@ |u  t||@ |u  t||@ |u  t||@ |u  d S r   r   r  r+   r+   r,   test_bitwise_andL  r  zTestBoolScalar.test_bitwise_andc                 C   sP   t j}t j}t||A |u  t||A |u  t||A |u  t||A |u  d S r   r   r  r+   r+   r,   test_bitwise_xorT  r  zTestBoolScalar.test_bitwise_xorN)rJ   rK   rL   r  r  r  r  r+   r+   r+   r,   r   <  s
    r   c                   @   r   )
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)   r8   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 ];}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||  q@ttddd	g d
 D ]5}tj	dgd t
d}d||< t t|d| d tj	dgd t
d}d||< t t| d| d qd S )N   F   r8   rZ   Trh   ip  i  )iT  i_ r>   iˆ z%rmsg)r   r   rv   anyr   r  r  ranger"   r#   r
  r   list)r&   r   der+   r+   r,   test_all_anyj  s0   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r^   )	r   r   r   r"   absr  r  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)rJ   rK   rL   r  r  r  r"  r+   r+   r+   r,   r  ]  s
    r  c                   @   $   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 ]*  fddt
dD | j||d <  fd	dt
dD | j||d < |d7 }q,d}t
d
D ]*  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  r8      r       c                       g | ]} d | @ qS r   r+   .0xr   r+   r,   
<listcomp>      z,TestBoolCmp.setup_method.<locals>.<listcomp>rg   c                       g | ]
} d | @ dkqS r1   r+   r)  r,  r+   r,   r-           c                    r'  r(  r+   r)  r,  r+   r,   r-    r.  r   c                    r/  r1   r+   r)  r,  r+   r,   r-    r0  r   r   r   F      rY   g       )r"   onesr;   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   @  t dD ]}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   r4  r"   
zeros_likerQ   r   astyper   r6  isfiniter9  isinfr<  signbitr>  r&   r   rr2r3r+   r+   r,   
test_float  *   "&$$("

$&&$&zTestBoolCmp.test_floatc                 C   r@  )Nr   r   r   )r  r   r  r5  r"   rA  rQ   r   rB  r   r7  rC  r:  rD  r=  rE  r?  rF  r+   r+   r,   test_double  rK  zTestBoolCmp.test_doubleN)rJ   rK   rL   r  rJ  rL  r+   r+   r+   r,   r$    s    .r$  c                   @   sL   e Zd Zdd Zdd Zejje	 dkdddd	 Z
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overunder)r"   geterrr   dict)r&   errr+   r+   r,   test_default  s   zTestSeterr.test_defaultc                 C   s   t  M 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di | tt  |k W d    d S 1 sTw   Y  d S )NprintrP  rP  raise)rR  rR  r+   )r"   errstateseterrr   rT  )r&   rV  oldnewr+   r+   r,   test_set"  s   
"zTestSeterr.test_setarmv5telzSee gh-413.r   c              	   C   s   t jdd; tt t dgt dg  W d    n1 s"w   Y  t jdd t dgt dg  W d    d S 1 sDw   Y  d S )NrZ  rY  rI           rO  )r"   r[  r	   FloatingPointErrorr#   r\  r  r+   r+   r,   test_divide_err/  s   
"zTestSeterr.test_divide_errc              	      s  t  }d _ztjdd=}td t jdd" t g d t dgt d	g  t	t
|d
 W d    n1 s?w   Y  W d    n1 sNw   Y   fdd}t jdd t dd|g t dgt d	g  W d    n1 s~w   Y  t	 jd
 t | t jdd t jdd	dd|gd W d    n1 sw   Y  t	 jd W t |  `d S t |  `w )Nr   Tr   r   rN  rY  ) N  r   NrI   ra  r   c                     s6     j d7  _ | }tt|dk td|d v  d S )Nr   r   rP  r   )calledr   len)args
extobj_errr  r+   r,   log_errC  s   z'TestSeterr.test_errobj.<locals>.log_errrO  rd  r   )extobjr   )r"   	geterrobjre  r   r   simplefilterr[  	seterrobjr#   r   rf  rP  )r&   	olderrobjr   ri  r+   r  r,   test_errobj8  s6   



zTestSeterr.test_errobjc              	   C   s   t  }z7t 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 t | d S t | w )Nr   rY   i'  )	r"   rk  rm  r   UFUNC_BUFSIZE_DEFAULTERR_DEFAULTr   r#   r  )r&   rn  r   r+   r+   r,   test_errobj_noerrmaskV  s   
z TestSeterr.test_errobj_noerrmaskN)rJ   rK   rL   rW  r_  rE   r   skipifplatformmachinerc  ro  rr  r+   r+   r+   r,   rM    s    	
rM  c                   @   s@   e Zd Zdd Zdd Zejdej	d dd Z
d	d
 ZdS )TestFloatExceptionsc              
   C   sr   t |}z||| tdd||f  W d S  ty8 } ztt||dkd||f  W Y d }~d S d }~ww )NFz%Type %s did not raise fpe error '%s'.r   z$Type %s raised wrong fpe error '%s'.)rR   r   rb  strfind)r&   fpeerrflopr+  yftypeexcr+   r+   r,   assert_raises_fpej  s   



z%TestFloatExceptions.assert_raises_fpec                 C   sT   |  |||| |  |||d | |  ||||d  |  |||d |d  d S Nr+   )r~  )r&   ry  rz  sc1sc2r+   r+   r,   assert_op_raises_fpet  s   z(TestFloatExceptions.assert_op_raises_fpetypecodeAllFloatc              	   C   s,  t jdd t |}t |jdkr)t |}|jj}|j}|j	}d}d}n t
|dj}	t |	}||jj}||j}||j	}d}d}d}
d	}t |sf| |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 d    d S 1 sw   Y  d S )NrZ  rv   r   	underflowdivide by zeror   r   overflowrQ  c                 S      | | S r   r+   r7   br+   r+   r,   <lambda>      z>TestFloatExceptions.test_floating_exceptions.<locals>.<lambda>c                 S      | | S r   r+   r  r+   r+   r,   r    r  c                 S   r  r   r+   r  r+   r+   r,   r    r  r   c                 S   r  r   r+   r  r+   r+   r,   r    r        ?c                 S      | | S r   r+   r  r+   r+   r,   r    r  c                 S      | | S r   r+   r  r+   r+   r,   r    r  c                 S   r  r   r+   r  r+   r+   r,   r    r  r   c                 S   r  r   r+   r  r+   r+   r,   r    r  c                 S   r  r   r+   r  r+   r+   r,   r    r  c                 S   r  r   r+   r  r+   r+   r,   r    r  c                 S   r  r   r+   r  r+   r+   r,   r    r  c                 S   r  r   r+   r  r+   r+   r,   r    r  )r"   r[  
obj2sctyper2   kindfinfo_machartinymaxepsrR   realr   r~  powernexpr;  )r&   r  r|  fift_tinyft_maxft_epsr  	divbyzerortyper  rQ  r+   r+   r,   test_floating_exceptions  sv   







$z,TestFloatExceptions.test_floating_exceptionsc              	   C   sT  t jdd}t d tjddv tdd tt|d tdt	|d	 j
v  td
td
  tt|d tdt	|d j
v  ttjttj  tt|d tdt	|d j
v  tdtd  tt|d tdt	|d j
v  W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )NTr   r   rN  r  r   ra  r  r   gu <7~r   r  r?   r   zinvalid valuegYnr   r  )r   r   rl  r"   r[  rP  r   rf  r   rw  messager#   r;  )r&   r   r+   r+   r,   test_warnings  s&   
"z!TestFloatExceptions.test_warningsN)rJ   rK   rL   r~  r  rE   r   r   r"   	typecodesr  r  r+   r+   r+   r,   rv  i  s    

:rv  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   r?   y              @)r"   bool_r   r   r   r   r   r   r   r   r;   r   
longdouble	complex64
complex128clongdoubler   r2   r#   )r&   promote_funcr  i8i16i32i64u8u16u32u64f32f64fldc64c128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| }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  qd S )Nc                 S   s   t | |jS r   )r"   addr2   r  r+   r+   r,   res_type  s   z)TestTypes.test_coercion.<locals>.res_typeTFr   r   r8   gX9v?f8zarray type %sf4f2y        X9v?c16c8)r  r"   r#   r   r   r2   r  r   r;   r   r  r  r  )r&   r  r7   r  r+   r+   r,   test_coercion  s4   
&zTestTypes.test_coercionc                 C   s(   |  tj ttd td k d S r   )r  r"   result_typer   r2   r  r+   r+   r,   test_result_typeP  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<U8U8z>S5z>U8z<U5z>U5z<M8M8z>M8z<m8m8z>m8)r   r"   promote_typesr2   r  r+   r+   r,   test_promote_types_endianT  s    z#TestTypes.test_promote_types_endianc              	   C   s   g d}d}t t}|D ]}t |}t ||sJ t |||u s&J q|D ]*}t |}t ||r8J tt t || W d    n1 sNw   Y  q)t d}t ||saJ t |||u skJ d S )N)r   r   r   r   r
  BHILQPFDGmMfVdouble)r"   r2   r   can_castr  rE   rF   	TypeError)r&   valid_typesinvalid_typesrational_dtnumpy_dtype	double_dtr+   r+   r,   #test_can_cast_and_promote_usertypesj  s"   



z-TestTypes.test_can_cast_and_promote_usertypesswapr   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 )Nr  c                 S   s   t || S r   r"   r  r  r+   r+   r,   r    s    z6TestTypes.test_promote_types_strings.<locals>.<lambda>r
  5r  4u13u2u410r  20i1i26i411r  21130O)r"   r  r   r2   )r&   r  r  r  r  r+   r+   r,   test_promote_types_strings  s6   
z$TestTypes.test_promote_types_stringsdtype1dtype2V6V10)name1r  )name2r  c                 C   s<   t t t|| W d    d S 1 sw   Y  d S r   )rE   rF   r  r"   r  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
J d S r   r  r  r+   r+   r,   test_valid_void_promotion  s   z#TestTypes.test_valid_void_promotionr2   Allzi,i10iS3S100U3U100c                 C   s   ddi}t j||d}t ||}|j|jksJ | }|jr"d S t ||}|jdkr5|jd u s4J n|j|ks<J |jsAJ d S )Nr   metadatar  )r"   r2   r  r   newbyteorderisnativechar)r&   r2   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y(   Y dS w |jdvs8|jdus8|jdkr@|jdu s?J n+||krK||u sJJ n ||krdt ||j|kr^|jdu  n|j|k n|jdu skJ |	 }|j|ksvJ t ||}||ksJ |j|jksJ 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  NUSVr+   )
r"   r2   r  r  r  namesr3   r   r  r  )r&   r  r  	metadata1	metadata2r  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  r  r  r  S11nor  r  equivz<i4safez>i4	same_kindz>u4unsafer
  S5S4r  r  r  S2r  r  S10S9r  S20S19r  r  S6S21U4r  U2U5U10U9U20U19U6U11r  )from_to)
r   r"   r  r   r   r   complexfloatr	   r  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"   r  r  r+   r+   r,   "test_can_cast_simple_to_structuredX  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_simpleh  s   z,TestTypes.test_can_cast_structured_to_simplec                 C   s   t jd t jd  D ]1}t |}tt |j| tt |j| tt |jd |  tt |jd |  q
t jd D ]}t |}tt |j| tt |j| qAd S )Nr   uintr   r'  )r"   sctypesiinfor   r  minr  r  )r&   dtiir  r+   r+   r,   test_can_cast_values{  s   

zTestTypes.test_can_cast_valuesN)rJ   rK   rL   r  r  r  r  r  rE   r   r   r  r"   r2   r  r  r  r  r  r   r  slowr   	itertoolsproductr  r(  r.  r0  r7  r+   r+   r+   r,   r    s\    J6#




.Mr  c                   @      e Zd ZdS )
NIterErrorNrJ   rK   rL   r+   r+   r+   r,   r<        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g ddd Zej	
ddgdg dfdg dfdg dfdg dfedddgfgej	
dd d!gd"d# Zd$d% Zd&d' Zd(d) Zd*S )+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>rt   )r  r  r+   r+   r,   makegen     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"   fromiterrA  r   r   r'  r   r2   )r&   ai32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   r=   )
r"   r#   r  rA  rC  r   r   rf  r	   rG   r&   expectedr7   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 )NrH  r   ri   )r"   r#   r  rA  rC  r   r   alltruerI  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&   neindexr  r+   r+   r,   	load_data  s   zTestFromiter.load_datar2   counterror_index)r=   rO   )r=   rh   c                 C   sL   |  ||}tt tj|||d W d    d S 1 sw   Y  d S )N)r2   rR  )rQ  rE   rF   r<  r"   rC  )r&   rR  rS  r2   iterabler+   r+   r,   	test_2592  s   "zTestFromiter.test_2592)r  S0V0U0c                 C   sB   t jtdd tjg |d W d    d S 1 sw   Y  d S )NzMust specify lengthrA   r8   )rE   rF   rG   r"   rC  )r&   r2   r+   r+   r,   test_empty_not_structured  s   "z&TestFromiter.test_empty_not_structureddatar  )	r   r   r   r   rO   rY   rZ   rg   rh   r  zi,O)r   r   )rO   r   r   r   )rh   rg   rY   rZ   2i)r  r\  )r   rW   ))r   r   r   )rO   r   r   length_hintr   r   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  )rZ  r+   r,   __iter__     zHTestFromiter.test_growth_and_complicated_dtypes.<locals>.MyIter.__iter__NrJ   rK   rL   ra  rd  r+   rZ  r_  r+   r,   MyIter  s    rh  r8   )r"   r2   rC  r#   r   )r&   r2   rZ  r_  rh  r  rJ  r+   rg  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J |jdksJ d S )Nc                   @      e Zd Zdd Zdd ZdS )z.TestFromiter.test_empty_result.<locals>.MyIterc                 S      dS Nr=   r+   r  r+   r+   r,   ra    s   z>TestFromiter.test_empty_result.<locals>.MyIter.__length_hint__c                 S   s   t g S r   rb  r  r+   r+   r,   rd    re  z7TestFromiter.test_empty_result.<locals>.MyIter.__iter__Nrf  r+   r+   r+   r,   rh        rh  r  r8   r/   )r"   rC  r3   r2   )r&   rh  r  r+   r+   r,   test_empty_result  s   zTestFromiter.test_empty_resultc                 C   sL   d}t jt|d tjg ddtd W d    d S 1 sw   Y  d S )Nz>iterator too short: Expected 10 but iterator had only 3 items.rA   r   r=   )rR  r2   )rE   rF   rG   r"   rC  r   )r&   r  r+   r+   r,   test_too_few_items  s   "zTestFromiter.test_too_few_itemsc                 C   s   t t tjg dtd W d    n1 sw   Y  dd tdD }t t tj|ttdfd W d    d S 1 sDw   Y  d S )N)r   Nr   r8   c                 s   s    | ]}d V  qdS )r   Nr+   )r*  r   r+   r+   r,   r@    s    z7TestFromiter.test_failed_itemsetting.<locals>.<genexpr>rO   r   )	rE   rF   r  r"   rC  r   r  rG   r2   )r&   rT  r+   r+   r,   test_failed_itemsetting  s   "z$TestFromiter.test_failed_itemsettingN)rJ   rK   rL   rA  rG  rL  rN  rQ  rE   r   r   r   objectrU  rY  r"   r2   ri  rn  ro  rp  r+   r+   r+   r,   r?    s4    	




	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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   ?r8   r   )r   r"   rq   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 d    n1 s3w   Y  t ttdd t ttjdddd tt t ttddgf W d    d S 1 smw   Y  d S rs  )r   r"   rq   r#   r   DeprecationWarningru  r  r+   r+   r,   test_nonzero_zerod  s   

"zTestNonzero.test_nonzero_zerodc                 C   s   t g d}tt |d tt |d tt |g df t jg dg dd}tt |d d tt |d	 d tt |d
 d tt |d d tt |d g df tt |d	 g df d S )N)r   r   r   r?   r   r   rg   r   )r   r   r   rY   ))r   r   r   r   )r   r   r   rZ   )r   r   r   r   )r?   r   r   r   )r   rZ   r   r   ))r7   r  )r  r  )r   r  )r  r  r8   r7   r   r  r   r  )r   r   r   )r   r   r   r   )r"   r#   r   rq   ru  r&   r+  r+   r+   r,   test_nonzero_onedim  s   
zTestNonzero.test_nonzero_onedimc                 C   s  t g dg dg}tt |dd tt |dd tt |dd tt |dd tt |g dg d	f t d}tt |dd tt |dd tt |dd tt |dd tt |g d
g d
f t jg dg dg dgddgd}tt |d d tt |d d tt |d g dg df tt |d g dg df t|d jj	j
  tt |d jd tt |d jd tt |d jg dg df tt |d jg dg df d S )N)r   r   r   )r   r   r   r  r   r  r  r  r   r   r   )r   r   r   rV   )r   r   r   r   )r   r{   )r   r   r   r}  )r}  )r   rO   r|  )r7   r  )r  r  r8   r7   r   r  rO   )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   rq   rB  ru  eyer   Tflagsalignedry  r+   r+   r,   test_nonzero_twodim$  s6   

  "&zTestNonzero.test_nonzero_twodimc              
   C   s   t dD ]V}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 )	NrH     r8   Tr   i  r=   r   )r  r"   r:   r
  r   ru  rD   concatenate)r&   r   r   r+   r+   r,   test_sparseA  s   "&zTestNonzero.test_sparsec                 C   s   G dd dt j}|t jfD ]A}tddD ]9}ttdd| }t t |||}t || fD ]}|D ]}t	t
|t ju  t	|jj q;q7qqd S )Nc                   @   r;  )z'TestNonzero.test_return_type.<locals>.CNr=  r+   r+   r+   r,   CO  r>  r  r   r   r   )r"   rP   r  tuplerD   r   r   rQ   ru  r   rR   r  	writeable)r&   r  rQ   r7  r3   r+  nzxnzx_ir+   r+   r,   test_return_typeN  s   zTestNonzero.test_return_typec                 C   s   t g dg dg}t g d}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 )Nrn   ro   )r   r   r   r   r   r   ri   r   r   r   r~  foo)r"   r#   r   rq   r	   rG   r  	AxisError)r&   r   rJ  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r|dkr:t jd|d}t jd	|d}|d
 |d< |d
 |d< nt dgd }|d}d|d< d|d< ||}t jg dt j	d}|t j
|d
d||d t jg d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g d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   r2   )r7   r  r  r+   r+   r,   assert_equal_w_dtq  s   zITestNonzero.test_count_nonzero_axis_all_dtypes.<locals>.assert_equal_w_dtr  VMr   r8   r   r   r}  r   z
1970-01-01rh   z
1970-01-12)r   r   r   ri   r  )r   r   r   r   r|  rY   r\  r   r   r   )r"   r  r2   namer:   r3  r#   r   rB  intprq   r   void)r&   r  r  r5  r  r   rO  rJ  r+   r+   r,   "test_count_nonzero_axis_all_dtypesk  sn   






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 ]%}	|||	D ]}
||
D ]}ttj||d
tj||d
||f d q4q.q'd S )Nr   )combinationspermutationsrz   )rO   rO   rO   rO   zMismatch for axis: %si  ir`  r   ri   r  )r9  r  r  r"   randomRandomStater   rB  rq  r  rf  r   rq   )r&   r  r  rj   r   r  rngr   rO  lengthcombopermr+   r+   r,   "test_count_nonzero_axis_consistent  s$   
z.TestNonzero.test_count_nonzero_axis_consistentc                 C   s4   t g dg dg}tt j|dd|t d S )N)r   r   r   )r   r   r   r+   ri   )r"   r#   r   rq   rB  r
  r   r+   r+   r,   test_countnonzero_axis_empty  s   z(TestNonzero.test_countnonzero_axis_emptyc                 C   sv   t g dg dg dg}tt j|dddg dg tt j|ddddgd	gd
gg tt j|dddgg d S )N)r   r   r   r   )r   r   rO   r   )rZ   rh   r   r   r   Tr   )r   r   r   r   r   r   r   r   rY   )r"   r#   r   rq   r   r+   r+   r,   test_countnonzero_keepdims  s   
z&TestNonzero.test_countnonzero_keepdimsc                 C   s8   t g dg dg}g dg dg}t| | d S )N)r   r   r   )r   r   rY   r{  )r   r   r   )r"   r#   r   ru  )r&   r   r]   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   r8   c                   @   r   )z;TestNonzero.test_nonzero_invalid_object.<locals>.BoolErrorsc                 S   s   t d)NzNot allowed)rG   r  r+   r+   r,   __bool__  re  zDTestNonzero.test_nonzero_invalid_object.<locals>.BoolErrors.__bool__N)rJ   rK   rL   r  r+   r+   r+   r,   
BoolErrors  r   r  )r"   r#   rq  r	   rG   ru  )r&   r7   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                   @      e Zd ZdZdd ZdS )zATestNonzero.test_nonzero_sideeffect_safety.<locals>.FalseThenTrueFc                 S      z| j W d| _ S d| _ w )NT_valr  r+   r+   r,   r       zJTestNonzero.test_nonzero_sideeffect_safety.<locals>.FalseThenTrue.__bool__NrJ   rK   rL   r  r  r+   r+   r+   r,   FalseThenTrue      r  c                   @   r  )zATestNonzero.test_nonzero_sideeffect_safety.<locals>.TrueThenFalseTc                 S   r  )NFr  r  r+   r+   r,   r    r  zJTestNonzero.test_nonzero_sideeffect_safety.<locals>.TrueThenFalse.__bool__Nr  r+   r+   r+   r,   TrueThenFalse  r  r  TF)r"   r#   r	   RuntimeErrorru  )r&   r  r  r7   r+   r+   r,   test_nonzero_sideeffect_safety  s   	z*TestNonzero.test_nonzero_sideeffect_safetyc                 C   sZ   t jddd}|jjsJ |d jjrJ t | |jjs J t | |jjs+J d S )NrO   zi1,i8,i8r8   r  )r"   r:   r  r  ru  rq   r&   rc   r+   r+   r,   'test_nonzero_sideffects_structured_void  s   

z3TestNonzero.test_nonzero_sideffects_structured_voidc                 C   s|   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                   @   rj  )z<TestNonzero.test_nonzero_exception_safe.<locals>.ThrowsAfterc                 S   s
   || _ d S r   )
iters_left)r&   itersr+   r+   r,   __init__     
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  rG   r  r+   r+   r,   r    s   
zETestNonzero.test_nonzero_exception_safe.<locals>.ThrowsAfter.__bool__N)rJ   rK   rL   r  r  r+   r+   r+   r,   ThrowsAfter  rm  r  rO   r=   r   )r"   r#   r	   rG   ru  )r&   r  r7   r+   r+   r,   test_nonzero_exception_safe  s   z'TestNonzero.test_nonzero_exception_safec                    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 ]}|  qF j|u sTJ d S )Nr   )ThreadPoolExecutor)r   r  r   r   )i  r   r  c                 S   s   |    d S r   )ru  )rc   r+   r+   r,   func>  s   z6TestNonzero.test_structured_threadsafety.<locals>.funcrg   )max_workersc                    s   g | ]}  qS r+   )submit)r*  _rc   r  tper+   r,   r-  B  r.  z<TestNonzero.test_structured_threadsafety.<locals>.<listcomp>r=   )	concurrent.futuresr  r"   r2   r  uniformrQ   r  result)r&   r  r5  futuresr   r+   r  r,   test_structured_threadsafety3  s    

z(TestNonzero.test_structured_threadsafetyN)rJ   rK   rL   rv  rx  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r+   r+   r+   r,   rr    s$    B !rr  c                   @   rj  )	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   rO   rg   r   r   r  r   r   )r   r   r   r"   r#   rv   )r&   r7   r  g1g2r+   r+   r,   test_booleanJ  s   
T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   r8   r
  )r"   r#   r   r2   )r&   r7   r  r   r+   r+   r,   test_boolean_edgecaseR  s
   
zTestIndex.test_boolean_edgecaseN)rJ   rK   rL   r  r  r+   r+   r+   r,   r  I  s    r  c                   @   r   )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 )Nr=   1010i0  11000011101010iԣ 101000111101010011010000r  r  r+   r+   r,   test_positive^  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 )	Nr?   z-1r>   z-1010iz-11000011101010i0+\z-101000111101010011010000r  r  r+   r+   r,   test_negativee  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   rO   width00000r=   rZ   0001010r   1111011r  r  r+   r+   r,   test_sufficient_widthm  s   z$TestBinaryRepr.test_sufficient_widthc                 C   sZ   t tjdddd tddD ]}d|d   }d|d d	  }t tj||d| qd S )
Nirg   r  10000000r   r{   r   r  r  )r   r"   r  r  )r&   r  numexpr+   r+   r,   test_neg_width_boundariesr  s   z(TestBinaryRepr.test_neg_width_boundariesc                 C   s   t tjtdddd d S )Nl         @   r  @1100000000000000000000000000000000000000000000000000000000000000)r   r"   r  r   r  r+   r+   r,   test_large_neg_int64~  s   z#TestBinaryRepr.test_large_neg_int64N)	rJ   rK   rL   r  r  r  r  r  r  r+   r+   r+   r,   r  Z  s    r  c                   @   r   )
TestBaseReprc                 C   s   t tddd d S )N   r   100000r   r"   	base_reprr  r+   r+   r,   
test_base3     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   r=   12r   000012r  l   5j $   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 )Nr=   z-12r   z-000012z-30r  r  r+   r+   r,   r    s   zTestBaseRepr.test_negativec                 C   sn   t t tdd W d    n1 sw   Y  t t tdd W d    d S 1 s0w   Y  d S )Nr   %   )r	   rG   r"   r  r  r+   r+   r,   test_base_range  s   

"zTestBaseRepr.test_base_rangeN)rJ   rK   rL   r  r  r  r  r+   r+   r+   r,   r    s
    r  c                   @   sF   e Zd Zdd Zdd Zdd Zdd Zej	d	g d
dd Z
dS )TestArrayComparisonsc                 C   sb  t t ddgt ddg}t| tt|tu  t t ddgt g d}t|  tt|tu  t t ddgt ddg}t|  tt|tu  t t ddgt ddg}t|  tt|tu  t t jdgddt jdgdd}t| tt|tu  t t jd	gd
dt jd	gd
d}t| tt|tu  d S )Nr   r   r   r   r   r7   S1r8   )r7   r   zS1,u4)r"   array_equalr#   r   rR   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g d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   r8   r   y      ?      ?F)	r"   r#   r8  r;  r   r  r   r  imag)r&   a1a2a3r7   r  r+   r+   r,   test_array_equal_equal_nan  s(   z/TestArrayComparisons.test_array_equal_equal_nanc                 C   sh   t jg dtd}t|d kg d t|d kg d t d}t|d kg d t|d kg d d S )N)Nr   Nr8   )TFT)FTFr   FFF)TTT)r"   r#   rq  r   r3  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u  t t ddgt g d}t|  tt|tu  t t ddgt ddg}t|  tt|tu  t t ddgt ddg}t|  tt|tu  t t ddgt dg}t| tt|tu  t t ddgt dgdgg}t| tt|tu  t t ddgt dg}t|  tt|tu  t t ddgt dgdgg}t|  tt|tu  t t ddgt g dg dg dg}t|  tt|tu  d S )Nr   r   r   r   r   rs   r   )r"   array_equivr#   r   rR   r
  r  r+   r+   r,   test_array_equiv  s6     
 
 
$
$
.
z%TestArrayComparisons.test_array_equivr2   )rW  V3r  c                 C   sj   t jd|d}t|| ||k rJ |dkrd S t jg d|d}||k r+J ||k s3J d S )Nr   r8   rW  )   1   2   3)r"   r:   r   r  r#   rv   )r&   r2   r:   nonzerosr+   r+   r,   test_compare_unstructured_voids  s   
z4TestArrayComparisons.test_compare_unstructured_voidsN)rJ   rK   rL   r  r  r  r  rE   r   r   r	  r+   r+   r+   r,   r    s    	r  c                 C   s   t | | | jjdkst jjdkr!tjdkr!t| j	|j	k n2t| 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 )Nrg   r   win32)r   r2   	alignmentr"   r  itemsizesysrt  r   r  owndatar  c_contiguousf_contiguouswritebackifcopyr  )r+  r{  r+   r+   r,   assert_array_strict_equal  s   
r  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 )NrO   r   )nrncr  r+   r+   r,   r    s   
zTestClip.setup_methodNc                 C   sT   |d u r|d u r| ||S |j |||dS |d u r!| |||S |j ||||dS )Nr)  )rb   )r&   r7   r   r  r^   r*  r+   r+   r,   fastclip  s   zTestClip.fastclipc                 C   s0   t ||dt ||  }|j|||f|dS )Nr   r  )r"   lessgreaterr[   )r&   r7   r   r  r^   selectorr+   r+   r,   rb   (  s   zTestClip.clipc                 C   s
   t ||S r   )r   r&   rO  r   r+   r+   r,   _generate_data.  r  zTestClip._generate_datac                 C   s   t ||dt||  S )Nr   )r   r   r  r+   r+   r,   _generate_data_complex1  s   zTestClip._generate_data_complexc                 C   s   t ||tjS r   )r   rB  r"   r;   r  r+   r+   r,   _generate_flt_data4  rB  zTestClip._generate_flt_datac                 C   s@   t |}tjdkr||jd}|S ||jd}|S )Nlittle><)r"   asarrayr  	byteorderrB  r2   r  r   r+   r+   r,   _neg_byteorder7  s   

zTestClip._neg_byteorderc                 C   s&   t ||}| |}t|jj  |S r   )r   r#  r   r2   r  )r&   rO  r   rZ  r+   r+   r,   _generate_non_native_data?  s   

z"TestClip._generate_non_native_datac                 C      dt || tjS rl  )r   rB  r"   r   r  r+   r+   r,   _generate_int_dataE  r  zTestClip._generate_int_datac                 C   r%  rl  )r   rB  r"   r   r  r+   r+   r,   _generate_int32_dataH  r  zTestClip._generate_int32_datar2   z?bhilqpBHILQPefdgFDGOc                 C   sX   t jd|d}t jd|d}t |dd}|dkr%| | ks#J d S t|| d S )Nr=   r8   r   r   r  )r"   r3  r:   rb   tolistr   )r&   r2   rc   rJ  actualr+   r+   r,   test_ones_pathologicalM  s   zTestClip.test_ones_pathologicalc                 C   B   |  | j| j}d}d}| |||}| |||}t|| d S )Ng?333333?r  r  r  r  rb   r  r&   r7   r   r  acactr+   r+   r,   test_simple_doubleZ     zTestClip.test_simple_doublec                 C   sL   |  | j| j}|t}d}d}| |||}| |||}t|| d S Nr   r   )r&  r  r  rB  r   r  rb   r  r.  r+   r+   r,   test_simple_intc  s   
zTestClip.test_simple_intc                 C   sN   |  | j| j}t|j}|d }| |||}| |||}t|| d S )Nr  	r  r  r  r"   r:   r3   r  rb   r  r.  r+   r+   r,   test_array_doublem  s   zTestClip.test_array_doublec                 C   s   |  | j| j}d}d}| |||}| |||}t|| | | j| j}d}| d}t|j	j
  | |||}| |||}t|| d S N      r,  )r$  r  r  r  rb   r   r  r#  r   r2   r  r.  r+   r+   r,   test_simple_nonnativev  s   

zTestClip.test_simple_nonnativec                 C   s   d|  | j| j }d}d}| |||}| |||}t|| d| | j| j }d}d}| |||}| |||}t|| d S )Nr   r8  rI   y            ?y      ?       @)r  r  r  r  rb   r  r  r.  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 Nr=   r8   )r"   r3  r&  r4  r  r  r  )r&   r7   r   r  am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  r  r  r   r  r  rb   r  )r&   r7   r/  r0  r+   r+   r,   test_clip_non_contig  s   zTestClip.test_clip_non_contigc                 C   ^   |  | j| j}d}d}t|j}t|j}| |||| | |||| t|| d S r7  r5  r.  r+   r+   r,   test_simple_out     zTestClip.test_simple_outr*  r  c                 C   s   |  | j| j}td}td}tj|jtjd}| }|d u rBt	t
 | j|||||d W d    n1 s<w   Y  n
| j|||||d | |||| t|| d S )Nr   r   r8   r)  r'  r  r  r"   r   r:   r3   r   r  r   rw  r  rb   r  )r&   r*  r7   r   r  r/  r0  r+   r+   r,   test_simple_int32_inout  s   


z TestClip.test_simple_int32_inoutc                 C   l   |  | j| j}td}td}tj|jtjd}| }| 	|||| | 
|||| t|| d S Nr?   r   r8   r'  r  r  r"   r   r:   r3   r   r  r  rb   r  r.  r+   r+   r,   test_simple_int64_out     

zTestClip.test_simple_int64_outc                 C      |  | j| j}t|jtj}td}tj|jtjd}| }t	t
 | |||| W d    n1 s9w   Y  | |||| t|| d S Nr   r8   r'  r  r  r"   r:   r3   r   r   r  r   rw  r  rb   r  r.  r+   r+   r,   test_simple_int64_inout     

z TestClip.test_simple_int64_inoutc                 C      |  | j| j}d}d}tj|jtjd}| }tt	 | 
|||| W d    n1 s0w   Y  | |||| t|| d S Nr2  r   r8   r  r  r  r"   r:   r3   r   r  r   rw  r  rb   r  r.  r+   r+   r,   test_simple_int32_out     
zTestClip.test_simple_int32_outc                 C   V   |  | j| j}| }t|j}d}| |||| | |||| t	|| d S NrI   
r  r  r  r  r"   r:   r3   r  rb   r  r&   r7   r/  r   r  r+   r+   r,   test_simple_inplace_01     zTestClip.test_simple_inplace_01c                 C   sN   |  | j| j}| }d}d}| |||| | |||| t|| d S r7  r  r  r  r  r  rb   r  rY  r+   r+   r,   test_simple_inplace_02     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@  r8  r,  )	r  r  r  r   r  r  r  rb   r   rY  r+   r+   r,   test_noncontig_inplace  s   zTestClip.test_noncontig_inplacec                 C   r+  r7  r-  r.  r+   r+   r,   test_type_cast_01  r2  zTestClip.test_type_cast_01c                 C   sN   |  | j| j}|tj}d}d}| |||}| |||}t|| d S r3  )	r&  r  r  rB  r"   r   r  rb   r  r.  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 r3  )r'  r  r  r  r"   r   rb   r  r.  r+   r+   r,   test_type_cast_03'     zTestClip.test_type_cast_03c                 C   sN   |  | j| j}td}td}| |||}| |||}t|| d S r3  )r'  r  r  r"   r;   r  rb   r  )r&   r7   r   r  r0  r/  r+   r+   r,   test_type_cast_040  s   

zTestClip.test_type_cast_04c                 C   sZ   |  | j| j}d}d}| ||t|j |}| ||t|j |}t|| d S Nr8  rI   )	r&  r  r  r  r"   r:   r3   rb   r  r.  r+   r+   r,   test_type_cast_059  rc  zTestClip.test_type_cast_05c                 C   sL   |  | j| j}d}| |}d}| |||}| |||}t|| d S )Nr  rI   )r  r  r  r#  rb   r  r  )r&   r7   r   m_sr  r0  r/  r+   r+   r,   test_type_cast_06B  s   
zTestClip.test_type_cast_06c                 C   sd   |  | j| j}dt|j }d}| |}t|jj	  |
||}| |||}t|| d S re  )r  r  r  r"   r3  r3   r#  r   r2   r  rb   r  r  )r&   r7   r   r  a_sr0  r/  r+   r+   r,   test_type_cast_07L  s   
zTestClip.test_type_cast_07c                 C   sX   |  | j| j}d}d}| |}t|jj  | |||}|||}t	|| d S re  )
r  r  r  r#  r   r2   r  r  rb   r  )r&   r7   r   r  ri  r/  r0  r+   r+   r,   test_type_cast_08W  s   
zTestClip.test_type_cast_08c                 C   sf   |  | j| j}dt|j }d}| |}t|jj	  | 
|||}| |||}t|| d S re  )r  r  r  r"   r3  r3   r#  r   r2   r  r  rb   r  )r&   r7   r   r  rg  r/  r0  r+   r+   r,   test_type_cast_09b  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 )Nr8   r8  r   r  )
r&  r  r  r"   r:   r3   r;   rb   r  r  r&   r7   r  r   r  r0  r/  r+   r+   r,   test_type_cast_10m     

zTestClip.test_type_cast_10c                 C   sl   |  | j| j}| }||jd}| }d}d}| j||||d | j||||d t	|| d S )Nr  r8  rI   r  )
r$  r  r  r  rB  r2   r  r  rb   r  )r&   r7   r  btr   r  r+   r+   r,   test_type_cast_11w  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 )Nr8   r   r   r  )r&  r  r  r"   r:   r3   r;   r   rb   r  r  rm  r+   r+   r,   test_type_cast_12  ro  zTestClip.test_type_cast_12c                 C   rB  r7  r5  r.  r+   r+   r,   test_clip_with_out_simple  rD  z"TestClip.test_clip_with_out_simplec                 C   s   |  | j| j}td}td}tj|jtjd}| }t	t
 | |||| W d    n1 s6w   Y  | |||| t|| d S )Nr   r   r8   rE  r.  r+   r+   r,   test_clip_with_out_simple2  s   


z#TestClip.test_clip_with_out_simple2c                 C   rG  rH  rI  r.  r+   r+   r,   test_clip_with_out_simple_int32  rK  z(TestClip.test_clip_with_out_simple_int32c                 C   rL  rM  rN  r.  r+   r+   r,   test_clip_with_out_array_int32  rP  z'TestClip.test_clip_with_out_array_int32c                 C   rQ  rR  rS  r.  r+   r+   r,   !test_clip_with_out_array_outint32  rU  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 )Nr1  r   r=   r  )r"   rD   r   
empty_liker  rb   r   )r&   r7   r^   rJ  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 )Nr1  r   r?   r=   r   r  )r"   rD   r   r  rb   r   )r&   r7   r/  rJ  r+   r+   r,   !test_clip_with_out_memory_overlap  s
    z*TestClip.test_clip_with_out_memory_overlapc                 C   rV  rW  rX  rY  r+   r+   r,   test_clip_inplace_array  r[  z TestClip.test_clip_inplace_arrayc                 C   sN   |  | j| j}| }d}d}| |||| | |||| t|| d S r7  r\  rY  r+   r+   r,   test_clip_inplace_simple  r^  z!TestClip.test_clip_inplace_simplec                 C   s\   |  | j| j}| }d}d}tj||||d}| |||| t|| t||u  d S )Nr8  r,  r  )r  r  r  r  r"   rb   r  r   )r&   r7   r/  r   r  r  r+   r+   r,   test_clip_func_takes_out  s   
z!TestClip.test_clip_func_takes_outc                 C   sD  t d}tt t|jt jd| W d    n1 sw   Y  tt t|jt jd| W d    n1 s<w   Y  tt t|jt jt jd| W d    n1 s\w   Y  tt t|jdt jd| W d    n1 s{w   Y  tt t|jt jdd| W d    d S 1 sw   Y  d S )Ng      @)r4  )r  )r4  r  r   r=   )r"   rD   r   rw  r   rb   r8  )r&   r  r+   r+   r,   test_clip_nan  s    





"zTestClip.test_clip_nanc                 C   sB   t jdtd}t |dd}t g d}| | ksJ d S )Nr=   r8   r   rO   )
r   r   r   r   r   rO   rO   rO   rO   rO   )r"   rD   rq  rb   r#   r(  )r&   r7   r)  rJ  r+   r+   r,   test_object_clip	  s   zTestClip.test_object_clipc                 C   sL   t jdtd}ttd t |d d  W d    d S 1 sw   Y  d S )Nr=   r8   z
max or min)r"   rD   rq  r
   rG   rb   r   r+   r+   r,   test_clip_all_none	  s   "zTestClip.test_clip_all_nonec                 C   sP   t jdtd}ttd | j|dddd W d    d S 1 s!w   Y  d S )Nr=   r8   zcasting must be one ofr   rg   garbager)  )r"   rD   rq  r
   rG   r  r   r+   r+   r,   test_clip_invalid_casting	  s   "z"TestClip.test_clip_invalid_castingz
amin, amaxr   r   r=   c                 C   s@   t jdt jd}t t |||}t |||}t|| d S r;  )r"   rD   r   minimummaximumrb   r   )r&   aminamaxr7   rJ  r)  r+   r+   r,   test_clip_value_min_max_flip	  s   	z%TestClip.test_clip_value_min_max_flipzarr, amin, amax, expr8   r   l r  c                 C   s   t |||}t|| d S r   ra   )r&   rc   r  r  r  r)  r+   r+   r,   test_clip_problem_cases&	  s   z TestClip.test_clip_problem_caseszno scalar nan propagation yetT)r   rF   strictzarr, amin, amaxzignore::DeprecationWarningc                 C   0   t t |||}t |||}t|| d S r   r"   r  r  rb   r   r&   rc   r  r  rJ  r)  r+   r+   r,    test_clip_scalar_nan_propagation8	  s   z)TestClip.test_clip_scalar_nan_propagationzpropagation doesn't match specr   NaTc                 C   r  r   r  r  r+   r+   r,   test_NaT_propagationI	  s   
zTestClip.test_NaT_propagation)r2   r3   )rZ  rc   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saJ 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   )
num_shapes
base_shapec                 S   s   t j| ddS )NF)	allow_nan)hynp
from_dtyper+  r+   r+   r,   r  y	  s    z-TestClip.test_clip_property.<locals>.<lambda>r   r  F)r2   r3   elementsr   r8   N)r  integer_dtypesfloating_dtypesdrawmutually_broadcastable_shapesr3   flatmaparraysr"   rb   r  r  r  r2   r   )r&   rZ  rc   numeric_dtypes	in_shapesresult_shaper   r  r  r  r   rJ  r+   r+   r,   test_clip_propertyW	  s(   

zTestClip.test_clip_property)NNr   )TrJ   rK   rL   r  r  rb   r  r  r  r#  r$  r&  r'  rE   r   r   r*  r1  r4  r6  r9  r:  r>  rA  rC  rF  rJ  rO  rT  rZ  r]  r_  r`  ra  rb  rd  rf  rh  rj  rk  rl  rn  rq  rr  rs  rt  ru  rv  rw  ry  rz  r{  r|  r}  r~  r  r  r  r"   r:   r3  r  r   fullrq  r  r   r   r#   r8  r   r   r  timedelta64r  r   strZ  r  r  r  r  array_shapesr  r+   r+   r+   r,   r    s    


	
	



	
			









r  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 )NrO  )rQ  r"   r\  olderrr  r+   r+   r,   r  	  rB  zTestAllclose.setup_methodc                 C   s   t jdi | j d S r  r  r  r+   r+   r,   teardown_method	  r  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 ]
\}}| || qRd S )Nr`    }   rO   rO   rO   r   r   r   )r"   r#   rD   r   atolrtolr;  r  )r&   rc   aranr  r  rZ  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 ]
\}}| || qud S )Nr  r  r   r   r   )	r"   rD   r   r  r  r;  r8  r#   r  )r&   r  r  r  rZ  r+  r{  r+   r+   r,   test_ip_not_allclose	  s"   z!TestAllclose.test_ip_not_allclosec                 C   \   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	  
   z+TestAllclose.test_no_parameter_modificationc                 C   s4   t t jj}t j|gt jd}tt || d S )Nr8   )r"   r3  int_r4  r#   r   r  )r&   min_intr7   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 )NrI   Tr  )r"   r#   r8  r   r  ry  r+   r+   r,   test_equalnan	  s   zTestAllclose.test_equalnanc                 C   s8   G dd dt j}|dg}ttt ||tu  d S )Nc                   @   r   )z6TestAllclose.test_return_class_is_ndarray.<locals>.Fooc                 _   s   t j|i || S r   )r"   r#   rQ   )clsrg  kwargsr+   r+   r,   __new__	  r  z>TestAllclose.test_return_class_is_ndarray.<locals>.Foo.__new__N)rJ   rK   rL   r  r+   r+   r+   r,   Foo	  r   r  r   )r"   rP   r   rR   r  r
  )r&   r  r7   r+   r+   r,   test_return_class_is_ndarray	  s   
z)TestAllclose.test_return_class_is_ndarrayN)rJ   rK   rL   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   s>  | 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
g d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g dg dg dg dg dg| _d S )Nr`  r  r  r  r   r   r   g?g    .Ar   )r   r   g @TF)TFFTTFr   )TFFF)r  r  r"   r#   rD   r   r;  all_close_testsr8  none_close_testssome_close_testssome_close_results)r&   r  r  rc   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"   rv   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   st   d}d}t |r$t |r$tt ||t ||k|||f d d S 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   rv   )r&   r+  r{  r  msg2r+   r+   r,   tst_isclose_allclose
  s
   ,,z TestIsclose.tst_isclose_allclosec                 C   (   |    | jD ]
\}}| || qd S r   )r  r  r  r  r+   r+   r,   test_ip_all_isclose%
     zTestIsclose.test_ip_all_isclosec                 C   r  r   )r  r  r  r  r+   r+   r,   test_ip_none_isclose*
  r  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_allclose/
  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 )NTr  rI   )r   r"   r  r8  r#   r  r+   r+   r,   test_equal_nan6
  s   zTestIsclose.test_equal_nanc                 C   s  t jg dt d}tt|tt d|u  tt|tt |du  t jg dt jt jt jg}tt|tt t j|u  tt|tt |t ju  t jg dt jt jt jg}t jt j|dd}tt|t|u  t	g d|j
 t j|t jdd}tt|t|u  t	g d|j
 t jg dt jt jt jg}t j||dd}tt|t|u  t	g d|j
 d S )Nr  r   r   Tr  )r"   mamasked_whererD   r   rR   r  r8  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_returnV
  s   zTestIsclose.test_scalar_returnc                 C   r  r  )r"   r#   r;  r  r   r  r+   r+   r,   r  Y
  r  z*TestIsclose.test_no_parameter_modificationc                 C   sT   t ttjtj tju  t tdtjtju  t ttdtjtju  d S Nr   )r   r"   r  r;  r   rR   r  r  r+   r+   r,   test_non_finite_scalar`
  s    z"TestIsclose.test_non_finite_scalarc                 C   s   t jg dgdd}t j||ddd sJ t j||t dddd s(J t j||ddds3J t j||t ddddsBJ d S )	N)r   r   r   r  zm8[ns]r8   r   T)r  r  r   ns)r"   r#   r  rv   r  r  r   r+   r+   r,   test_timedeltag
  s
   ""zTestIsclose.test_timedeltaN)rJ   rK   rL   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r+   r+   r+   r,   r  	  s"    -r  c                   @   r   )
TestStdVarc                 C   s   t g d| _d| _d S )N)r   r?   r   r?   r   )r"   r#   r'   real_varr  r+   r+   r,   r  r
  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_basicv
  s   zTestStdVar.test_basicc                 C   $   t tdd t tdd d S r  r   r"   r   r   r  r+   r+   r,   test_scalarsz
     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   ddofr   r   r"   r   r'   r  rf  r   r  r+   r+   r,   
test_ddof1~
     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
  r  zTestStdVar.test_ddof2c                 C   s   t d}t d}t j||d}t||u  t|| t j||d}t||u  t|| t j||d}t||u  t|| d S )Nr=   ra  r  )r"   rD   r#   r   r   r   r   r   )r&   r  r^   rG  r+   r+   r,   test_out_scalar
  s   



zTestStdVar.test_out_scalarN)	rJ   rK   rL   r  r  r  r  r  r  r+   r+   r+   r,   r  q
  s    r  c                   @   rj  )TestStdVarComplexc                 C   s:   t g d}d}tt || tt |d | d S )N)r   r   r?   y             r   r   )r"   r#   r   r   r   )r&   r'   r  r+   r+   r,   r  
  s   zTestStdVarComplex.test_basicc                 C   r  )Nr   r   r  r  r+   r+   r,   r  
  r  zTestStdVarComplex.test_scalarsN)rJ   rK   rL   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"   r2   r*  tpr+   r+   r,   	<setcomp>
  s    z1TestCreationFuncs.setup_method.<locals>.<setcomp>c                 S   s   h | ]
}|j d r|qS )r  )rw  endswithr  r+   r+   r,   r  
  r0  c              
   S   s4   h | ]}t d dD ]}t|jdt|q	qS )r   r=   r  )r  r"   r2   rw  replace)r*  r  r   r+   r+   r,   r  
  s
    
c                 S   s   | j S r   )rw  r8   r+   r+   r,   r  
  s    z0TestCreationFuncs.setup_method.<locals>.<lambda>)keyr  r  )r  Fr=   )	r9  chainr"   r2  valuessorteddtypesordersndims)r&   r  variable_sizedr+   r+   r,   r  
  s   
zTestCreationFuncs.setup_methodNc                 C   s   dt | j| j| jf}i }|d urd|i}tj| D ]I\}}}}||g }	|r.|jdr.q||	f||d|}
t|
j	| t
t|
j| j|  |d urc|jdrYt|}n|}t|
|| qd S )NrV   
fill_valuez|Vorderr2   z|S)r  r  r  r  r9  r:  rw  
startswithr   r2   r   getattrr  rR   )r&   r  r  par
fill_kwargr   r  r  r2   r3   rc   r   r+   r+   r,   check_function
  s0   

z TestCreationFuncs.check_functionc                 C      |  tj d S r   )r  r"   r:   r  r+   r+   r,   
test_zeros
     zTestCreationFuncs.test_zerosc                 C   r  r   )r  r"   r3  r  r+   r+   r,   	test_ones
  r  zTestCreationFuncs.test_onesc                 C   r  r   )r  r"   emptyr  r+   r+   r,   
test_empty
  r  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   r=   r   )r  getrefcountr"   r:   r   r3  r  r  )r&   dimbegr+   r+   r,   test_for_reference_leak
  s   
z)TestCreationFuncs.test_for_reference_leakr   )rJ   rK   rL   r  r  r  r  r  r  rE   r   rs  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   s0  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| _g d| _d S )Ng      @r   r  rY   r  r8   r  r   r  r\  r  )r  r   r   rt   r   r   )r   r   r   r   r   rt  )r+   rO   )rO   rY   rX   )r"   r#   rD   r   r   rZ  shapesr  r+   r+   r,   r  
  s    zTestLikeFuncs.setup_methodc                 C   sb   |d ur/|r$z|j |}W n
 ty   Y d S w tt||k d S tt||k d S d S r   )r2   rR   OverflowErrorr   r"   rv   )r&   dzvaluer  zr+   r+   r,   compare_array_value  s   z!TestLikeFuncs.compare_array_valueFc                 C   s  |rd|i}ni }| j D ]\}}||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 u rUt|j|j n	t|jt| | ||| ||fd|d|}t|j|j t|jj	 |d u rt|j|j n	t|jt| | ||| ||fd|d|}t|j|j t|jj
 |d u rt|j|j n	t|jt| | ||| ||fd|d|}t|j|j |jj
rt|jj
 nt|jj	 |d u rt|j|j n	t|jt| | ||| | jD ]}dD ]]}	||f|||	d|}
t|
j| |d u r4t|
j|j n	t|
jt| |	dksL|	dkrS|jj	rSt|
jj	 n|	dksb|	dkrh|jj
rht|
jj
 | |
|| q|jt|krtt||f||d	d|jttj||dd
j q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i |}tt||u  ||fddi|}tt||u d S )Nr  r2   r  r  r  r'   CFA)r2   r3   r  K)r2   r  c                   @   r;  )z4TestLikeFuncs.check_like_function.<locals>.MyNDArrayNr=  r+   r+   r+   r,   	MyNDArraye  r>  r#  r   r   r   r   subokF)rZ  r   r3   r"   r#   stridesr2   r  r  r  r  r   r   r  ndimrf  argsortr  rP   rQ   rR   )r&   like_functionr  r  r  r  r2   r  r   r  szr#  r7   r  r+   r+   r,   check_like_function  s   



z!TestLikeFuncs.check_like_functionc                 C      |  tjd d S r  )r*  r"   	ones_liker  r+   r+   r,   test_ones_likep  rB  zTestLikeFuncs.test_ones_likec                 C   r+  r  )r*  r"   rA  r  r+   r+   r,   test_zeros_likes  rB  zTestLikeFuncs.test_zeros_likec                 C   s   |  tjd  d S r   )r*  r"   rx  r  r+   r+   r,   test_empty_likev  rB  zTestLikeFuncs.test_empty_likec                 C   sV   |  tjdd |  tjdd |  tjdd |  tjdd |  tjtjd d S )Nr   Tr   r  gw/^@)r*  r"   	full_liker;  r  r+   r+   r,   test_filled_likey  s
   zTestLikeFuncs.test_filled_likelikefuncr2   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r6|jdks4J d S |jdks=J d S )	Nr1  r   rg   r  r   r2   )r1  r   )r   r   )r"   rD   r   r0  rw  r%  )r&   r2  r2   r7   r  r  r  r+   r+   r,   test_dtype_str_bytes  s   z"TestLikeFuncs.test_dtype_str_bytesN)F)rJ   rK   rL   __doc__r  r   r*  r-  r.  r/  r1  rE   r   r   r"   rx  r0  rA  r,  rw  bytesr3  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g d|d| _t ddd d d | _t jg d|d| _t jg d|d| _t jg d|d| _t jg d	|d| _t jg d
|d| _	t jg d|d| _
t jg d|d| _d S )Nr   r8   r   rH  r   )r?   r   r   )                   ,      4      :r9        )g       r<  r8  g      &r9  r<  )      .      6r>        0      $      r2  )r<  r9  r;  r:  r9  r8  r7  )r2  rA  r@  r?  r>  r>  r=  )	r7  r9  g      >g      Hg     Pg      Ug     Yg      Kg      3)r"   r#   r+  rD   xsr{  z1z1_4z1rz2z2rzs)r&   r5  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  r?   )r  r'  r"   	correlater+  r{  r   rC  rD  rF  rE  rG  rB  rH  r&   r  r+   r+   r,   rJ    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"   rI  r+  r{  r   rC  rF  rJ  r+   r+   r,   test_object  s
   
zTestCorrelate.test_objectc                 C   D   t d}t d}t || t|t d t|t d d S Nr`  r   )r"   r3  rI  r   r&   r  kr+   r+   r,   test_no_overwrite  
   

zTestCorrelate.test_no_overwritec                 C   sf   t jg dtd}t jg dtd}t jg dtd}|d d d  }t j||dd}t|| d S )N)r   r   r   y      @      ?r8   )r?   y              y      @      ?)y      @      rY   y       @      ?y      &@      @y             @y            r?   r  mode)r"   r#   r&  	conjugaterI  r   )r&   r+  r{  r_zr  r+   r+   r,   test_complex  s   zTestCorrelate.test_complexc                 C   s   t t tjtg tddd W d    n1 sw   Y  t t tjtdtg dd W d    d S 1 sBw   Y  d S )Nr  r  rR  )rE   rF   rG   r"   rI  r#   r3  r  r+   r+   r,   test_zero_size  s   "zTestCorrelate.test_zero_sizec                 C      t d}t d}t j||dd}tt t j||dd}W d    n1 s)w   Y  t|| tt t j||dd W d    n1 sJw   Y  tt j||dd| tt t j||d d W d    d S 1 srw   Y  d S )Nr`  r   validrR  vr?   r   )	r"   r3  rI  r   rw  r   r	   rG   r  )r&   r  rO  default_mode
valid_moder+   r+   r,   	test_mode     





"zTestCorrelate.test_modeN)
rJ   rK   rL   r  rJ  rK  rP  rV  rW  r]  r+   r+   r+   r,   r6    s    r6  c                   @   r#  )TestConvolvec                 C   s:   dgd }dgd }t t||dd tdd d S )NrI   r`  r   r   r   b   )r   r"   convolver  rN  r+   r+   r,   rK    s   

&zTestConvolve.test_objectc                 C   rL  rM  )r"   r3  ra  r   rN  r+   r+   r,   rP    rQ  zTestConvolve.test_no_overwritec                 C   rX  )Nr`  r   r  rR  r   r?   r   )	r"   r3  ra  r   rw  r   r	   rG   r  )r&   r  rO  r[  	full_moder+   r+   r,   r]    r^  zTestConvolve.test_modeN)rJ   rK   rL   rK  rP  r]  r+   r+   r+   r,   r_    s    r_  c                   @   s6   e Zd Zejdg ddd Zdd Zdd Zd	S )
TestArgwherer7  rV   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   argwherer3   flatr   )r&   r7  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 )NrY   r\  r   r   r   )r"   rD   r   r   rd  ry  r+   r+   r,   test_2D  s   zTestArgwhere.test_2Dc                 C   s(   t tg ddgdgdgdgg d S )N)r   r   r   r   r   r   r   r   r   )r   r"   rd  r  r+   r+   r,   	test_list  s   (zTestArgwhere.test_listN)	rJ   rK   rL   rE   r   r   rf  rg  rh  r+   r+   r+   r,   rc    s
    
rc  c                   @   r   )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   rk  NFOOr+   r  r+   r+   r,   r        z=TestStringFunction.test_set_string_function.<locals>.<lambda>T)reprrk  z
array([1])c                 S   rk  rj  r+   r  r+   r+   r,   r  #  rl  Fz[1])r"   r#   set_string_functionr   rm  rw  r   r+   r+   r,   test_set_string_function  s   z+TestStringFunction.test_set_string_functionN)rJ   rK   rL   ro  r+   r+   r+   r,   ri    s    ri  c                   @   r#  )TestRollc                 C   s.   t d}t |d}t|t g d d S )Nr=   r   )
rg   rh   r   r   r   r   r   rO   rY   rZ   )r"   rD   rollr   r#   )r&   r+  xrr+   r+   r,   test_roll1d*  s   
zTestRoll.test_roll1dc                 C   sz  t t dd}t |d}t|t g dg dg t j|ddd}t|t g dg d	g t j|ddd}t|t g d
g dg t j|ddd}t|t g dg d
g t j|ddd}t|t g dg d	g t j|ddd}t|t g dg d	g t j|ddd}t|t g d
g dg t j|ddd}t|t g dg dg t j|ddd}t|t g dg d
g t j|ddd}t|t g dg dg t j|ddd}t|t g d	g dg t j|ddd}t|t g dg dg t j|ddd}t|t g d
g dg t j|ddd}t|t g d
g dg d S )Nr=   r   rO   r   )rh   r   r   r   r   )r   rO   rY   rZ   rg   r   ri   rf   re   )r   r   r   r   r   )rh   rO   rY   rZ   rg   r|  r   )r?   r   )r   r?   )r   r   r   r   r   )rY   rZ   rg   rh   rO   r~  )r?   r?   r}  )r   r   r   r   r   )rg   rh   rO   rY   rZ   rY   r`   )r"   r   rD   rq  r   r#   )r&   x2x2rr+   r+   r,   test_roll2d/  s:    zTestRoll.test_roll2dc                 C   s&   t g }tt |dt g  d S r  )r"   r#   r   rq  ry  r+   r+   r,   test_roll_empty^  s   
zTestRoll.test_roll_emptyN)rJ   rK   rL   rs  rw  rx  r+   r+   r+   r,   rp  )  s    /rp  c                   @   s   e Zd Zi dddddddddd	d
dddddddddddddddddddddddddddZdd Zdd  Zd!S )"TestRollaxisr}  r   r|  r0   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   r1   )r   r   r   r   r9   r   r   r\  r   )r   r   r   r   r   r   )r   r   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 )	Nrt   r   r   r   r   r   r   rO   )r"   rD   r   r	   r  rollaxisr   r+   r+   r,   test_exceptionst  s
   zTestRollaxis.test_exceptionsc              	   C   sl  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 r|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 )Nrt   r   r   r   r   OWNDATA)rj   start)r"   rD   r   r  r   r3   r   r  tgtshaper  r#   rv   rw  )r&   r7   aindr   jr  i0r  r  i3ipjpr+   r+   r,   test_results{  s:   " zTestRollaxis.test_resultsN)rJ   rK   rL   r  r  r  r+   r+   r+   r,   ry  c  sJ    		
ry  c                   @   r   )TestMoveaxisc                 C   s<   t jddd}dD ]\}}t ||dj}t|| q
d S )NrO   rY   rZ   ))r   )rY   rZ   rO   )r   )rO   rZ   rY   )r   rX   )r?   rX   r?   r"   r  r   moveaxisr3   r   )r&   r+  sourcerJ  r)  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   rz  )r   r   r|  )r   r?   r}  r  r&   r+  r  destinationrJ  r)  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 )	Nr   r}  )r   r?   )r?   r   r   r?   r   r   )r"   r:   r  r  r3   r   )r&   r+  r  r  r)  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g dg ddfddgddgd	fddgddgd	ffD ]\}}}t |||j}t|| q/d S )
Nrz   r   r   r   r   )r   r   r   r   rV   )r   r   r   )r   r   r   r   )r"   r:   r  r3   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   r`   zdestination.*out of boundsrO   zrepeated axis in `source`zrepeated axis in `destination`zmust have the same number)r"   r  r   r
   r  r  rG   ry  r+   r+   r,   test_errors  s,   


zTestMoveaxis.test_errorsc                 C   sr   t jd}t |dd}t|j|j tt|t jj g d}t |dd}t|t| tt|t j	 d S )Nr   r   )
r"   r  r:   r  r   r3   r   MaskedArrayr  rP   )r&   r+  r  r+   r+   r,   test_array_likes  s   zTestMoveaxis.test_array_likesN)	rJ   rK   rL   r  r  r  r  r  r  r+   r+   r+   r,   r    s    	
r  c                   @   4   e Z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&   urZ  r  cpr+   r+   r,   test_2x2  s   
zTestCross.test_2x2c                 C   sP   ddg}g d}t g d}t ||}t|| t ||}t||  d S )Nr   r   rW   r=   r   r   r"   r#   r  r   r  r+   r+   r,   test_2x3     
zTestCross.test_2x3c                 C   sP   g d}g d}t g d}t ||}t|| t ||}t||  d S )Nr   rs   r   rY   r   r  r  r+   r+   r,   test_3x3  r  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 g dd}t g d	d}tt j||dd
| tt ||j|  tt ||d t g ddj}t ddgdj}t g dd}tt j||ddd| tt |j|j|  tt |j|jd t g dd}t g ddj}t g dd}tt j||dd| tt |j||  tt ||d d S )Nr   r   )r{   r   r   r   r   r   rW   r  )axisar   )r  rh   r   r  axisb)rO   r   rs   r  )r  )r"   tiler   r  r  )r&   r  rZ  r  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 q|d S )N)r   r   r   )rO   r   )r   rO   r   )r=   r   rO   rt  r   r   r  )r=   rO   r   r   r   )r=   r   rO   rZ   )rO   rZ   r   )r  axisc)r=   rO   r   rZ   r   r`   )r   r   r   r   )r  r  )r"   r3  r   r  r3   r	   r  r  )r&   r  rZ  r  r+   r+   r,   test_broadcasting_shapes%  s"   






z"TestCross.test_broadcasting_shapesN)rJ   rK   rL   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 )	Nr  r(  r   r   rO   )rO   rO   )r3   rt  )r"   r3  linspacerP   outerr   )arr1arr2arr3out1out2res1r+   r+   r,   test_outer_out_param9  s   


r  c                   @   sd   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
g ddd ZdS )TestIndicesc              	   C   sb   t d\}}t|t g dg dg dg dg t|t g dg dg dg dg d S )Nr    r  r   r   r   rV   r"   r   r   r#   r  r+   r+   r,   test_simpleF  s   zTestIndices.test_simplec                 C   sH   t d\}t|t g d t jddd\}t|t g d d S )N)r   rz   Tsparser  ry  r+   r+   r,   test_single_inputQ  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_inputX  s   zTestIndices.test_scalar_inputc                 C   sL   t jddd\}}t|t dgdgdgdgg t|t g dg d S )	Nr    Tr  r   r   r   r   rV   r  r  r+   r+   r,   r  ^  s    zTestIndices.test_sparser2   dims)r+   r/   r    c                 C   sD   t j||d}t|j|k t j||ddD ]	}t|j|k qd S )Nr8   T)r2   r  )r"   r   r   r2   )r&   r2   r  indsrc   r+   r+   r,   r  c  s
   zTestIndices.test_return_typeN)rJ   rK   rL   r  r  r  r  rE   r   r   r"   r   r   r;   r   r  r+   r+   r+   r,   r  D  s    r  c                   @   sT   e Zd Zg 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 )TestRequire)r  r@  
CONTIGUOUSr  r?  FORTRANr'   ALIGNEDW	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 )Nr~  )junkr  r7   F)writer  r  r  r  r'   )r"   r:   setflagsr   r  )r&   r2   rc   r7   r+   r+   r,   generate_all_falset  s   zTestRequire.generate_all_falsec                 C   sx   |d u r|j }t|||g}t|j|  t|j |k t|d |g}|d dkr3t||u  d S t|j|  d S )Nr   r  )r2   r"   requirer   r  )r&   flagr2   rc   r  r   r+   r+   r,   set_and_check_flag  s   zTestRequire.set_and_check_flagc                 C   sH   ddg}g d}t ||| jD ]\}}}| |}| ||| qd S )Nr  r  )Nr  r  )r9  r:  
flag_namesr  r  )r&   idfdidtypefdtyper  r7   r+   r+   r,   test_require_each  s   
zTestRequire.test_require_eachc                 C   s    |  d}tttj|d d d S )Nr  Q)r  r	   KeyErrorr"   r  r   r+   r+   r,   test_unknown_requirement  s   
z$TestRequire.test_unknown_requirementc                 C   s`   t g ddg d}t|jd  t|jd  t|jd  t|jdk t|g d d S )Nr   r  )r  r'   r  r  r  r'   )r"   r  r   r  r2   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 )Nr  r  r  )r  r	   rG   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u  d S )Nc                   @   r;  )z4TestRequire.test_ensure_array.<locals>.ArraySubclassNr=  r+   r+   r+   r,   ArraySubclass  r>  r  r~  E)r"   rP   r  r   rR   )r&   r  r7   r  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                   @   r;  )z8TestRequire.test_preserve_subtype.<locals>.ArraySubclassNr=  r+   r+   r+   r,   r    r>  r  r~  )r"   rP   r  r  )r&   r  r  r7   r+   r+   r,   test_preserve_subtype  s
   
z!TestRequire.test_preserve_subtypeN)rJ   rK   rL   r  r  r  r  r  r  r  r  r  r+   r+   r+   r,   r  m  s    r  c                   @   r  )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 ],}t|jd	 t|jd
 t|jd
 t|jd t||j	D ]\}}t
||ju  qqdd S )Nr]  )rO   rY   r   )rZ   )rO   r   rZ   r   r   r   r?   rX   r   r   )r"   r  	broadcastr   r3   r&  r7  numiterr  r  r   base)r&   arrsmitsmitr7   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
u  d S )NrX   r   r   r   )r"   r  r  r   r3   r&  r7  r  r   r  r  )r&   r  r  r+   r+   r,   test_broadcast_single_arg  s   
z'TestBroadcast.test_broadcast_single_argc                 C   sZ   t d}tdD ]!}|g| }|dkrttt jg|R   q	t j| }t|j| q	d S )Nr  #   r&  )r"   r  r  r	   rG   r  r   r  )r&   rc   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 i }t|j|j t|j|j t|j|j t|j|j t|j	d j
|j	d j
u  ttt jdfi ddi d S )NrX   r   r   r+  )r"   r  r  r   r3   r&  r7  r  r   r  r  r	   rG   )r&   r  r  mit2r+   r+   r,   test_broadcast_error_kwargs  s   
z)TestBroadcast.test_broadcast_error_kwargsc                 C   sT   t jtdd tg dgdgdggddg W d    d S 1 s#w   Y  d S )Nz5arg 0 with shape \(1, 3\) and arg 2 with shape \(2,\)rA   r   r   rO   rY   rZ   )rE   rF   rG   r"   r  r  r+   r+   r,   !test_shape_mismatch_error_message  s   ""z/TestBroadcast.test_shape_mismatch_error_messageN)rJ   rK   rL   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"   rP   r   )r&   rj   r2   r^   r+   r+   r,   r     r  zTestKeepdims.sub_array.sum)NNN)rJ   rK   rL   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"   rD   rQ   r	   r  r   )r&   	sub_classr+  r+   r+   r,   
test_raise  s   zTestKeepdims.test_raiseN)rJ   rK   rL   r"   rP   r  r  r+   r+   r+   r,   r    s    r  c                   @   rj  )TestTensordotc                 C   sL   t d}t d}t ||d}t|t || t|t d|| d S )Nr  r{  r   zij,jk)r"   rP   	tensordotr   doteinsum)r&   r7   r  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&   arr_0dretr+   r+   r,   test_zero_dimensional  s   
z#TestTensordot.test_zero_dimensionalN)rJ   rK   rL   r  r  r+   r+   r+   r,   r    s    r  )Jr  r   r9  rt  rE   r   decimalr   r   r"   
numpy.corer   numpy.randomr   r   r   numpy.testingr   r   r	   r
   r   r   r   r   r   r   numpy.core._rational_testsr   
hypothesisr   r   r  hypothesis.extrar  r   rU   r   r   r  r$  rM  rv  r  	Exceptionr<  r?  rr  r  r  r  r  r  r  r  r  r  r  r  r  r6  r_  rc  ri  rp  ry  r  r  r  r  r  r  r  r  r+   r+   r+   r,   <module>   s    0< Z!WdQf   ?k  Q*l    vU 'G &H%:>JN)J9