
    xKg                       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  d dlm!Z! e"jF                  dk(  Z$ejJ                  jM                  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      Z0 G d de.e      Z1 G d de      Z2 G d d e      Z3 G d! d"e      Z4 G d# d$e4      Z5e5jm                           G d% d&e4      Z7e7jm                           G d' d(e4      Z8e8jm                           G d) d*e4      Z9e9jm                           G d+ d,e4      Z:e:jm                           G d- d.e4      Z;e;jm                           G d/ d0e4      Z<e<jm                           G d1 d2e4      Z=e=jm                           G d3 d4e4      Z>e>jm                           e!e>j~                          e!e>j                          G d5 d6e4      ZAeAjm                           G d7 d8e      ZB G d9 d:e      ZC G d; d<e      ZD G d= d>e      ZEeFd?k(  r ej                          yy)@    N)guvectorizenjittypeof	vectorize)types)
from_dtype)LoweringErrorTypingError)TestCaseMemoryLeakMixin)supported_ufuncs)numpy_support)
cpu_target)BaseContext)ufunc_db)expected_failure_np2   win32c                 @     t        j                          fd       }y)zAn 'expectedFailure' like decorator that only expects compilation errors
    caused by unimplemented functions that fail in no-python modec                      	  | i | t        j
                  # t         $ r( t        j                  t        j                               w xY wN)r
   unittest_ExpectedFailuresysexc_info_UnexpectedSuccess)argskwargsfuncs     [/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/tests/test_ufuncs.pywrapperz_unimplemented.<locals>.wrapper   sK    	<$!&! )))  	<++CLLN;;	<s	    1AN)	functoolswraps)r   r!   s   ` r    _unimplementedr$      s      __T* *    c                 B   i }dj                  t        | j                        D cg c]  }dj                  |       c}      }dj                  || j                        }t        |t               |       |d   }dj                  | j                        |_        |S c c}w )N,za{0}zdef fn({0}):
    np.{1}({0})fnz{0}_usecase)joinrangenargsformat__name__execglobals)ufuncldictiarg_strfunc_strr(   s         r    _make_ufunc_usecaser5   '   s    Ehh%2DE2DQa(2DEFG.55gu~~NH79e$	tB&&u~~6BKI Fs   Bc                     i }t        dj                  |       t               |       |d   }dj                  t        |             |_        |S )Nzdef fn(x):
    return {0}(x)r(   usecase_{0}r.   r,   r/   hashr-   ufunc_opr1   r(   s      r    _make_unary_ufunc_op_usecaser<   1   sE    E	(	/	/	979eL	tB&&tH~6BKIr%   c                     i }t        dj                  |       t               |       |d   }dj                  t        |             |_        |S )Nzdef fn(x,y):
    return x{0}yr(   r7   r8   r:   s      r    _make_binary_ufunc_op_usecaser>   9   sE    E	)	0	0	:GIuM	tB&&tH~6BKIr%   c                      t         t              rLi }t        dj                         t	               |       |d   }dj                  t                     |_        |S  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(   r7   c                      | |       y r    )xyr;   s     r    
inplace_opz2_make_inplace_ufunc_op_usecase.<locals>.inplace_opL   s    QNr%   )
isinstancestrr.   r,   r/   r9   r-   )r;   r1   r(   rD   s   `   r    _make_inplace_ufunc_op_usecaserG   A   sc    
 (C &--h7EJ4[#**4>:
 I	Ir%   c           	          t        | |      D cg c]2  \  }}t        j                  t        |            j	                  |      4 c}}S c c}}w )z5Convert python values into numpy scalar objects.
    )zipnpdtyperF   type)tyargsr   tyvals       r    _as_dtype_valuerP   R   sA     8;647HI7HGBBHHSW""3'7HIIIs   7A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| _        y )Nr                          ?u4rK   Cu8)rU   r   rT   i4i8)rV   rW   rX   f4f8)superrR   setUprJ   uint32r   int32uint64int64float32float64arrayArrayint8int16uint8uint16inputs)self	__class__s    r    rb   zBaseUFuncTest.setUpZ   s   mT(*YYq\5<<(YYq\5<<(XXb\5;;'XXa[%++&XXa[%++&YYq\5<<(YYq\5<<(XXb\5;;'XXa[%++&XXa[%++&ZZu}}-ZZ_emm,ZZ_emm,ZZu}}-ZZ_emm,ZZ_emm,XXqe4(%++ellAs*KLXXqe4(%++ellAs*KLXXhd+U[[a-MNXXhd+U[[a-MNXX&d3[[3/1XX&d3[[3/1 XXqe277+U[[Q-LMXXqe288,ekk%++q#.NOXXqe288,ekk%++q#.NOXXqe299-[[q#.0A"
r%   N)maxsizec                 *     t        ||d      |      S )NT)_nrtno_rewrites)r   )rp   pyfuncr   nrts       r    _compilezBaseUFuncTest._compile   s     6tDs5f==r%   c                    |}t        |t        j                        r|j                  }|j                  }nd}|t        j
                  v r4|rt        j                  ||d      }|S t        j                  ||d      }|S |t        j                  v r4|rt        j                  ||d      }|S t        j                  ||d      }|S |rt        j                  ||d      }|S t        j                  ||d      }|S )NrT   r[   )rE   r   rj   ndimrK   signed_domainunsigned_domain)rp   
input_typeint_output_typefloat_output_typerN   rz   output_types          r    _determine_output_typez$BaseUFuncTest._determine_output_type   s    b%++&77DBD$$$#kk/4E  $kk"dC8  5(((#kk/4E  $kk"dC8 	 !#kk*;T3G  $kk"dC8r%   )F)NN)	r-   
__module____qualname__rb   r"   	lru_cacherx   r   __classcell__rq   s   @r    rR   rR   X   s9    $
L Y&> '>
 BF15r%   rR   c                   ,    e Zd Zd Zg g ddddfdZd Zy)BasicUFuncTestc                     t        |      S r   )r5   rp   r0   s     r    r5   z"BasicUFuncTest._make_ufunc_usecase   s    "5))r%   NifcFc                    | j                  t               | j                  |      }t        | j                        |z   }	|	D ]  }
|
d   }|
d   }t        |t              }|r|}n|f|j                  z  }||v r8|rt        j                  |d   dk        rV|d   j                  j                  |vrr| j                  |||      }|f|j                  z  }|f|j                  z  }||z   }| j                  ||      }t        |d   t        j                        r|D cg c]:  }t        j                   |d   j"                  |j                  j$                        < }}|D cg c]:  }t        j                   |d   j"                  |j                  j$                        < }}np|D cg c]-  }t        j                   d|j                  j$                        / }}|D cg c]-  }t        j                   d|j                  j$                        / }}d}t'        j(                  d      5 }t'        j*                  d        |g ||  d}|D ]D  }t-        |j.                  t0              st3        |j4                        j7                  |      sCd}F 	 d d d         |g ||  t9        ||      D ]e  \  }}d	j;                  g d
      j=                  |j                  |||||j                  |      }	 t        j>                  jA                  ||d|       g  y c c}w c c}w c c}w c c}w # 1 sw Y   xY w# tB        $ r |rtE        d|
||       n Y w xY w)Nr   rT   rZ   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_warningsr-   r5   listro   rE   tupleninrJ   anyrK   kindr   noutrx   ndarrayzerosshapenamewarningscatch_warningssimplefilter
issubclasscategoryRuntimeWarningrF   message
startswithrI   r)   r,   testingassert_array_almost_equalAssertionErrorprint)rp   r0   skip_inputsadditional_inputsr~   r   kindspositive_onlyrv   ro   input_tupleinput_operandr}   is_tupler   r   input_typesoutput_typesargtyscfuncout_tyresultsexpectedinvalid_flagwarnlistwarnmsgthiswarn
expected_iresult_imsgs                                 r    basic_ufunc_testzBasicUFuncTest.basic_ufunc_test   sa    	""8,))%0dkk"%66!K'NM$QJ!-7H$%'%))3[(Q!!4 Q""%/55O->@K &-%))3K'>EJJ6L </FMM&&1E$q'2::. #/ #/ HHT!W]]#)<<#4#46".   #/". HHT!W]]&,,2C2CD".   #/". HHQfll&7&78".   #/". HHQfll&7&78".  
 !L((5%%h/((x(5 (H"8#4#4nE #H$4$4 5 @ @ I'+	 !) 6 "4"'"(+Hg(>$
Hii !# $ %+F5>>+5}+6+5+;+;Z%I	 JJ88"H ! # 9 % )?{ "8

 656 & #A)8ZA AsC   ?L##?L()2L-!2L2-AL7/$L7L7:#M7M 	M! M!c                    | j                  |       t        j                  dk  ry 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}| j                  |      }|D ]  \  }}t        |      t        |      f}t        j                  t        j                  dd      }||fz   }| j                  ||      }	t        |t        j                        r0t        j                  |j                   t        j                        }
n%t        j                  dt        j                        }
t        j"                  |
      } ||||        |	|||
       t        j$                  j'                  ||
        y )	N)rT      rU   r   rT   )rU   rU   r   r   rT   rT   rZ   )r   rT   r   rT   r   rT   r[   )r   r   numpy_versionrJ   rf   re   ri   r5   r   r   rj   bool_rx   rE   r   r   r   
zeros_liker   assert_equal)rp   comparison_ufuncr   rv   abr   r   r   r   resultr   s               r    signed_unsigned_cmp_testz'BasicUFuncTest.signed_unsigned_cmp_test  s}   ./&&0 XXb\299Q<(XXb\299Q<(XXa["))A,'XXa["))A,'XXa["))A,'XXa["))A,'YYq\288B<(YYq\288A;'YYq\288A;'YYq\288B<(YYq\288A;'YYq\288A;'XX*"((;XX(		:< XX(		:XX*"((;=%
, ))*:;%DAq!!9fQi0K++ekk1c:K K>1FMM&&1E!RZZ(!'':!2884}}V,H1a"!QJJ##Hf5 &r%   )r-   r   r   r5   r   r   rA   r%   r    r   r      s$    * 35)-$E]~06r%   r   c                   b   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] Zay)_
TestUFuncsNc                     t         j                  t         j                  t        j                  t         j                  dd      t        j                  t         j                  dd      g}| j	                  ||       y NrT   r[   )r   )r   rg   rh   rj   r   )rp   r   r   s      r    basic_int_ufunc_testzTestUFuncs.basic_int_ufunc_test8  sT    MMMMKKq#.KKq#.	
 	d<r%   c                 B    | j                  t        j                         y r   )r   rJ   addrp   s    r    test_add_ufunczTestUFuncs.test_add_ufuncD  s    bff%r%   c                 B    | j                  t        j                         y r   )r   rJ   subtractr   s    r    test_subtract_ufunczTestUFuncs.test_subtract_ufuncG      bkk*r%   c                 B    | j                  t        j                         y r   )r   rJ   multiplyr   s    r    test_multiply_ufunczTestUFuncs.test_multiply_ufuncJ  r   r%   c                 j    d }t         j                  }| j                  t        j                  |       y Nr~   )r   rh   r   rJ   dividerp   int_out_types     r    test_divide_ufunczTestUFuncs.test_divide_ufuncM  s.     }}bii.: 	 	<r%   c                 F    | j                  t        j                  d       y Nfr   )r   rJ   	logaddexpr   s    r    test_logaddexp_ufunczTestUFuncs.test_logaddexp_ufuncV      bll#6r%   c                 F    | j                  t        j                  d       y r   )r   rJ   
logaddexp2r   s    r    test_logaddexp2_ufuncz TestUFuncs.test_logaddexp2_ufuncY  s    bmm37r%   c                 b    | j                  t        j                  t        j                         y r   )r   rJ   true_divider   rh   r   s    r    test_true_divide_ufuncz!TestUFuncs.test_true_divide_ufunc\  s"    bnn.3mm 	 	=r%   c                 B    | j                  t        j                         y r   )r   rJ   floor_divider   s    r    test_floor_divide_ufuncz"TestUFuncs.test_floor_divide_ufunc`  s    boo.r%   c                     t        j                  t         j                  dd      t         j                  g}| j                  t        j
                  t         j                  |       y )NrT   r[   )r~   r   )r   rj   rc   r   rJ   negativerf   )rp   r   s     r    test_negative_ufunczTestUFuncs.test_negative_ufuncc  sE     {{5<<C8%,,Gbkk5;;*5 	 	7r%   c                 B    | j                  t        j                         y r   )r   rJ   positiver   s    r    test_positive_ufunczTestUFuncs.test_positive_ufuncj  r   r%   c                 F    | j                  t        j                  d       y )NT)r   )r   rJ   powerr   s    r    test_power_ufunczTestUFuncs.test_power_ufuncm  s    bhhd;r%   c                 F    | j                  t        j                  d       y )Nfcr   )r   rJ   float_powerr   s    r    test_float_power_ufuncz!TestUFuncs.test_float_power_ufuncp  s    bnnD9r%   c                 F    | j                  t        j                  d       y Niur   )r   rJ   gcdr   s    r    test_gcd_ufunczTestUFuncs.test_gcd_ufuncs      bffD1r%   c                 F    | j                  t        j                  d       y r   )r   rJ   lcmr   s    r    test_lcm_ufunczTestUFuncs.test_lcm_ufuncv  r  r%   c                 B    | j                  t        j                         y r   )r   rJ   	remainderr   s    r    test_remainder_ufunczTestUFuncs.test_remainder_ufuncy      bll+r%   c                    t        j                  t        j                  t         j                        j                        t        j                  d      ft        j                  fg}| j                  t         j                  d|       y )N   ifcur   r   )rJ   re   iinfomaxr   r   mod)rp   r   s     r    test_mod_ufunczTestUFuncs.test_mod_ufunc|  s`    ii+//0"))B-@%,,O
 	bffF0A 	 	Cr%   c                 B    | j                  t        j                         y r   )r   rJ   fmodr   s    r    test_fmod_ufunczTestUFuncs.test_fmod_ufunc      bgg&r%   c                    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}| j                  ||       y )N)r   )rJ   rc   r  r  r   re   rg   finfominrh   r   )rp   r0   r   s      r    test_abs_ufunczTestUFuncs.test_abs_ufunc  s    YYrxx		*../>YYrxx		*../>ZZ,0015==AZZ,0015==A	
 	e0A 	 	Cr%   c                 D    | j                  t        j                         y )N)r0   )r  rJ   absoluter   s    r    test_absolute_ufunczTestUFuncs.test_absolute_ufunc  s    "++.r%   c                 F    | j                  t        j                  d       y r   )r   rJ   fabsr   s    r    test_fabs_ufunczTestUFuncs.test_fabs_ufunc      bggS1r%   c                 F    | j                  t        j                  d       y Ncfr   )r   rJ   rintr   s    r    test_rint_ufunczTestUFuncs.test_rint_ufunc      bggT2r%   c                 B    | j                  t        j                         y r   )r   rJ   signr   s    r    test_sign_ufunczTestUFuncs.test_sign_ufunc  r  r%   c                 B    | j                  t        j                         y r   )r   rJ   conjr   s    r    test_conj_ufunczTestUFuncs.test_conj_ufunc  r  r%   c                 F    | j                  t        j                  d       y r$  )r   rJ   expr   s    r    test_exp_ufunczTestUFuncs.test_exp_ufunc  r  r%   c                 F    | j                  t        j                  d       y r$  )r   rJ   exp2r   s    r    test_exp2_ufunczTestUFuncs.test_exp2_ufunc  r(  r%   c                 F    | j                  t        j                  d       y r$  )r   rJ   logr   s    r    test_log_ufunczTestUFuncs.test_log_ufunc  r  r%   c                 F    | j                  t        j                  d       y r$  )r   rJ   log2r   s    r    test_log2_ufunczTestUFuncs.test_log2_ufunc  r(  r%   c                 F    | j                  t        j                  d       y r$  )r   rJ   log10r   s    r    test_log10_ufunczTestUFuncs.test_log10_ufunc      bhhd3r%   c                 F    | j                  t        j                  d       y r$  )r   rJ   expm1r   s    r    test_expm1_ufunczTestUFuncs.test_expm1_ufunc  r>  r%   c                 F    | j                  t        j                  d       y r$  )r   rJ   log1pr   s    r    test_log1p_ufunczTestUFuncs.test_log1p_ufunc  r>  r%   c                 F    | j                  t        j                  d       y r$  )r   rJ   sqrtr   s    r    test_sqrt_ufunczTestUFuncs.test_sqrt_ufunc  r(  r%   c                 B    | j                  t        j                         y r   )r   rJ   squarer   s    r    test_square_ufunczTestUFuncs.test_square_ufunc  s    bii(r%   c                 F    | j                  t        j                  d       y r   )r   rJ   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}| j                  t        j                  |       y r   )	r   rj   rc   rd   re   rf   r   rJ   
reciprocalrp   to_skips     r    test_reciprocal_ufuncz TestUFuncs.test_reciprocal_ufunc  s     ;;u||Q4ell;;u{{As3U[[;;u||Q4ell;;u{{As3U[[B 	bmmAr%   c                 B    | j                  t        j                         y r   )r   rJ   	conjugater   s    r    test_conjugate_ufunczTestUFuncs.test_conjugate_ufunc  r  r%   c                 F    | j                  t        j                  d       y r$  )r   rJ   sinr   s    r    test_sin_ufunczTestUFuncs.test_sin_ufunc  r  r%   c                 F    | j                  t        j                  d       y r$  )r   rJ   cosr   s    r    test_cos_ufunczTestUFuncs.test_cos_ufunc  r  r%   c                 F    | j                  t        j                  d       y r$  )r   rJ   tanr   s    r    test_tan_ufunczTestUFuncs.test_tan_ufunc  r  r%   c                 F    | j                  t        j                  d       y r$  )r   rJ   arcsinr   s    r    test_arcsin_ufunczTestUFuncs.test_arcsin_ufunc      biit4r%   c                 F    | j                  t        j                  d       y r$  )r   rJ   arccosr   s    r    test_arccos_ufunczTestUFuncs.test_arccos_ufunc  rb  r%   c                 F    | j                  t        j                  d       y r$  )r   rJ   arctanr   s    r    test_arctan_ufunczTestUFuncs.test_arctan_ufunc  rb  r%   c                 F    | j                  t        j                  d       y r$  )r   rJ   arctan2r   s    r    test_arctan2_ufunczTestUFuncs.test_arctan2_ufunc      bjj5r%   c                 F    | j                  t        j                  d       y r   )r   rJ   hypotr   s    r    test_hypot_ufunczTestUFuncs.test_hypot_ufunc      bhhc2r%   c                 F    | j                  t        j                  d       y r$  )r   rJ   sinhr   s    r    test_sinh_ufunczTestUFuncs.test_sinh_ufunc  r(  r%   c                 F    | j                  t        j                  d       y r$  )r   rJ   coshr   s    r    test_cosh_ufunczTestUFuncs.test_cosh_ufunc  r(  r%   c                 F    | j                  t        j                  d       y r$  )r   rJ   tanhr   s    r    test_tanh_ufunczTestUFuncs.test_tanh_ufunc  r(  r%   c                 F    | j                  t        j                  d       y r$  )r   rJ   arcsinhr   s    r    test_arcsinh_ufunczTestUFuncs.test_arcsinh_ufunc  rl  r%   c                 F    | j                  t        j                  d       y r$  )r   rJ   arccoshr   s    r    test_arccosh_ufunczTestUFuncs.test_arccosh_ufunc  rl  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}| j                  t        j                  |d       y )NrT   r[   r%  )r   r   )	r   rj   rc   rd   re   rf   r   rJ   arctanhrP  s     r    test_arctanh_ufunczTestUFuncs.test_arctanh_ufunc  s     ;;u||Q4ell;;u{{As3U[[;;u||Q4ell;;u{{As3U[[B
 	bjjgTJr%   c                 F    | j                  t        j                  d       y r   )r   rJ   deg2radr   s    r    test_deg2rad_ufunczTestUFuncs.test_deg2rad_ufunc      bjj4r%   c                 F    | j                  t        j                  d       y r   )r   rJ   rad2degr   s    r    test_rad2deg_ufunczTestUFuncs.test_rad2deg_ufunc  r  r%   c                 F    | j                  t        j                  d       y r   )r   rJ   degreesr   s    r    test_degrees_ufunczTestUFuncs.test_degrees_ufunc
  r  r%   c                 F    | j                  t        j                  d       y r   )r   rJ   radiansr   s    r    test_radians_ufunczTestUFuncs.test_radians_ufunc  r  r%   c                 B    | j                  t        j                         y r   )r   rJ   bitwise_andr   s    r    test_bitwise_and_ufuncz!TestUFuncs.test_bitwise_and_ufunc      !!"..1r%   c                 B    | j                  t        j                         y r   )r   rJ   
bitwise_orr   s    r    test_bitwise_or_ufuncz TestUFuncs.test_bitwise_or_ufunc  s    !!"--0r%   c                 B    | j                  t        j                         y r   )r   rJ   bitwise_xorr   s    r    test_bitwise_xor_ufuncz!TestUFuncs.test_bitwise_xor_ufunc  r  r%   c                 B    | j                  t        j                         y r   )r   rJ   invertr   s    r    test_invert_ufunczTestUFuncs.test_invert_ufunc  s    !!")),r%   c                 B    | j                  t        j                         y r   )r   rJ   bitwise_notr   s    r    test_bitwise_not_ufuncz!TestUFuncs.test_bitwise_not_ufunc  r  r%   c                 B    | j                  t        j                         y r   )r   rJ   greaterr   s    r    test_greater_ufunczTestUFuncs.test_greater_ufunc.  s    %%bjj1r%   c                 B    | j                  t        j                         y r   )r   rJ   greater_equalr   s    r    test_greater_equal_ufuncz#TestUFuncs.test_greater_equal_ufunc1  s    %%b&6&67r%   c                 B    | j                  t        j                         y r   )r   rJ   lessr   s    r    test_less_ufunczTestUFuncs.test_less_ufunc4  s    %%bgg.r%   c                 B    | j                  t        j                         y r   )r   rJ   
less_equalr   s    r    test_less_equal_ufuncz TestUFuncs.test_less_equal_ufunc7  s    %%bmm4r%   c                 B    | j                  t        j                         y r   )r   rJ   	not_equalr   s    r    test_not_equal_ufunczTestUFuncs.test_not_equal_ufunc:  s    %%bll3r%   c                 B    | j                  t        j                         y r   )r   rJ   equalr   s    r    test_equal_ufunczTestUFuncs.test_equal_ufunc=  s    %%bhh/r%   c                 B    | j                  t        j                         y r   )r   rJ   logical_andr   s    r    test_logical_and_ufuncz!TestUFuncs.test_logical_and_ufunc@      bnn-r%   c                 B    | j                  t        j                         y r   )r   rJ   
logical_orr   s    r    test_logical_or_ufuncz TestUFuncs.test_logical_or_ufuncC  s    bmm,r%   c                 B    | j                  t        j                         y r   )r   rJ   logical_xorr   s    r    test_logical_xor_ufuncz!TestUFuncs.test_logical_xor_ufuncF  r  r%   c                 B    | j                  t        j                         y r   )r   rJ   logical_notr   s    r    test_logical_not_ufuncz!TestUFuncs.test_logical_not_ufuncI  r  r%   c                 B    | j                  t        j                         y r   )r   rJ   maximumr   s    r    test_maximum_ufunczTestUFuncs.test_maximum_ufuncL      bjj)r%   c                 B    | j                  t        j                         y r   )r   rJ   minimumr   s    r    test_minimum_ufunczTestUFuncs.test_minimum_ufuncO  r  r%   c                 B    | j                  t        j                         y r   )r   rJ   fmaxr   s    r    test_fmax_ufunczTestUFuncs.test_fmax_ufuncR  r  r%   c                 B    | j                  t        j                         y r   )r   rJ   fminr   s    r    test_fmin_ufunczTestUFuncs.test_fmin_ufuncU  r  r%   c                     t        j                  ddgt         j                        t        j                  t        j                  dd      fgS )NTFrZ   rT   r[   )rJ   ri   r   r   rj   r   s    r    bool_additional_inputsz!TestUFuncs.bool_additional_inputs[  s;    XXtUm2884[[a-/
 	
r%   c                 d    | j                  t        j                  d| j                                y Nifcbr  )r   rJ   isfiniter  r   s    r    test_isfinite_ufunczTestUFuncs.test_isfinite_ufunca  s*    KKv"99; 	 	
r%   c                 d    | j                  t        j                  d| j                                y r  )r   rJ   isinfr  r   s    r    test_isinf_ufunczTestUFuncs.test_isinf_ufuncg  *    HHF"99; 	 	
r%   c                 d    | j                  t        j                  d| j                                y r  )r   rJ   isnanr  r   s    r    test_isnan_ufunczTestUFuncs.test_isnan_ufuncm  r  r%   c                 B    | j                  t        j                         y r   )r   rJ   signbitr   s    r    test_signbit_ufunczTestUFuncs.test_signbit_ufuncs  r  r%   c                 F    | j                  t        j                  d       y r   )r   rJ   copysignr   s    r    test_copysign_ufunczTestUFuncs.test_copysign_ufuncv  s    bkk5r%   c                 F    | j                  t        j                  d       y r   )r   rJ   	nextafterr   s    r    test_nextafter_ufunczTestUFuncs.test_nextafter_ufuncy  r   r%   c                 F    | j                  t        j                  d       y r   )r   rJ   modfr   s    r    test_modf_ufunczTestUFuncs.test_modf_ufunc|  s    bggS1r%   c                 F    | j                  t        j                  d       y r   )r   rJ   frexpr   s    r    test_frexp_ufunczTestUFuncs.test_frexp_ufunc  s    bhhc2r%   c                 F    | j                  t        j                  d       y r   )r   rJ   floorr   s    r    test_floor_ufunczTestUFuncs.test_floor_ufunc  rp  r%   c                 F    | j                  t        j                  d       y r   )r   rJ   ceilr   s    r    test_ceil_ufunczTestUFuncs.test_ceil_ufunc  r"  r%   c                 F    | j                  t        j                  d       y r   )r   rJ   truncr   s    r    test_trunc_ufunczTestUFuncs.test_trunc_ufunc  rp  r%   c                    t        j                  t         j                  t         j                   gt         j                        t	        j
                  t        j                  dd      fg}| j                  t         j                  d|       y )NrZ   rT   r[   r   r  )rJ   ri   infrh   r   rj   r   spacing)rp   
additionals     r    test_spacing_ufunczTestUFuncs.test_spacing_ufunc  sc     xx"&& 1D{{5==!S9; =
bjj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 ]b  }|\  }}	}
|d   }|d   }|	d   }|	d   }|dk(  rQ|t        j                  t        j                  dd      k(  s(|t        j                  t        j                  dd      k(  rt|dk(  ra|t        j                  t        j                  dd      k(  r9|t        j                  k(  r&t        j                  t        j                  dd      r|dk(  rb|t        j                  t        j                  dd      k(  r:|t        j                  k(  r't        j                  t        j                  dd      rAt        |t        j                        st        |t        j                        rt        |
t        j                        s|||
f}| j                  ||      }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$                        }nVt        j                  d|
j"                  j$                        }t        j                  d|
j"                  j$                        } ||||        ||||       t'        |
d|
      }|t        j(                  t        j*                  fv rdnd}| j-                  |||       e y )NrT   rU   rX   r   r\   rZ   r[   r^   rV   r`   r   r   rK   singledouble)prec)r-   r5   r   re   rf   rh   rJ   ri   rj   	itertoolsproductrc   rE   rx   r   r   sizerK   r   getattrrg   	complex64assertPreciseEqual)rp   r0   
ufunc_nameinputs1inputs2r   rv   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*%-- XXq!fD)5;;u||Q+LMXXr1gT*EKKQ,LMXXtSk.[[3/12 EKKC8EMM1c:< %%gwED*.'FFK#AYN )K#AYN )K X%5;;u||Q#DD5;;u||Q#DD j(#u{{5<<C'HH#u||3EKKC8j(#u{{5<<C'HH#u||3EKKC8K5{EKK8";<k:DMM&$/E."**5."5"5(3(9(9(>(>@88N$7$7*5*;*;*@*@BNBJJ7."5"5(3(9(9(>(>@88N$7$7*5*;*;*@*@B !;+<+<+A+AB88A[->->-C-CD..&9>>8<!+wDK"u}}eoo&FF !  ##Hf4#@q Fr%   c                 
   t        t        j                        }t        j                  dd      t        j                  dd      j	                  dd      t        j                  dd      j	                  dd      t        j                  dd      j	                  dd      t        j                  dd      j	                  dd      t        j                  dd      j	                  dd      g}t        j
                  dd      j	                  dd      t        j
                  dd      j	                  dd      t        j
                  dd      j	                  dd      t        j
                  dd      j	                  ddd      t        j
                  dd      j	                  ddd      t        j
                  dd      j	                  ddd      g}t        ||      D ]  \  }}t        j                  t        j                  |j                  d      }t        j                  t        j                  |j                  d      }||f}| j                  ||      }	t        j
                  |j                  |j                        }
t        j                  ||
        |	||       | j                  ||
        t        t        j                         }t        j                  dd      t        j                  dd      j	                  dd      t        j                  dd      j	                  ddd      t        j                  dd      j	                  dd      t        j                  dd      j	                  dd      t        j                  dd      j	                  ddd      t        j                  dd      j	                  ddd      t        j                  dd      j	                  ddd      t        j                  dd      j	                  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}| j                  ||      }	t        j                   ||      }
t        j
                  |
j                  d      } |	|||       | j                  ||
        y )	N   r\   rZ   rT   	   r^      r[   )r5   rJ   r   arangereshaper   rI   r   rj   re   rz   rf   rx   r   rK   r   r   r  r  r  )rp   rv   input_operandsoutput_operandsrB   r   r}   r   r   r   r   input1_operandsinput2_operandsrC   r  r
  s                   r    test_broadcastingzTestUFuncs.test_broadcasting  s    %R[[1 IIat$IIat$,,Qq1IIat$,,Qq1IIat$,,Qq1IIat$,,Qq1IIe4(00157 HHU$'//!4HHU$'//!4HHU$'//!4HHYd+33Aa:HHYd+33Aa:HHYd+33Aa:< ^_=IAvU\\1663?J++ekk6;;DK,DMM&$/ExxFLLAHKK8$!V##FH5 >  %RVV, IIat$IIe4(0015IIit,44Qq;IIat$,,Qq1IIat$,,Qq1IIat$,,Qq3IIe4(001Q7IIe4(001Q7IIe4(001Q7	9 *%%oGDAq++ellAFFC@K++ellAFFC@K++ellC4GMKk:DMM&$/Evva|HXXhnnD9F!Q##FH5 Hr%   c                     t        j                  t         j                  dd      }||f}t        ||f      d        }| j	                  |j
                  |   j                  j                  |       y )NrT   r[   c                 .    t        j                  | |      S r   rJ   r   a0a1s     r    myaddz2TestUFuncs.test_implicit_output_npm.<locals>.myadd3  s    66"b>!r%   )r   rj   re   r   assertEqual	overloads	signaturereturn_type)rp   arr_tysigr  s       r    test_implicit_output_npmz#TestUFuncs.test_implicit_output_npm-  sg     U\\1c2v	vv		" 
 	" 	-77CCVLr%   c                 N   d }t        j                  dd      t        j                  dd      j                  dd      t        j                  dd      j                  ddd      t        j                  dd      j                  dd      t        j                  dd      j                  dd      t        j                  dd      j                  ddd      t        j                  dd      j                  ddd      t        j                  dd      j                  ddd      t        j                  dd      j                  ddd      g	}|}t        j                  ||      D ]  \  }}t        j                  t
        j                  |j                  d      }t        j                  t
        j                  |j                  d      }||f}| j                  ||d	
      }	t        j                  ||      }
 |	||      }t         j                  j                  |
|        y )Nc                 .    t        j                  | |      S r   r  r  s     r    rv   zATestUFuncs.test_broadcast_implicit_output_npm_nrt.<locals>.pyfunc:      66"b>!r%   r  r\   rZ   r  r  rT   r[   Trw   )rJ   r  r  r  r  r   rj   re   rz   rx   r   r   assert_array_equal)rp   rv   r  r  rB   rC   r  r
  r   r   r   r   s               r    &test_broadcast_implicit_output_npm_nrtz1TestUFuncs.test_broadcast_implicit_output_npm_nrt9  s   	" IIat$IIe4(0015IIit,44Qq;IIat$,,Qq1IIat$,,Qq1IIat$,,Qq3IIe4(001Q7IIe4(001Q7IIe4(001Q7	9 *%%oGDAq++ellAFFC@K++ellAFFC@K-DMM&$DM9Evva|H1a[FJJ))(F; Hr%   c                 L   d }t        j                  ddd      j                  dd      }t        j                  |d      }|j                  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}| j                  ||d      } ||	|
      } ||	|
      }| j                  |j                  j                  |j                  j                         | j                  |j                  j                  |j                  j                         t         j                  j!                  ||        y )Nc                 .    t        j                  | |      S r   r  r  s     r    rv   z=TestUFuncs.test_implicit_output_layout_binary.<locals>.pyfuncW  r(  r%   r   rT      r   r   Forderr[   A   Tr)  )rJ   linspacer  ri   Tr   flagsc_contiguouslayoutf_contiguousr   r  permutationsrx   r  r   r*  )rp   rv   XYZXtyYtyZty	testcasesarg0arg1r   r   r   r   s                  r    "test_implicit_output_layout_binaryz-TestUFuncs.test_implicit_output_layout_binaryV  s   	" KK1b!))!Q/HHQc"IIaOa Qiww##

c(999Qiww##

c(999QizzS   77''''77''''//Aq	1=>	q!fX	q!fX	q!fX	#JD$4L&,/DMM&$DM9EdD)H4&FX^^88#\\668X^^88#\\668JJ))(F; $r%   c                    d }t        j                  ddd      j                  dd      }t        j                  |d      }|j                  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}	| j                  ||	d      }
 ||      } |
|      }| j                  |j                  j                  |j                  j                         | j                  |j                  j                  |j                  j                         t         j                  j                  ||        y )Nc                 ,    t        j                  |       S r   rJ   rF  )r  s    r    rv   z<TestUFuncs.test_implicit_output_layout_unary.<locals>.pyfunc|  s    772;r%   r   rT   r.  r   r   r/  r0  r[   r2  Tr)  )rJ   r4  r  ri   r5  r   r6  r7  r8  r9  rx   r  r   r*  )rp   rv   r;  r<  r=  r>  r?  r@  rB  r   r   r   r   s                r    !test_implicit_output_layout_unaryz,TestUFuncs.test_implicit_output_layout_unary{  s   	 KK1b!))!Q/HHQc"IIaOa Qiww##

c(999Qiww##

c(999QizzS   77''''77''''1ID4L?DMM&$DM9Ed|H4[FX^^88#\\668X^^88#\\668JJ))(F; r%   r   )br-   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r
  r  r  rJ   absr  r  r!  r'  r+  r.  r1  r4  r7  r:  r=  rA  rD  rG  rJ  rM  rR  rU  rX  r[  r^  ra  re  rh  rk  ro  rs  rv  ry  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r$   r  r  r  r  r  r  r  r  r%  r+  rD  rH  rA   r%   r    r   r   7  s    =&++<78=/7+<:22,C' $&66 C/23''23234443)2B,2225556333366K 5555212-228/540.-..**''



*67 2 2 3 3323<LA\A6F
M<:#<J<r%   r   c                   6   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.y)1TestArrayOperatorsc                     | j                  |j                  j                  |j                  j                         t        j                  j                  ||       y r   )r  rK   r   rJ   r   r   )rp   r   gots      r    _check_resultsz!TestArrayOperators._check_results  s8    ,,ciinn=


,,Xs;r%   TNc                 .   t        |      }t        | j                        }|j                  |       |}	|D ]]  }
|
\  }}||v st	        |t
        j                        s'| j                  |	|f|      } |	|      } ||      }| j                  ||       _ y )Nr)  )	r<   r   ro   extendrE   r   rj   rx   rN  )rp   operatorrw   r   r   r~   r   operator_funcro   rv   r   r   r}   r   r   rM  s                   r    unary_op_testz TestArrayOperators.unary_op_test  s     5X>dkk"'(!K(3%M:{*#J<MM&:-SMAEm,H&C#. "r%   Fc                    t        |      }t        | j                        }	|	j                  |       |}
t        j
                  j                  d      }|	D ]  }|\  }}t        j                  t        |d|            }|}||v r/|rt	        j                  d|      d   }t        |t        j                        r|}|}|rNt	        j                  |k        r6|j                  ddd      j!                  |      }t#        |      }|r|k  r||f}| j%                  |
||      } |
||      } |||      }| j'                  ||        y )NrT   rK   rZ   r   d   
   r)  )r>   r   ro   rP  rJ   randomRandomStater   as_dtyper  r   rE   r   rj   r   uniformastyper   rx   rN  )rp   rQ  rw   r   r   r~   r   positive_rhsrR  ro   rv   random_stater   input_operand1r}   input_dtypeinput_type1zeroinput_operand0input_type0r   r   r   rM  s                           r    binary_op_testz!TestArrayOperators.binary_op_test  sK    6h?dkk"'( yy,,Q/!K)4&NJ'00
GZ8:K$K[(xx5a8 *ekk2!/(BFF>D+@$A"."6"6q#r"B!J!J"!$^4NT$9-DMM&$CM8Enn=H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 )NTFrT   r[   )r   booleanrJ   ri   rj   r   s    r    bitwise_additional_inputsz,TestArrayOperators.bitwise_additional_inputs  sL     5==!EMM"XXtUm$ekk%--C&HI
 	
r%   c           	          |j                  dg       }|t        j                  t        j                  t        j                  t        j                  dd      t        j                  t        j                  dd      gz  } | j
                  |i |S )Nr   rT   r[   )
setdefaultr   rg   rh   rj   rd  )rp   r   kwsr   s       r    binary_int_op_testz%TestArrayOperators.binary_int_op_test  sp    nn]B7MM5==KKq#.KKq#.
 	

 #t""D0C00r%   c                 p    |j                  dg       }|| j                         z  } | j                  |i |S )Nr   )ri  rg  rk  )rp   r   rj  r   s       r    binary_bitwise_op_testz)TestArrayOperators.binary_bitwise_op_test  s@    NN+>CT;;==&t&&444r%   c                 p   t        |      }|}|r| j                  }	nt        j                  j                  }	|D 
cg c]  }
t        j
                  ||
       }}
|D 
cg c]  }
t        j
                  ||
       }}
|D 
cg c]  }|D ]
  }
 |
|        }}}
||z   }t        j                  ||      D ]l  \  }}t        |      }t        |      }||f}| j                  ||      }|j                         } |||       |j                         } |||        |	||       n y c c}
w c c}
w c c}
}w )NrZ   )rG   r   rJ   r   assert_allcloseri   r  r  r   rx   copy)rp   rQ  
lhs_values
rhs_values
lhs_dtypes
rhs_dtypespreciserR  rv   	assertionrK   
lhs_inputs
rhs_arraysvrhs_scalars
rhs_inputslhsrhslhs_typerhs_typer   r   r   rM  s                           r    inplace_op_testz"TestArrayOperators.inplace_op_test  s:   6x@//I

22I
 $./#-% hhz7#- 	 / $./#-% hhz7#- 	 /)3LAuQxxL+-
!))*jAHCc{Hc{Hh'DMM&$/ExxzH8S!((*C#sOc8$ B//Ls   D(D-D2c           	          | j                  |||t        j                  t        j                  ft        j                  t        j                  t        j                  f|      S )Nru  )r  rJ   rg   rh   rf   )rp   rQ  rq  rr  ru  s        r    inplace_float_op_testz(TestArrayOperators.inplace_float_op_test  sK     ##Hj*%'ZZ$<%'ZZRXX$F,3 $ 5 	5r%   c                     | j                  |||t        j                  t        j                  t        j                  ft        j                  t        j
                  f       y r   )r  rJ   rl   rd   rf   rc   rp   rQ  rq  rr  s       r    inplace_int_op_testz&TestArrayOperators.inplace_int_op_test  s<    Xz: hh"((; hh		2	4r%   c                     | j                  |||       | j                  |||t        j                  ft        j                  t        j                  f       y r   )r  r  rJ   r   r  s       r    inplace_bitwise_op_testz*TestArrayOperators.inplace_bitwise_op_test#  sA      :zBXz: hh[288RXX*>	@r%   c                 &    | j                  d       y N+rS  r   s    r    test_unary_positive_array_opz/TestArrayOperators.test_unary_positive_array_op+      3r%   c                 &    | j                  d       y N-r  r   s    r    test_unary_negative_array_opz/TestArrayOperators.test_unary_negative_array_op.  r  r%   c                    | j                  dt        j                  t        j                  t        j                  t        j                  dd      t        j                  t        j                  dd      g| j                                y )N~rT   r[   )r   r   )rS  r   rg   rh   rj   rg  r   s    r    test_unary_invert_array_opz-TestArrayOperators.test_unary_invert_array_op1  sa    3(-u}}(-EMM1c(J(-EMM1c(J(L .2-K-K-M	 	 	Or%   c                 |    | j                  dg dg d       | j                  t        j                  g dg d       y )Nz+=rU         ?r  r         @)r  rQ  iaddr   s    r    test_inplace_addz#TestArrayOperators.test_inplace_add;  *    ""4|D""8==,Mr%   c                 |    | j                  dg dg d       | j                  t        j                  g dg d       y )Nz-=r  r  )r  rQ  isubr   s    r    test_inplace_subz#TestArrayOperators.test_inplace_sub?  r  r%   c                 |    | j                  dg dg d       | j                  t        j                  g dg d       y )Nz*=r  r  )r  rQ  imulr   s    r    test_inplace_mulz#TestArrayOperators.test_inplace_mulC  r  r%   c                 |    | j                  dg dg d       | j                  t        j                  g dg d       y )Nz//=r  r  g      ?r  )r  rQ  	ifloordivr   s    r    test_inplace_floordivz(TestArrayOperators.test_inplace_floordivG  s/    ""5,H""8#5#5|#2	4r%   c                 |    | j                  dg dg d       | j                  t        j                  g dg d       y )Nz/=r  r  r  )r  rQ  itruedivr   s    r    test_inplace_divz#TestArrayOperators.test_inplace_divL  s/    ""4|D""8#4#4l#2	4r%   c                 |    | j                  dg dg d       | j                  t        j                  g dg d       y )Nz%=r  r  r3  r  )r  rQ  imodr   s    r    test_inplace_remainderz)TestArrayOperators.test_inplace_remainderQ  r  r%   c                     | j                  dg dg dd       | j                  t        j                  g dg dd       y )Nz**=r  r  Fr  )r  rQ  ipowr   s    r    test_inplace_powz#TestArrayOperators.test_inplace_powU  s>    ""5,+0 	# 	2""8==,+0 	# 	2r%   c                 |    | j                  dg dg d       | j                  t        j                  g dg d       y )Nz&=r   rT   r3  r  3   r      r  *      )r  rQ  iandr   s    r    test_inplace_andz#TestArrayOperators.test_inplace_and[  2    $$T+;%9	;$$X]]4D%9	;r%   c                 |    | j                  dg dg d       | j                  t        j                  g dg d       y )Nz|=r  r  )r  rQ  iorr   s    r    test_inplace_orz"TestArrayOperators.test_inplace_ora  s2    $$T+;%9	;$$X\\3C%9	;r%   c                 |    | j                  dg dg d       | j                  t        j                  g dg d       y )Nz^=r  r  )r  rQ  ixorr   s    r    test_inplace_xorz#TestArrayOperators.test_inplace_xorg  r  r%   c                 |    | j                  dg dg d       | j                  t        j                  g dg d       y )Nz<<=r   r   iir   rT   r      )r  rQ  ilshiftr   s    r    test_inplace_lshiftz&TestArrayOperators.test_inplace_lshiftm  1      (8-H  !1!13C!.	0r%   c                 |    | j                  dg dg d       | j                  t        j                  g dg d       y )Nz>>=r  r  )r  rQ  irshiftr   s    r    test_inplace_rshiftz&TestArrayOperators.test_inplace_rshiftr  r  r%   c                    d }t        j                  d      } ||      }| j                  |d   |d   k7  xr |d   |d   k7         t        j                  d      } t        |      |      }| j                  |d   |d   k7  xr |d   |d   k7         t         j                  j                  ||       t         j                  j                  ||       y)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   rT   rA   )r  a2s     r    r   z<TestArrayOperators.test_unary_positive_array_op_2.<locals>.f~  s     BBqEBqEIr%   rV  r   rT   N)rJ   r   
assertTruer   r   r*  )rp   r   r  r  a3a4s         r    test_unary_positive_array_op_2z1TestArrayOperators.test_unary_positive_array_op_2w  s    	 XXb\rU1A92a5BqE>:XXb\T!WR[1A92a5BqE>:


%%b"-


%%b"-r%   c                 &    | j                  d       y r  rd  r   s    r    test_add_array_opz$TestArrayOperators.test_add_array_op      C r%   c                 &    | j                  d       y r  r  r   s    r    test_subtract_array_opz)TestArrayOperators.test_subtract_array_op  r  r%   c                 &    | j                  d       y )N*r  r   s    r    test_multiply_array_opz)TestArrayOperators.test_multiply_array_op  r  r%   c                 N    d }t         j                  }| j                  d|       y )N/r   )r   rh   rd  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| _
        | j                  d       y )NrT   r   r   r  rV   r  g      g      @r3  rY   rZ   r[   r  r\   )rU   rT   r   r]   )rU   rT      r^   r_   r`   z//)rJ   rc   r   rd   re   rf   rg   rh   ri   rj   ro   rd  r   s    r    test_floor_divide_array_opz-TestArrayOperators.test_floor_divide_array_op  s    YYq\5<<(XXb\5;;'XXa[%++&YYq\5<<(XXb\5;;'XXa[%++&ZZu}}-ZZ_emm,ZZu}}-ZZ_emm,XXqe4(%++ellAs*KLXXqe4(%++ellAs*KLXXhd+U[[a-MNXXhd+U[[a-MNXXtSk.[[3/1XXtSk.[[3/1)
. 	D!r%   c                 &    | j                  d       y )N%r  r   s    r    test_remainder_array_opz*TestArrayOperators.test_remainder_array_op  r  r%   c                 *    | j                  dd       y )Nz**Tr\  r  r   s    r    test_power_array_opz&TestArrayOperators.test_power_array_op  s    Dt4r%   c                 *    | j                  dd       y )Nz<<Tr  rk  r   s    r    test_left_shift_array_opz+TestArrayOperators.test_left_shift_array_op      48r%   c                 *    | j                  dd       y )Nz>>Tr  r  r   s    r    test_right_shift_array_opz,TestArrayOperators.test_right_shift_array_op  r  r%   c                 &    | j                  d       y )N&rm  r   s    r    test_bitwise_and_array_opz,TestArrayOperators.test_bitwise_and_array_op      ##C(r%   c                 &    | j                  d       y )N|r  r   s    r    test_bitwise_or_array_opz+TestArrayOperators.test_bitwise_or_array_op  r  r%   c                 &    | j                  d       y )N^r  r   s    r    test_bitwise_xor_array_opz,TestArrayOperators.test_bitwise_xor_array_op  r  r%   c                 &    | j                  d       y )Nz==r  r   s    r    test_equal_array_opz&TestArrayOperators.test_equal_array_op      D!r%   c                 &    | j                  d       y )N>r  r   s    r    test_greater_array_opz(TestArrayOperators.test_greater_array_op  r  r%   c                 &    | j                  d       y )Nz>=r  r   s    r    test_greater_equal_array_opz.TestArrayOperators.test_greater_equal_array_op  r  r%   c                 &    | j                  d       y )N<r  r   s    r    test_less_array_opz%TestArrayOperators.test_less_array_op  r  r%   c                 &    | j                  d       y )Nz<=r  r   s    r    test_less_equal_array_opz+TestArrayOperators.test_less_equal_array_op  r  r%   c                 &    | j                  d       y )Nz!=r  r   s    r    test_not_equal_array_opz*TestArrayOperators.test_not_equal_array_op  r  r%   )T)/r-   r   r   rN  rS  rd  rg  rk  rm  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	  rA   r%   r    rK  rK    s   < +/"$&*d/& ,0#%'+t$)(/T
15 9=%@ '+54
@  ONNN4
4
N2;;;0
0
.2!!!?
"8!599)))"!"!""r%   rK  c                   (    e Zd ZdZd Zd Zd Zd Zy)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                 j   t        ||      D ]  \  }} t        |      |      } || } |t        ||       }dj                  ||      }	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        |      }nst        j                  |j                  t        j                        rt        |      }n9t        j                  |j                  t        j                         rt#        |      }||j$                  |   j&                  j(                  fz   }t+        |D cg c]  }|t
        j,                  k(   c}      rd}n/t+        |D cg c]  }|t
        j.                  k(   c}      rd}nd}| j1                  |||	|        y c c}w c c}w )Nzfor args {0} typed {1}r  r  exact)r   r  )rI   r   rP   r,   setr   rd   re   rf   floatrJ   
issubdtyperK   inexactintegerintr   boolr   r!  r"  r   rg   rh   r   )rp   rv   	arg_types
arg_valuesrM   r   r   rM  r   r   specialalltypestr  s                 r    	run_ufunczTestScalarUFuncs.run_ufunc  s   	:6LFD DL(E,Cvt<=H*11$?C ell+u{{+ell+u{{+	 G   ? ==<$XH]]8>>2::>"8}H]]8>>288<#H~H!8!B!B!N!N PPH 91A&9:(;(Qa5==((;<##Cs#Fa 7R :;s   ?H+
,H0
c                     d }g d}t         j                  ft         j                  ft         j                  ft         j                  ft         j
                  ft         j                  fg}| j                  |||       y )Nc                 ,    t        j                  |       S r   rG  rB   s    r    _funcz7TestScalarUFuncs.test_scalar_unary_ufunc.<locals>._func  s    771:r%   )r3  r  )rT   r  )皙?)皙?)r   rd   rc   rf   re   rg   rh   r  rp   r  r  tyss       r    test_scalar_unary_ufuncz(TestScalarUFuncs.test_scalar_unary_ufunc  s\    	 6~~%--!13 	uc4(r%   c                    d }g d}t         j                  t         j                  t         j                  t         j                  t         j
                  t         j                  g}| j                  |t        ||      t        ||             y )Nc                 .    t        j                  | |      S r   r  rB   rC   s     r    r  z@TestScalarUFuncs.test_scalar_binary_uniform_ufunc.<locals>._func(      66!A;r%   r3  r3  rT   r3  r   r!  )	r   rd   rc   rf   re   rg   rh   r  rI   r"  s       r     test_scalar_binary_uniform_ufuncz1TestScalarUFuncs.test_scalar_binary_uniform_ufunc'  sX    	 ${{ELL{{ELL%--Huc#smSt_=r%   c                 @   d }g d}t         j                  t         j                  t         j                  t         j                  t         j
                  t         j                  g}| j                  |t        j                  ||      t        j                  ||             y )Nc                 .    t        j                  | |      S r   r  r'  s     r    r  z>TestScalarUFuncs.test_scalar_binary_mixed_ufunc.<locals>._func1  r(  r%   r)  )
r   rd   rc   rf   re   rg   rh   r  r  r  r"  s       r    test_scalar_binary_mixed_ufuncz/TestScalarUFuncs.test_scalar_binary_mixed_ufunc0  sk    	 ${{ELL{{ELL}}emm- 	ui//S9 ((t4	6r%   N)r-   r   r   __doc__r  r$  r*  r-  rA   r%   r    r  r    s    1Gf)>	6r%   r  c                       e Zd Zd Zd Zy)TestUfuncIssuesc                     t        dg      d        }t        j                  dd      }t        j                  dd      }| j                   |||      ||z   ||z   z          y )Nz(float64,float64)c                 \    t        j                  | |      t        j                  | |      z   S r   r  )x1x2s     r    fooz+TestUfuncIssues.test_issue_651.<locals>.foo@  s!    66"b>BFF2rN22r%   rV  r`   rZ   )r   rJ   r  r   )rp   r5  r   r   s       r    test_issue_651zTestUfuncIssues.test_issue_651>  sb    	'(	)	3 
*	3 IIb%IIb%Aq	AEa!e+<=r%   c                 (    d }|t               fd}t        j                  g d      t        j                  g d      g}|D ]E  } ||d        ||t        j                  d              ||t        j
                  g d             G y)zF
        <float32 ** int> should return float32, not float64.
        c                 .    t        j                  | |      S r   )rJ   r   r'  s     r    r5  z,TestUfuncIssues.test_issue_2006.<locals>.fooL  s    88Aq>!r%   c                      | |      }t         j                  j                  | | |             j                  |j                  | j                         y r   )rJ   r   r   r  rK   )rB   rC   rM  r   rv   rp   s      r    checkz.TestUfuncIssues.test_issue_2006.<locals>.checkQ  sB    1+CJJ00fQlC SYY0r%   )rT   r3  r  )              ?r3  y      @      r  )r3  r3  r  N)r   rJ   rg   r  re   rf   )rp   r5  r:  xsrB   r   rv   s   `    @@r    test_issue_2006zTestUfuncIssues.test_issue_2006H  sq    	"V	1 jj#R\\/%BCA!QK!RYYq\"!RXXi() r%   N)r-   r   r   r6  r=  rA   r%   r    r0  r0  <  s    >*r%   r0  c                   r    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y)_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'.
    OegGr3  r   r   ))rd  r/  )r`  D)r`  r/  )r<  rA  )rx  r/  )rL  d)r   rB  c                 h   |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k7  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)rT   r   r   r  rZ   BHILQ)rT   r3  r   r   ?)TFFTr   mrT   zm8[D])r3  NaTr   MzM8[D])NatrT   r   r   fdr  g      rW   nanFDr   y             y              y      ?      ?r;  y                ztype z not understood)rJ   ri   lenr  r   platformRuntimeError)rp   a_letter_typeindexnegzeros       r    _arg_for_typez_LoopTypesTester._arg_for_type  s5    G#88M??G#88L>>c!886mLL1$=!Q& '88-]CC1$=!Q& '88-]CCd"88S$U5\:"/1 1d"||w& ($88Wj"uU|2CRH"/1 1 =JKKr%   c                 D   |d |j                    ||j                   d  z   t        | dg       rt        fdD              ry t        | dg       t        fdD              ry t        | dg       }|rt        fd|D              sy | j	                  ||       y )N_supported_typesc              3   &   K   | ]  }|v 
 y wr   rA   ).0lsupported_typess     r    	<genexpr>z/_LoopTypesTester._check_loop.<locals>.<genexpr>  s     ClA_,l   _skip_typesc              3   &   K   | ]  }|v  
 y wr   rA   )rY  rZ  
skip_typess     r    r\  z/_LoopTypesTester._check_loop.<locals>.<genexpr>  s     51qJr]  _required_typesc              3   &   K   | ]  }|v  
 y wr   rA   )rY  rZ  letter_typess     r    r\  z/_LoopTypesTester._check_loop.<locals>.<genexpr>  s      &?/=! '(<&7/=r]  )r   r   r  r   _check_ufunc_with_dtypes)rp   r(   r0   looprequired_typesrc  r`  r[  s        @@@r    _check_loopz_LoopTypesTester._check_loop  s    JUYY'$

{|*<<
 "$(:B?ClCCT="5
555 !'8"=# &?/=&? #?%%b%>r%   c           
         g }|D ]  }|dv r|dz   }|j                  |        |D cg c]  }t        j                  |       }}t        |D cg c]"  }t	        j
                  t        |      dd      $ c}      } t        |      |      }t        |      D 	cg c]'  \  }	}| j                  ||	      j                  d      ) }
}	}|
D ]  }| j                  j                  |        |
D cg c]  }|j                          }} ||
   ||  t        |||
      D ]  \  }}}| j                  |||      \  }}|j                  j                   }| j"                  j%                  |j&                  |fd      }|dv rdnd	}|d
v rdn|}dj)                  g d      }|j+                  |j&                  |
|||      }| j-                  |||||        y c c}w c c}w c c}}	w c c}w )N)rG  rJ  z8[D]rT   r[   rS  r3  fFr  r  dDr  r   )z ufunc '{0}' arrays differ ({1}):z	args: {2}zexpected {3}zgot {4})r  r   ulps)appendrJ   rK   r   r   rj   r   r   	enumeraterU  repeatrW  shufflerp  rI   _fixup_resultschar_ulpsgetr-   r)   r,   r   )rp   r(   r0   dtypesdtypes_with_unitsr  arg_dtyarg_nbtyr   rS  c_argsarrr   py_argsrK   py_argc_argtypecharrl  r  r   s                        r    rd  z)_LoopTypesTester._check_ufunc_with_dtypes  s    AJJ$$Q' 
 )::(91288A;(9:gNg%++jmQ<gNOXr" #,F"35"3heQ $$Qe$4;;A>"3 	 5CKK$ %+,V1668V,v
G %(&$A E65 //vuEMFE{{''H::>>5>>8"<a@D'4/8WD'4/8TD)) E FC**U^^VT65IC##FE#)- $ / %B! ;N5 -s   G'G,G!1G'c                 
    ||fS r   rA   )rp   rK   r|  r}  s       r    rq  z_LoopTypesTester._fixup_results  s    u}r%   c                 J    |j                   D ]  }| j                  ||        y r   )r   _inject_test)clsr0   re  s      r    _check_ufunc_loopsz#_LoopTypesTester._check_ufunc_loops  s     KKDUD)  r%   c           
          fd}t        | dj                  j                  j                  dd            |       y )Nc                 B    t              }| j                  |       y r   )r5   rg  )rp   r(   re  r0   s     r    test_templatez4_LoopTypesTester._inject_test.<locals>.test_template  s    $U+BR-r%   ztest_{0}_{1}z->_)setattrr,   r-   replace)r  r0   re  r  s    `` r    r  z_LoopTypesTester._inject_test  s9    	. 	^**5>>+/<<c+BD	r%   c                 H    | j                   D ]  }| j                  |        y r   )_ufuncsr  )r  r0   s     r    autogeneratez_LoopTypesTester.autogenerate  s    [[E""5) !r%   Nr   )r-   r   r   r.  r^  rs  rU  rg  rd  rq  classmethodr  r  r  rA   r%   r    r?  r?  `  s    ( K  "#E%LN?.&/P * *   * *r%   r?  c                   |   e Zd Zedd Zej                  ej                         ej                  ej                         ej                  ej                         ej                  ej                         ej                  ej                         ej                  ej                         dZdej                  z   Zy)TestLoopTypesIntNz?bBhHiIlLqQfdFDmMO)r-   r   r   r   r  removerJ   r   rO  
left_shiftright_shiftr   r   ra  r?  r^  rA   r%   r    r  r    s    q!GNN288NN2==!NN2==!NN2>>"NN2;;NN2;;#O.:::Kr%   r  c                   d    e Zd Zej                  ej
                  gZdZdej                  z   dz   Z	y) TestLoopTypesSubtractAndNegativez?bBhHiIlLqQfdFDmMOrF  N)
r-   r   r   rJ   r   r   r  ra  r?  r^  rA   r%   r    r  r    s/    {{BKK(G'O*666<Kr%   r  c                   \     e Zd Zej                  gZdZdej                  z   Zd fd	Z	 xZ
S )TestLoopTypesReciprocalbBhHiIlLqQfdFDr  c                 V    t         | j                  |   ||      }|dv rd||dk(  <   |S )Nri  
bBhHiIlLqQr  r   ra   rq   rU  rp   rR  rS  resrq   s       r    rU  z%TestLoopTypesReciprocal._arg_for_type  s?    DNND7>C 8 EL( CqM
r%   r  )r-   r   r   rJ   rO  r  ra  r?  r^  rU  r   r   s   @r    r  r    s.    }}oG&O*666K r%   r  c                   \     e Zd Zej                  gZdZdej                  z   Zd fd	Z	 xZ
S )TestLoopTypesPowerr  r  c                 `    t         | j                  |   ||      }|dv r|dk(  rd||dk  <   |S )Nri  r  rT   r  r   r  r  s       r    rU  z TestLoopTypesPower._arg_for_type0  sE    DNND7>C 8 EL(UaZ CaL
r%   r  )r-   r   r   rJ   r   r  ra  r?  r^  rU  r   r   s   @r    r  r  +  s.    xxjG&O*666K r%   r  c                   \     e Zd Zej                  gZdZdej                  z   Zd fd	Z	 xZ
S )TestLoopTypesIntLeftShiftr  r  c                     t         | j                  |   ||      }|dk(  r3|j                  j                  dz  }t        j                  |d|dz
        }|S Nri  rT      r   )ra   rq   rU  rK   itemsizerJ   cliprp   rR  rS  r  	bit_countrq   s        r    rU  z'TestLoopTypesIntLeftShift._arg_for_typeC  s[    DNND7>C 8 E A:		**Q.I''#q)a-0C
r%   r  )r-   r   r   rJ   r  r  ra  r?  r^  rU  r   r   s   @r    r  r  >  s.    }}oG"O.:::K r%   r  c                   \     e Zd Zej                  gZdZdej                  z   Zd fd	Z	 xZ
S )TestLoopTypesIntRightShiftr  r  c                     t         | j                  |   ||      }|dk(  r3|j                  j                  dz  }t        j                  |d|dz
        }|dk(  rt        j                  |      }|S r  )ra   rq   rU  rK   r  rJ   r  rI  r  s        r    rU  z(TestLoopTypesIntRightShift._arg_for_typeZ  sq    DNND7>C 8 E A:		**Q.I''#q)a-0C A:&&+C
r%   r  )r-   r   r   rJ   r  r  ra  r?  r^  rU  r   r   s   @r    r  r  U  s/    ~~G"O.:::K r%   r  c                   z    e Zd Zej                  ej
                  ej                  gZdZde	j                  z   Z
d Zy)TestLoopTypesFloorDivider  r  c                     |j                   dk(  rAt        j                  |      t        j                  |      z  }||dk(  |dk(  z  z  }||   ||<   ||fS )Nr   rW   )r   rJ   r  r  )rp   rK   r|  r}  preds        r    rq  z'TestLoopTypesFloorDivide._fixup_results|  sY    :: HHUObhhv&66DVs]u|44D ,E$Ku}r%   N)r-   r   r   rJ   r   r	  divmodr  ra  r?  r^  rq  rA   r%   r    r  r  w  s5    bii8G&O*666Kr%   r  c                   J   e Zd Zedd Zerej                  ej                         ej                  ej                         ej                  ej                         ej                  ej                         ej                  ej                         dZdej                  z   Zy)TestLoopTypesFloatNrL  FDmMO)r-   r   r   r   r  	iswindowsr  rJ   r  r   r	  r  r  ra  r?  r^  rA   r%   r    r  r    su    q!Grzz"NN2??#NN2<< NN299NN266O,888Kr%   r  c                   8    e Zd Zedd ZdZdej                  z   Zy)TestLoopTypesComplexNrN  r  )r-   r   r   r   r  ra  r?  r^  rA   r%   r    r  r    s$    q!G O*666Kr%   r  c                   z    e Zd Zedd Zej                  ej                         dZd Z	d Z
d Zd Zd Zd Zd	 Zy)
TestLoopTypesDatetimeNmMc                 `   t         j                  }t        |      }| j                  ||g d       | j                  ||g d       | j                  ||g d       | j                  ||g d       | j	                  t
              5  | j                  ||g d       d d d        y # 1 sw Y   y xY w)N)m8[s]m8[m]r  )r  r  r  )r  r  m8[ms])r  r  r  )r  r  r  )rJ   r   r5   rd  assertRaisesr	   rp   r0   r(   s      r    test_addzTestLoopTypesDatetime.test_add  s     '%%b%1LM%%b%1LM%%b%1MN%%b%1MN}-))"e*EG .--   B$$B-c                 `   t         j                  }t        |      }| j                  ||g d       | j                  ||g d       | j                  ||g d       | j                  ||g d       | j	                  t
              5  | j                  ||g d       d d d        y # 1 sw Y   y xY w)N)M8[s]M8[m]r  )r  r  r  )r  r  r  )r  r  r  )r  r  r  )rJ   r   r5   rd  r  r	   r  s      r    test_subtractz#TestLoopTypesDatetime.test_subtract  s     '%%b%1LM%%b%1LM%%b%1MN%%b%1MN}-))"e*EG .--r  c                    t         j                  }t        |      }| j                  ||g d       | j                  ||g d       | j	                  t
              5  | j                  ||g d       d d d        y # 1 sw Y   y xY w)N)r  qm8[us])r  r  r  r  r  r  )rJ   r   r5   rd  r  r	   r  s      r    test_multiplyz#TestLoopTypesDatetime.test_multiply  sh     '%%b%1IJ%%b%1IJ}-))"e5LM .--   A::Bc                 `   t         j                  }t        |      }| j                  ||g d       | j                  ||g d       | j                  ||g d       | j                  ||g d       | j	                  t
              5  | j                  ||g d       d d d        y # 1 sw Y   y xY w)N)r  r  rB  )r  r  rB  r  r  r  r  rB  r  r  )rJ   r   r5   rd  r  r	   r  s      r    test_true_dividez&TestLoopTypesDatetime.test_true_divide  s     '%%b%1HI%%b%1HI%%b%1HI%%b%1HI}-))"e5LM .--r  c                    t         j                  }t        |      }| j                  ||g d       | j                  ||g d       | j	                  t
              5  | j                  ||g d       d d d        y # 1 sw Y   y xY w)Nr  r  r  )rJ   r   r5   rd  r  r	   r  s      r    test_floor_dividez'TestLoopTypesDatetime.test_floor_divide  sh     '%%b%1HI%%b%1HI}-))"e5LM .--r  c                     t        |      }| j                  ||g d       | j                  ||g d       | j                  ||g d       | j                  ||g d       y )N)r  r  rF  )r  r  rF  )r  r  rF  )r  r  rF  )r5   rd  r  s      r    _check_comparisonz'TestLoopTypesDatetime._check_comparison  sX     '%%b%1HI%%b%1HI%%b%1HI%%b%1HIr%   c                     t         j                  t         j                  t         j                  t         j                  t         j
                  t         j                  fD ]  }| j                  |        y r   )rJ   r  r  r  r  r  r  r  r   s     r    test_comparisonsz&TestLoopTypesDatetime.test_comparisons  sD    hhbggr}}jj""2"24E""5)4r%   )r-   r   r   r   r  r  rJ   r  ra  r  r  r  r  r  r  r  rA   r%   r    r  r    sL    q!GNN299 O
GGNNNJ*r%   r  c                       e Zd Zd Zd Zd Zy)TestUFuncBadArgsc                     d }| j                  t              5   t        t        j                  t        j                        g      |       d d d        y # 1 sw Y   y xY w)Nc                 0    t        j                  |       }|S )zerror: np.add requires two argsr  )rB   r   s     r    r   z0TestUFuncBadArgs.test_missing_args.<locals>.func
  s    VVAYFMr%   r  r
   r   r   rh   rp   r   s     r    test_missing_argsz"TestUFuncBadArgs.test_missing_args	  sB    	
 {+0D%--./06 ,++   4AAc                     d }t        j                  t         j                  dd      } ||||      }| j                  t              5   t        |      |       d d d        y # 1 sw Y   y xY w)Nc                 6    t        j                  | | ||      }|S )zerror: too many argsr  )rB   outout2r   s       r    r   z1TestUFuncBadArgs.test_too_many_args.<locals>.func  s    VVAq#t,FMr%   rT   r[   )r   rj   rh   r  r
   r   )rp   r   
array_typer$  s       r    test_too_many_argsz#TestUFuncBadArgs.test_too_many_args  sT    	
 [[37
Z<{+DIdO ,++s   A##A,c                     d }| j                  t              5   t        t        j                  t        j                        g      |       d d d        y # 1 sw Y   y xY w)Nc                 6    d}t        j                  | | |       y)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FF1aOr%   r  r  s     r    "test_no_scalar_result_by_referencez3TestUFuncBadArgs.test_no_scalar_result_by_reference  sB    	
 {+0D%--./06 ,++r  N)r-   r   r   r  r  r  rA   r%   r    r  r    s    7
7r%   r  c                       e Zd Zd Zy) TestUFuncCompilationThreadSafetyc                    g t         d        fd}t        d      D cg c]  }t        j                  |       }}|D ]  }|j	                           |D ]  }|j                           | j                         yc c}w )z{
        Test that (lazy) compiling from several threads at once doesn't
        produce errors (see issue #2403).
        c                     | dz   S )NrT   rA   r  s    r    r5  z7TestUFuncCompilationThreadSafety.test_lock.<locals>.foo1  s    q5Lr%   c                  <   	 t        j                  dt         j                        } t        j                  dt         j                        dz   }t         j                  j	                   |       |       y # t
        $ r}j                  |       Y d }~y d }~ww xY w)N)rV  rZ   g      ?)rJ   onesrh   r   r*  	Exceptionrm  )r   r   eerrorsr5  s      r    r!   z;TestUFuncCompilationThreadSafety.test_lock.<locals>.wrapper5  sl    !GGE4775

;b@

--c!fh? !a  !s   A3A7 7	B BBr  )targetN)r   r*   	threadingThreadstartr)   assertFalse)rp   r!   r2   threadsr  r  r5  s        @@r    	test_lockz*TestUFuncCompilationThreadSafety.test_lock*  s    
 		 
		! >C2YGY9##73YGAGGI AFFH   Hs   BN)r-   r   r   r  rA   r%   r    r  r  (  s    !r%   r  c                       e Zd Zd Zd Zy)TestUfuncOnContextc                    t         j                  }|j                  t        j                        }| j                  |t               t        j                  t        j                        }| j                  ||       t               }| j                  t              5 }t        j                  |       d d d        | j                  j                  j                  |f       y # 1 sw Y   1xY wr   )r   target_contextget_ufunc_inforJ   r   assertIsInstancedictr   r  objectr  KeyError	exceptionr   )rp   	targetctxadd_infor   badkeyraisess         r    test_cpu_get_ufunc_infoz*TestUfuncOnContext.test_cpu_get_ufunc_infoF  s     --	++BFF3h-**26628,x(F##F+ )))..	: )(s   C  C)c                    t        t        j                  d      }| j                  t              5 }|j                  t        j                         d d d        | j                  t        j                        d       y # 1 sw Y   /xY w)Ncpuz<<numba\..*\.BaseContext object at .*> does not support ufunc)r   r   typing_contextr  NotImplementedErrorr  rJ   r   assertRegexrF   r  )rp   r  r  s      r    test_base_get_ufunc_infoz+TestUfuncOnContext.test_base_get_ufunc_infoV  sd    
 9 95A	23v$$RVV, 4  !K	
 43s    A>>BN)r-   r   r   r  r  rA   r%   r    r  r  E  s    ; 
r%   r  c                       e Zd Zd Zy)TestUfuncWriteInputc                 p   t        dgd      d        }t        j                  j                  dd      }t        j                  |t        j
                        } |||       t        j                  j                  t        j                  g dt        j                        |j                  d	             y )
Nzvoid(float64[:], uint8[:])z(n)->(n)c                 T    t        | j                        D ]  }|dz  dk(  sd||<    y )Nr   r   rT   )r*   r  )rB   r  r2   s      r    r   z6TestUfuncWriteInput.test_write_input_arg.<locals>.funcc  s*     166]q5A:CF #r%   rV  r   rZ   )TFFFTr   )axis)r   rJ   rW  randr   rk   r   r*  ri   r   r   )rp   r   rB   r  s       r    test_write_input_argz(TestUfuncWriteInput.test_write_input_argb  s    	23Z	@	 
A	 IINN2q!mmARWW-Q


%%HH6bhhGGGGO	r%   N)r-   r   r   r  rA   r%   r    r  r  a  s    r%   r  __main__)Hr"   r  r   r   r  rQ  numpyrJ   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   r   __itemsize__is32bitsrP  r   r  r$   r5   r<   r>   rG   rP   rR   r   r   rK  r  r0  r?  r  r  r  r  r  r  r  r  r  r  test_sign_F_Ftest_sign_D_Dr  r  r  r  r  r-   mainrA   r%   r    <module>r&     si     
      6 6  - 8 9 6 " * '  4"LL##G,		*"JFO FRS6] S6lb	< b	<JC" C"L
W6x W6t!*h !*H[*x [*|;' ;    ='7 = ! - - /.    $ $ &)      ! 0 (  & & (!1 >  ' ' )/    % % '	9) 	9    !7+ 7  ! ! # )77 8 )77 8[*, [*|  " " $7x 7@!x !:
 
8( & zHMMO r%   