o 6a@sddlZddlZddlZddlmZmZmZmZm Z m Z m Z m Z dZ egdZeee eZGdddZGdddZd d ZdS) N)assert_ assert_equalassert_array_equalassert_almost_equal assert_raisessuppress_warningsassert_raises_regexassert_allclose abcdefghij) r r r rr r c@sneZdZddZddZdVddZdd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ ddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Zd2d3Zejd4ej d5ej d6d7d8Z!d9d:Z"d;d<Z#dWd>d?Z$d@dAZ%dBdCZ&dDdEZ'dFdGZ(dHdIZ)dJdKZ*dLdMZ+dNdOZ,dPdQZ-dRdSZ.dTdUZ/d=S)X TestEinsumc CsdD]}tttj|dtttjd|dtttjdd|dtttjddd|dtttjddd|dtttjddd |d tttjddd |d tttjddd|d tttjgdRd|itttjddd|dtttjdddgdg|dtttjddg|dtttjdd|dtttjdddg|dtttjdd|dtttjdddg|dtttjdd|dtttjdddg|dtttjdddg|dtttjdddg|dtttjdddg|dtttjdddg|dtttjdddg|dtttjdddg|dtttjdddg|dtttjdddg|dtttjdddgddgg|dtttjd td!d"d#|dtttjd$td!d"d#|dtttjdtd!d"d#|dtttjd%dd&gdd&ggtd'd"d"|dttd(td)}td*}td+||Wdn 1swYtttjd%td!d,d&|d-d.qdS)/NTFoptimizertest)outrWorderrblah)castingr bad_data_type)dtyper)bad_argr)?NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNr,iijz...izi...jzi...zij...zi..z.i...zj->..jzj->.j...zi%...z...j$zi->&zi->ijzij->jijiirr r ii->izi->ir z'b')r r r rr)r r rz aabcb,abcd)rr) r ValueErrornpeinsum TypeErrorarangereshaperones)selfdo_optabr2>/usr/lib/python3/dist-packages/numpy/core/tests/test_einsum.pytest_einsum_errorss~      zTestEinsum.test_einsum_errorsc szdD]7}tdd_tjd|d}t|jutjtg|d}t|jutjd|d}t|jut|tjddg|d}t|jut|tjd|d}t|jd d jd <tjd|d}t|jd  tdd_tjd |d}t|jut|j tjddg|d}t|jut|j td d _tjd|d}t|jut|fddt dDtjddgdg|d}t|jut|fddt dDtdd_tjd|d}t|jut|ddDtjtddgtdg|d}t|jut|ddDtjd|d}t|jut|dd dddDtjddtgtdg|d}t|jut|dd dddDtjd|d}t|jut|fddt dDtjtddgdtg|d}t|jut|fddt dDtjd|d}t|jut|fd dt dDtjgd!ddg|d}t|jut|fd"dt dDtjd#|d}t|jut|fd$dt dDtjddtgdtg|d}t|jut|fd%dt dDtjd&|d}t|jut|fd'dt dDtjdtdgdtg|d}t|jut|fd(dt dDtjd)|d}t|jut|d*d dddDtjdtdgtdg|d}t|jut|d+d dddDtdd_tjd,|d}t|jut|fd-dt dDtjgd.dg|d}t|jut|fd/dt dDtd0d1_tjd2|d}t|jut| ddtjgd3gd4|d}t|jut| ddqdS)5Nrrr r z...rr!rr$ WRITEABLEFji )r r r#cg|]}||fqSr2r2.0r r0r2r3 z0TestEinsum.test_einsum_views..r cr9r2r2r:r<r2r3r=r>)r r r z ...ii->...ic"g|] fddtdDqS)cr9r2r2r:xr2r3r=r>;TestEinsum.test_einsum_views...r ranger;r2rAr3r="cr@)cr9r2r2r:rAr2r3r=r>rCr rDrFr2rAr3r=rGz ii...->...icr@)cr9r2r2r:rAr2r3r=r>rCr rDrFr2rAr3r=r cr@)cr9r2r2r:rAr2r3r=r>rCr rDrFr2rAr3r=rHz ...ii->i...cg|] }dd||fqSNr2r:r<r2r3r=crIrJr2r:r<r2r3r=rKzjii->ijcrIrJr2r:r<r2r3r=rK)r$rrcrIrJr2r:r<r2r3r=rKz ii...->i...c(g|]}ddddd||fqSr rr$N transposer:r<r2r3r=(crLrMrNr:r<r2r3r=rPz i...i->i...crLr$rr NrNr:r<r2r3r=rPcrLrQrNr:r<r2r3r=rPz i...i->...icr@)cr9r2r2r:rAr2r3r=r>rCr rDrFr2rAr3r=rHcr@)cr9r2r2r:rAr2r3r=r>rCr rDrFr2rAr3r=rHziii->icg|] }|||fqSr2r2r:r<r2r3r=)rrrcrRr2r2r:r<r2r3r=rSr r r zijk->jikrr$r )r$rr ) r(r+shaper)rbaseEllipsisrflagsTrErOswapaxes)r.r/r1r2r<r3test_einsum_viewsgs                    zTestEinsum.test_einsum_viewsFc CstddD]1}tj||d}ttjd||dtj|dd|ttj|dgg|dtj|dd|qtddD]:}tjd ||dd d |}ttjd ||dtj|dd|ttj|tdgtg|dtj|dd|qtp}|tjtddD]}tjd||dd|}tj||d}ttjd|||dt||ttj|ddg|dg|dt||tjd|d}tjd|||dd|dt|t|d|d|d|d<tj|ddg|dg|dd|dt|t|d|d|qtddD]}tjd||dd|}tj||d}ttjd|j|j|dt|j|jttj|jddg|jdg|dt|j|jtjd|d}tjd|j|j|dd|dt|t|jd|jd|d|d<tj|jddg|jdg|dd|dt|t|jd|jd|qtddD]L}|dks|dkrtjd||dd|}tj|d |d|d }ttjd|||dt||ttj|ddg|dd g|dt||qtddD]m}tjd||dd|}tj|d |d|d }tjd |ddd }tjd|||dd|dt|t|d|d|d|d<tj|ddg|dd g|dd|dt|t|d|d|qtjd|dd d}tjd!|ddd"}tjd#|dd"d }|dkrttjd$||||d|||ttj|ddg|dd g|d d g|d|||tjd%|dd d } tjd$|||| dd|d|d|d} | |d|} t| | d| d<tj|ddg|dd g|d d g| dd|d |d|d} | |d|} t| | t|tdkrtjd&|dd dd"}tjd |ddd d }ttd'||tj||ddgddgfd(tt|gd)|gd*d d gtj||ddgddgfd(tjd+|dd"d }tjd,|||dd|dt|tj|d|dddgddgfd(|d|d<tj|gd)|gd*d d g|dd|d t|tj|d|dddgddgfd(|Wdn 1swYtjgd-|d}tjgd.|d}tgd/}ttjd0|||d1d|d2tt|dk|dk|dkttj|dg|dg|dgdgd1dd3 tt|dk|dk|dktjd4|d}ttd5d |d t|ttd g|dggd t|ttd6|d d t|tt|dgd ggd t|tdd7D]}tj||d}t|jdkrttjd8|||dt ||ttjd9|||dt||ttjd:|d |dd |ttjd;d ||dd |ttjd6|d |dd t|ttjd5d ||dd t|ttjd8|dd|dd|dt |dd|ddttjd9|dd|dd|dt|dd|ddttjd:|ddd |dd |ddttjd;d |dd|dd |ddttjd6|ddd |dd t|ddttjd5d |dd|dd t|ddqtjd4td}tjd||dd3}t|t|t|jt|tj|dgg|dd3}t|t|t|jt|td d} tdd d d } tdd d d<} ttd=| | | d>td?} td@} ttjdA| | dBdtjdA| | dCdttjdA| | dBddDgd tdEdFg}tdGg}ttjdH||dCddIttjdH||dBddItdJd } tdKd } dLD]&}ttjdM| | |dtjdM| | |dttjdM| | |dtdJdNqrtjd |d}tjd |d}ttjdO|||ddEgttjdP|||ddEgttjdQ|||ddEgdS)RNr$ri->rr%)axisrrr r z ...i->...z i...->...r"z..., ...r z ...i, ...i z i..., i...i,jzij, jzij,jf8unsafe)rrrr.zji,jf2zij,jkrTrzij,jk,kl<zijk, jil -> klaxesrV)r$rr z ijk,jil->kl)r$r rrb rr$)rg @grprr$r rb)TTFTTFTTzi,i,i->i?)rrr)rrr8,i->i,->z...,...zi,ii,->i,i->iz z,mz,zm->)ror r$r zij,ij->jTFg$@g@@g@zi, ig4@)r$rrrr...ij,...jk->...ikg?zji,i->zi,ij->zij,i->)rEr(r+rr)sumastyper,rYtraceasarraylistmultiplyinnerr[outerrfilterComplexWarningdotr tensordotarray logical_anditemsizeobjectr-rfulleye)r.rr/nr0np_arrayr1supcr&tgtpqrrByrr2r2r3check_einsum_sumss                        v$$  """",,       zTestEinsum.check_einsum_sumscC|ddS)Ni1rr.r2r2r3test_einsum_sums_int8z TestEinsum.test_einsum_sums_int8cCr)Nu1rrr2r2r3test_einsum_sums_uint8rz!TestEinsum.test_einsum_sums_uint8cCr)Ni2rrr2r2r3test_einsum_sums_int16rz!TestEinsum.test_einsum_sums_int16cCr)Nu2rrr2r2r3test_einsum_sums_uint16"rz"TestEinsum.test_einsum_sums_uint16cC|d|dddS)Ni4Trrr2r2r3test_einsum_sums_int32% z!TestEinsum.test_einsum_sums_int32cCr)Nu4Trrr2r2r3test_einsum_sums_uint32)rz"TestEinsum.test_einsum_sums_uint32cCr)Ni8rrr2r2r3test_einsum_sums_int64-rz!TestEinsum.test_einsum_sums_int64cCr)Nu8rrr2r2r3test_einsum_sums_uint640rz"TestEinsum.test_einsum_sums_uint64cCr)Nrhrrr2r2r3test_einsum_sums_float163rz#TestEinsum.test_einsum_sums_float16cCr)Nf4rrr2r2r3test_einsum_sums_float326rz#TestEinsum.test_einsum_sums_float32cCr)NreTrrr2r2r3test_einsum_sums_float649rz#TestEinsum.test_einsum_sums_float64cC|tjdSrJ)rr( longdoublerr2r2r3test_einsum_sums_longdouble=z&TestEinsum.test_einsum_sums_longdoublecCr)Nc8Trrr2r2r3test_einsum_sums_cfloat64@rz$TestEinsum.test_einsum_sums_cfloat64cCr)Nc16rrr2r2r3test_einsum_sums_cfloat128Drz%TestEinsum.test_einsum_sums_cfloat128cCrrJ)rr( clongdoublerr2r2r3test_einsum_sums_clongdoubleGrz'TestEinsum.test_einsum_sums_clongdoublecCstd}td}ttd||dgdgggttjd||dddgdgggttd||dgdgggttdgdgd d ttdgdgd d ttjdgdgd d dd td tj}td tj}ttd|||td||ttjd|||ddtjd||ddtdd}tdddd}tdddd}ttd|||ddgddgddgddggddgddgddgddgggttjd|||ddddgddgddgddggddgddgddgddgggttjddgdgdd dggdS)!Nrz)r r r$zij...,j...->i...r Trz ...i,...i)r$r r rUrigreedy)rrbr r r )rrbrczijklm,ijn,ijn->z ijklm,ijn->r$r rr8r z x,yx,zx->xzyrxrg rT0@rdr)r(r-rr)int64r+r,)r.r0r1rr2r2r3test_einsum_miscJsD  "  $zTestEinsum.test_einsum_misccstdtdtjddgddgddgddtjddgddgddgddtjdd gd dgddgddttfd d ttfd d dS) Nr5r r rrir Frr?3c"tjddgddgddgddS)Nr4r Frr(r)r2r0r1r2r3yrGz1TestEinsum.test_subscript_range..cr)Nr%rr Frrr2rr2r3rzrG)r(r-r)rr'rr2rr3test_subscript_rangeqs  """zTestEinsum.test_subscript_rangec Cs6tdddd}td}tjd||dd}dD]&}ttjd |||d|ttjd |||d|ttjd |||d|qtd d }tdd}tjd||dd}dD]2}ttjd|||d|ttjd|||d|ttjd|||d|ttjd|||d|q\gd}tt||}t|d}tjd||dd}dD]&}ttjd|||d|ttjd|||d|ttjd|||d|qd\}} } t|| | ddd|| | }t|| | d|| | d}tjd||dd}dD]}ttjd|||d|q dS)NrTr r r z ijk,j->ijkFrrzij...,j...->ij...zij...,...j->ij...zij...,j->ij...rbr r r)r r z ik,kj->ijzik...,k...->i...zik...,...kj->i...jz...k,kjz ik,k...->i...)r r r rz ijkl,k->ijlzijkl,kz...kl,kz ...kl,k...)rxr$z...lmn,...lmno->...oz...lmn,lmno->...o)r(r+r,r)rprod) r.ABrefoptdimsr0vJKMr2r2r3test_einsum_broadcast|sD  "" z TestEinsum.test_einsum_broadcastcCstdddtj}tddddtj}td||}tj||dd}t||td ddtj }td ddd d tj}td ||}tj||dd}t||dS) Nrr r i@i z cl, cpx->lpx)rrrmr8irzcl, cpxy->lpxy) r(r+r,rfloat32int16r)rrfloat64)r.rrestpr2r2r3test_einsum_fixedstridebugs z%TestEinsum.test_einsum_fixedstridebugcCsjtjddd}td}tjd||dtd}||dddf|dddf||f}t||dS)Nrr$)rrrrr|zaabb->abrr)r(randomnormalzerosr)r+r)r.rBy1idxy2r2r2r3test_einsum_fixed_collapsingbugs   (z*TestEinsum.test_einsum_fixed_collapsingbugcCs8tjd}td|}|jddd}t||dS)N)rorororozijij->rr )axis1axis2)r(r random_sampler)rr )r.tensorrBrr2r2r3"test_einsum_failed_on_p9_and_s390xs  z-TestEinsum.test_einsum_failed_on_p9_and_s390xcCstd}tdddd}td}d|ddd<tjd||||dt|j|tdddd}tjd||||dt|j|tdd }td}d|d <td tj}tjd |||dt|j|dS) Nr|ror rz mi,mi,mi->mrz im,im,im->m)r r r ).r)r r ij,jk->ik)r(r-r)rrXr)r.rBr correct_baser2r2r3(test_einsum_all_contig_non_contig_outputs     z3TestEinsum.test_einsum_all_contig_non_contig_outputrAllFloat AllIntegercCst|}tdd|}tjd|d}td|}||ks$Jtd||}t|||td|dddd|dddd}t|||td||||ks_Jtj d|d}tjd|| d|d }t||| dtd ||}t||| dtd ||}|td||ksJtd ||}|td||ksJtjgd |d}td|||}t||||td||||}t|||||dS)Nrx?r r_r`zi,i->izi,i->rvrrwrsrt)rrg?g@r{zi,i,i->z i,i,i,i->) r(rr+rrr)r~rrepeatr-type)r.rarrscalarresrr2r2r3test_different_pathss0  .zTestEinsum.test_different_pathscCshtjdtjddd}d|d<tjdtjddd}tjdtjd}tjd|||d}t||dS) N)rr$r$r_r T.)r r$r$r}r)r(rbool_r-r)r)r.r0rrrr2r2r3test_small_boolean_arrayss z$TestEinsum.test_small_boolean_arrayscCs4tddd}tjd|||d}||usJdS)Nr8r r}r)r(r+r,r))r.r0rr2r2r3test_out_is_res%szTestEinsum.test_out_is_resNc Cs|dur'|g}|ddd}|D]}dd|D}|tjj|qn|g|}tj|ddi}tj|ddi}t||tj|dd i}t||dS) N->rrcSsg|]}t|qSr2)global_size_dictr;rBr2r2r3r=1z/TestEinsum.optimize_compare..rFroptimal)splitappendr(rrandr)r) r. subscriptsoperandsargstermstermrnooptrr2r2r3optimize_compare*s  zTestEinsum.optimize_comparecCs|d|ddS)Nz a,ab,abc->abcz a,b,ab->abr rr2r2r3test_hadamard_like_products<s z&TestEinsum.test_hadamard_like_productscCs"|d|d|ddS)Nzea,fb,gc,hd,abcd->efghzea,fb,abcd,gc,hd->efghzabcd,ea,fb,gc,hd->efghrrr2r2r3test_index_transformationsAs  z%TestEinsum.test_index_transformationscCsT|d|d|d|d|d|d|d|ddS)N$acdf,jbje,gihb,hfac,gfac,gifabc,hfacz cd,bdhe,aidb,hgca,gc,hgibcd,hgaczabhe,hidj,jgba,hiab,gabz bde,cdh,agdb,hica,ibd,hgicd,hiaczchd,bde,agbc,hiad,hgc,hgi,hiadchd,bde,agbc,hiad,bdi,cgh,agdbzbdhe,acad,hiab,agac,hibdrrr2r2r3 test_complexGs       zTestEinsum.test_complexcC@|d|d|d|d|d|ddS)Nz ab,ab,c->z ab,ab,c->cz ab,ab,cd,cd->zab,ab,cd,cd->aczab,ab,cd,cd->cdzab,ab,cd,cd,ef,ef->rrr2r2r3 test_collapseR     zTestEinsum.test_collapsecCr)Nzab,cd,ef->abcdefzab,cd,ef->acdfzab,cd,de->abcdez ab,cd,de->bezab,bcd,cd->abcdzab,bcd,cd->abdrrr2r2r3 test_expand[rzTestEinsum.test_expandcCs||d|d|d|d|d|d|d|d|d |d |d |d dS) N eb,cb,fb->cefdd,fb,be,cdb->cefbca,cdb,dbf,afc->dcc,fce,ea,dbf->abzfdf,cdd,ccd,afe->aezabcd,adzed,fcd,ff,bcf->bezbaa,dcf,af,cde->bezbd,db,eac->acezfff,fae,bef,def->abdzefc,dbc,acf,fd->abez ba,ac,da->bcdrrr2r2r3test_edge_casesds           zTestEinsum.test_edge_casescCs6|d|d|d|d|ddS)Nzab,abzab,bazabc,abczabc,baczabc,cbarrr2r2r3test_inner_productss    zTestEinsum.test_inner_productcCsr|d|d|d|d|d|d|d|d|d |d |d dS) Nzaab,fa,df,ecc->bdezecb,fef,bad,ed->aczbcf,bbb,fbf,fc->z bb,ff,be->ezbcb,bb,fc,fff->zfbb,dfd,fc,fc->zafd,ba,cc,dc->bfzadb,bc,fa,cfc->dzbbd,bda,fc,db->acfzdba,ead,cad->bcezaef,fbc,dca->bderrr2r2r3test_random_cases{s          zTestEinsum.test_random_casescCs4tdddddd}td|}t|dgdS)Nr8r$r zbbcdc->drb)r(r+r,r)r)r.r0r1r2r2r3test_combined_views_mappings z&TestEinsum.test_combined_views_mappingcCstjddd}tjdd}tjdd}tjd}|jd|||gd|jd||||gdtjdddd}tjd d }|jd |||gd|jd ||||gdtd d dd}|jd||gddS)Nr$rr rroz ijk,kl,jl)rzijk,kl,jl,i->irxz abjk,kl,jlzabjk,kl,jl,ab->abrr rgz obk,ijk->ioj)r(rrr r+r,)r.r0r1rr&efgr2r2r3test_broadcasting_dot_casess z&TestEinsum.test_broadcasting_dot_casescCs`tjddd}tjddd}dD]e}tjd||d|d}t|jjtjd||d |d}t|jjtjd||d |d}t|jjtjd||d |d}t|jjd ut|jjd utjd|||d }t|jjd ut|jjd uqtjddd}dD]}tjd||d|d}t|jjqtjddd}dD]}tjd||d|d}t|jjqdS)N)r r rF)rrrz...ft,mf->...mtr0rr!rkFrC)r(r-r)rrZ f_contiguous c_contiguous)r.r0r1rtmprr&r2r2r3test_output_orders0   zTestEinsum.test_output_order)FrJ)0__name__ __module__ __qualname__r4r]rrrrrrrrrrrrrrrrrrrrrrrpytestmark parametrizer( typecodesrrrr rrrrrrrrrr#r*r2r2r2r3rs^U )' *  ,     rc@sHeZdZefddZddZddZddZd d Zd d Z d dZ dS)TestEinsumPathcsL|g}|ddd}|D]}fdd|D}|tjj|q|S)Nrrrcsg|]}|qSr2r2r size_dictr2r3r=rz1TestEinsumPath.build_operands..)rrr(rr)r.stringr4rr r rr2r3r3build_operandss zTestEinsumPath.build_operandscCslt|t|k}t|tt|dD]}|t||dtM}|||d||dkM}qt|dS)Nr$)lenrrE isinstancetuple)r.comp benchmarkretposr2r2r3assert_path_equals  z TestEinsumPath.assert_path_equalcCs|d}tj|ddi\}}||ddgtj|ddi\}}||ddg|d}tj|ddi\}}||ddgtj|ddi\}}||ddgdS) Nz a,b,c->abcr)rr einsum_pathrV)rrzacdf,jbje,gihb,hfacrr$r r r6r(r?r>)r. outer_testpathpath_str long_testr2r2r3test_memory_contraintss  z%TestEinsumPath.test_memory_contraintscCs|d}tj|ddi\}}||gdtj|ddi\}}||gd|d}tj|ddi\}}t|||gdtj|ddi\}}t|||gddS) Nrrr)r?)r rr)r r r5rr rr$rr)r?rrr rr$r rzrH)r?)rr)r$r rrJrzrH)r6r(r?r>print)r. long_test1rCrD long_test2r2r2r3test_long_pathss  zTestEinsumPath.test_long_pathscCs|d}tj|ddi\}}||gdtj|ddi\}}||gd|d}tj|ddi\}}||gdtj|ddi\}}||gd|d}tj|ddi\}}||gd tj|ddi\}}||gd |d }tj|ddi\}}||gd tj|ddi\}}||gd |jd d d d d dd}tj|ddi\}}||gdtj|ddi\}}||gddS)Nrrr)r?rGrHrr)r?rIrHrHr)r?rzrGrHrr?rzrHrHza,ac,ab,ad,cd,bd,bc->ri)r0r1rr&r3)r?rH)rr$r r r rrA)r. edge_test1rCrD edge_test2 edge_test3 edge_test4r2r2r3test_edge_pathss6     zTestEinsumPath.test_edge_pathscCs|d}tj|ddi\}}||ddgtj|ddi\}}||gdgd}tj|d|i\}}|||tj|ddi}tj|d|i}t||dS) NrrFr?r@TrO)r?rGrGrH)r6r(r?r>r)r)r. path_testrCrDexp_pathr rr2r2r3test_path_type_input3s  z#TestEinsumPath.test_path_type_inputcCs<tdgg}tjddgddD] }tdj||qdS)Nr$r r )rz{}...a{}->{}...a{})r(r itertoolsproductr)format)r.rspr2r2r3 test_spacesFszTestEinsumPath.test_spacesN) r+r,r-rr6r>rFrNrTrWr]r2r2r2r3r2s   , r2cCsptjdtddd}tjdtddd}t||}td||}t||tjd|||d}t||dS)Nr8r_r rr)r(r+intr,rr)r)r0r1r&rr2r2r3 test_overlapMs  r_)rYr.numpyr( numpy.testingrrrrrrrr charsrsizesdictziprrr2r_r2r2r2r3s$(=