
    J/Ph_                    N   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
mZmZmZ d dlmZ d dlmZ d dlmZmZ d dlmZmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlm Z  e!j"        dk    Z#ej$        %                    d          Z&d Z'd Z(d Z)d Z*d Z+d Z, G d de          Z- G d de-          Z. G d de.e          Z/ G d de-e          Z0 G d de          Z1 G d de          Z2 G d  d!e          Z3 G d" d#e3          Z4e45                                  G d$ d%e3          Z6e65                                  G d& d'e3          Z7e75                                  G d( d)e3          Z8e85                                  G d* d+e3          Z9e95                                  G d, d-e3          Z:e:5                                  G d. d/e3          Z;e;5                                  G d0 d1e3          Z<e<5                                  G d2 d3e3          Z=e=5                                  G d4 d5e3          Z>e>5                                  G d6 d7e          Z? G d8 d9e          Z@ G d: d;e          ZA G d< d=e          ZBeCd>k    r ejD                     dS dS )?    N)guvectorizenjittypeof	vectorize)types)
from_dtype)LoweringErrorTypingError)TestCaseMemoryLeakMixin)supported_ufuncs)numpy_support)
cpu_target)BaseContext)ufunc_db   win32c                 F     t          j                    fd            }dS )zAn 'expectedFailure' like decorator that only expects compilation errors
    caused by unimplemented functions that fail in no-python modec                      	  | i | n3# t           $ r& t          j        t          j                              w xY wt          j        N)r
   unittest_ExpectedFailuresysexc_info_UnexpectedSuccess)argskwargsfuncs     W/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/tests/test_ufuncs.pywrapperz_unimplemented.<locals>.wrapper   s[    	<D$!&!!!! 	< 	< 	<+CLNN;;;	<))s    0<N)	functoolswraps)r   r    s   ` r   _unimplementedr#      s=     _T* * * * * * *    c                 *   i }d                     d t          | j                  D                       }d                    || j                  }t          |t                      |           |d         }d                    | j                  |_        |S )N,c                 8    g | ]}d                      |          S )za{0})format).0is     r   
<listcomp>z'_make_ufunc_usecase.<locals>.<listcomp>(   s$    EEEQa((EEEr$   zdef fn({0}):
    np.{1}({0})fnz{0}_usecase)joinrangenargsr(   __name__execglobals)ufuncldictarg_strfunc_strr,   s        r   _make_ufunc_usecaser7   &   s    EhhEE%2D2DEEEFFG.55gu~NNH799e$$$	tB&&u~66BKIr$   c                     i }t          d                    |           t                      |           |d         }d                    t          |                     |_        |S )Nzdef fn(x):
    return {0}(x)r,   usecase_{0}r1   r(   r2   hashr0   ufunc_opr4   r,   s      r   _make_unary_ufunc_op_usecaser>   0   sU    E	(	/	/	9	9799eLLL	tB&&tH~~66BKIr$   c                     i }t          d                    |           t                      |           |d         }d                    t          |                     |_        |S )Nzdef fn(x,y):
    return x{0}yr,   r9   r:   r<   s      r   _make_binary_ufunc_op_usecaser@   8   sU    E	)	0	0	:	:GIIuMMM	tB&&tH~~66BKIr$   c                     t           t                    rbi }t          d                               t	                      |           |d         }d                    t                               |_        n fd}|}|S )zGenerates a function to be compiled that performs an inplace operation

    ufunc_op can be a string like '+=' or a function like operator.iadd
    zdef fn(x,y):
    x{0}yr,   r9   c                       | |           d S r    )xyr=   s     r   
inplace_opz2_make_inplace_ufunc_op_usecase.<locals>.inplace_opK   s    HQNNNNNr$   )
isinstancestrr1   r(   r2   r;   r0   )r=   r4   r,   rF   s   `   r   _make_inplace_ufunc_op_usecaserI   @   s    
 (C   &--h77EJJJ4[#**4>>::	 	 	 	 	Ir$   c                 6    d t          | |          D             S )z5Convert python values into numpy scalar objects.
    c                 |    g | ]9\  }}t          j        t          |                                        |          :S rC   )npdtyperH   type)r)   tyvals      r   r+   z#_as_dtype_value.<locals>.<listcomp>T   s:    IIIGBBHSWW""3''IIIr$   )zip)tyargsr   s     r   _as_dtype_valuerS   Q   s#     JIs647H7HIIIIr$   c                   `     e Zd Z fdZ ej        d          dd            Z	 	 ddZ xZS )	BaseUFuncTestc                    t          t          |                                            t          j        d          t
          j        ft          j        d          t
          j        ft          j        d          t
          j        ft          j        d          t
          j        ft          j        d          t
          j        ft          j        d          t
          j        ft          j        d          t
          j        ft          j        d          t
          j        ft          j        d          t
          j        ft          j        d          t
          j        ft          j	        d          t
          j	        ft          j	        d          t
          j	        ft          j	        d          t
          j	        ft          j
        d          t
          j
        ft          j
        d          t
          j
        ft          j
        d          t
          j
        ft          j        ddgd          t          j        t
          j        dd	          ft          j        ddgd
          t          j        t
          j        dd	          ft          j        g dd          t          j        t
          j        dd	          ft          j        g dd          t          j        t
          j        dd	          ft          j        g dd          t          j        t
          j	        dd	          ft          j        g dd          t          j        t
          j
        dd	          ft          j        ddgt          j                  t          j        t
          j        dd	          ft          j        ddgt          j                  t          j        t
          j        dd	          ft          j        ddgt          j                  t          j        t
          j        dd	          ft          j        ddgt          j                  t          j        t
          j        dd	          fg| _        d S )Nr                          ?u4rM   Cu8)rX   r   rW   i4i8)rY   rZ   r[   f4f8)superrU   setUprL   uint32r   int32uint64int64float32float64arrayArrayint8int16uint8uint16inputs)self	__class__s    r   re   zBaseUFuncTest.setUpY   s   mT""((***Yq\\5<(Yq\\5<(Xb\\5;'Xa[[%+&Xa[[%+&Yq\\5<(Yq\\5<(Xb\\5;'Xa[[%+&Xa[[%+&Zu}-Z__em,Z__em,Zu}-Z__em,Z__em,Xqe4(((%+elAs*K*KLXqe4(((%+elAs*K*KLXhhhd+++U[a-M-MNXhhhd+++U[a-M-MNX&&&d333[3//1X&&&d333[3//1 Xqe27+++U[Q-L-LMXqe28,,,ek%+q#.N.NOXqe28,,,ek%+q#.N.NOXqe29---[q#..0A"
r$   N)maxsizeFc                 8     t          ||d          |          S )NT)_nrtno_rewrites)r   )rs   pyfuncr   nrts       r   _compilezBaseUFuncTest._compile   s#     6tDs555f===r$   c                    |}t          |t          j                  r|j        }|j        }nd}|t          j        v r0|rt          j        ||d          }nt          j        ||d          }nm|t          j        v r0|rt          j        ||d          }nFt          j        ||d          }n/|rt          j        ||d          }nt          j        ||d          }|S )NrW   r^   )rG   r   rm   ndimrM   signed_domainunsigned_domain)rs   
input_typeint_output_typefloat_output_typerO   r}   output_types          r   _determine_output_typez$BaseUFuncTest._determine_output_type   s    b%+&& 	7DBBD$$$ 9#k/4EE#k"dC885((( 9#k/4EE#k"dC88  9#k*;T3GG#k"dC88r$   )F)NN)	r0   
__module____qualname__re   r!   	lru_cacher{   r   __classcell__rt   s   @r   rU   rU   W   s        $
 $
 $
 $
 $
L Y&&&> > > '&>
 BF15       r$   rU   c                   .    e Zd Zd Zg g ddddfdZd ZdS )BasicUFuncTestc                      t          |          S r   )r7   rs   r3   s     r   r7   z"BasicUFuncTest._make_ufunc_usecase   s    "5)))r$   NifcFc                 4   |                      t                     |                     |          }t          | j                  |z   }	|	D ]L}
|
d         }|
d         }t          |t                    }|r|n|f|j        z  ||v r=|rt          j	        d         dk               r^d         j
        j        |vrs|                     |||          }|f|j        z  }|f|j        z  }||z   }|                     ||          }t          d         t          j                  rfd|D             }fd|D             }nd |D             }d |D             }d}t!          j        d	          5 }t!          j        d
            |g |R   d}|D ]E}t'          |j        t*                    r)t-          |j                                      |          rd}F	 d d d            n# 1 swxY w Y    |g |R   t3          ||          D ]\  }}d                    g d                              |j        |||||j
        |          }	 t          j                            ||d|           d# t<          $ r |rt?          d|
||           n Y w xY wNd S )Nr   rW   c                 f    g | ]-}t          j        d          j        |j        j                  .S r   r]   rL   zerosshaperM   namer)   out_tyr   s     r   r+   z3BasicUFuncTest.basic_ufunc_test.<locals>.<listcomp>   sL         HT!W]#)<#46 6 6  r$   c                 f    g | ]-}t          j        d          j        |j        j                  .S r   r   r   s     r   r+   z3BasicUFuncTest.basic_ufunc_test.<locals>.<listcomp>   sC        HT!W]&,2CDDD  r$   c                 N    g | ]"}t          j        d |j        j                  #S rW   r]   rL   r   rM   r   r)   r   s     r   r+   z3BasicUFuncTest.basic_ufunc_test.<locals>.<listcomp>   s<        HQfl&7888  r$   c                 N    g | ]"}t          j        d |j        j                  #S r   r   r   s     r   r+   z3BasicUFuncTest.basic_ufunc_test.<locals>.<listcomp>   s<        HQfl&7888  r$   FT)recordalwayszinvalid value encountered
)zufunc '{0}' failedzinputs ({1}):z{2}zgot({3})z{4}zexpected ({5}):z{6}   )decimalerr_msgz!Output mismatch for invalid input) reset_module_warningsr0   r7   listrr   rG   tupleninrL   anyrM   kindr   noutr{   ndarraywarningscatch_warningssimplefilter
issubclasscategoryRuntimeWarningrH   message
startswithrQ   r-   r(   testingassert_array_almost_equalAssertionErrorprint)rs   r3   skip_inputsadditional_inputsr   r   kindspositive_onlyry   rr   input_tupleinput_operandr   is_tupler   input_typesoutput_typesargtyscfuncresultsexpectedinvalid_flagwarnlistwarnmsgthiswarn
expected_iresult_imsgr   s                               @r   basic_ufunc_testzBasicUFuncTest.basic_ufunc_test   s    	""8,,,))%00dk""%66! Q	 Q	K'NM$QJ!-77H 4$%'%)3[(( Q!!4!4  Q"%//55O->@ @K &-%)3K'>EJ6L </FMM&&11E$q'2:..     #/  
   ".  
 ".   ".  
 !L(555 	,%h///((x((((5 ( , ,H"8#4nEE , #H$4 5 5 @ @ I I,'+	,	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, E"4"'""""(+Hg(>(>  $
Hii !# !# !# $ $ %+F5>+5}+6+5+;Z%I %I	 J88"H ! # 9 % % % % &   # A)8ZA A A A A A{Q	 Q	s%   1A)G''G+	.G+	#I00 JJc                 Z   |                      |           t          j        dk     rd S t          j        d          t          j        d          ft          j        d          t          j        d          ft          j        d          t          j        d          ft          j        d          t          j        d          ft          j        d          t          j        d          ft          j        d          t          j        d          ft          j        d          t          j        d          ft          j        d          t          j        d          ft          j        d          t          j        d          ft          j        d          t          j        d          ft          j        d          t          j        d          ft          j        d          t          j        d          ft          j        g dt          j                  t          j        g dt          j                  ft          j        g dt          j                  t          j        g dt          j                  ff}|                     |          }|D ]\  }}t          |          t          |          f}t          j
        t          j        dd          }||fz   }|                     ||          }	t          |t          j                  r&t          j        |j        t          j                  }
n t          j        dt          j                  }
t          j        |
          } ||||            |	|||
           t          j                            ||
           d S )	N)rW      rX   r   rW   )rX   rX   r   r   rW   rW   r]   )r   rW   r   rW   r   rW   r^   )r   r   numpy_versionrL   ri   rh   rl   r7   r   r   rm   bool_r{   rG   r   r   r   
zeros_liker   assert_equal)rs   comparison_ufuncr   ry   abr   r   r   r   resultr   s               r   signed_unsigned_cmp_testz'BasicUFuncTest.signed_unsigned_cmp_test  s   .///&00F Xb\\29Q<<(Xb\\29Q<<(Xa[[")A,,'Xa[[")A,,'Xa[[")A,,'Xa[[")A,,'Yq\\28B<<(Yq\\28A;;'Yq\\28A;;'Yq\\28B<<(Yq\\28A;;'Yq\\28A;;'X***"(;;;X(((	:::< X(((	:::X***"(;;;=%
, ))*:;;% 	6 	6DAq!!99fQii0K+ek1c::K K>1FMM&&11E!RZ(( 5!':::!28444}V,,HF1a"""E!QJ##Hf5555	6 	6r$   )r0   r   r   r7   r   r   rC   r$   r   r   r      s\        * * * 35)-$E] ] ] ]~06 06 06 06 06r$   r   c                   f   e Zd Zd^dZd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zej        fdZd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d  Z#d! Z$d" Z%d# Z&d$ Z'd% Z(d& Z)d' Z*d( Z+d) Z,d* Z-d+ Z.d, Z/d- Z0d. Z1d/ Z2d0 Z3d1 Z4d2 Z5d3 Z6d4 Z7d5 Z8d6 Z9d7 Z:d8 Z;d9 Z<d: Z=d; Z>d< Z?d= Z@d> ZAd? ZBd@ ZCdA ZDdB ZEdC ZFdD ZGdE ZHdF ZIdG ZJdH ZKdI ZLdJ ZMdK ZNdL ZOdM ZPdN ZQdO ZRdP ZSdQ ZTeUdR             ZVeUdS             ZWdT ZXdU ZYdV ZZdW Z[dX Z\dY Z]dZ Z^d[ Z_d\ Z`d] ZadS )_
TestUFuncsNc                     t           j        t           j        t          j        t           j        dd          t          j        t           j        dd          g}|                     ||           d S NrW   r^   )r   )r   rj   rk   rm   r   )rs   r   r   s      r   basic_int_ufunc_testzTestUFuncs.basic_int_ufunc_test7  sZ    MMKq#..Kq#..	
 	d<<<<<r$   c                 D    |                      t          j                   d S r   )r   rL   addrs   s    r   test_add_ufunczTestUFuncs.test_add_ufuncC  s    bf%%%%%r$   c                 D    |                      t          j                   d S r   )r   rL   subtractr   s    r   test_subtract_ufunczTestUFuncs.test_subtract_ufuncF      bk*****r$   c                 D    |                      t          j                   d S r   )r   rL   multiplyr   s    r   test_multiply_ufunczTestUFuncs.test_multiply_ufuncI  r   r$   c                 d    d }t           j        }|                     t          j        |           d S Nr   )r   rk   r   rL   dividers   int_out_types     r   test_divide_ufunczTestUFuncs.test_divide_ufuncL  s>     }bi.: 	 	< 	< 	< 	< 	<r$   c                 H    |                      t          j        d           d S Nfr   )r   rL   	logaddexpr   s    r   test_logaddexp_ufunczTestUFuncs.test_logaddexp_ufuncU  #    bl#66666r$   c                 H    |                      t          j        d           d S r   )r   rL   
logaddexp2r   s    r   test_logaddexp2_ufuncz TestUFuncs.test_logaddexp2_ufuncX  s#    bm377777r$   c                 \    |                      t          j        t          j                   d S r   )r   rL   true_divider   rk   r   s    r   test_true_divide_ufuncz!TestUFuncs.test_true_divide_ufunc[  s2    bn.3m 	 	= 	= 	= 	= 	=r$   c                 D    |                      t          j                   d S r   )r   rL   floor_divider   s    r   test_floor_divide_ufuncz"TestUFuncs.test_floor_divide_ufunc_  s    bo.....r$   c                     t          j        t           j        dd          t           j        g}|                     t          j        t           j        |           d S )NrW   r^   )r   r   )r   rm   rf   r   rL   negativeri   )rs   r   s     r   test_negative_ufunczTestUFuncs.test_negative_ufuncb  sR     {5<C88%,Gbk5;*5 	 	7 	7 	7 	7 	7r$   c                 D    |                      t          j                   d S r   )r   rL   positiver   s    r   test_positive_ufunczTestUFuncs.test_positive_ufunci  r   r$   c                 H    |                      t          j        d           d S )NT)r   )r   rL   powerr   s    r   test_power_ufunczTestUFuncs.test_power_ufuncl  s#    bhd;;;;;r$   c                 H    |                      t          j        d           d S )Nfcr   )r   rL   float_powerr   s    r   test_float_power_ufuncz!TestUFuncs.test_float_power_ufunco  s#    bnD99999r$   c                 H    |                      t          j        d           d S Niur   )r   rL   gcdr   s    r   test_gcd_ufunczTestUFuncs.test_gcd_ufuncr  #    bfD11111r$   c                 H    |                      t          j        d           d S r  )r   rL   lcmr   s    r   test_lcm_ufunczTestUFuncs.test_lcm_ufuncu  r  r$   c                 D    |                      t          j                   d S r   )r   rL   	remainderr   s    r   test_remainder_ufunczTestUFuncs.test_remainder_ufuncx      bl+++++r$   c                     t          j        t          j        t           j                  j                  t          j        d          ft          j        fg}|                     t           j        d|           d S )N   ifcur   r   )rL   rh   iinfomaxr   r   mod)rs   r   s     r   test_mod_ufunczTestUFuncs.test_mod_ufunc{  sq    i++/00")B--@%,O
 	bfF0A 	 	C 	C 	C 	C 	Cr$   c                 D    |                      t          j                   d S r   )r   rL   fmodr   s    r   test_fmod_ufunczTestUFuncs.test_fmod_ufunc      bg&&&&&r$   c                 8   t          j        t          j        t           j                  j                  t          j        ft          j        t          j        t           j                  j                  t          j        ft          j        t          j        t           j                  j                  t          j        ft          j	        t          j        t           j	                  j                  t          j	        fg}| 
                    ||           d S )N)r   )rL   rf   r  r  r   rh   rj   finfominrk   r   )rs   r3   r   s      r   test_abs_ufunczTestUFuncs.test_abs_ufunc  s    Yrx	**.//>Yrx	**.//>Z,,0115=AZ,,0115=A	
 	e0A 	 	C 	C 	C 	C 	Cr$   c                 F    |                      t          j                   d S )N)r3   )r(  rL   absoluter   s    r   test_absolute_ufunczTestUFuncs.test_absolute_ufunc  s!    "+.....r$   c                 H    |                      t          j        d           d S r   )r   rL   fabsr   s    r   test_fabs_ufunczTestUFuncs.test_fabs_ufunc  #    bgS11111r$   c                 H    |                      t          j        d           d S Ncfr   )r   rL   rintr   s    r   test_rint_ufunczTestUFuncs.test_rint_ufunc  #    bgT22222r$   c                 D    |                      t          j                   d S r   )r   rL   signr   s    r   test_sign_ufunczTestUFuncs.test_sign_ufunc  r$  r$   c                 D    |                      t          j                   d S r   )r   rL   conjr   s    r   test_conj_ufunczTestUFuncs.test_conj_ufunc  r$  r$   c                 H    |                      t          j        d           d S r1  )r   rL   expr   s    r   test_exp_ufunczTestUFuncs.test_exp_ufunc  r  r$   c                 H    |                      t          j        d           d S r1  )r   rL   exp2r   s    r   test_exp2_ufunczTestUFuncs.test_exp2_ufunc  r5  r$   c                 H    |                      t          j        d           d S r1  )r   rL   logr   s    r   test_log_ufunczTestUFuncs.test_log_ufunc  r  r$   c                 H    |                      t          j        d           d S r1  )r   rL   log2r   s    r   test_log2_ufunczTestUFuncs.test_log2_ufunc  r5  r$   c                 H    |                      t          j        d           d S r1  )r   rL   log10r   s    r   test_log10_ufunczTestUFuncs.test_log10_ufunc  #    bhd33333r$   c                 H    |                      t          j        d           d S r1  )r   rL   expm1r   s    r   test_expm1_ufunczTestUFuncs.test_expm1_ufunc  rK  r$   c                 H    |                      t          j        d           d S r1  )r   rL   log1pr   s    r   test_log1p_ufunczTestUFuncs.test_log1p_ufunc  rK  r$   c                 H    |                      t          j        d           d S r1  )r   rL   sqrtr   s    r   test_sqrt_ufunczTestUFuncs.test_sqrt_ufunc  r5  r$   c                 D    |                      t          j                   d S r   )r   rL   squarer   s    r   test_square_ufunczTestUFuncs.test_square_ufunc  s    bi(((((r$   c                 H    |                      t          j        d           d S r   )r   rL   cbrtr   s    r   test_cbrt_ufunczTestUFuncs.test_cbrt_ufunc  r/  r$   c                    t          j        t           j        dd          t           j        t          j        t           j        dd          t           j        t          j        t           j        dd          t           j        t          j        t           j        dd          t           j        g}|                     t          j        |           d S r   )	r   rm   rf   rg   rh   ri   r   rL   
reciprocalrs   to_skips     r   test_reciprocal_ufuncz TestUFuncs.test_reciprocal_ufunc  s     ;u|Q44el;u{As33U[;u|Q44el;u{As33U[B 	bmAAAAAr$   c                 D    |                      t          j                   d S r   )r   rL   	conjugater   s    r   test_conjugate_ufunczTestUFuncs.test_conjugate_ufunc  r  r$   c                 H    |                      t          j        d           d S r1  )r   rL   sinr   s    r   test_sin_ufunczTestUFuncs.test_sin_ufunc  r  r$   c                 H    |                      t          j        d           d S r1  )r   rL   cosr   s    r   test_cos_ufunczTestUFuncs.test_cos_ufunc  r  r$   c                 H    |                      t          j        d           d S r1  )r   rL   tanr   s    r   test_tan_ufunczTestUFuncs.test_tan_ufunc  r  r$   c                 H    |                      t          j        d           d S r1  )r   rL   arcsinr   s    r   test_arcsin_ufunczTestUFuncs.test_arcsin_ufunc  #    bit44444r$   c                 H    |                      t          j        d           d S r1  )r   rL   arccosr   s    r   test_arccos_ufunczTestUFuncs.test_arccos_ufunc  ro  r$   c                 H    |                      t          j        d           d S r1  )r   rL   arctanr   s    r   test_arctan_ufunczTestUFuncs.test_arctan_ufunc  ro  r$   c                 H    |                      t          j        d           d S r1  )r   rL   arctan2r   s    r   test_arctan2_ufunczTestUFuncs.test_arctan2_ufunc  #    bj55555r$   c                 H    |                      t          j        d           d S r   )r   rL   hypotr   s    r   test_hypot_ufunczTestUFuncs.test_hypot_ufunc  #    bhc22222r$   c                 H    |                      t          j        d           d S r1  )r   rL   sinhr   s    r   test_sinh_ufunczTestUFuncs.test_sinh_ufunc  r5  r$   c                 H    |                      t          j        d           d S r1  )r   rL   coshr   s    r   test_cosh_ufunczTestUFuncs.test_cosh_ufunc  r5  r$   c                 H    |                      t          j        d           d S r1  )r   rL   tanhr   s    r   test_tanh_ufunczTestUFuncs.test_tanh_ufunc  r5  r$   c                 H    |                      t          j        d           d S r1  )r   rL   arcsinhr   s    r   test_arcsinh_ufunczTestUFuncs.test_arcsinh_ufunc  ry  r$   c                 H    |                      t          j        d           d S r1  )r   rL   arccoshr   s    r   test_arccosh_ufunczTestUFuncs.test_arccosh_ufunc  ry  r$   c                    t          j        t           j        dd          t           j        t          j        t           j        dd          t           j        t          j        t           j        dd          t           j        t          j        t           j        dd          t           j        g}|                     t          j        |d           d S )NrW   r^   r2  )r   r   )	r   rm   rf   rg   rh   ri   r   rL   arctanhr]  s     r   test_arctanh_ufunczTestUFuncs.test_arctanh_ufunc  s     ;u|Q44el;u{As33U[;u|Q44el;u{As33U[B
 	bjgTJJJJJr$   c                 H    |                      t          j        d           d S r   )r   rL   deg2radr   s    r   test_deg2rad_ufunczTestUFuncs.test_deg2rad_ufunc  #    bj44444r$   c                 H    |                      t          j        d           d S r   )r   rL   rad2degr   s    r   test_rad2deg_ufunczTestUFuncs.test_rad2deg_ufunc  r  r$   c                 H    |                      t          j        d           d S r   )r   rL   degreesr   s    r   test_degrees_ufunczTestUFuncs.test_degrees_ufunc	  r  r$   c                 H    |                      t          j        d           d S r   )r   rL   radiansr   s    r   test_radians_ufunczTestUFuncs.test_radians_ufunc  r  r$   c                 D    |                      t          j                   d S r   )r   rL   bitwise_andr   s    r   test_bitwise_and_ufuncz!TestUFuncs.test_bitwise_and_ufunc      !!".11111r$   c                 D    |                      t          j                   d S r   )r   rL   
bitwise_orr   s    r   test_bitwise_or_ufuncz TestUFuncs.test_bitwise_or_ufunc  s    !!"-00000r$   c                 D    |                      t          j                   d S r   )r   rL   bitwise_xorr   s    r   test_bitwise_xor_ufuncz!TestUFuncs.test_bitwise_xor_ufunc  r  r$   c                 D    |                      t          j                   d S r   )r   rL   invertr   s    r   test_invert_ufunczTestUFuncs.test_invert_ufunc  s    !!"),,,,,r$   c                 D    |                      t          j                   d S r   )r   rL   bitwise_notr   s    r   test_bitwise_not_ufuncz!TestUFuncs.test_bitwise_not_ufunc  r  r$   c                 D    |                      t          j                   d S r   )r   rL   greaterr   s    r   test_greater_ufunczTestUFuncs.test_greater_ufunc-  s    %%bj11111r$   c                 D    |                      t          j                   d S r   )r   rL   greater_equalr   s    r   test_greater_equal_ufuncz#TestUFuncs.test_greater_equal_ufunc0  s    %%b&677777r$   c                 D    |                      t          j                   d S r   )r   rL   lessr   s    r   test_less_ufunczTestUFuncs.test_less_ufunc3  s    %%bg.....r$   c                 D    |                      t          j                   d S r   )r   rL   
less_equalr   s    r   test_less_equal_ufuncz TestUFuncs.test_less_equal_ufunc6  s    %%bm44444r$   c                 D    |                      t          j                   d S r   )r   rL   	not_equalr   s    r   test_not_equal_ufunczTestUFuncs.test_not_equal_ufunc9  s    %%bl33333r$   c                 D    |                      t          j                   d S r   )r   rL   equalr   s    r   test_equal_ufunczTestUFuncs.test_equal_ufunc<  s    %%bh/////r$   c                 D    |                      t          j                   d S r   )r   rL   logical_andr   s    r   test_logical_and_ufuncz!TestUFuncs.test_logical_and_ufunc?      bn-----r$   c                 D    |                      t          j                   d S r   )r   rL   
logical_orr   s    r   test_logical_or_ufuncz TestUFuncs.test_logical_or_ufuncB  s    bm,,,,,r$   c                 D    |                      t          j                   d S r   )r   rL   logical_xorr   s    r   test_logical_xor_ufuncz!TestUFuncs.test_logical_xor_ufuncE  r  r$   c                 D    |                      t          j                   d S r   )r   rL   logical_notr   s    r   test_logical_not_ufuncz!TestUFuncs.test_logical_not_ufuncH  r  r$   c                 D    |                      t          j                   d S r   )r   rL   maximumr   s    r   test_maximum_ufunczTestUFuncs.test_maximum_ufuncK      bj)))))r$   c                 D    |                      t          j                   d S r   )r   rL   minimumr   s    r   test_minimum_ufunczTestUFuncs.test_minimum_ufuncN  r  r$   c                 D    |                      t          j                   d S r   )r   rL   fmaxr   s    r   test_fmax_ufunczTestUFuncs.test_fmax_ufuncQ  r$  r$   c                 D    |                      t          j                   d S r   )r   rL   fminr   s    r   test_fmin_ufunczTestUFuncs.test_fmin_ufuncT  r$  r$   c                     t          j        ddgt           j                  t          j        t          j        dd          fgS )NTFr]   rW   r^   )rL   rl   r   r   rm   r   s    r   bool_additional_inputsz!TestUFuncs.bool_additional_inputsZ  s<    XtUm28444[a--/
 	
r$   c                 n    |                      t          j        d|                                            d S Nifcbr  )r   rL   isfiniter  r   s    r   test_isfinite_ufunczTestUFuncs.test_isfinite_ufunc`  s?    Kv"99;; 	 	
 	
 	
 	
 	
r$   c                 n    |                      t          j        d|                                            d S r  )r   rL   isinfr  r   s    r   test_isinf_ufunczTestUFuncs.test_isinf_ufuncf  ?    HF"99;; 	 	
 	
 	
 	
 	
r$   c                 n    |                      t          j        d|                                            d S r  )r   rL   isnanr  r   s    r   test_isnan_ufunczTestUFuncs.test_isnan_ufuncl  r  r$   c                 D    |                      t          j                   d S r   )r   rL   signbitr   s    r   test_signbit_ufunczTestUFuncs.test_signbit_ufuncr  r  r$   c                 H    |                      t          j        d           d S r   )r   rL   copysignr   s    r   test_copysign_ufunczTestUFuncs.test_copysign_ufuncu  s#    bk55555r$   c                 H    |                      t          j        d           d S r   )r   rL   	nextafterr   s    r   test_nextafter_ufunczTestUFuncs.test_nextafter_ufuncx  r   r$   c                 H    |                      t          j        d           d S r   )r   rL   modfr   s    r   test_modf_ufunczTestUFuncs.test_modf_ufunc{  s#    bgS11111r$   c                 H    |                      t          j        d           d S r   )r   rL   frexpr   s    r   test_frexp_ufunczTestUFuncs.test_frexp_ufunc  s#    bhc22222r$   c                 H    |                      t          j        d           d S r   )r   rL   floorr   s    r   test_floor_ufunczTestUFuncs.test_floor_ufunc  r}  r$   c                 H    |                      t          j        d           d S r   )r   rL   ceilr   s    r   test_ceil_ufunczTestUFuncs.test_ceil_ufunc  r/  r$   c                 H    |                      t          j        d           d S r   )r   rL   truncr   s    r   test_trunc_ufunczTestUFuncs.test_trunc_ufunc  r}  r$   c                     t          j        t           j        t           j         gt           j                  t	          j        t          j        dd          fg}|                     t           j        d|           d S )Nr]   rW   r^   r   r  )rL   rl   infrk   r   rm   r   spacing)rs   
additionals     r   test_spacing_ufunczTestUFuncs.test_spacing_ufunc  sr     x"& 1DDD{5=!S99; =
bj0: 	 	< 	< 	< 	< 	<r$   c                    |j         }t          |          }dt          j        fdt          j        fdt          j        ft          j        ddgd          t          j        t          j        dd          ft          j        ddgd          t          j        t          j        dd          ft          j        d	dgd
          t          j        t          j        dd          fg}|}t          j        t          j        dd          t          j        t          j        dd          g}|}t          j
        |||          D ]}|\  }}	}
|d         }|d         }|	d         }|	d         }|dk    rI|t          j        t          j        dd          k    s$|t          j        t          j        dd          k    rx|dk    rU|t          j        t          j        dd          k    r1|t          j        k    r!t          j        t          j        dd          r|dk    rV|t          j        t          j        dd          k    r2|t          j        k    r"t          j        t          j        dd          r/t          |t          j                  st          |t          j                  rt          |
t          j                  s|||
f}|                     ||          }t          |t          j                  rKt          j        |j        |
j        j                  }t          j        |j        |
j        j                  }nt          |t          j                  rKt          j        |j        |
j        j                  }t          j        |j        |
j        j                  }n@t          j        d|
j        j                  }t          j        d|
j        j                  } ||||            ||||           t'          |
d|
          }|t          j        t          j        fv rdnd}|                     |||           d S )NrW   rX   r[   r   r_   r]   r^   ra   rY   rc   r   r   rM   singledouble)prec)r0   r7   r   rh   ri   rk   rL   rl   rm   	itertoolsproductrf   rG   r{   r   r   sizerM   r   getattrrj   	complex64assertPreciseEqual)rs   r3   
ufunc_nameinputs1inputs2r   ry   valsinput1input2r   input1_operandinput1_typeinput2_operandinput2_typer   r   r   r   scalar_typer  s                        r   binary_ufunc_mixed_types_testz(TestUFuncs.binary_ufunc_mixed_types_test  s   ^
#E**%- Xq!fD)))5;u|Q+L+LMXr1gT***EKQ,L,LMXtSk...[3//12 EKC88EM1c::< %gwEE 8	A 8	AD*.'FFK#AYN )K#AYN )K X%%5;u|Q#D#DDD5;u|Q#D#DDD j((#u{5<C'H'HHH#u|33EKC88 4j((#u{5<C'H'HHH#u|33EKC88 4K55 {EK88";<< k:DMM&$//E."*55 E."5(3(9(>@ @ @8N$7*5*;*@B B BNBJ77 E."5(3(9(>@ @ @8N$7*5*;*@B B B !;+<+ABBB8A[->-CDDDE..&999F>>8<<<!+wDDK"u}eo&FFF H!  ##Hf4#@@@@q8	A 8	Ar$   c                 
   t          t          j                  }t          j        dd          t          j        dd                              dd          t          j        dd                              dd          t          j        dd                              dd          t          j        dd                              dd          t          j        dd                              dd          g}t          j        dd                              dd          t          j        dd                              dd          t          j        dd                              dd          t          j        dd                              ddd          t          j        dd                              ddd          t          j        dd                              ddd          g}t          ||          D ]\  }}t          j        t          j	        |j
        d          }t          j        t          j        |j
        d          }||f}|                     ||          }	t          j        |j        |j                  }
t          j        ||
            |	||           |                     ||
           t          t          j                  }t          j        dd          t          j        dd                              dd          t          j        dd                              ddd          t          j        dd                              dd          t          j        dd                              dd          t          j        dd                              ddd          t          j        dd                              ddd          t          j        dd                              ddd          t          j        dd                              ddd          g	}|}t#          j        ||          D ]\  }}t          j        t          j	        |j
        d          }t          j        t          j	        |j
        d          }t          j        t          j	        t'          |j
        |j
                  d          }|||f}|                     ||          }	t          j        ||          }
t          j        |
j        d          } |	|||           |                     ||
           d S )	N   r_   r]   rW   	   ra      r^   )r7   rL   r   arangereshaper   rQ   r   rm   rh   r}   ri   r{   r   rM   r  r   r  r	  r  )rs   ry   input_operandsoutput_operandsrD   r   r   r   r   r   r   input1_operandsinput2_operandsrE   r  r  s                   r   test_broadcastingzTestUFuncs.test_broadcasting  s    %R[11 Iat$$$Iat$$$,,Qq11Iat$$$,,Qq11Iat$$$,,Qq11Iat$$$,,Qq11Ie4(((001557 HU$'''//!44HU$'''//!44HU$'''//!44HYd+++33Aa::HYd+++33Aa::HYd+++33Aa::< ^_== 	6 	6IAvU\163??J+ek6;DDK,DMM&$//ExFLAAAHK8$$$E!V##FH5555 %RV,, Iat$$$Ie4(((00155Iit,,,44Qq;;Iat$$$,,Qq11Iat$$$,,Qq11Iat$$$,,Qq33Ie4(((001Q77Ie4(((001Q77Ie4(((001Q77	9 *%oGG 	6 	6DAq+elAFC@@K+elAFC@@K+elC4G4GMMKk:DMM&$//Eva||HXhnD999FE!Q##FH5555	6 	6r$   c                     t          j        t           j        dd          }||f}t          ||f          d             }|                     |j        |         j        j        |           d S )NrW   r^   c                 ,    t          j        | |          S r   rL   r   a0a1s     r   myaddz2TestUFuncs.test_implicit_output_npm.<locals>.myadd2  s    6"b>>!r$   )r   rm   rh   r   assertEqual	overloads	signaturereturn_type)rs   arr_tysigr+  s       r   test_implicit_output_npmz#TestUFuncs.test_implicit_output_npm,  su     U\1c22v	vv			" 	" 
 		" 	-7CVLLLLLr$   c                 \   d }t          j        dd          t          j        dd                              dd          t          j        dd                              ddd          t          j        dd                              dd          t          j        dd                              dd          t          j        dd                              ddd          t          j        dd                              ddd          t          j        dd                              ddd          t          j        dd                              ddd          g	}|}t          j        ||          D ]\  }}t          j        t
          j        |j        d          }t          j        t
          j        |j        d          }||f}| 	                    ||d	
          }	t          j
        ||          }
 |	||          }t           j                            |
|           d S )Nc                 ,    t          j        | |          S r   r'  r(  s     r   ry   zATestUFuncs.test_broadcast_implicit_output_npm_nrt.<locals>.pyfunc9      6"b>>!r$   r  r_   r]   r  r  rW   r^   Trz   )rL   r  r  r  r	  r   rm   rh   r}   r{   r   r   assert_array_equal)rs   ry   r"  r#  rD   rE   r  r  r   r   r   r   s               r   &test_broadcast_implicit_output_npm_nrtz1TestUFuncs.test_broadcast_implicit_output_npm_nrt8  s   	" 	" 	" Iat$$$Ie4(((00155Iit,,,44Qq;;Iat$$$,,Qq11Iat$$$,,Qq11Iat$$$,,Qq33Ie4(((001Q77Ie4(((001Q77Ie4(((001Q77	9 *%oGG 
	< 
	<DAq+elAFC@@K+elAFC@@K-DMM&$DM99Eva||HU1a[[FJ))(F;;;;
	< 
	<r$   c                    d }t          j        ddd                              dd          }t          j        |d          }|                    dd          j        d         }t          |          }|j        j        r|j        d	k    sJ t          |          }|j        j	        r|j        dk    sJ t          |          }|j        d
k    sJ |j        j        rJ |j        j	        rJ t          t          j        |||gd                    }|||fgz  }|||fgz  }|||fgz  }|D ]\  }	}
t          |	          t          |
          f}|                     ||d          } ||	|
          } ||	|
          }|                     |j        j        |j        j                   |                     |j        j	        |j        j	                   t           j                            ||           d S )Nc                 ,    t          j        | |          S r   r'  r(  s     r   ry   z=TestUFuncs.test_implicit_output_layout_binary.<locals>.pyfuncV  r5  r$   r   rW      r   r   Forderr^   A   Tr6  )rL   linspacer  rl   Tr   flagsc_contiguouslayoutf_contiguousr   r  permutationsr{   r,  r   r7  )rs   ry   XYZXtyYtyZty	testcasesarg0arg1r   r   r   r   s                  r   "test_implicit_output_layout_binaryz-TestUFuncs.test_implicit_output_layout_binaryU  s   	" 	" 	" K1b!!))!Q//HQc"""IIaOOa Qiiw#9
c(9(9(9(9Qiiw#9
c(9(9(9(9QiizS    7''''7''''/Aq	1==>>	q!fX	q!fX	q!fX	# 
	< 
	<JD$4LL&,,/DMM&$DM99EvdD))HU4&&FX^8#\68 8 8X^8#\68 8 8J))(F;;;;
	< 
	<r$   c                 R   d }t          j        ddd                              dd          }t          j        |d          }|                    dd          j        d         }t          |          }|j        j        r|j        d	k    sJ t          |          }|j        j	        r|j        dk    sJ t          |          }|j        d
k    sJ |j        j        rJ |j        j	        rJ |||fD ]}t          |          f}	| 
                    ||	d          }
 ||          } |
|          }|                     |j        j        |j        j                   |                     |j        j	        |j        j	                   t           j                            ||           d S )Nc                 *    t          j        |           S r   rL   rS  )r)  s    r   ry   z<TestUFuncs.test_implicit_output_layout_unary.<locals>.pyfunc{  s    72;;r$   r   rW   r;  r   r   r<  r=  r^   r?  Tr6  )rL   rA  r  rl   rB  r   rC  rD  rE  rF  r{   r,  r   r7  )rs   ry   rH  rI  rJ  rK  rL  rM  rO  r   r   r   r   s                r   !test_implicit_output_layout_unaryz,TestUFuncs.test_implicit_output_layout_unaryz  s   	 	 	 K1b!!))!Q//HQc"""IIaOOa Qiiw#9
c(9(9(9(9Qiiw#9
c(9(9(9(9QiizS    7''''7''''1I 
	< 
	<D4LL?DMM&$DM99Evd||HU4[[FX^8#\68 8 8X^8#\68 8 8J))(F;;;;
	< 
	<r$   r   )br0   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r   r#  rL   absr(  r+  r.  r4  r8  r;  r>  rA  rD  rG  rJ  rN  rQ  rT  rW  rZ  r_  rb  re  rh  rk  rn  rr  ru  rx  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r#   r  r  r  r  r  r  r  r$  r2  r8  rQ  rU  rC   r$   r   r   r   6  s       = = = =& & &+ + ++ + +< < <7 7 78 8 8= = =/ / /7 7 7+ + +< < <: : :2 2 22 2 2, , ,C C C' ' ' $&6 C C C C/ / /2 2 23 3 3' ' '' ' '2 2 23 3 32 2 23 3 34 4 44 4 44 4 43 3 3) ) )2 2 2B B B, , ,2 2 22 2 22 2 25 5 55 5 55 5 56 6 63 3 33 3 33 3 33 3 36 6 66 6 6K K K 5 5 55 5 55 5 55 5 52 2 21 1 12 2 2- - -2 2 22 2 28 8 8/ / /5 5 54 4 40 0 0. . .- - -. . .. . .* * ** * *' ' '' ' '
 
 

 
 

 
 

 
 
* * *6 6 67 7 7 2 2 ^2 3 3 ^33 3 32 2 23 3 3< < <LA LA LA\A6 A6 A6F
M 
M 
M< < <:#< #< #<J< < < < <r$   r   c                   8   e Zd Zd Zdg g ddfdZdg g dddfdZd Zd Zd	 Z	 d0d
Z		 d0dZ
d Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd  Zd! Z d" Z!d# Z"d$ Z#d% Z$d& Z%d' Z&d( Z'd) Z(d* Z)d+ Z*d, Z+d- Z,d. Z-d/ Z.dS )1TestArrayOperatorsc                     |                      |j        j        |j        j                   t          j                            ||           d S r   )r,  rM   r   rL   r   r   )rs   r   gots      r   _check_resultsz!TestArrayOperators._check_results  s?    ,cin===

,,Xs;;;;;r$   TNc                 V   t          |          }t          | j                  }|                    |           |}	|D ]k}
|
\  }}||v st	          |t
          j                  s&|                     |	|f|          } |	|          } ||          }|                     ||           ld S )Nr6  )	r>   r   rr   extendrG   r   rm   r{   r[  )rs   operatorrz   r   r   r   r   operator_funcrr   ry   r   r   r   r   r   rZ  s                   r   unary_op_testz TestArrayOperators.unary_op_test  s     5X>>dk""'(((! 
	/ 
	/K(3%M:{**#J<< +MM&:-SMAAEvm,,H%&&C#....
	/ 
	/r$   Fc                    t          |          }t          | j                  }	|	                    |           |}
t          j                            d          }|	D ]}|\  }}t          j        t          |d|                    }|}||v r2|rt	          j
        d|          d         }t          |t          j                  r |}|}|rt	          j        ||k               rnB|                    ddd                              |          }t#          |          }|r||k     r||f}|                     |
||          } |
||          } |||          }|                     ||           d S )NrW   rM   r]   r   d   
   r6  )r@   r   rr   r]  rL   randomRandomStater   as_dtyper  r   rG   r   rm   r   uniformastyper   r{   r[  )rs   r^  rz   r   r   r   r   positive_rhsr_  rr   ry   random_stater   input_operand1r   input_dtypeinput_type1zeroinput_operand0input_type0r   r   r   rZ  s                           r   binary_op_testz!TestArrayOperators.binary_op_test  s    6h??dk""'((( y,,Q//! 	/ 	/K)4&NJ'0
GZ88: :K$K[(( 9x555a8 *ek22 
!/( BF>D+@$A$A "."6"6q#r"B"B!J!J"! "!$^44 NT$9$9-DMM&$CM88Evnn==H%77C#....;	/ 	/r$   c                     dt           j        fdt           j        ft          j        ddg          t          j        t           j        dd          fgS )NTFrW   r^   )r   booleanrL   rl   rm   r   s    r   bitwise_additional_inputsz,TestArrayOperators.bitwise_additional_inputs  sH     5=!EM"XtUm$$ek%-C&H&HI
 	
r$   c           	          |                     dg           }|t          j        t          j        t          j        t          j        dd          t          j        t          j        dd          gz  } | j        |i |S )Nr   rW   r^   )
setdefaultr   rj   rk   rm   rq  )rs   r   kwsr   s       r   binary_int_op_testz%TestArrayOperators.binary_int_op_test  sm    nn]B77M5=Kq#..Kq#..
 	

 #t"D0C000r$   c                 v    |                     dg           }||                                 z  } | j        |i |S )Nr   )rv  rt  rx  )rs   r   rw  r   s       r   binary_bitwise_op_testz)TestArrayOperators.binary_bitwise_op_test  sF    NN+>CCT;;===&t&4444r$   c                     t          |          }|}|r| j        }	nt          j        j        }	fd|D             }
fdD             }fdD             }||z   }t          j        |
|          D ]\  }}t          |          }t          |          }||f}|                     ||          }|	                                } |||           |	                                } |||            |	||           d S )Nc                 <    g | ]}t          j        |           S r]   rL   rl   )r)   rM   
lhs_valuess     r   r+   z6TestArrayOperators.inplace_op_test.<locals>.<listcomp>  8     / / / hz777 / / /r$   c                 <    g | ]}t          j        |           S r}  r~  )r)   rM   
rhs_valuess     r   r+   z6TestArrayOperators.inplace_op_test.<locals>.<listcomp>  r  r$   c                 0    g | ]}D ]} ||          S rC   rC   )r)   vrM   
rhs_dtypess      r   r+   z6TestArrayOperators.inplace_op_test.<locals>.<listcomp>  s.    LLLALLuuQxxLLLLr$   )
rI   r  rL   r   assert_allcloser  r	  r   r{   copy)rs   r^  r  r  
lhs_dtypesr  preciser_  ry   	assertion
lhs_inputs
rhs_arraysrhs_scalars
rhs_inputslhsrhslhs_typerhs_typer   r   r   rZ  s     `` `                r   inplace_op_testz"TestArrayOperators.inplace_op_test  sS   6x@@ 	3/II
2I/ / / /#-/ / /
/ / / /#-/ / /
LLLLLLL+-
!)*jAA 		% 		%HCc{{Hc{{Hh'DMM&$//ExxzzHF8S!!!((**CE#sOOOIc8$$$$		% 		%r$   c           	          |                      |||t          j        t          j        ft          j        t          j        t          j        f|          S )Nr  )r  rL   rj   rk   ri   )rs   r^  r  r  r  s        r   inplace_float_op_testz(TestArrayOperators.inplace_float_op_test  sF     ##Hj*%'Z$<%'ZRX$F,3 $ 5 5 	5r$   c                     |                      |||t          j        t          j        t          j        ft          j        t          j        f           d S r   )r  rL   ro   rg   ri   rf   rs   r^  r  r  s       r   inplace_int_op_testz&TestArrayOperators.inplace_int_op_test  sF    Xz: h"(; h	2	4 	4 	4 	4 	4r$   c                     |                      |||           |                     |||t          j        ft          j        t          j        f           d S r   )r  r  rL   r   r  s       r   inplace_bitwise_op_testz*TestArrayOperators.inplace_bitwise_op_test"  sY      :zBBBXz: h[28RX*>	@ 	@ 	@ 	@ 	@r$   c                 0    |                      d           d S N+r`  r   s    r   test_unary_positive_array_opz/TestArrayOperators.test_unary_positive_array_op*      3r$   c                 0    |                      d           d S N-r  r   s    r   test_unary_negative_array_opz/TestArrayOperators.test_unary_negative_array_op-  r  r$   c                    |                      dt          j        t          j        t          j        t          j        dd          t          j        t          j        dd          g|                                            d S )N~rW   r^   )r   r   )r`  r   rj   rk   rm   rt  r   s    r   test_unary_invert_array_opz-TestArrayOperators.test_unary_invert_array_op0  sv    3(-u}(-EM1c(J(J(-EM1c(J(J(L .2-K-K-M-M	 	 	O 	O 	O 	O 	Or$   c                     |                      dg dg d           |                      t          j        g dg d           d S )Nz+=rX         ?r  r         @)r  r^  iaddr   s    r   test_inplace_addz#TestArrayOperators.test_inplace_add:  J    ""4|||DDD""8=,,,MMMMMr$   c                     |                      dg dg d           |                      t          j        g dg d           d S )Nz-=r  r  )r  r^  isubr   s    r   test_inplace_subz#TestArrayOperators.test_inplace_sub>  r  r$   c                     |                      dg dg d           |                      t          j        g dg d           d S )Nz*=r  r  )r  r^  imulr   s    r   test_inplace_mulz#TestArrayOperators.test_inplace_mulB  r  r$   c                     |                      dg dg d           |                      t          j        g dg d           d S )Nz//=r  r  g      ?r  )r  r^  	ifloordivr   s    r   test_inplace_floordivz(TestArrayOperators.test_inplace_floordivF  sV    ""5,,,HHH""8#5|||#2??	4 	4 	4 	4 	4r$   c                     |                      dg dg d           |                      t          j        g dg d           d S )Nz/=r  r  r  )r  r^  itruedivr   s    r   test_inplace_divz#TestArrayOperators.test_inplace_divK  sV    ""4|||DDD""8#4lll#2??	4 	4 	4 	4 	4r$   c                     |                      dg dg d           |                      t          j        g dg d           d S )Nz%=r  r  r@  r  )r  r^  imodr   s    r   test_inplace_remainderz)TestArrayOperators.test_inplace_remainderP  r  r$   c                     |                      dg dg dd           |                      t          j        g dg dd           d S )Nz**=r  r  Fr  )r  r^  ipowr   s    r   test_inplace_powz#TestArrayOperators.test_inplace_powT  sj    ""5,,,+0 	# 	2 	2 	2""8=,,,+0 	# 	2 	2 	2 	2 	2r$   c                     |                      dg dg d           |                      t          j        g dg d           d S )Nz&=r   rW   r@  r  3   r      r  *      )r  r^  iandr   s    r   test_inplace_andz#TestArrayOperators.test_inplace_andZ  f    $$T+;+;+;%9%9%9	; 	; 	;$$X]4D4D4D%9%9%9	; 	; 	; 	; 	;r$   c                     |                      dg dg d           |                      t          j        g dg d           d S )Nz|=r  r  )r  r^  iorr   s    r   test_inplace_orz"TestArrayOperators.test_inplace_or`  sf    $$T+;+;+;%9%9%9	; 	; 	;$$X\3C3C3C%9%9%9	; 	; 	; 	; 	;r$   c                     |                      dg dg d           |                      t          j        g dg d           d S )Nz^=r  r  )r  r^  ixorr   s    r   test_inplace_xorz#TestArrayOperators.test_inplace_xorf  r  r$   c                     |                      dg dg d           |                      t          j        g dg d           d S )Nz<<=r   r   iir   rW   r      )r  r^  ilshiftr   s    r   test_inplace_lshiftz&TestArrayOperators.test_inplace_lshiftl  \      (8(8(8---HHH  !13C3C3C!.	0 	0 	0 	0 	0r$   c                     |                      dg dg d           |                      t          j        g dg d           d S )Nz>>=r  r  )r  r^  irshiftr   s    r   test_inplace_rshiftz&TestArrayOperators.test_inplace_rshiftq  r  r$   c                    d }t          j        d          } ||          }|                     |d         |d         k    o|d         |d         k               t          j        d          } t          |          |          }|                     |d         |d         k    o|d         |d         k               t           j                            ||           t           j                            ||           dS )z
        Verify that the unary positive operator copies values, and doesn't
        just alias to the input array (mirrors normal Numpy/Python
        interaction behavior).
        c                      | 
 }d| d<   d|d<   |S )Nr  r   r   rW   rC   )r*  a2s     r   r   z<TestArrayOperators.test_unary_positive_array_op_2.<locals>.f}  s     BBqEBqEIr$   rc  r   rW   N)rL   r   
assertTruer   r   r7  )rs   r   r*  r  a3a4s         r   test_unary_positive_array_op_2z1TestArrayOperators.test_unary_positive_array_op_2v  s    	 	 	 Xb\\QrUU1A92a5BqE>:::Xb\\T!WWR[[1A92a5BqE>:::

%%b"---

%%b"-----r$   c                 0    |                      d           d S r  rq  r   s    r   test_add_array_opz$TestArrayOperators.test_add_array_op      C     r$   c                 0    |                      d           d S r  r  r   s    r   test_subtract_array_opz)TestArrayOperators.test_subtract_array_op  r  r$   c                 0    |                      d           d S )N*r  r   s    r   test_multiply_array_opz)TestArrayOperators.test_multiply_array_op  r  r$   c                 P    d }t           j        }|                     d|           d S )N/r   )r   rk   rq  r   s     r   test_divide_array_opz'TestArrayOperators.test_divide_array_op  s-    }C>>>>>r$   c                 >   t          j        d          t          j        ft          j        d          t          j        ft          j        d          t          j        ft          j        d          t          j        ft          j        d          t          j        ft          j        d          t          j        ft          j        d          t          j        ft          j        d          t          j        ft          j        d          t          j        ft          j        d	          t          j        ft          j        dd
gd          t          j	        t          j        dd          ft          j        ddgd          t          j	        t          j        dd          ft          j        g dd          t          j	        t          j        dd          ft          j        g dd          t          j	        t          j        dd          ft          j        ddgd          t          j	        t          j        dd          ft          j        dd	gd          t          j	        t          j        dd          fg| _
        |                     d           d S )NrW   r   r   r  rY   r  g      g      @r@  r\   r]   r^   r  r_   )rX   rW   r   r`   )rX   rW      ra   rb   rc   z//)rL   rf   r   rg   rh   ri   rj   rk   rl   rm   rr   rq  r   s    r   test_floor_divide_array_opz-TestArrayOperators.test_floor_divide_array_op  s    Yq\\5<(Xb\\5;'Xa[[%+&Yq\\5<(Xb\\5;'Xa[[%+&Zu}-Z__em,Zu}-Z__em,Xqe4(((%+elAs*K*KLXqe4(((%+elAs*K*KLXhhhd+++U[a-M-MNXhhhd+++U[a-M-MNXtSk...[3//1XtSk...[3//1)
. 	D!!!!!r$   c                 0    |                      d           d S )N%r  r   s    r   test_remainder_array_opz*TestArrayOperators.test_remainder_array_op  r  r$   c                 4    |                      dd           d S )Nz**Tri  r  r   s    r   test_power_array_opz&TestArrayOperators.test_power_array_op  s!    Dt44444r$   c                 4    |                      dd           d S )Nz<<Tr  rx  r   s    r   test_left_shift_array_opz+TestArrayOperators.test_left_shift_array_op  !    488888r$   c                 4    |                      dd           d S )Nz>>Tr  r  r   s    r   test_right_shift_array_opz,TestArrayOperators.test_right_shift_array_op  r   r$   c                 0    |                      d           d S )N&rz  r   s    r   test_bitwise_and_array_opz,TestArrayOperators.test_bitwise_and_array_op      ##C(((((r$   c                 0    |                      d           d S )N|r  r   s    r   test_bitwise_or_array_opz+TestArrayOperators.test_bitwise_or_array_op  r  r$   c                 0    |                      d           d S )N^r  r   s    r   test_bitwise_xor_array_opz,TestArrayOperators.test_bitwise_xor_array_op  r  r$   c                 0    |                      d           d S )Nz==r  r   s    r   test_equal_array_opz&TestArrayOperators.test_equal_array_op      D!!!!!r$   c                 0    |                      d           d S )N>r  r   s    r   test_greater_array_opz(TestArrayOperators.test_greater_array_op  r  r$   c                 0    |                      d           d S )Nz>=r  r   s    r   test_greater_equal_array_opz.TestArrayOperators.test_greater_equal_array_op  r  r$   c                 0    |                      d           d S )N<r  r   s    r   test_less_array_opz%TestArrayOperators.test_less_array_op  r  r$   c                 0    |                      d           d S )Nz<=r  r   s    r   test_less_equal_array_opz+TestArrayOperators.test_less_equal_array_op  r  r$   c                 0    |                      d           d S )Nz!=r  r   s    r   test_not_equal_array_opz*TestArrayOperators.test_not_equal_array_op  r  r$   )T)/r0   r   r   r[  r`  rq  rt  rx  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r  r  r  r  r  rC   r$   r   rX  rX    s       < < < +/"$&*d/ / / /& ,0#%'+t$)(/ (/ (/ (/T
 
 
1 1 15 5 5 9=% % % %@ '+5 5 5 54 4 4
@ @ @          O O ON N NN N NN N N4 4 4
4 4 4
N N N2 2 2; ; ;; ; ;; ; ;0 0 0
0 0 0
. . .2! ! !! ! !! ! !? ? ?
" " "8! ! !5 5 59 9 99 9 9) ) )) ) )) ) )" " "! ! !" " "! ! !" " "" " " " "r$   rX  c                   *    e Zd ZdZd Zd Zd Zd ZdS )TestScalarUFuncsa  check the machinery of ufuncs works when the result is an scalar.
    These are not exhaustive because:
    - the machinery to support this case is the same for all the functions of a
      given arity.
    - the result of the inner function itself is already tested in TestUFuncs
    c                    t          ||          D ]\  }} t          |          |          } || } |t          ||           }d                    ||          }	t	          t
          j        t
          j        ft
          j        t
          j        ft
          j        t
          j        ft
          j        t
          j        fg          }
||
v rt          |          }nt          j        |j        t          j                  rt          |          }ngt          j        |j        t          j                  rt          |          }n3t          j        |j        t          j                  rt#          |          }||j        |         j        j        fz   }t+          d |D                       rd}nt+          d |D                       rd}nd}|                     |||	|           d S )Nzfor args {0} typed {1}c                 .    g | ]}|t           j        k    S rC   )r   rj   r)   ts     r   r+   z.TestScalarUFuncs.run_ufunc.<locals>.<listcomp>  s    9991A&999r$   r  c                 .    g | ]}|t           j        k    S rC   )r   rk   r!  s     r   r+   z.TestScalarUFuncs.run_ufunc.<locals>.<listcomp>  s    ;;;Qa5=(;;;r$   r  exact)r   r  )rQ   r   rS   r(   setr   rg   rh   ri   floatrL   
issubdtyperM   inexactintegerintr   boolr-  r.  r/  r   r  )rs   ry   	arg_types
arg_valuesrR   r   r   rZ  r   r   specialalltypesr  s                r   	run_ufunczTestScalarUFuncs.run_ufunc  s   	:66 0	G 0	GLFD DLL((E%,Cvvt<<=H*11$??C el+u{+el+u{+	  G    ?? =<< .$XHH]8>2:>> ."8}}HH]8>28<< .#H~~H!8!B!N PPH 99999:: ;;(;;;<< ##Cs#FFFFa0	G 0	Gr$   c                     d }g d}t           j        ft           j        ft           j        ft           j        ft           j        ft           j        fg}|                     |||           d S )Nc                 *    t          j        |           S r   rT  rD   s    r   _funcz7TestScalarUFuncs.test_scalar_unary_ufunc.<locals>._func  s    71::r$   )r@  r5  )rW   r5  )皙?)皙?)r   rg   rf   ri   rh   rj   rk   r0  rs   r4  r  tyss       r   test_scalar_unary_ufuncz(TestScalarUFuncs.test_scalar_unary_ufunc  sl    	 	 	 655~~%-!13 	uc4(((((r$   c                    d }g d}t           j        t           j        t           j        t           j        t           j        t           j        g}|                     |t          ||          t          ||                     d S )Nc                 ,    t          j        | |          S r   r'  rD   rE   s     r   r4  z@TestScalarUFuncs.test_scalar_binary_uniform_ufunc.<locals>._func'      6!A;;r$   r@  r@  rW   r@  r6  r7  )	r   rg   rf   ri   rh   rj   rk   r0  rQ   r8  s       r    test_scalar_binary_uniform_ufuncz1TestScalarUFuncs.test_scalar_binary_uniform_ufunc&  sl    	 	 	 $##{EL{EL%-Huc#smmSt__=====r$   c                    d }g d}t           j        t           j        t           j        t           j        t           j        t           j        g}|                     |t          j	        ||          t          j	        ||                     d S )Nc                 ,    t          j        | |          S r   r'  r=  s     r   r4  z>TestScalarUFuncs.test_scalar_binary_mixed_ufunc.<locals>._func0  r>  r$   r?  )
r   rg   rf   ri   rh   rj   rk   r0  r  r	  r8  s       r   test_scalar_binary_mixed_ufuncz/TestScalarUFuncs.test_scalar_binary_mixed_ufunc/  s    	 	 	 $##{EL{EL}em- 	ui/S99 (t44	6 	6 	6 	6 	6r$   N)r0   r   r   __doc__r0  r:  r@  rC  rC   r$   r   r  r    s^         1G 1G 1Gf) ) )> > >	6 	6 	6 	6 	6r$   r  c                       e Zd Zd Zd ZdS )TestUfuncIssuesc                     t          dg          d             }t          j        dd          }t          j        dd          }|                      |||          ||z   ||z   z              d S )Nz(float64,float64)c                 X    t          j        | |          t          j        | |          z   S r   r'  )x1x2s     r   fooz+TestUfuncIssues.test_issue_651.<locals>.foo?  s!    6"b>>BF2rNN22r$   rc  rc   r]   )r   rL   r  r  )rs   rK  r   r   s       r   test_issue_651zTestUfuncIssues.test_issue_651=  s    	'(	)	)	3 	3 
*	)	3 Ib%%%Ib%%%Aq		AEa!e+<=====r$   c                 8    d }|t                     fd}t          j        g d          t          j        g d          g}|D ]L} ||d            ||t          j        d                      ||t          j        g d                     MdS )zF
        <float32 ** int> should return float32, not float64.
        c                 ,    t          j        | |          S r   )rL   r  r=  s     r   rK  z,TestUfuncIssues.test_issue_2006.<locals>.fooK  s    8Aq>>!r$   c                      | |          }t           j                            | | |                                         |j        | j                   d S r   )rL   r   r   r,  rM   )rD   rE   rZ  r   ry   rs   s      r   checkz.TestUfuncIssues.test_issue_2006.<locals>.checkP  sV    %1++CJ00ffQllCCC SY00000r$   )rW   r@  r  )              ?r@  y      @      r  )r@  r@  r  N)r   rL   rj   r  rh   ri   )rs   rK  rP  xsrD   r   ry   s   `    @@r   test_issue_2006zTestUfuncIssues.test_issue_2006G  s    	" 	" 	"V	1 	1 	1 	1 	1 	1 	1 j##R\///%B%BC 	* 	*AE!QKKKE!RYq\\"""E!RXiii(())))	* 	*r$   N)r0   r   r   rL  rS  rC   r$   r   rF  rF  ;  s2        > > >* * * * *r$   rF  c                       e Zd ZdZdZddddddddZddZd	 Zd
 Zd Z	e
d             Ze
d             Ze
d             ZdS )_LoopTypesTestera  Test code generation for the different loop types defined by ufunc.

    This test relies on class variables to configure the test. Subclasses
    of this class can just override some of these variables to check other
    ufuncs in a different compilation context. The variables supported are:

    _funcs: the ufuncs to test
    _skip_types: letter types that force skipping the loop when testing
                 if present in the NumPy ufunc signature.
    _supported_types: only test loops where all the types in the loop
                      signature are in this collection. If unset, all.

    Note that both, _skip_types and _supported_types must be met for a loop
    to be tested.

    The NumPy ufunc signature has a form like 'ff->f' (for a binary ufunc
    loop taking 2 floats and resulting in a float). In a NumPy ufunc object
    you can get a list of supported signatures by accessing the attribute
    'types'.
    OegGr@  r   r   ))rq  r<  )rm  D)rm  r<  )rI  rW  )r  r<  )rY  d)r   rX  r   c                    |dv rt          j        g d|          S |dv rt          j        g d|          S |dv rt          j        g d|          S |d         d	k    r-t          |          d
k    rd}t          j        g d|          S |d         dk    r-t          |          d
k    rd}t          j        g d|          S |dv r't          j        dddt          d          g|          S |dv r?t          j        dk    rd}nd}t          j        |ddt          d          z  dg|          S t          d|d          )z<return a suitable array argument for testing the letter typebhilq)rW   r   r   r  r]   BHILQ)rW   r@  r   r   ?)TFFTr   mrW   zm8[D])r@  NaTr   MzM8[D])NatrW   r   r   fdr  g      rZ   nanFDr   y             y              y      ?      ?rQ  y                ztype z not understood)rL   rl   lenr&  r   platformRuntimeError)rs   a_letter_typeindexnegzeros       r   _arg_for_typez_LoopTypesTester._arg_for_type  s    G##8MMM????G##8LLL>>>>c!!8666mLLLL1$$=!!Q&& '8---]CCCC1$$=!!Q&& '8---]CCCCd""8S$U5\\:"/1 1 1 1d""|w&& ($8Wj"uU||2CRH"/1 1 1 1 ,===JKKKr$   c                    |d |j                  ||j         d          z   t          | dg           rt          fdD                       rd S t          | dg           t          fdD                       rd S t          | dg           }|rt          fd|D                       sd S |                     ||           d S )N_supported_typesc              3       K   | ]}|vV  	d S r   rC   )r)   lsupported_typess     r   	<genexpr>z/_LoopTypesTester._check_loop.<locals>.<genexpr>  s(      CCA_,CCCCCCr$   _skip_typesc              3       K   | ]}|v V  	d S r   rC   )r)   ro  
skip_typess     r   rq  z/_LoopTypesTester._check_loop.<locals>.<genexpr>  s'      551qJ555555r$   _required_typesc              3       K   | ]}|v V  	d S r   rC   )r)   ro  letter_typess     r   rq  z/_LoopTypesTester._check_loop.<locals>.<genexpr>  s<       &? &?*+ '(<&7 &? &? &? &? &? &?r$   )r   r   r  r   _check_ufunc_with_dtypes)rs   r,   r3   looprequired_typesrw  rt  rp  s        @@@r   _check_loopz_LoopTypesTester._check_loop  s   JUYJ'$
{||*<<
 "$(:B?? 	CCCClCCCCC	FT="55
555555555 	F !'8"== 	# &? &? &? &?/=&? &? &? #? #? 	F%%b%>>>>>r$   c                     g }|D ] }|dv r|dz   }|                     |           !d |D             }t          d |D                       } t          |          |          } fdt          |          D             }	|	D ]}
 j                            |
           d |	D             } ||	   ||  t          |||	          D ]\  }}}                     |||          \  }}|j        j	        } j
                            |j        |fd          }|dv rd	nd
}|dv rdn|}d                    g d          }|                    |j        |	|||          }                     |||||           d S )N)r]  r`  z8[D]c                 6    g | ]}t          j        |          S rC   )rL   rM   r!  s     r   r+   z=_LoopTypesTester._check_ufunc_with_dtypes.<locals>.<listcomp>  s     :::128A;;:::r$   c                 T    g | ]%}t          j        t          |          d d          &S )rW   r^   )r   rm   r   r!  s     r   r+   z=_LoopTypesTester._check_ufunc_with_dtypes.<locals>.<listcomp>  s,    NNN%+jmmQ<<NNNr$   c                 j    g | ]/\  }}                     ||                               d          0S )ri  r@  )rk  repeat)r)   ri  r"  rs   s      r   r+   z=_LoopTypesTester._check_ufunc_with_dtypes.<locals>.<listcomp>  sN     5 5 5eQ $$Qe$44;;A>> 5 5 5r$   c                 6    g | ]}|                                 S rC   )r  )r)   r   s     r   r+   z=_LoopTypesTester._check_ufunc_with_dtypes.<locals>.<listcomp>  s     ,,,16688,,,r$   rW   fFr  r$  dDr  r   )z ufunc '{0}' arrays differ ({1}):z	args: {2}zexpected {3}zgot {4})r  r   ulps)appendr   r   	enumeraterd  shufflerQ   _fixup_resultsrM   char_ulpsgetr0   r-   r(   r  )rs   r,   r3   dtypesdtypes_with_unitsr"  arg_dtyarg_nbtyr   c_argsarrpy_argsrM   py_argc_argtypecharr  r  r   s   `                  r   rx  z)_LoopTypesTester._check_ufunc_with_dtypes  s     	( 	(AJJ$$Q''''::(9:::NNgNNNOOXr""5 5 5 5"+F"3"35 5 5 	% 	%CK$$$$,,V,,,v
G %(&$A$A 
	/ 
	/ E65 //vuEEMFE{'H:>>5>8"<a@@D'4//88WD'4//88TD)) E E E F FC**U^VT65IIC##FE#)- $ / / / /
	/ 
	/r$   c                 
    ||fS r   rC   )rs   rM   r  r  s       r   r  z_LoopTypesTester._fixup_results  s    u}r$   c                 F    |j         D ]}|                     ||           d S r   )r   _inject_test)clsr3   ry  s      r   _check_ufunc_loopsz#_LoopTypesTester._check_ufunc_loops  s6    K 	* 	*DUD))))	* 	*r$   c           
          fd}t          | d                    j                            dd                    |           d S )Nc                 T    t                    }|                     |           d S r   )r7   r{  )rs   r,   ry  r3   s     r   test_templatez4_LoopTypesTester._inject_test.<locals>.test_template  s.    $U++BR-----r$   ztest_{0}_{1}z->_)setattrr(   r0   replace)r  r3   ry  r  s    `` r   r  z_LoopTypesTester._inject_test  sn    	. 	. 	. 	. 	. 	. 	^**5>+/<<c+B+BD D	 	 	 	 	r$   c                 D    | j         D ]}|                     |           d S r   )_ufuncsr  )r  r3   s     r   autogeneratez_LoopTypesTester.autogenerate  s4    [ 	* 	*E""5))))	* 	*r$   Nr   )r0   r   r   rD  rr  r  rk  r{  rx  r  classmethodr  r  r  rC   r$   r   rU  rU  _  s         ( K  "# E%L %L %L %LN? ? ?.&/ &/ &/P   * * [*   [ * * [* * *r$   rU  c                   r   e Zd Zedd         Ze                    ej                   e                    ej                   e                    ej	                   e                    ej
                   e                    ej                   e                    ej                   dZdej        z   ZdS )TestLoopTypesIntNz?bBhHiIlLqQfdFDmMO)r0   r   r   r   r  removerL   r  r\  
left_shiftright_shiftr   r   ru  rU  rr  rC   r$   r   r  r    s        qqq!GNN28NN2=!!!NN2=!!!NN2>"""NN2;NN2;#O.::KKKr$   r  c                   H    e Zd Zej        ej        gZdZdej	        z   dz   Z	dS ) TestLoopTypesSubtractAndNegativez?bBhHiIlLqQfdFDmMOr\  N)
r0   r   r   rL   r   r   r  ru  rU  rr  rC   r$   r   r  r    s4        {BK(G'O*66<KKKr$   r  c                   H     e Zd Zej        gZdZdej        z   Zd fd	Z	 xZ
S )TestLoopTypesReciprocalbBhHiIlLqQfdFDr  r   c                 v    t          | j        |                               ||          }|dv r	d||dk    <   |S )Nr  
bBhHiIlLqQr  r   rd   rt   rk  rs   rh  ri  resrt   s       r   rk  z%TestLoopTypesReciprocal._arg_for_type  sO    DND))77>C 8 E EL(( CqM
r$   r  )r0   r   r   rL   r\  r  ru  rU  rr  rk  r   r   s   @r   r  r    sY        }oG&O*66K         r$   r  c                   H     e Zd Zej        gZdZdej        z   Zd fd	Z	 xZ
S )TestLoopTypesPowerr  r  r   c                     t          | j        |                               ||          }|dv r|dk    r	d||dk     <   |S )Nr  r  rW   r  r   r  r  s       r   rk  z TestLoopTypesPower._arg_for_type/  sW    DND))77>C 8 E EL((UaZZ CaL
r$   r  )r0   r   r   rL   r  r  ru  rU  rr  rk  r   r   s   @r   r  r  *  sY        xjG&O*66K         r$   r  c                   H     e Zd Zej        gZdZdej        z   Zd fd	Z	 xZ
S )TestLoopTypesIntLeftShiftr  r  r   c                     t          | j        |                               ||          }|dk    r(|j        j        dz  }t          j        |d|dz
            }|S Nr  rW      r   )rd   rt   rk  rM   itemsizerL   cliprs   rh  ri  r  	bit_countrt   s        r   rk  z'TestLoopTypesIntLeftShift._arg_for_typeB  sf    DND))77>C 8 E E A::	*Q.I'#q)a-00C
r$   r  )r0   r   r   rL   r  r  ru  rU  rr  rk  r   r   s   @r   r  r  =  sY        }oG"O.::K         r$   r  c                   H     e Zd Zej        gZdZdej        z   Zd fd	Z	 xZ
S )TestLoopTypesIntRightShiftr  r  r   c                     t          | j        |                               ||          }|dk    r(|j        j        dz  }t          j        |d|dz
            }|dk    rt          j        |          }|S r  )rd   rt   rk  rM   r  rL   r  rV  r  s        r   rk  z(TestLoopTypesIntRightShift._arg_for_typeY  s~    DND))77>C 8 E E A::	*Q.I'#q)a-00C A::&++C
r$   r  )r0   r   r   rL   r  r  ru  rU  rr  rk  r   r   s   @r   r  r  T  sZ        ~G"O.::K         r$   r  c                   T    e Zd Zej        ej        ej        gZdZde	j
        z   Z
d ZdS )TestLoopTypesFloorDivider  r  c                     |j         dk    rDt          j        |          t          j        |          z  }||dk    |dk    z  z  }||         ||<   ||fS )Nr   rZ   )r   rL   r  r  )rs   rM   r  r  preds        r   r  z'TestLoopTypesFloorDivide._fixup_results{  s[    : HUOObhv&6&66DVs]u|44D ,E$Ku}r$   N)r0   r   r   rL   r   r  divmodr  ru  rU  rr  r  rC   r$   r   r  r  v  sH        bi8G&O*66K    r$   r  c                   B   e Zd Zedd         Zere                    ej                   e                    ej	                   e                    ej
                   e                    ej                   e                    ej                   dZdej        z   ZdS )TestLoopTypesFloatNrb  FDmMO)r0   r   r   r   r  	iswindowsr  rL   r  r   r  r  r  ru  rU  rr  rC   r$   r   r  r    s        qqq!G #rz"""NN2?###NN2<   NN29NN26O,88KKKr$   r  c                   :    e Zd Zedd         ZdZdej        z   ZdS )TestLoopTypesComplexNrd  r  )r0   r   r   r   r  ru  rU  rr  rC   r$   r   r  r    s1        qqq!G O*66KKKr$   r  c                       e Zd Zedd         Ze                    ej                   dZd Z	d Z
d Zd Zd Zd Zd	 ZdS )
TestLoopTypesDatetimeNmMc                    t           j        }t          |          }|                     ||g d           |                     ||g d           |                     ||g d           |                     ||g d           |                     t
                    5  |                     ||g d           d d d            d S # 1 swxY w Y   d S )N)m8[s]m8[m]r  )r  r  r  )r  r  m8[ms])r  r  r  )r  r  r  )rL   r   r7   rx  assertRaisesr	   rs   r3   r,   s      r   test_addzTestLoopTypesDatetime.test_add  sF    ''%%b%1L1L1LMMM%%b%1L1L1LMMM%%b%1M1M1MNNN%%b%1M1M1MNNN}-- 	G 	G))"e*E*E*EG G G	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G   CCCc                    t           j        }t          |          }|                     ||g d           |                     ||g d           |                     ||g d           |                     ||g d           |                     t
                    5  |                     ||g d           d d d            d S # 1 swxY w Y   d S )N)M8[s]M8[m]r  )r  r  r  )r  r  r  )r  r  r  )r  r  r  )rL   r   r7   rx  r  r	   r  s      r   test_subtractz#TestLoopTypesDatetime.test_subtract  sF    ''%%b%1L1L1LMMM%%b%1L1L1LMMM%%b%1M1M1MNNN%%b%1M1M1MNNN}-- 	G 	G))"e*E*E*EG G G	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	Gr  c                 8   t           j        }t          |          }|                     ||g d           |                     ||g d           |                     t
                    5  |                     ||g d           d d d            d S # 1 swxY w Y   d S )N)r  qm8[us])r  r  r  r  r  r  )rL   r   r7   rx  r  r	   r  s      r   test_multiplyz#TestLoopTypesDatetime.test_multiply  s     ''%%b%1I1I1IJJJ%%b%1I1I1IJJJ}-- 	N 	N))"e5L5L5LMMM	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N   (BBBc                    t           j        }t          |          }|                     ||g d           |                     ||g d           |                     ||g d           |                     ||g d           |                     t
                    5  |                     ||g d           d d d            d S # 1 swxY w Y   d S )N)r  r  rX  )r  r  rX  r  r  r  r  rX  r  r  )rL   r   r7   rx  r  r	   r  s      r   test_true_dividez&TestLoopTypesDatetime.test_true_divide  s=    ''%%b%1H1H1HIII%%b%1H1H1HIII%%b%1H1H1HIII%%b%1H1H1HIII}-- 	N 	N))"e5L5L5LMMM	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	Nr  c                 8   t           j        }t          |          }|                     ||g d           |                     ||g d           |                     t
                    5  |                     ||g d           d d d            d S # 1 swxY w Y   d S )Nr  r  r  )rL   r   r7   rx  r  r	   r  s      r   test_floor_dividez'TestLoopTypesDatetime.test_floor_divide  s     ''%%b%1H1H1HIII%%b%1H1H1HIII}-- 	N 	N))"e5L5L5LMMM	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	Nr  c                     t          |          }|                     ||g d           |                     ||g d           |                     ||g d           |                     ||g d           d S )N)r  r  r\  )r  r  r\  )r  r  r\  )r  r  r\  )r7   rx  r  s      r   _check_comparisonz'TestLoopTypesDatetime._check_comparison  s     ''%%b%1H1H1HIII%%b%1H1H1HIII%%b%1H1H1HIII%%b%1H1H1HIIIIIr$   c                     t           j        t           j        t           j        t           j        t           j        t           j        fD ]}|                     |           d S r   )rL   r  r  r  r  r  r  r  r   s     r   test_comparisonsz&TestLoopTypesDatetime.test_comparisons  sO    hbgr}j""24 	* 	*E""5))))	* 	*r$   )r0   r   r   r   r  r  rL   r  ru  r  r  r  r  r  r  r  rC   r$   r   r  r    s        qqq!GNN29 O
G G GG G GN N NN N NN N NJ J J* * * * *r$   r  c                        e Zd Zd Zd Zd ZdS )TestUFuncBadArgsc                     d }|                      t                    5   t          t          j        t          j                  g          |           d d d            d S # 1 swxY w Y   d S )Nc                 .    t          j        |           }|S )zerror: np.add requires two argsr'  )rD   r   s     r   r   z0TestUFuncBadArgs.test_missing_args.<locals>.func  s    VAYYFMr$   r  r
   r   r   rk   rs   r   s     r   test_missing_argsz"TestUFuncBadArgs.test_missing_args  s    	 	 	
 {++ 	7 	70D%-../00666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7   6A!!A%(A%c                     d }t          j        t           j        dd          } ||||          }|                     t                    5   t          |          |           d d d            d S # 1 swxY w Y   d S )Nc                 4    t          j        | | ||          }|S )zerror: too many argsr'  )rD   outout2r   s       r   r   z1TestUFuncBadArgs.test_too_many_args.<locals>.func  s    VAq#t,,FMr$   rW   r^   )r   rm   rk   r  r
   r   )rs   r   
array_typer1  s       r   test_too_many_argsz#TestUFuncBadArgs.test_too_many_args  s    	 	 	
 [377
jZ<<{++ 	 	DIIdOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A11A58A5c                     d }|                      t                    5   t          t          j        t          j                  g          |           d d d            d S # 1 swxY w Y   d S )Nc                 6    d}t          j        | | |           dS )z0error: scalar as a return value is not supportedr   Nr'  r=  s     r   r   zATestUFuncBadArgs.test_no_scalar_result_by_reference.<locals>.func  s    AF1aOOOOOr$   r  r  s     r   "test_no_scalar_result_by_referencez3TestUFuncBadArgs.test_no_scalar_result_by_reference  s    	 	 	
 {++ 	7 	70D%-../00666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7r  N)r0   r   r   r  r  r  rC   r$   r   r  r    sA        7 7 7
 
 
7 7 7 7 7r$   r  c                       e Zd Zd ZdS ) TestUFuncCompilationThreadSafetyc                     g t           d             fdfdt          d          D             }|D ]}|                                 |D ]}|                                 |                                dS )z{
        Test that (lazy) compiling from several threads at once doesn't
        produce errors (see issue #2403).
        c                     | dz   S )NrW   rC   r3  s    r   rK  z7TestUFuncCompilationThreadSafety.test_lock.<locals>.foo.  s    q5Lr$   c                  <   	 t          j        dt           j                  } t          j        dt           j                  dz   }t           j                             |           |           d S # t
          $ r }                    |           Y d }~d S d }~ww xY w)N)rc  r]   g      ?)rL   onesrk   r   r7  	Exceptionr  )r   r   eerrorsrK  s      r   r    z;TestUFuncCompilationThreadSafety.test_lock.<locals>.wrapper2  s    !GE44475
;;;b@
--cc!ffh????? ! ! !a         !s   A,A1 1
B;BBc                 :    g | ]}t          j                   S ))target)	threadingThread)r)   r*   r    s     r   r+   z>TestUFuncCompilationThreadSafety.test_lock.<locals>.<listcomp>:  s'    GGG9#7333GGGr$   r  N)r   r.   startr-   assertFalse)rs   threadsr"  r
  rK  r    s      @@@r   	test_lockz*TestUFuncCompilationThreadSafety.test_lock'  s    
 		 	 
		! 	! 	! 	! 	! 	! HGGGU2YYGGG 	 	AGGIIII 	 	AFFHHHH     r$   N)r0   r   r   r  rC   r$   r   r  r  %  s#        ! ! ! ! !r$   r  c                       e Zd Zd Zd ZdS )TestUfuncOnContextc                    t           j        }|                    t          j                  }|                     |t                     t          j        t          j                  }|                     ||           t                      }| 
                    t                    5 }t          j        |           d d d            n# 1 swxY w Y   |                     |j        j        |f           d S r   )r   target_contextget_ufunc_inforL   r   assertIsInstancedictr   r,  objectr  KeyError	exceptionr   )rs   	targetctxadd_infor   badkeyraisess         r   test_cpu_get_ufunc_infoz*TestUfuncOnContext.test_cpu_get_ufunc_infoC  s    -	++BF33h---*26228,,,x(( 	,F#F+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,).	:::::s   #CCCc                 ,   t          t          j        d          }|                     t                    5 }|                    t          j                   d d d            n# 1 swxY w Y   |                     t          |j
                  d           d S )Ncpuz<<numba\..*\.BaseContext object at .*> does not support ufunc)r   r   typing_contextr  NotImplementedErrorr  rL   r   assertRegexrH   r  )rs   r  r   s      r   test_base_get_ufunc_infoz+TestUfuncOnContext.test_base_get_ufunc_infoS  s    
 95AA	233 	-v$$RV,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- !!K	
 	
 	
 	
 	
s    A!!A%(A%N)r0   r   r   r!  r'  rC   r$   r   r  r  B  s2        ; ; ; 
 
 
 
 
r$   r  c                       e Zd Zd ZdS )TestUfuncWriteInputc                 z   t          dgd          d             }t          j                            dd          }t          j        |t          j                  } |||           t          j                            t          j        g dt          j	                  |
                    d	                     d S )
Nzvoid(float64[:], uint8[:])z(n)->(n)c                 P    t          | j                  D ]}|dz  dk    rd||<   d S )Nr   r   rW   )r.   r
  )rD   r  r*   s      r   r   z6TestUfuncWriteInput.test_write_input_arg.<locals>.func`  s<     16]]  q5A::CF r$   rc  r   r]   )TFFFTr   )axis)r   rL   rd  randr   rn   r   r7  rl   r   r   )rs   r   rD   r  s       r   test_write_input_argz(TestUfuncWriteInput.test_write_input_arg_  s    	23Z	@	@	 	 
A	@	 INN2q!!mARW---Q

%%H666bhGGGGGGOO	 	 	 	 	r$   N)r0   r   r   r.  rC   r$   r   r)  r)  ^  s#            r$   r)  __main__)Er!   r  r   r   r  r^  numpyrL   r   numbar   r   r   r   
numba.corer   numba.np.numpy_supportr   numba.core.errorsr	   r
   numba.tests.supportr   r   numba.core.typing.npydeclr   numba.npr   numba.core.registryr   numba.core.baser   r   r   __itemsize__is32bitsrf  r   r  r#   r7   r>   r@   rI   rS   rU   r   r   rX  r  rF  rU  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r)  r0   mainrC   r$   r   <module>r=     sY           



            6 6 6 6 6 6 6 6 6 6 6 6       - - - - - - 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 6 6 6 6 6 6 " " " " " " * * * * * * ' ' ' ' ' '      "L##G,,		* 	* 	*        "J J JF F F F FO F F FRS6 S6 S6 S6 S6] S6 S6 S6lb	< b	< b	< b	< b	< b	< b	< b	<JC" C" C" C" C" C" C" C"L
W6 W6 W6 W6 W6x W6 W6 W6t!* !* !* !* !*h !* !* !*H[* [* [* [* [*x [* [* [*|; ; ; ; ;' ; ; ;      = = = = ='7 = = = ! - - / / /    .      $ $ & & &    )        ! ! !     0   (  & & ( ( (    !1   >  ' ' ) ) )    /      % % ' ' '	9 	9 	9 	9 	9) 	9 	9 	9    ! ! !7 7 7 7 7+ 7 7 7  ! ! # # #[* [* [* [* [*, [* [* [*|  " " $ $ $7 7 7 7 7x 7 7 7@! ! ! ! !x ! ! !:
 
 
 
 
 
 
 
8    (   & zHMOOOOO r$   