o 6ap @sddlZddlZddlZddlZddlZddlmmZ ddl m m Z ddlmmZddlmmZddlmZmZmZmZmZmZmZmZmZddlmZddejjj !DZ"dde"DZ#GdddZ$Gd d d Z%d d Z&Gd ddZ'ej()ddde*eDddZ+ej()ddde*eDddZ,ej()dej-ej.gddZ/ej(j0e ddddZ1ej(j0e ddej()ddej2de3dej2gdd Z4dS)!N) assert_ assert_equal assert_raisesassert_array_equalassert_almost_equalassert_array_almost_equalassert_no_warningsassert_allclose HAS_REFCOUNT)picklecCsg|] }t|tjr|qS) isinstancenpufunc).0objr r =/usr/lib/python3/dist-packages/numpy/core/tests/test_ufunc.py s  rcCsg|] }d|jvr|qS)zO->O)types)rufr r rrsc@s,eZdZddZddZddZddZd S) TestUfuncKwargscCstttjddddtttjddtdtttjdddgdtttjddddtttjddd d tttjddd d tttjddd d tttjdddgddS)Nsafe)castingx)dtypex)extobjx)outxii->i)sigx) signaturexF)subokxT)wherexr TypeErrorraddintselfr r rtest_kwarg_exactsz TestUfuncKwargs.test_kwarg_exactcCstttjddddddS)Nrrr)sig signaturerr%rr&r(r r rtest_sig_signature$s z"TestUfuncKwargs.test_sig_signaturecCs0tttjdddtdtttjdddtddS)Nrrr)r+dtype)r,r/r$r(r r rtest_sig_dtype(s  zTestUfuncKwargs.test_sig_dtypecCstttjdddgdddS)NrrrT)extobjparrotr-r(r r rtest_extobj_refcount.sz$TestUfuncKwargs.test_extobj_refcountN)__name__ __module__ __qualname__r*r.r0r3r r r rrs   rc @s eZdZdZejejfejejfejejfejejfejejfej ej fejejfej ej fgZ e j de ejddfddZddZe j de eddfd d ZGd d d Zd dZefddZddZefddZefddZddZe j deddZdS)TestUfuncGenericLoopsabTest generic loops. The loops to be tested are: PyUFunc_ff_f_As_dd_d PyUFunc_ff_f PyUFunc_dd_d PyUFunc_gg_g PyUFunc_FF_F_As_DD_D PyUFunc_DD_D PyUFunc_FF_F PyUFunc_GG_G PyUFunc_OO_O PyUFunc_OO_O_method PyUFunc_f_f_As_d_d PyUFunc_d_d PyUFunc_f_f PyUFunc_g_g PyUFunc_F_F_As_D_D PyUFunc_F_F PyUFunc_D_D PyUFunc_G_G PyUFunc_O_O PyUFunc_O_O_method PyUFunc_On_Om Where: f -- float d -- double g -- long double F -- complex float D -- complex double G -- complex long double O -- python object It is difficult to assure that each of these loops is entered from the Python level as the special cased loops are a moving target and the corresponding types are architecture dependent. We probably need to define C level testing ufuncs to get at them. For the time being, I've just looked at the signatures registered in the build directory to find relevant functions. zinput_dtype,output_dtyperrcCs@tjd|||d}||ddd}t||t|j|dSN r/rrfullr rr/r) input_dtype output_dtypefxyxsysr r rtest_unary_PyUFuncfs z(TestUfuncGenericLoops.test_unary_PyUFunccCs||SNr )rArBr r rf2mszTestUfuncGenericLoops.f2cCsBtjd|||d}|||ddd}t||t|j|dSr8r;r=r r rtest_binary_PyUFuncps z)TestUfuncGenericLoops.test_binary_PyUFuncc@seZdZddZddZdS)zTestUfuncGenericLoops.foocC tdSNrrbool_r(r r r conjugatey z#TestUfuncGenericLoops.foo.conjugatecCrIrJrKr)rr r r logical_xor|rNz%TestUfuncGenericLoops.foo.logical_xorN)r4r5r6rMrPr r r rfooxs rQcCs*tjdtd}ttt|dkdS)Nr9r:r)ronesobjectrallabsr)rAr r rtest_unary_PyUFunc_O_Osz,TestUfuncGenericLoops.test_unary_PyUFunc_O_OcCs.tjd|td}ttt|dkdS)Nr9r:T)rr<rSrrTrMr)rQrAr r r$test_unary_PyUFunc_O_O_method_simplesz:TestUfuncGenericLoops.test_unary_PyUFunc_O_O_method_simplecCs,tjdtd}ttt||dkdSr8)rrRrSrrTr&rVr r rtest_binary_PyUFunc_OO_Osz.TestUfuncGenericLoops.test_binary_PyUFunc_OO_OcC,tjd|td}ttt||dS)Nr9r:rr<rSrrTrPrXr r rtest_binary_PyUFunc_OO_O_methodz5TestUfuncGenericLoops.test_binary_PyUFunc_OO_O_methodcCr[)N)r9rr:r\rXr r r test_binary_PyUFunc_On_Om_methodr^z6TestUfuncGenericLoops.test_binary_PyUFunc_On_Om_methodcCs^tjddgdd}t|dtsJt|}|jtdks!Jt|tjddgdddS)Ny?@y@Or:ry?y@@)rarrayr complexrMr/r)r)arrresr r rtest_python_complex_conjugates  z3TestUfuncGenericLoops.test_python_complex_conjugaterc s ttjdGfdddtj}tjgtjd}tj|gdd}tjddPz||}Wn,ty_}z tt| ||Wdn1sPwYWYd}~nd}~ww||}t| d|WddSWddS1swYdS) z9Compare the result of the object loop with non-object onecseZdZfddZZS)zITestUfuncGenericLoops.test_unary_PyUFunc_O_O_method_full..MyFloatcs0ztWStyfddYSw)NcsttjjSrF)getattrrcoreumathr )attrvalr rzgTestUfuncGenericLoops.test_unary_PyUFunc_O_O_method_full..MyFloat.__getattr__..)super __getattr__AttributeError)r)rk) __class__rl)rkrrps  zUTestUfuncGenericLoops.test_unary_PyUFunc_O_O_method_full..MyFloat.__getattr__)r4r5r6rp __classcell__r rl)rrrMyFloatsrur:raraise)rTN) rfloat64pirberrstate Exceptionrtyperastype)r)rrunum_arrobj_arrres_numexcres_objr rtr"test_unary_PyUFunc_O_O_method_fulls$  "z8TestUfuncGenericLoops.test_unary_PyUFunc_O_O_method_fullN)r4r5r6__doc__rsingledoublecsinglecdouble longdouble clongdouble np_dtypespytestmark parametrizeexprErGrHrQrWrYrZr]r`rfUNARY_OBJECT_UFUNCSrr r r rr73s*-      r7cCsdSrFr r r r r_pickleable_module_globalrc @seZdZddZddZddZddZd d Zd Zd Z d dZ ddZ ddZ ddZ ddZddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zejd/gd0d1d2Zd3d4Zd5d6Z d7d8Z!d9d:Z"d;d<Z#d=d>Z$d?d@Z%dAdBZ&dCdDZ'dEdFZ(dGdHZ)dIdJZ*dKdLZ+dMdNZ,dOdPZ-dQdRZ.dSdTZ/dUdVZ0dWdXZ1dYdZZ2d[d\Z3d]d^Z4d_d`Z5dadbZ6dcddZ7dedfZ8dgdhZ9didjZ:dkdlZ;dmdnZdsdtZ?dudvZ@dwdxZAdydzZBd{d|ZCd}d~ZDddZEddZFddZGddZHddZIddZJddZKddZLddZMddZNejddejdeOPgdeOPdgdgdggeOPgdgdgdgfddZQejddeOPgdfdgdfdfejdeOjR dfddZSddZTddZUddZVddZWddZXddZYddZZddZ[ddZ\ddZ]ddZ^ddZ_ddZ`dd„ZaddĄZbejdeOjceOjdgejdddeefeeddfdeedfgddɄZfejdeOjceOjdeOjggejdehdeefeedehfdeeehfgdd˄Zidd̈́ZjejdgdϢejdddgejdeOjkjleOjmjlgddӄZnddՄZoddׄZpddلZqddۄZrejdeOsdܡeOtdܡgddބZuejdeOsdܡeOtdܡgddZvejdeOsdܡeOtdܡgddZwdS) TestUfunccCs^tdtjdD]$}tttjtj|dtjuttjtj |d}t|tj uqdS)Nrr)protocol) ranger HIGHEST_PROTOCOLrloadsdumpsrsin_rational_teststest_add)r)protorer r r test_pickles zTestUfunc.test_picklecCsd}tt|tjudS)NsMcnumpy.core _ufunc_reconstruct p0 (S'numpy.core.umath' p1 S'cos' p2 tp3 Rp4 .)rr rrcos)r)astringr r rtest_pickle_withstringsz TestUfunc.test_pickle_withstringcCs,tjt_tttj}|tjusJdSrF)umt_pickleable_module_global_ufuncrrr rrrOr r rtest_pickle_name_is_qualnamesz&TestUfunc.test_pickle_name_is_qualnamec Csdd}t|}tttt|dt|dd}ttj||dddgddS)Nr)rr_) rarangerblistzipravelrr&reduceat)r)LrAidxr r rtest_reduceat_shifting_sums 0&z$TestUfunc.test_reduceat_shifting_sumcCdS)aLTry to check presence and results of all ufuncs. The list of ufuncs comes from generate_umath.py and is as follows: ===== ==== ============= =============== ======================== done args function types notes ===== ==== ============= =============== ======================== n 1 conjugate nums + O n 1 absolute nums + O complex -> real n 1 negative nums + O n 1 sign nums + O -> int n 1 invert bool + ints + O flts raise an error n 1 degrees real + M cmplx raise an error n 1 radians real + M cmplx raise an error n 1 arccos flts + M n 1 arccosh flts + M n 1 arcsin flts + M n 1 arcsinh flts + M n 1 arctan flts + M n 1 arctanh flts + M n 1 cos flts + M n 1 sin flts + M n 1 tan flts + M n 1 cosh flts + M n 1 sinh flts + M n 1 tanh flts + M n 1 exp flts + M n 1 expm1 flts + M n 1 log flts + M n 1 log10 flts + M n 1 log1p flts + M n 1 sqrt flts + M real x < 0 raises error n 1 ceil real + M n 1 trunc real + M n 1 floor real + M n 1 fabs real + M n 1 rint flts + M n 1 isnan flts -> bool n 1 isinf flts -> bool n 1 isfinite flts -> bool n 1 signbit real -> bool n 1 modf real -> (frac, int) n 1 logical_not bool + nums + M -> bool n 2 left_shift ints + O flts raise an error n 2 right_shift ints + O flts raise an error n 2 add bool + nums + O boolean + is || n 2 subtract bool + nums + O boolean - is ^ n 2 multiply bool + nums + O boolean * is & n 2 divide nums + O n 2 floor_divide nums + O n 2 true_divide nums + O bBhH -> f, iIlLqQ -> d n 2 fmod nums + M n 2 power nums + O n 2 greater bool + nums + O -> bool n 2 greater_equal bool + nums + O -> bool n 2 less bool + nums + O -> bool n 2 less_equal bool + nums + O -> bool n 2 equal bool + nums + O -> bool n 2 not_equal bool + nums + O -> bool n 2 logical_and bool + nums + M -> bool n 2 logical_or bool + nums + M -> bool n 2 logical_xor bool + nums + M -> bool n 2 maximum bool + nums + O n 2 minimum bool + nums + O n 2 bitwise_and bool + ints + O flts raise an error n 2 bitwise_or bool + ints + O flts raise an error n 2 bitwise_xor bool + ints + O flts raise an error n 2 arctan2 real + M n 2 remainder ints + real + O n 2 hypot real + M ===== ==== ============= =============== ======================== Types other than those listed will be accepted, but they are cast to the smallest compatible type for which the function is defined. The casting rules are: bool -> int8 -> float32 ints -> double Nr r(r r rtest_all_ufuncsQzTestUfunc.test_all_ufuncrrgcCsRtddd\}}}}}t|dt|dt|dt||jft|ddS)Nrr (i),(i)->())rrrrrrtest_signaturer size_inferredr)enablednum_dimsixsflagssizesr r rtest_signature0/s   zTestUfunc.test_signature0cCsNtddd\}}}}}t|dt|dt|dt|dt|ddS)Nrrz (),()->()rrrrr rrrrr r rtest_signature19s    zTestUfunc.test_signature1cCVtddd\}}}}}t|dt|dt|dt||jfdt|ddS)Nrrz(i1,i2),(J_1)->(_kAB)rrr)rrrr_rgrrrrrrr r rtest_signature2C   zTestUfunc.test_signature2cCr)Nrrz(i1, i12), (J_1)->(i12, i2)rrr)rrrrr_rgrrrr r rtest_signature3M   zTestUfunc.test_signature3cCr)Nrrz(n,k),(k,m)->(n,m)rrrrrrrrrr_rrrrrr r rtest_signature4VrzTestUfunc.test_signature4cCsftddd\}}}}}t|dt|dt|dt||j|jB|j|j|jBft|ddS)Nrrz(n?,k),(k,m?)->(n?,m?)rrr)rrrr can_ignorerr r rtest_signature5`s    zTestUfunc.test_signature5cCsNtddd\}}}}}t|dt|dt|dt|dt|ddS)Nrz(3)->())rr)rr_rrr r rtest_signature6ls    zTestUfunc.test_signature6cCsVtddd\}}}}}t|dt|dt|dt|d|jdft|ddS)Nr_rz(3),(03,3),(n)->(9)rrrrrrrrrrr_r rrr r rtest_signature7urzTestUfunc.test_signature7cCsXtddd\}}}}}t|dt|dt|dt||j|jdft|ddS)Nr_rz(3?),(3?,3?),(n)->(9)rrrr)rrrrrrr r rtest_signature8~s   zTestUfunc.test_signature8cC<tttdddWddS1swYdS)Nrrz ((i)),(i)->()r ValueErrorrrr(r r r(test_signature_failure_extra_parenthesis "z2TestUfunc.test_signature_failure_extra_parenthesiscCr)Nrrz (i),)i(->()rr(r r r.test_signature_failure_mismatching_parenthesisrz8TestUfunc.test_signature_failure_mismatching_parenthesiscCr)Nrrz(i),->()rr(r r r2test_signature_failure_signature_missing_input_argrz#sii-izii>i)Nrs->i)rrr%rr&rUnicodeDecodeErrorr(r r rtest_signature_errorss(     "zTestUfunc.test_signature_errorscCsdtjgddd}tj||ddtjj|ddtjddd}tj||ddtj||dddS)N)z 2010-01-02z 1999-03-14z1833-03z>M8[D]r:Mr9zm8[s]m)rrbrreducerr&)r)rrdr r rtest_forced_dtype_timess z!TestUfunc.test_forced_dtype_timesc Cstd}td}td}dD](}t|}||}||}t|| g|| gD] \}} |dvrAt|t| }nt|t| }t|| } t t | j d} t | || d|dvrlt | jjd kn t | jj|jkdD]} t| } tttj|| | d qwd D]i} t| } |dvrtttj|| | d qt|t| }t t | j d} t t | jd }tjd dtj|| | d } Wdn1swYt| s| dkrqt | || |dt | jj| jkqdD]A} t| } t|t| }t t | j d} t t | jd }tj|| | d } t| s'qt | || |dt | jj| jkqq/qtjdtjd }t||} t | dkt | jjd kt||} t | dkt | jjd kdS)Nr9rbhilqBHILQefdgFDGFDGgV瞯<)rtol bhilqBHILQrwr:efdggwMhignoreinvalide)ratolr r)rrbr/r| itertoolsproductrcfloat true_dividemaxfinfo resolutionr rnamerr%tinyryisfiniterRrL)r)rrtgttcdtaabbrArBrertcoutdtoutrr r rtest_true_dividesj       "     7   zTestUfunc.test_true_dividecCs`tjdtjd}t|d|jdddtjdtjd}t|d|jddddS)Nr:$@rrg )rrRrrsumsizerwr)rr r rtest_sum_stabilityRs"zTestUfunc.test_sum_stabilityc CsttjtjtjtjfD]}dD]^}|||dd}tjd|d|d}t| }tj dd4}t dt t ||t t|d|t t |ddd|t t|d|Wdn1shwYqtjd |d}t t |dddd t t |dddd t t |ddd d t t |ddd d t t |ddd d t t |ddd d t t |dddd t t |dddd tjd|d}||7}t |dq dS)N rrrrriirrr:Trecordalwaysrr,g@o@r_gd@r@)r'rfloat16rrwrrr#warningscatch_warnings simplefilterrr/rlenrR)r)r&vr$roverflowwr r rtest_sumYs4   zTestUfunc.test_sumc CstjtjtjfD]}dD]G}|||dd|||ddd}tj||d}td|d|_td|d |_tt ||tt |ddd|q tj d|dd}tt |ddddtt |ddddtt |ddd d tt |ddd d tt |ddd dtt |ddd dtt |ddd d tt |ddd d tj d |dd}||7}t|dqdS)Nr3rry?r:rr,y@o@@o@r_yd@d@r=r>r?y@@) r complex64 complex128remptyrrealimagrr/rR)r)r&rFr$rr r rtest_sum_complexys*, zTestUfunc.test_sum_complexcCsVttjdgdddttjdgdddttjtjdtjd d dd gd dS) Nr_rinitialrg?皙?333333?)rr_rr:rr)axisrQ) rVrV)rrr/rrRint64r(r r rtest_sum_initials zTestUfunc.test_sum_initialcCsTttjddgddggddgddttjddgddggdd ddgd d d gdS) Nrr@@@TFwherer@)rUrQr\"@)rrr/r(r r rtest_sum_wheres $zTestUfunc.test_sum_wherecCsZtdd}tt||tj||ddtd}tt||t||dS)Nrrr_rrU)rrreshaperrrr/r1r r r test_inner1ds   zTestUfunc.test_inner1dc Cs d}tdd}tdd}tt||tj||dd|dd}tdd }tt||tj||dd|dtd d }tdd }tttj||td d }t d }tttj||tdd}tdd}tttj||td}tdd }t ||\}}t |j dd||}t jdd"}t d||7}t t|dt|d|dkWdn1swYtddd}td}td}tttj|||td} t||| } t| | udS)N broadcastrgr)rrrrraerr_msgz"extend & broadcast loop dimensionsrrr4)rgr)rgrrrrr_)r_rrrTr:r<rrrr )rrrbrrrr/rrrbbroadcast_arraysrstridesrBrCrDrErrRrL) r)msgrrurFrArHrout2cr r rtest_broadcastsD$$      zTestUfunc.test_broadcastcCsjtddd}td}tj|||d|tddks#Jtj|||d|dks3JdS)Nr_r)rrgr_rrr)rrrbrLr&rTrrr)rdrr r rtest_out_broadcastss  zTestUfunc.test_out_broadcastscCsd}tjdddd}tt||tj||dd|dd }tdd}|d }tt||tj||dd|ddS) Nz type castrshortr:r`rrareztype cast on one argumentrR)rrrbrrrr/r)r)rjrrr r rtest_type_casts zTestUfunc.test_type_castcCsPd}tjdddd}tt||tj||dd|dd }tjdd dd}tt||tj||dd|dtjd d d}tjd d d}t||jtdt||jtdt||jtdt||jtdtt |jtdtt |jtdtt |jtdtt |jtddS)Nz big endianrz>i4r:r`rrarez little endianzf8ztj}tdd}tddd}|||}t|||d|||dd}t|||dt|}|||d|d}t||ut|||||d d}t|||d td d }td d d }tddd }ttj |||d dtj|||d dttj |d dtj |d dttj |ddtj |ddt |}tj ||d d}t||ut|tj |d dtj ||dd}t||ut|tj |ddt t |||d d d gdt t |||d gdtj}t t |||ddtjd|jd}t ttj ||d dt t tjddd ddS)Nrrr-rrrra)rUrrrr`r9r6rrrUr)rUrrrr_r:r)rrrrrbrr/ zeros_likerinnerwtcumsum empty_likerr%rrLr/rr&) r)rrrrmrrrHrr r rtest_axis_argumentsF       zTestUfunc.test_axis_argumentcCstj}tdd}tddd}|||}t|||d|||dd}t|||d|||d d}t|||jdd dt|}|||d |d }t||ut|||||ddd }t|||jddd|||dd d }t|||jdd d|||d dd }t|||jd dd|||d d d }t|||jd d d|||gd dd}t|||d|||gdd d}t|||jdd d|||d d gdd}t|||d |||gdd d}t|||jd d d|||d dgdd}t|| ddd |d|||d dgd d}t|| ddd |jdd d|||gdd d}t|| ddd |jdd d|||gdd d}t||| dd djd d d|||gdd d}t|| dd d| d ddjdd dt dtdddtj tj f}t |}t j |dd}t||t j |d d}t||ddtj tj ft dtdddtj tj f}t |\}} t j|dd\} } t| |t| | t j|d d\} } t| |ddtj tj ft| | ddtj tj ftdd}tddd}tddd} ttj||| d dtj||| dd d ttj||| d d d tj||| d d d tt|||ddtj} tt| ||d dtt| ||ddtttjdddddS) Nrrr-rrrFkeepdimsT)rrrUrrr)rr)rrrrrr)rrr)rrr)rrrr_rZrr`r9r6rrtruer)rrrrrbrr/rrreyenewaxisumldetslogdetrrr%rr&)r)rrrrmrrexpected expected_s expected_lcsclrHrr r rtest_keepdims_arguments    "&  &  z TestUfunc.test_keepdims_argumentcCstdd}tddd}tddd}tt|||tj|||ddtd d d }td d d }tddd }tt|||tj|||dddS)Nrr`r9r6rrrrad|r,iD)rrrbrrrr/r)rrrHr r r test_innerwts&*zTestUfunc.test_innerwtcCsTtjgdd}tjgdd}tjgdd}tt|||tj|||dddS)z/Test generalized ufunc with zero-sized operandsrr:rraN)rrbrrrr/rr r rtest_innerwt_emptys*zTestUfunc.test_innerwt_emptycCstd}tt||tdtd}t|d||}t||ut|ttd|d|d ftt tjtdtdtt tj|t dtt tj|t dtd tt tj|t dtdd S) z Test with fixed-sized signature.r_r_r_rrrrgrZrY)r_rgN) rrrrcross1drrvstackrrr)r)rrresultr r r test_cross1d#s   &"zTestUfunc.test_cross1dcCsRtdd}td}|ddtjf}tddd}t||}t||}t||tt tj||t||}t|| t||}t||}t||td}|tjddf}tdd d} t||} t||} t| | tt tj||t||} t| | t| |} t| |} t| | |j }| d d }t||} t||}t|| tt tj||t||}t|| t| |}t| |}t||t |}tj| ||d }t||d |dd<tj| ||d }t||t | }tt tj|||t|||}t|| dS)NrVr}rr4rrr_ry)rgrrrr_r=rrr)rrrbrrrrrrrsqueezerzswapaxesr)r)mat single_veccol_vec col_vec_array mm_col_vecmatmul_col_vec matmul_colrow_vec row_vec_array mm_row_vecmatmul_row_vec matmul_rowmm_row_col_vecmatmul_row_col_vecmatmul_row_colmm_row_col_arraymatmul_row_col_arrayrr r rtest_can_ignore_signature2s`                              z#TestUfunc.test_can_ignore_signaturecCs|tj|tjdSrF)compare_matrix_multiply_resultsrrWrr(r r rtest_matrix_multiplyys zTestUfunc.test_matrix_multiplycCsTttdtd}t|tdttdtd}t|tddS)N)rr9)r9rr)r9r9)rrrrRrrrr r r test_matrix_multiply_umath_empty}sz*TestUfunc.test_matrix_multiply_umath_emptyc stjtjddd|d}tjtjddd|d}d|jj}fddfdd d d }d}dtddd fdf}d }|D]q} |D]l} |D]g} |D]b} || | } || | }|oh| jdu}|oo|jdu}| j d |j dkr|| j d|j drt t | |tj |dtjfdd | dtjddfd d|dt| j t|j fdqRqNqJqFt|d dddS)Nrr_rgr:zmatrix multiply on type %scsp|dkrdgfSd}|d}|D]#}t|D]}||dg}||||d<|d||<||f7}qq|S)Nrrr )r)nretbasepermrnew) permute_nr rrs    z.permute_ncsT|dkrdSd}|d}|D]}||tdff7}||tddff7}q|S)Nr)r r r)slice)rrrsl)slice_nr rrs z:TestUfunc.compare_matrix_multiply_results..slice_ncSs||kp |dkp |dkSrJr )s1s2r r r broadcastablesz@TestUfunc.compare_matrix_multiply_results..broadcastablerTr=r.r>raz %s %srezreference check)rrbrandomrandr/r!rrrshaperrrr/rrstrr)r)tpd1d2rjr permute_3slice_3refp1p2rra1a2r )rrrrsH      z)TestUfunc.compare_matrix_multiply_resultscCstjdtddd}tj|jd|jdddf|jd}t||t tj |dddf|ddd }|tj |jdt d}t ||tttj|dS) NrVr:rgr_rrrrra)rrrrbrLrr/reuclidean_pdistsqrtr/triboolrrr)r)rrrr r rtest_euclidean_pdists* ( zTestUfunc.test_euclidean_pdistcCs&td}t|}t||dS)Nr9)rrrrr)r)rrr r r test_cumsums  zTestUfunc.test_cumsumcCstjgdtd}tt|dtjdd|Dtdtt|dtjdd|Dtdtt|dtjdd|Dtdtt|d tjd d|Dtdtt|dtjd d|Dtdtt|dtjd d|Dtdtt|dtjd d|Dtdtt|d tjdd|Dtdtt|tjdd|Dtdttj|dttj|ddS)N)r_NTFtestr:cSg|]}|pdqSrFr rrAr r rrz1TestUfunc.test_object_logical..TcSrTr rr r rrrrVcSrrVr rr r rrrblahcSrrr rr r rrrcSg|]}|odqSrFr rr r rrrcSrrr rr r rrrcSrrr rr r rrrcSrrr rr r rrrcSsg|]}| qSr r rr r rrrnr_)rrbrSr logical_or logical_and logical_notr r1r r rtest_object_logicals<         zTestUfunc.test_object_logicalcCsGddd}t|}t||kdtt||dt|g}t||ktdgtt||tdgttj||tdtdgdS)Nc@eZdZddZdS)z8TestUfunc.test_object_comparison..HasComparisonscSr)N==r r)otherr r r__eq__rz?TestUfunc.test_object_comparison..HasComparisons.__eq__N)r4r5r6rr r r rHasComparisons rTr:r)rrbrequalrS)r)rarr0darr1dr r rtest_object_comparisons "z TestUfunc.test_object_comparisoncCsJtjgdtd}tt|dtt|dtt|dtjgdtd}tt|dtt|dtt|d tt |d tt|d tt|d ttjd ggtdd ttjd dgggtdd d dgttjd gtdjd d dttjd gddggtdjdgd d gdgddS)N)rrrmr:abcrmrTFTrrTFrrrrPr_)rQr\)rrr_) rrbrSrr/rminprodanyrTr1r r rtest_object_array_reductions&& z%TestUfunc.test_object_array_reductioncCstjdtd}ddtdD|dd<tjj||dtjj||dt|tjdddDtdtjdtd}d dtdD|d ddf<tjj||d d tjj||d d t|d ddftjd ddDtddS)Nrgr:cSg|]}dgqSr?r rrr r rrrnzBTestUfunc.test_object_array_accumulate_inplace..rcSg|]}dg|qSr?r rr r rr )rr_rr9rrgcSrrr rr r rrrnrrrcSrrr rr r rrr)rrRrSrr& accumulaterrb)r)rdr r r$test_object_array_accumulate_inplacesz.TestUfunc.test_object_array_accumulate_inplacecCs$tjdtd}ddtdD|dd<tjdtd}ddtdD|dd<tjj|td|dtjj|td|dt||tjdtd}ddtdD|d ddf<tjdtd}d dtdD|d ddf<tjj|td|d d tjj|td|d d t||dS) Nrgr:cSrr?r rr r rrrnz@TestUfunc.test_object_array_reduceat_inplace..cSrr?r rr r rrrnrrcSrrr rr r rr#rnrcSrrr rr r rr%rnrr) rrLrSrr&rrrrRror r r"test_object_array_reduceat_inplaces z,TestUfunc.test_object_array_reduceat_inplacecCsxgtjgtdfD]0}tt|dtt|dtt|dtt|dtt tj |tt tj |q dS)Nr:rrFT) rrbrSrr/r r rTrrrr r1r r rtest_zerosize_reduction*sz!TestUfunc.test_zerosize_reductioncCstddg}ttj|jddtddg}ttj|jddtddg}ttj|jddtddg}ttj|jdddS)NFrrar=)rrbr AxisErrorrTr r1r r rtest_axis_out_of_bounds4sz!TestUfunc.test_axis_out_of_boundscCsjttjddddttjddddttjddddttjddddttjddddttjddddttj ddt t tjt dddtj ut t tjt dddtj ut t tjt dddtj ut t tjt dddtj ut t tjdddtj uGdd d tj}td |}t t t||udS) Nr_rra @TFg@c@ eZdZdS)z0TestUfunc.test_scalar_reduction..MyArrayNr4r5r6r r r rMyArrayVrr)rrr/r r rTrr rr rr{rrLndarrayrbview)r)rrr r rtest_scalar_reduction?s""""zTestUfunc.test_scalar_reductioncCs|tdtj}tdtj}tdtj}tj|||dt|dtd}tjdtjd}tj|d|dt|ddS)N)rrrrir:r) rrRrWrwr&rrrsubtractr)rrrmr r rtest_casting_out_param[s  z TestUfunc.test_casting_out_paramcCstd}td}td}tj||||ddkdt|gdtdddd}tj|ddg|ddgddggdt|dd gd d ggtj|d|d d gdt|dd gdd ggdS)Nrrrrr\)rrrrgrrrrgr_rr6rTF) rrrRrr&rrbrr"r#r r rtest_where_paramhs   "zTestUfunc.test_where_paramcCsVtdtj}tdtj}dtdtj}tj|||gddt|gddS)Nr9r) rrrrrrrrrrr%) rrrrrrrrrr)rrRrWrwr&rr#r r rtest_where_param_buffer_outputws z(TestUfunc.test_where_param_buffer_outputcCsttjdgtjd}tjdgtd}ttj||ddgtjdgtjd}tjdgtd}ttj||ddgdS)Nrr:Tr[)rrbrWrrrrwr)rr r r rtest_where_param_allocs z TestUfunc.test_where_param_alloccCstjd}tjd}|dk}t|d}tj||||dt||j|}t|||k||t|| r?JdS)N)rg)r,rrSr)r\r) rr full_likeless broadcast_torrr|rr )r)rrr\rb_wherer r rtest_where_with_broadcastings   z&TestUfunc.test_where_with_broadcastingcCsd|d<d|d<ttjj|dddttjj|ddgdttjj|ddgd ttjj|d dddgttjj|ddgdgd gd gttjj|ddgd gdgttjj|d dgd gd gttjj|dd|d|d<d|d<ttjj|dddttjj|ddgdttjj|ddgdttjj|d dddgttjj|ddgd gdgd gttjj|ddgdgd gttjj|d dgdgd gttjj|dd|d|d<d|d<ttjj|dddttjj|ddgdttjj|ddgd ttjj|d dddgttjj|ddgdgd gd gttjj|ddgdgd gttjj|d dgd gd gttjj|dd|dS)Nr.r)rrrrar )rrrrrT)rrrr)rrrrr)rrrr )rrr)rrrr)rrrr)rrminimumr r1r r rcheck_identityless_reductions`z&TestUfunc.check_identityless_reductioncCtjddd}||dS)NrCorderrrLr3r1r r r"test_identityless_reduction_corderz,TestUfunc.test_identityless_reduction_cordercCr4)NrFr6r8r1r r r"test_identityless_reduction_forderr:z,TestUfunc.test_identityless_reduction_fordercCs$tjddddd}||dS)N)rrgr_r5r6rrrrLrr3r1r r r&test_identityless_reduction_otherordersz0TestUfunc.test_identityless_reduction_otherordercCs>tjddddd}|ddddddf}||dS)N)r_rrgr5r6rrr=r1r r r%test_identityless_reduction_noncontigsz/TestUfunc.test_identityless_reduction_noncontigcCsPtjddd}|ddjdd}d|_|ddddddf}||dS)N)ii1r:rrr_rgr)rrLr rr3r1r r r/test_identityless_reduction_noncontig_unaligneds z9TestUfunc.test_identityless_reduction_noncontig_unalignedcCsttjjgdddttjjgtjdtjttjjgtj dtj ttjjdgdddttjjdgdddttjjdgdddttjjdgdddtttjjgddtttjjgddttjjgtj ddtj dgt d}tjj|dd}t|ddS)NrrPrrgr9r:r5) rrrr r2infrrr&_NoValuerbrSr)rrer r rtest_initial_reductionsz TestUfunc.test_initial_reductionrU)rrNr\)FTTTF)TFFFTFcCshtddd}|}t|}tj|||dtjj|||d}||}t ||t ||dS)Nr^r_r%rUr\) rrrbcopyrpositiver&r r/rr)r)rUr\ra_copya_checkrecheckr r rtest_reduction_with_wheres   z#TestUfunc.test_reduction_with_whererHrrr)TTF)NTrQr]c Csltddd}|}t|jtj }tj|||dtjj ||||d}|j ||d}t ||dS)Nr^r_r%)rUr\rQrP) rrrbrIr<rrCrJrr rr) r)rUr\rQrrKrLrerMr r r%test_reduction_with_where_and_initialsz/TestUfunc.test_reduction_with_where_and_initialcCs2tddd}gd}tttjj||ddS)Nr^r_rGr[)rrrbrrrr r*r r r#test_reduction_where_initial_neededsz-TestUfunc.test_reduction_where_initial_neededcCstgdgdg}tjj|dd}t|gdtjj|dd}t|ddgtjj|d d}t||tttjj|d ddS) N) @r@r@)rrg?rra)rQrZrQrr@rQr r )rrbdivider rrrrEr r r*test_identityless_reduction_nonreorderable"s z4TestUfunc.test_identityless_reduction_nonreorderablecCsbdd}dd}dd}ttjjd||tjjdd||tjjdd||tjjdd||tjjdd|tjjgtjjtd d d ||tjjdd||tjjdd||tjjdd||tjjddtjgtjjtd d d tjtjfD]*}|jtd dd |jtd dd |jtddd |jtd dd qdS)Nc_s||i|dSrFr r@argskwargsr r rok>rz+TestUfunc.test_reduce_zero_axis..okc_stt|g|Ri|dSrF)rrrTr r rerrAsz,TestUfunc.test_reduce_zero_axis..errc Ssp||t||fdd||t||fdd||t|d|d|fdd||t|d||dfdd||t||d|dfdd||t|d||dfdd||t|d|d|d|d|dfdd||td ||fd d||td ||fdd||t|d |fdd||td ||fdd||td ||fdddS) NrrarrrrTr_rrrr9r )rr)expectfuncrr r r rtDs """" z*TestUfunc.test_reduce_zero_axis..trrr ra)r]r)rr])r]r])rrridentityr rr&r)r)rWrXr\rr r rtest_reduce_zero_axis0s, zTestUfunc.test_reduce_zero_axiscCsztjgdtd}tttj|dgdtttj|d|ddd}tt||dttj|d|dd t|gd dS) Nrr:g?)g@g@gffffff@rcSs ||7}dSrFr )rrr r r add_inplace|s z0TestUfunc.test_safe_casting..add_inplacerrrr)rrbr'rrr&rr%)r)rr`r r rtest_safe_castingqszTestUfunc.test_safe_castingcCstjgddd}tjgddd}tjdtjd}t|||}tjgdtjd}t||ttt||WddS1sFwYdS)NrYi8r:r_)rrrg) rrbrLrrationalrrrr%)r)rrrmrtargetr r rtest_ufunc_custom_outs  "zTestUfunc.test_ufunc_custom_outcCstjddddd}tjddddd}t|ddddf|t|tjgdgd gd gd gddtd }t|dt|dt|ddgt|d dS)Nr6lr:rgrr_r)rrrgr_)rr r)r'r6rh)rVr.r'r5rr9)rrrb opflag_tests inplace_addrrbrr r rtest_operand_flagss    zTestUfunc.test_operand_flagscCsdddlmm}tjdgdd}tjdgdd}|||}t|tjdgddtt|j dS)Nrrzu8,u8,u8r:)rrgr) numpy.core._struct_ufunc_testsri_struct_ufunc_testsrrb add_tripletrr RuntimeError register_fail)r) struct_ufuncrrrr r rtest_struct_ufuncs  zTestUfunc.test_struct_ufunccCstjtddtddtddgtjd}tjtddtddtddgtjd}t||}tjtdtddtddgtjd}t||dS)Nrrr_rgr:)rrbrrdtest_add_rationalsr)r)rrrrr r rtest_custom_ufuncs.         zTestUfunc.test_custom_ufunccCsLtttjtddtjtdfdWddS1swYdS)Nrr)rr%rmultiplyrrdr'r(r r rtest_custom_ufunc_forced_sigs  "z&TestUfunc.test_custom_ufunc_forced_sigcsLGfdddtddtjdkjtjdkjdS)Ncs@eZdZdZdZdZddZddZfddZfd d Z d S) z1TestUfunc.test_custom_array_like..MyThingircSs ||_dSrFr)r)rr r r__init__rNz:TestUfunc.test_custom_array_like..MyThing.__init__cSs |jdS)Nrrxr(r r r__len__rNz9TestUfunc.test_custom_array_like..MyThing.__len__csJjd7_t|ts|f}t||jkrtd|jt|dS)Nrboo) getitem_countr tuplerEndim IndexErrorr)r)rMyThingr r __getitem__s  z=TestUfunc.test_custom_array_like..MyThing.__getitem__csjd7_|SrJ) rmul_countrrr r__rmul__sz:TestUfunc.test_custom_array_like..MyThing.__rmul__N) r4r5r6__array_priority__rr|ryrzrrr rr rrs  rrrrr)rrwrrr|r(r rrtest_custom_array_likesz TestUfunc.test_custom_array_likecCstd}tj|gddt|gdtd}tgd}tj|gd|t|gdtddd}tgdgd gd g}tj|tdgd f|t|gd gd gdgtdddd}tgd}tj|tdtdgd f|t|gdgd gdggdgdgdggdgdgdggtddd}tgdgd gd g}tj|gd tdf|t|gdgdgdgtdddd}tgd}tj|tdgd tdf|t|gdgdgdggdgdgd ggd!gd"gd#ggtddd}tgd}tj|d$gd f|t|gdgd%gd&gtdddd}tgd}tj|gd d$tdf|t|gdgd%gd&ggd'gd(gd)ggd*gd+gd,ggtdddd}tgd}tj|tdtdtdf|t|gd-gd.gdggd/gd0gd ggd*gd1gd#ggtd}tj|gdt|gd2td$}tj|d3dt|dt t tjj|d$dt t tjj|gdtd}tj |gd4d5t|tgd6td}|d7d$k}tj ||gd8t|gd9tjdd:d;}tj |gdt|gd<td=}|dddfddd$d$f}tj|d$dgdt|td=tgd td>}tgd?td@}tj||dt|gdAtjdBdgtd;}t ttjj|d$dgdt|tjdBdgtd;t ttjjtddgdS)CNr9)rrrr) rrrgr_rgrrrr4r)rrr) rrr_rgirrr4rrr_)rrr)rrr)rrr)rf)r_)ri_4r&)rrr)rir)ri)r)rV)r5i)rii))ryirY)iri)r)ri])jrr)rr9rh)rif)si=)rir7r)rio)riFrrA)rrr4)ric)rVr.r')r5r6)vi@)r)ryr)rri.)gi1)mi7)pi:)yiC) rrrr_rgrrr4rr )rrr_rr) rri>.rgrrrr4rr)rrrgrr4) rrrr_rrrrrru4r:) rrrr_rglrrr4rrgr)rrr_rgr@)rr4rrgr)rrr&atrrbrbrrtrrrrinvertrr/ newbyteorderrSr%rmodf)r)rrindexorigvaluesr r rtest_inplace_fancy_indexings  " "  "        z%TestUfunc.test_inplace_fancy_indexingc CsBtjj}tjdtd}tjd|jd}|d}t|||t||dd|t||d|t||ddd|t||ddd|t||dd|t||dd|t||dddd|t||dd|d|t||dd||t||ddd|t||dddd d |t||dddd |d |jt||dddd d|t||dddd dd |t||dddd dd |t||dddd dd d|t||dddd d|t||dddd d|t||dddd d|t||dddd dd d|t t |t t ||dddd dd d t t ||dt t ||ddt t ||ddd dt t ||ddt t ||ddt t ||dddt t ||dddt t ||ddt t ||dddt t ||dddddt t ||ddddt t ||ddt t ||dd dddt t ||ddd dddt t ||ddddddS)N)rrr:rrrrarrFrTr?rPr[)rUr/rr)r/rr)rr)rrrQr\rr)rUr/rr/r)rr/)rr/r)rUr/rr)rrr)rUr/rrr)rUr/rr) rr&r rRr'r/rrbrrr%)r)r@rorr r rtest_reduce_argumentsosp"    zTestUfunc.test_reduce_argumentscCspGdddtj}tddd}|jdd}||}tjgdtd}tt |||d kkd dS) Nc@r)z,TestUfunc.test_structured_equal..MyAc_st||dd|Di|S)Ncss|] }|tjVqdSrF)r rr)rinputr r r szOTestUfunc.test_structured_equal..MyA.__array_ufunc__..)rh)r)rmethodinputsrVr r r__array_ufunc__s z.MyA.__array_ufunc__N)r4r5r6rr r r rMyArr(@rgr_zf8,f8,f8r:)TFFFrT) rrrrbr rrbrrrT)r)rrramrarer r rtest_structured_equals   zTestUfunc.test_structured_equalcCsLtd}td}t||kt||kt||k t||k dS)Nrr)rrbrrr r rtest_scalar_equals    zTestUfunc.test_scalar_equalcCstjtjtjtjtjtjtjtjtj tj tj tj tj tjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjg}td}d}tddg}|D]}t t!|||t t!|||qNdS)N1rrr@)"rrr&r"rvrRr floor_divide bitwise_and bitwise_or bitwise_xor left_shift right_shiftfmaxfminfmodhypot logaddexp logaddexp2rrrPrr2modgreater greater_equalr. less_equalr not_equalrbrr%)r) binary_funcsrrrmr@r r r test_NotImplemented_not_returneds  z*TestUfunc.test_NotImplemented_not_returnedrr,NcCs2tjgdtd}||||d}|jtksJdS)NTNFr:r)rrbrSr/)r)rr,rrer r r%test_logical_ufuncs_object_signaturessz/TestUfunc.test_logical_ufuncs_object_signaturescCsLtgd}tt||||dWddS1swYdS)Nrr)rrbrrr%)r)rr,rr r r+test_logical_ufuncs_mixed_object_signaturess "z5TestUfunc.test_logical_ufuncs_mixed_object_signaturescCstjdtjdddd}|dddd ddd fdd d }tjd tjddd}|ddd ddf}|}tjj||d d}tjj||d d}t||t|dddf|dddft|dddf|dddfdS)Nir:rr.r4rgrrrhrrrr6rr_) rrr~rbrrIr&r r)r)rAy_baserB y_base_copyr0r1r r rtest_reduce_noncontig_outputs& "&z&TestUfunc.test_reduce_noncontig_output out_shape)r r?rrr)rr_)rgr_rf_reducecCstddd}t||j}||d|d}||jkr;tt||d||dWddS1s4wYdS||d||d}t||ut ||dS)Nrrgr_rrrUrr) rrrbrLr/rrrrr)r)rrrrr correct_outrMr r r"test_reduce_wrong_dimension_outputs  " z,TestUfunc.test_reduce_wrong_dimension_outputcCstd}td}td}tjj|d|ddtjj|d|dddfddtttjj|d|ddWdn1sBwYtttjj|d|dddfddWddS1sgwYdS) N)rr9r)r_rrTrrF)rrRrLr&r rr)r)r out_correct out_incorrectr r r+test_reduce_output_does_not_broadcast_inputs      ""z5TestUfunc.test_reduce_output_does_not_broadcast_inputcCsvGdddtj}td}tjjtd|d||}tjjtd|d|us-Jttj||us9JdS)Nc@r)z7TestUfunc.test_reduce_output_subclass_ok..MyArrNrr r r rMyArr&rrr rr)rrrLr&r rRr r{)r)rrr r rtest_reduce_output_subclass_ok%s   z(TestUfunc.test_reduce_output_subclass_okcCstdtjjvdS)N )rrinner1d_no_docrr(r r rtest_no_doc_string/szTestUfunc.test_no_doc_stringcCs"tttjd}|dsJdS)Nzloop of ufunc does not support)rrr%rrr)r)rr r rtest_invalid_args3szTestUfunc.test_invalid_argsnatcC*z t|rJWdStyYdSwrF)rr#r%r)rr r rtest_nat_is_not_finite9  z TestUfunc.test_nat_is_not_finitecCs*z t|sJWdStyYdSwrF)risnanr%rr r rtest_nat_is_nan@rzTestUfunc.test_nat_is_nancCrrF)risinfr%rr r rtest_nat_is_not_infGrzTestUfunc.test_nat_is_not_inf)xr4r5r6rrrrrrrrrrrrrrrrrrrrrrrrrrrrrr r r+r2rIrOrXr_rcrnrprrrwr|rrrrrrrrrrrrrrrr rrrrr!r$r(r)r+r1r3r9r<r>r?rBrFrrbrNrCrOrPrSr_rbrfrlrsrurwrrrrrrrrrSrrPrrrr&r r2rrrrr datetime64 timedelta64rrrr r r rrs  T            J  + g,O G6       .       A   @        rrcC(g|]}ttt|tjrtt|qSr r rhrrrr r rrOc Cs|jD]j}d|vs d|vrq|d\}}dd|D}tjddtd||}Wd n1s6wYt|trct|}t|t|ksNJt||D]\}}|j t |ksaJqSq|j t |ksmJqd S) z Check all ufuncs that the correct type is returned. Avoid object and boolean types since many operations are not defined for for them. Choose the shape so even dot and matmul will succeed ra?->cSg|]}td|qS)r)rrRrr\r r rr^z$test_ufunc_types..Tr:r<N) rsplitrBrCfilterwarningsr r}rErr/r) rtypinprrUreoutsrr\r r rtest_ufunc_typesOs"    rcCrr rrr r rrjrc Cs2|jD]}ttdt|@rq|d\}}dd|D}dd|D}|D]}tdd|_q'|D]}tdd|_q2tjdd td ||}||}Wd n1sYwYt |dkrj|f}|f}t ||D]&\} } | j } t | t jrt | j} d | } t||| | d qot| | qoqd S)zs Check that contiguous and non-contiguous calls to ufuncs have the same results for values in range(9) zO?mMrcSr)rrrLrr r rrwrz,test_ufunc_noncontiguous..cSs"g|] }td|dddqS)riNr_rrr r rrxs"rrTr:r<Nr)rr)rr setr rflatrBrCr rErr/r issubdtypefloatingrepsr r)rr r rargs_cargs_nrres_cres_nc_arn_arr&res_epstolr r rtest_ufunc_noncontiguousjs6      rcCs\tdgdd}t|sJ|jdkr||dS|jdkr*|||dStd)Nlrcrrrzufunc with more than 2 inputs)rrbr rninrIr)rrr r rtest_ufunc_warn_with_nans   rzPython lacks refcounts)reasoncCsd}tj|gttjddg|gtdtjtd}tjt|tjd}t |}t t tj |||ddWdn1sFwY|t |ksTJ|ddks\Jt t tj |||tjdd Wdn1swwY|t |ksJ|ddksJdS) N{rstringr:rrarr)rr/r)rrbr'BUFSIZErSrRrErsys getrefcountrrrr&)valuerdrcountr r rtest_ufunc_casterrorss(   r(offsetrrcCsd}tj|g|dg|gtdtjtd}tjdtjd}t|}t t tj j |tj|dWdn1s@wY|t|ksNJ|d||ksXJdS)Nr!r"rr:rrr ) rrbr'r#rSrr$r%rrrr&r )r)r&rdrr'r r rtest_reduce_casterrorss   r*)5rBrr$rnumpyrnumpy.core._umath_testsri _umath_testsrnumpy.linalg._umath_linalglinalg _umath_linalgrnumpy.core._operand_flag_tests_operand_flag_testsrjnumpy.core._rational_testsr numpy.testingrrrrrrrr r numpy.compatr rj__dict__r UNARY_UFUNCSrrr7rrrrdirrrsignrrskipifr(r#r'r*r r r rs\, %  %