a :jgh@sddlZddlZddlZddlZddlmZmZmZmZm Z m Z m Z m Z m Z mZmZmZmZmZddlmZddlmZmZmZmZmZejdkZddZGdd d ZGd d d ZGd d d Z GdddZ!GdddZ"GdddZ#GdddZ$GdddZ%GdddZ&GdddZ'GdddZ(GdddZ)Gd d!d!Z*Gd"d#d#Z+Gd$d%d%Z,Gd&d'd'Z-d(d)Z.dS)*N)apply_along_axisapply_over_axes array_splitsplithsplitdsplitvsplitdstack column_stackkrontile expand_dimstake_along_axisput_along_axis) AxisError)assert_ assert_equalassert_array_equal assert_raises assert_warnscstfdd}|S)z: hack in keepdims behavior into a function taking an axis cs.|fd|i|}|dur d}tj||dS)Naxisrr)npr )arkwargsresfuncI/usr/local/lib/python3.9/site-packages/numpy/lib/tests/test_shape_base.pywrappedsz_add_keepdims..wrapped) functoolswraps)rr!rrr _add_keepdimssr$c@s,eZdZddZddZddZddZd S) TestTakeAlongAxisc Csddlm}|ddd}tjtjtfttjttjtfttj ttj tfg}|D]`\}}}t t |j dgD]@}||fd|i|}||fd|i|} t|t|| |dqxqZdS) z- Test it translates from arg to rrandNrr) numpy.randomr'rsortZargsortdictr$minargminmaxargmaxlistrangendimrr) selfr'rfuncsrZargfuncrrZa_funcZai_funcrrr test_argequivalent s  z$TestTakeAlongAxis.test_argequivalentcCstd}tjdtjd}t||ddttt|tdddttt||t ddttt||t ddtt t||dddS)z4 Test it errors when indices has too few dimensions ) r8)r8dtyperr8N) ronesintprr ValueErrorarray IndexErrorZastypeboolfloatrr5rairrr test_invalid2s zTestTakeAlongAxis.test_invalidcCs:td}tjdtjd}t||dd}t|j|jdS)zC Test everything is ok with empty results, even with inserted dims )r(r)r*)r(rr*r:r<rNrr=r>rrshaper5rrEactualrrr test_emptyCs zTestTakeAlongAxis.test_emptycCs8td}tjdtjd}t||dd}t|jddS)D Test that non-indexing dimensions are broadcast in both directions r(r)r<r<r9r*r:r<rr(r9r*NrGrIrrr test_broadcastKs z TestTakeAlongAxis.test_broadcastN)__name__ __module__ __qualname__r7rFrKrPrrrr r%sr%c@seZdZddZddZdS)TestPutAlongAxiscCsztgdgdg}tt|jdgD]J}|}ttj||d}t||d|dttj ||d}t ||q*dS)N)r8)<(2ri) rr@r2r3r4copyr$r1rr/r)r5Za_baserrZi_maxZi_minrrr test_replace_maxTsz!TestPutAlongAxis.test_replace_maxcCsLtd}tjdtjddd}t||dddtt||dddd S) rLrMr8r:rNr)rVr<rN)rr=aranger>reshaperrrrDrrr rPds zTestPutAlongAxis.test_broadcastN)rQrRrSr[rPrrrr rTSsrTc@seZdZddZddZddZddZd d Zej fd d Z ej fd dZ ej fddZ ddZ ddZddZddZddZdS)TestApplyAlongAxiscCs6tdd}tttd|t|t|jddS)NrVr8drr<rr=rrlenrHr5rrrr test_simplems  zTestApplyAlongAxis.test_simplecCs6tdd}tttd|t|t|jddS)N)r8er`rr<rarcrrr test_simple101rs  z!TestApplyAlongAxis.test_simple101cCs:tdd}tttjd|gdgdgdgdS)Nr(r(r(r)rgrU!)$'*)-03)rr\r]rrsumrcrrr test_3dwszTestApplyAlongAxis.test_3dcCsdd}Gdddtj}tddgddgg|}tddgd d gg|}t|d|}tt||t||t|d|}tt||t||dS) NcSs|dS)Nr9r)rowrrr double}sz9TestApplyAlongAxis.test_preserve_subclass..doublec@s eZdZdS)z.MyNDArrayNrQrRrSrrrr MyNDArraysrurr<r9r(r))rndarrayr@viewrr isinstancer)r5rsrumexpectedresultrrr test_preserve_subclass|s   z)TestApplyAlongAxis.test_preserve_subclasscCsJGdddtj}dd}td|}tt|d|tgddS)Nc@seZdZdZdS)z9TestApplyAlongAxis.test_subclass..MinimalSubclassr<N)rQrRrSdatarrrr MinimalSubclasssrcSs|jSN)r~)r@rrr minimal_functionsz:TestApplyAlongAxis.test_subclass..minimal_functionrvr(r)r<r<r<)rrwzerosrxrrr@)r5rrrrrr test_subclasss z TestApplyAlongAxis.test_subclasscCsJtd|}ttjd|}tt||t|tgd|dS)Nrrrvrvrv) rr=rxrrprryrr@)r5clsrrrrr test_scalar_arraysz$TestApplyAlongAxis.test_scalar_arraycCsdd}td|}t|d|}tt||t|tgd|t|d|}tt||t|tgd|dS)NcSs t|jdttj|ddS)z/ Sum x, returning a 0d array of the same class r<T)Zkeepdims)rr4rsqueezerpxrrr sum_to_0ds z3TestApplyAlongAxis.test_0d_array..sum_to_0drrrr<)r(r(r(r(r(r()rr=rxrrryrr@)r5rrrrrrr test_0d_arrays  z TestApplyAlongAxis.test_0d_arraycs2fddtddtd}tjfddtjdDd d }tt |t |t||td}tjfd dtjdDdd }tt |t |t||td d td}tjfddtjdDd d }tt |t |t||dS)Ncs0t|jd|ddd|dddfS)/produces an asymmetric non-square matrix from xr<N)rr4rxr)rrr f1to2s z5TestApplyAlongAxis.test_axis_insertion..f1to2rrcs g|]}dd|fqSrr.0ia2drrr sz:TestApplyAlongAxis.test_axis_insertion..r<rrcs g|]}|ddfqSrrrrrr rsZ)rvr*r(cs6g|].tjfddtjdDddqS)cs"g|]}|ddfqSrrr)a3drjrr rszETestApplyAlongAxis.test_axis_insertion...rr)rstackr3rH)r)rr)rr rs  r9) rr\r]rrr3rHrxrtype)r5rrJr{r)rrrrr test_axis_insertionsB         z&TestApplyAlongAxis.test_axis_insertioncCs4Gdddtj}||||||dS)Nc@s eZdZdS)zFTestApplyAlongAxis.test_subclass_preservation..MinimalSubclassNrtrrrr rsr)rrwrrr)r5rrrr test_subclass_preservations  z-TestApplyAlongAxis.test_subclass_preservationcCsdd}tdd}t|d|}tt|tjjt|j dt |dddddfj ||dddfj t |dddddfj ||dddfj t |dddddfj ||dddfj dS) NcSs@t|jd|ddd|dddf}tj|ddk|S)rr<Nrr*r)rr4rmaZ masked_where)rrrrr rs z8TestApplyAlongAxis.test_axis_insertion_ma..f1to2rrrr(r<r9) rr\r]rrryrZ masked_arrayrr4rmask)r5rrrrrr test_axis_insertion_mas  00z)TestApplyAlongAxis.test_axis_insertion_mac CsHdd}t|dtddgddgg}t|tddgddggdS)NcSs|d|dfS)Nr<rrrrrr sample_1dsz7TestApplyAlongAxis.test_tuple_func1d..sample_1dr<r9r(r))rrr@r)r5rrrrr test_tuple_func1ds z$TestApplyAlongAxis.test_tuple_func1dcCs|dd}td}tttj|d|tttj|d|dd}td}t|d|}t|td tttj|d|dS) NcSs tddS)NF)rrrrr never_callsz1TestApplyAlongAxis.test_empty..never_call)rrrr<cSstt|dkdS)Nrr<)rrbrrrr empty_to_1sz1TestApplyAlongAxis.test_empty..empty_to_1)r8rr8)remptyrr?rrr=)r5rrrrJrrr rKs  zTestApplyAlongAxis.test_emptycCstddhddhddhgddhd d hd d hgg}td dd|}thdhdhdg}t||t|jD]}tt||t||qvdS)Nr< r9r(rir),r*7rvBcSs tj|Sr)setunion)rrrr z>TestApplyAlongAxis.test_with_iterable_object..r>r<rr)r>r9r*rr>rirr(rv)rr@rrZndindexrHr)r5r`rJr{rrrr test_with_iterable_objects z,TestApplyAlongAxis.test_with_iterable_objectN)rQrRrSrdrfrqr}rrrwrrrrrrrKrrrrr r^ls %r^c@seZdZddZdS)TestApplyOverAxescCsHtdddd}ttj|ddg}t|tdgdgdgggdS) Nr9r(r)rrW\|)rr\r]rrprr@)r5rZaoa_arrr rdszTestApplyOverAxes.test_simpleN)rQrRrSrdrrrr rsrc@s4eZdZddZddZddZddZd d Zd S) TestExpandDimscCsRd}t|}tddD]4}t||}t|j|dktt|j|kqdS)Nr9r(r)r*r)r<)rrr3r rrHr)r5srrbrrr test_functionalitys   z!TestExpandDims.test_functionalitycCsntd}tj|ddjdks"Jtj|ddjdks:Jtj|ddjdksRJtj|d djd ksjJdS) Nrhrr<r9r)r<r<r<r(r(r()rr)r<r(r(r(r<r<)rr(r*)r<r(r(r<r(r<)rr)r<r<r(r<r(r()rrr rHrcrrr test_axis_tuple"s  zTestExpandDims.test_axis_tuplecCsTd}t|}ttt|dttt|dtd}ttt|dttt|ddS)Nrr*rh)rr)rr*)rrrrr )r5rrrrr test_axis_out_of_range)s  z%TestExpandDims.test_axis_out_of_rangecCstd}ttt|dddS)Nrhr<r<r)rrrr?r rcrrr test_repeated_axis3s z!TestExpandDims.test_repeated_axiscCsftdd}tjj||ddkd}tj|dd}tt|tjjt |j dt |j j ddS) Nr8)r9r*r(rrr<r)r9r<r*) rr\r]rr@r rryZ MaskedArrayrrHr)r5rexpandedrrr test_subclasses7s  zTestExpandDims.test_subclassesN)rQrRrSrrrrrrrrr rs  rc@sfeZdZddZddZddZddZd d Zej j e d d d dZ ddZ ddZddZdS)TestArraySplitcCstd}ttt|ddS)Nr8r)rr\rr?rrcrrr test_integer_0_splitBs z#TestArraySplit.test_integer_0_splitc Cstd}t|d}tdg}t||t|d}tdtddg}t||t|d}tdtddtddg}t||t|d}tdtddtdd td dg}t||t|d}tdtddtddtdd td dg}t||t|d}tdtddtddtdd td d td dg}t||t|d}tdtddtddtddtdd td d td dg}t||t|d }tdtddtddtddtddtdd td d td dg}t||t|d }tdtddtddtddtddtddtdd td d td dg }t||t|d}tdtddtddtddtddtddtddtdd td d td dg }t||t|d }tdtddtddtddtddtddtddtdd td d td dtgg }t||dS) Nr8r<r9r*r(r)rv r)rr\rcompare_resultsr@r5rrdesiredrrr test_integer_splitFsr                           z!TestArraySplit.test_integer_splitcCsttdtdg}t|ddd}ttdgttdgtdg}t||t|jj|djjut|ddgdd}tdttdgttdgg}t||t|jj|djjudS)Nr8r(rrrr8rr< rr@r\rrrrr;rr5rrtgtrrr test_integer_split_2D_rowss   z)TestArraySplit.test_integer_split_2D_rowsc Csttdtdg}t|ddd}ttdtdgttddtddgttddtddgg}t||dS)Nr8r(rrr)r)rr@r\rrrrrr test_integer_split_2D_colssz)TestArraySplit.test_integer_split_2D_colscCsvttdtdg}t|d}ttdgttdgtdg}t||t|jj|djjudS)z2 This will fail if we change default axis r8r(rrNrrrrr test_integer_split_2D_defaults   z,TestArraySplit.test_integer_split_2D_defaultzNeeds 64bit platform)reasoncCs\tdgd}t|d}tdgd}|gd}tt|D]}t||j||jqrz1TestColumnStack.test_generator..r9)rraisesrr r3rrrr test_generatorszTestColumnStack.test_generatorN)rQrRrSrrrrrrrr rs  rc@s<eZdZddZddZddZddZd d Zd d Zd S) TestDstackcCstttddSr)rrr rrrr rszTestDstack.test_non_iterablecCs@td}td}t||g}tddggg}t||dSNr<r9rr@r rr5rrrrrrr test_0D_arrays    zTestDstack.test_0D_arraycCsDtdg}tdg}t||g}tddggg}t||dSrrrrrr test_1D_arrays    zTestDstack.test_1D_arraycCsXtdgdgg}tdgdgg}t||g}tddggddggg}t||dSrrrrrr test_2D_arrays  zTestDstack.test_2D_arraycCsNtddg}tddg}t||g}tddgddggg}t||dSrrrrrr test_2D_array2 s  zTestDstack.test_2D_array2cCsHtjtdd&tddtdDWdn1s:0YdS)Nrrcss|]}tdVqdSrrrrrr rrz,TestDstack.test_generator..r9)rrrr r3rrrr rszTestDstack.test_generatorN) rQrRrSrrrrrrrrrr rs rc@s0eZdZdZddZddZddZdd Zd S) TestHsplit&Only testing for integer splits. cCstttdddSr)rr?rrrrr rszTestHsplit.test_non_iterablecCs8td}zt|dtdWnty2Yn0dS)Nr<r9r)rr@rrr?rcrrr r"s     zTestHsplit.test_0D_arraycCsBtgd}t|d}tddgtddgg}t||dSNr<r9r(r)r9r<r(r)rr@rrrrrr r*s zTestHsplit.test_1D_arraycCsZtgdgdg}t|d}tddgddggtddgddggg}t||dSrrrrrr r0s   ,zTestHsplit.test_2D_arrayNrQrRrS__doc__rrrrrrrr rs rc@s0eZdZdZddZddZddZdd Zd S) TestVsplitrcCstttdddSr)rr?rrrrr r<szTestVsplit.test_non_iterablecCstd}ttt|ddSr)rr@rr?rrcrrr r?s zTestVsplit.test_0D_arraycCs<tgd}zt|dtdWnty6Yn0dSNrr9r)rr@rrr?rcrrr rCs    zTestVsplit.test_1D_arraycCsNtgdgdg}t|d}tgdgtgdgg}t||dSNrr9)rr@rrrrrr rKs    zTestVsplit.test_2D_arrayNrrrrr r8s rc@s4eZdZddZddZddZddZd d Zd S) TestDsplitcCstttdddSr)rr?rrrrr rUszTestDsplit.test_non_iterablecCstd}ttt|ddSrrr@rr?rrcrrr rXs zTestDsplit.test_0D_arraycCs tgd}ttt|ddSr r rcrrr r\szTestDsplit.test_1D_arraycCsDtgdgdg}zt|dtdWnty>Yn0dSr )rr@rrr?rcrrr r`s    zTestDsplit.test_2D_arraycCstgdgdggdgdgg}t|d}tddgddggddgddgggtddgddggddgddgggg}t||dSr)rr@rrrrrr test_3D_arrayis  $$zTestDsplit.test_3D_arrayN)rQrRrSrrrrr rrrr r Ss  r c@seZdZddZdS) TestSqueezecCsddlm}|ddddd}|ddddd}|dddd}tt|t|dtt|t|dtt|t|dd ggg}t|}t|d t|jdtt|tj dS) Nrr&rVr8r<)rVr8r8)rVr8rVr_g?) r+r'rrrr]rr4rrw)r5r'rrcrrrr test_basicus     zTestSqueeze.test_basicNrQrRrSrrrrr rtsrc@s\eZdZddZddZejdej ej gddZ dd Z ejd gd d d Z dS)TestKroncCstd}tddgddgg}tddgddgg}tt|||tddgddgg}td}tt|||tdg}tddgddgg}tddgddgg}tt|||tddgddgg}tdg}tt|||tdggdggg}tddgddgg}tddgddggddgddggg}tt|||tddgddgg}tdggdggg}tddgddggddgddggg}tt|||dS) Nr<r9r(r)rvrrr)rr@rr )r5rrkrrr rs,    &&zTestKron.test_basiccCsGdddtj}tddg}||j|j|j}ttt||tjttt|||ttt|||ttt|||dS)Nc@seZdZdZdS)z*TestKron.test_return_type..myarrayg?N)rQrRrSZ__array_priority__rrrr myarraysrr9) rrwr=rHr;r~rrr )r5rrrrrr test_return_typeszTestKron.test_return_type array_classcCsL|tddg}|tddg}|tddg}tt|||dS)Nr(r)rr=rr )r5rrrrrrr test_kron_smokeszTestKron.test_kron_smokecCsjtjjddgddggddgddggd}tjjtgdtjtdtdd}t|t||dS) Nr<r9r(r)rr)r<r)r)r:)rrr@ZdiagidentityrBrr )r5rrrrr test_kron_mas (zTestKron.test_kron_mazshape_a,shape_b))rr)r)r)r*rv)r9r9)r9r9r9))r<rr)r9rr9r))r9rrr9rc Cst|}t|}dtdt|t||}dtdt|t||}t||}t||}t|j|s~JddS)N)r<rzUnexpected shape from kron)rr=r0rbmultiplyr Z array_equalrH) r5Zshape_aZshape_brrZnormalised_shape_aZnormalised_shape_bZexpected_shaperrrr test_kron_shapes    zTestKron.test_kron_shapeN)rQrRrSrrrrZ parametrizerZasarrayZasmatrixrrrrrrr rs    rc@s,eZdZddZddZddZddZd S) TestTilecCstgd}ddgddgg}tt|dgdtt|dgdgdgtt|dgdgtt|dgd gd gtt|d ddgddgddgddggtt|dgd gd gd gd gdS) Nrr<r9r(r))rr<r9rr<r9rr<r9)r<r9r<r9)r(r)r(r)r9r<)rr@rr r5rrrrr rs( zTestTile.test_basiccCs0td}t|d}|d7}t|tddS)Nr*r<r9)rr\r rr"rrr (test_tile_one_repetition_on_array_gh4679s  z1TestTile.test_tile_one_repetition_on_array_gh4679cCsLtggg}tggg}t|dj}t|dj}t|dt|ddS)Nr9rO)r9r)r(r9r)rr@r rHr)r5rrrr`rrr rKs    zTestTile.test_emptyc Csnddlm}gd}gd}|D]H}|dd|d}|D]0}t||j}t||}t||} t|| q6q dS)Nr)randint))r9r r!r)r9r(r9)r(r9))r()r9r()r(r)r()r(r9r()r)r(r9r)rr8)size)r+r$rr=r;r r r) r5r$ZrepsrHrrrrZlargeZklargerrr test_kroncompares   zTestTile.test_kroncompareN)rQrRrSrr#rKr'rrrr rs rc@seZdZddZdS)TestMayShareMemoryc Cstd}td}tt||tt||dddtt||dddtt||dddddftt|ddd| tt|ddd| tt|dddddf| tt|dddddf|dS)N)rYrW)rUrWrvrr9r<)rr=rZmay_share_memory)r5r`Zd2rrr rs  "$zTestMayShareMemory.test_basicNrrrrr r(sr(cCs:t|t|krtdt||D]\}}t||q"dS)zCompare lists of arrays.z Iterables have different lengthsN)rbr?zipr)rrryrrr rsr)/numpyrr"sysrrrrrrrrr r r r r rrZnumpy.exceptionsrZ numpy.testingrrrrrmaxsizerr$r%rTr^rrrrrrrrr rrrr(rrrrr s6@   4'('!O(