o 6aq@s\ddlZddlZddlZddlmZmZddlmZddl m Z ddl m Z m Z mZmZdZdZeegeZdZdZd d Zd d Zd dZddZddZejjddZddZddZddZ d;ddZ!dd Z"ejjd!d"Z#ejjd#d$Z$d%d&Z%d'd(Z&d)d*Z'd+d,Z(dKz0test_overlapping_assignments..cSr/rrr1rrrr4Lr5)r#r"tupler.)indsrr*r+rrrtest_overlapping_assignmentsEs  r9c s6tjdttjj}tdD]}d}d}d|d}t|||krdjddtjddjddtjddt|t|dt fd d t|D}t fd d t|D}t|d t d d t ||D}jd|d tjd|dkr||krdt ||}|durt ||dd} t | du||| ft dd t ||D} d} | D]} | t| 9} q| dkrt tfdd tj| D |d7}n5t ||dd} t | du||| ft t dd t ||Dkt tdd t ||D|d7}t|||ks&qdS)Nr rr dtypec3s*|]}tjddtjdVqdS)rr=Nintrandintr$intpr2j)A_maxrngrr f"z(test_diophantine_fuzz..c3s*|]}tjddtjdVqdS)rr r=Nr@rD)U_maxrGrrrHhrIr cs|] \}}||VqdSNrr2r3ubrrrrHkr )simplifycss(|]\}}td||d|VqdS)rrNrangerMrrrrH{s&ic3s|] }t|kVqdSrL)sum)r2w)brrrHrOcsrKrLrr2r3xrrrrHrOcs,|]\}}d|ko|knVqdSrNr)r2rWrNrrrrH*)r$random RandomStateiinforCmaxrRminrBr7rSziprrlenanyrrr)) max_intndimfeasible_countinfeasible_count min_countAUb_ubX X_simplifiedrangesrrr)rFrJrUrGrtest_diophantine_fuzzQsR   " " rocCsvttjj}ttjj}||kr9|d|ddf}|d|ddf}d|dd}tt|||ddSdS)Nr r )rr)r$r]rCr^int64rr)max_intp max_int64rhrirUrrrtest_diophantine_overflowsrsc Cstj||td}tt||tj||td|d|d|d|}d}||kreddd|jdd|jddfd |j fd |j fd |j fd |j fd |j fd|j fg}t|||ddS)Nmax_workrrz z zbase_a - base_b = %rdataz shape_a = %rz shape_b = %rzstrides_a = %rzstrides_b = %rz size_a = %rz size_b = %rerr_msg) r$may_share_memoryMAY_SHARE_EXACTrMAY_SHARE_BOUNDSfillrbjoin__array_interface__r&stridesr)r3rUgotexactryrrrcheck_may_share_memory_exacts(            rc Cstjgdtjdtjgdtjddddddddddfg}g}|D]}tjtdtdddgfdD] }||}||q9q'|D]}tt|dddddf|dddddfttj|dddddf|dddddfdd t |dddddf|dddddft |ddddd f|ddd dd fz| }|j j rWqH| tj}Wn tyYqHwt | d d |d dddddddd ft |ddddd f|d dddt |ddddd f|d dddddd dd ft | d d |d dddddddd fqHtjdgtjd}t ||t ||dS)N) r=)rr.rr r rrrtrr?rrrr<)r$zerosint8rrrrrrzrravelflagsowndataviewint16 ValueErrorr'r()xs0xsrWssxprrrtest_may_share_memory_manualsJ0$ 48..     rTFc#sFtjd|r|rtfddfdd||fVtdddD]"}||d|d| fV|d |df|d d| ffVq%t|j}d |d <t||j|d }||fV||fVt|j}|d dkrrd|d <t||j|d }||fV||fV t fd dt|j D}t fddt |j|D}t |j } ||r|} n t |j }  | ||} |r| jd krqt fddt |j|| jD} t fddt |j| | jD} n|r|} nt fddt|j D} |st fddt |j| D} | |} || | } | | fVq)Nr:c`jd|dtjd}j||dtjd}jddtjddkr*||}}|d9}t|||SNrrr=r r rBr$rCrnrrrrGrr random_slice   z,iter_random_view_pairs..random_slicecsnd|d||}||d|d}dddkr1|d|d}}|dkr-d}|d9}t|||S)Nrrr r )rBr)rrrrrrrrrandom_slice_fixed_sizes z7iter_random_view_pairs..random_slice_fixed_sizerrr.r)r&rTc3<|]}jddtjddkrjddtjdndVqdSrr=rr<NrBr$rCrDrrrrH z)iter_random_view_pairs..c3|] \}}||VqdSrLrr2psrrrrHc 3sD|]\}}}dddkrdtd|d|ndVqdS)rrrr N)rBr^r2rrparrrrH-s c3s"|] \}}}|||VqdSrLrr)rrrrH0sc3rrrrDrrrrH5rc3rrLrrrrrrH:r)r$r[r\rrRlistrrr&r7rdr`r%shuffler transpose)rW same_steps equal_sizerErrstepss1t1t2r3steps2s2rUr)rrrGriter_random_view_pairssj    &                   rc Cstjgdtjd}d}d}t||}t|||krgt|\}}t||} t||} tj|||||d} tj||td} | | krHt| | | | krQt| | | r^| rZ|d7}n|d7}t|||ksdSdS)N"Gar=rrtr) r$rrrr_nextrzr{r) get_max_workrrgrWfeasible infeasible pair_iterr3rUbounds_overlapmay_share_answer easy_answer exact_answerrrr check_may_share_memory_easy_fuzzBs&       rcCtddddddS)NcSsdSNrrr3rUrrrgsz1test_may_share_memory_easy_fuzz..Trrrgrrrrrtest_may_share_memory_easy_fuzzbs rcCr)NcSst|j|jdS)Nr )r^rrrrrrusz3test_may_share_memory_harder_fuzz..Frrrrrrr!test_may_share_memory_harder_fuzzls  rcCstjgdtjd}tt||dtt||d|ddddddddf}|ddddddddf}tt||dttj||dddttjtj||dddS) N)rrr?r=TFr rrtr)r$rrr shares_memoryr(r TooHardError)rWr3rUrrrtest_shares_memory_apizsrcCs@tdg}tttj||dddtttj||ddddS)Nrr drt)r$rr OverflowErrorrzr)rWrrr"test_may_share_memory_bad_max_works rcCs*d dd}|dddd|ddd ddS) NcSst||ddd}|dur|du}|durJttddt||Dtddt||Dkttddt||Dttddt||D|rWt|dut|dSt|dut|dS) Nrr)require_ub_nontrivialcsrKrLrrVrrrrHrOzCtest_internal_overlap_diophantine..check..css |] \}}||dVqdSr Nr)r2r3urrrrHcsrXrYrr2rWrrrrrHrZcss |] \}}||dkVqdSrrrrrrrHr)rrrSr`r)rbrepr)rhriexistsrkrrrchecks4z0test_internal_overlap_diophantine..check)rr )rr?T)r)r?r )rFrLr)rrrr!test_internal_overlap_diophantines rcstjgdtjd}tjdfddd}d}||kr^tfdd t|jD}t|j} |tfd d t |j |D}|| |}t t| |d 7}||ksdSdS) Nrr=r:crrrrrrrrrz2test_internal_overlap_slices..random_slicerc3rrrrDrrrrHrz/test_internal_overlap_slices..c3rrLrrrrrrHrr)r$rrr[r\r7rRrdr%rr`r&rrr)rWcasesrgrrrr3r)rrGrtest_internal_overlap_slicess      rcCst|}t}tdd|jD}tj|D]}tddt|j|D}||vr-d}n| |qd}||krFt ||t |j|jfd|durS||krSt |||S)Ncss|]}t|VqdSrLrQ)r2rrrrrHsz)check_internal_overlap..csrKrLr)r2rrTrrrrHrOTFrx) rsetr7r&rrrSr`raddrr)r3manual_expectedrmrmvoffsetexpectedrrrcheck_internal_overlaps  rcCstdtj}t|dt|gdt|ddd}t|dt|ddd}t|dt|ddd}t|dt|dd d}t|dt|dd d}t|dt|d d d}t|dt|d d d}t|dt|d dd}t|ddS)NrF)rr)rrrr&)rrTr0r6)r )ri)Wr)rr)rr)r$r%astyperrr'r)rWr3rrrtest_internal_overlap_manuals&        rc stdtj}d}d}d}tjdt|||kr^jddtjd}t fddt |D}t fd dt |D}t |||d }t |}|rQ|d7}n|d7}t|||ksdSdS) Nrrrr:rr=c3"|] }jddtjdVqdS)ir=NrrDrrrrH z-test_internal_overlap_fuzz..c3r)rrr=NrrDrrrrHrr) r$r%rrr[r\r_rBrCr7rRrr) rWoverlap no_overlaprgrdrr&r3resultrrrtest_internal_overlap_fuzzs&    rc CsGddd}Gddd}||fD]X}td}tt||ddd|dddtt||ddd|ddd tt||ddd|dddtt||ddd|dddqdS) Nc@s eZdZddZeddZdS)z(test_non_ndarray_inputs..MyArraycS ||_dSrLrwselfrwrrr__init__ z1test_non_ndarray_inputs..MyArray.__init__cSs|jjSrL)rwrrrrrr"sz.MyArray.__array_interface__N)__name__ __module__ __qualname__rpropertyrrrrrMyArraysrc@seZdZddZddZdS)z)test_non_ndarray_inputs..MyArray2cSrrLrrrrrr'rz2test_non_ndarray_inputs..MyArray2.__init__cSs|jSrLrrrrr __array__*sz3test_non_ndarray_inputs..MyArray2.__array__N)rrrrrrrrrMyArray2&s rrr rr)r$r%rrzr)rrclsrWrrrtest_non_ndarray_inputss  (*(*rcCs8ddlm}t|j}d|d<dg|d<t|||S)z@Construct an array viewing the first byte of each element of `x`r) DummyArray|b1typestr)rvr descr)numpy.lib.stride_tricksrdictrr$asarray)rWr interfacerrrview_element_first_byte7s   rcKsv||d<t|}||d<|}||i||d<|}||d<||i|}||kr9t||dSdS)z} Check that operation(*args, out=out) produces results equivalent to out[...] = operation(*args, out=out.copy()) out.N)r r(rbr) operationargsrkwargskwargs2out_origrrrrrassert_copy_equivalent@s  rc@seZdZdZejdfddZejj ddZ ejj ddZ d d Z d d Z d dZddZejj ddZddZddZddZejj ddZddZdS) TestUFuncz1 Test ufunc call memory overlap handling rcCsgd}tjd}tddD]}|jdd|d|d|}t|dd d } ||dd } d} | | krt| \} } | }| }|durZt || g| d t | | rY| d7} nt t|dgD]}|| d <|| d <|| | |\}}|dkrzqct dg|}|dur|durt ddgdg|d}ncountshapesrGrdrWitrg overlappingr3rUa_origb_origr!outsize scalarizeslkb_outrrrcheck_unary_fuzzZsV       zTestUFunc.check_unary_fuzzcCs|tjdtjdSrL)r/r$invertrrrrrtest_unary_ufunc_call_fuzzsz$TestUFunc.test_unary_ufunc_call_fuzzcCs|jtjdtjdddS)Nr;)r$)r/r$negative complex128rrrr"test_unary_ufunc_call_complex_fuzzsz,TestUFunc.test_unary_ufunc_call_complex_fuzzcC$dd}|jtjj|tjdddS)NcS.|dur|jdkr|jdfSdS|j|dfSNrF)rFrdrr&r3rUr!rrrr#   zFTestUFunc.test_binary_ufunc_accumulate_fuzz..get_out_axis_sizer;r>r$)r/r$r accumulaterrr#rrr!test_binary_ufunc_accumulate_fuzzs  z+TestUFunc.test_binary_ufunc_accumulate_fuzzcCr5)NcSsd|dup |jdkfSr)rdr9rrrr#szBTestUFunc.test_binary_ufunc_reduce_fuzz..get_out_axis_sizer;r;)r/r$rreducerr=rrrtest_binary_ufunc_reduce_fuzzs  z'TestUFunc.test_binary_ufunc_reduce_fuzzcCs(dd}dd}|j||tjdddS)NcSr6r7r8r9rrrr#r:zDTestUFunc.test_binary_ufunc_reduceat_fuzz..get_out_axis_sizecSs^|durt|}|t|}n|j|}|j||j|}td||}tjj||||dS)Nrr )rar&r$r%rreduceat)r3rr!rridxrrr do_reduceats z>TestUFunc.test_binary_ufunc_reduceat_fuzz..do_reduceatr;r;)r/r$r)rr#rCrrrtest_binary_ufunc_reduceat_fuzzs    z)TestUFunc.test_binary_ufunc_reduceat_fuzzcCsddd}tjdtjd}|tj||ddd|tjdtjd}|tj||ddd|dS)NcSs:|j|||d}|j|||d}t||dSNr)rAr(r )ufuncr3rrc1c2rrrrsz:TestUFunc.test_binary_ufunc_reduceat_manual..check'r=r )r$r%rrr()rrr3rrr!test_binary_ufunc_reduceat_manuals z+TestUFunc.test_binary_ufunc_reduceat_manualc Csgd}tj}tjd}tddD]}|j|d|}t|ddd}d|d d}d }||krt|\} } t | j d ddksUt | j d ddksU| j d dkrVq.| j d | j d krj| d d ddf} n | d ddd f} | j d } | | d d} | | j d kr| d kr| d d| f} n*t dt t | j d d} | | d d} | d d| ddf} | d d| f} t| | r|d 7}tjdddt|| g| dWdn1swY||ks2qdS)Nrr:r r?FTrr;rrr .ignore)overinvalidr)reuclidean_pdistr$r[r\rRrandrrr_r&r^rAsqrtrerrstater) rr%gufuncrGrdrWr&rgr'r3rUrrrrrtest_unary_gufunc_fuzzs>  :  z TestUFunc.test_unary_gufunc_fuzzcCsrd dd}tjdtjd}|tj|ddd|tjdtjd}tjdddtjd}|tj|||d d dS) NcSs|}|dur||||}||||}n|||||}|||||}t||dSrL)r(atr )rFr3rrUa0rGrHrrrrs  z-TestUFunc.test_ufunc_at_manual..checkrIr=r rrr KrL)r$r%rr0r)rrr3rrrrtest_ufunc_at_manuals zTestUFunc.test_ufunc_at_manualc sfdd}tjtjtjtjtjtjtjtjg}dd|D}|D]}t |tj r.tj ntj d}d}tj d|tj |||tj |dddtj ||d|ddtj dd |d tj ||d |d tj d |ddd tj |d |d|dd g}t||D]_\}}tjdd|d ||d } | |} | |} tjd d 7|| | || dd| || dd| || ddg| || ddg| Wdn1swYqq!dS)Nc s|}|}|}||d}||d}t||t|tj}||d<||d<|||d}||d<||d<|||d}||d<||d<|||d}t||t||dS)Nr.rwhere)r(r rrr$bool_) r3rUr(r)b0rGrHmaskc3rFrrr"s$    z3TestUFunc.test_unary_ufunc_1d_manual..checkcSsg|]}t|qSr)r$r>)r2rWrrrr4@sz8TestUFunc.test_unary_ufunc_1d_manual..rr rr r rKr=rL)r))r$rrint32rpfloat32float64 complex64r3 issubdtypeintegerr0 reciprocal index_exprrr%rRr') rrdtypesr>rr-indicesxiyirrWyrr`rtest_unary_ufunc_1d_manualsD     z$TestUFunc.test_unary_ufunc_1d_manualcsTtjfdd}tdtj}||||||||||||dS)Ncs2|||d}|||d}t||dS)NrZr(r )r3rr^rGrHr`rrrgsz4TestUFunc.test_unary_ufunc_where_same..checkr)r$r0r%rr\r()rrrWrr`rtest_unary_ufunc_where_samecs   z%TestUFunc.test_unary_ufunc_where_samec stjfdd}tjtjtjtjtjtjtjtj fD]}d}d}g}dD]7}| tj d|||tj |||||tj ||dd| tj |||d|d| gq%t |||D]}\}}} td||} | |}| |}| | } |||| ||dd|| ||dd|| ||ddg|| ||ddg|| |||dd| |||dd| |||ddg| |||ddg| qdqdS) Ncs2|}|||d}|||d}t||dSrEro)r3rUcc0rGrHr`rrrvsz4TestUFunc.test_binary_ufunc_1d_manual..checkrr r rr?r )r$rrrrarprbrcrdr3rrhrrr%rr') rrr>rr-rjrrWrmzrrr`rtest_binary_ufunc_1d_manualrs>   z%TestUFunc.test_binary_ufunc_1d_manualcCs6tjd}|dd}||j7}t||jddS)Nr:r)r$r[r\rPTr )rrGrWrrrtest_inplace_op_simple_manuals   z'TestUFunc.test_inplace_op_simple_manualN)rrr__doc__r$rr/pytestmarkslowr1r4r>r@rDrJrTrYrnrprtrwrrrrrUs* ?    +D  +r)TFrL)0rrynumpyr$numpy.core._multiarray_testsrr numpy.corerr r numpy.testingrrrr r"rr7r&r|r{rr r#r.r9rzr{rorsrrrrrrrrrrrrrrrrrrrrrsN    < 3X     %