a :jg@sddlZddlZddlZddlZddlZddlmZmZm Z m Z m Z m Z m Z mZz$ejdddZedddkZWneyd ZYn0d Zegd ZeeeeZGd d d ZGdddZddZdS)N)assert_ assert_equalassert_array_equalassert_almost_equal assert_raisessuppress_warningsassert_raises_regexassert_allcloseZdicts)modeZ Compilerscnamezclang-clFZ abcdefghij) rrr rrrc@seZdZejdddgejdejejgddZ ejdddgddZ d d Z d d Z e dad dZddZddZddZddZddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Z d3d4Z!d5d6Z"d7d8Z#d9d:Z$d;d<Z%d=d>Z&ejd?ej'd@ej'dAdBdCZ(dDdEZ)dFdGZ*dbdIdJZ+dKdLZ,dMdNZ-dOdPZ.dQdRZ/dSdTZ0dUdVZ1dWdXZ2dYdZZ3d[d\Z4d]d^Z5d_d`Z6dHS)c TestEinsumdo_optTF einsum_fnc Cs`tt||dtt|d|dtt|dd|dtt|gdRd|itt|ddd|dtt|dddgdg|dtt|ddg|dtt|dd|dtt|dddg|dtt|d d|dtt|d ddg|dtt|d d|dtt|d ddg|dtt|d ddg|dtt|dddg|dtt|dddg|dtt|dddg|dtt|dddg|dtt|dddg|dtt|dddg|dtt|dddg|dtt|dddgddgg|dtt|dtddd|dtt|dtddd|dttd0td}td}|d||Wdn1sR0YdS)Noptimizer)?NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNr,iijz...izi...jzi...zij...zi..z.i...zj->..jzj->.j...zi%...z...j$zi->&zi->ijzij->jijiirr rii->iz'b')rrrrr)rrrz aabcb,abc)r ValueError TypeErrornparangereshaperones)selfrrabr&G/usr/local/lib/python3.9/site-packages/numpy/_core/tests/test_einsum.pytest_einsum_errorssL   zTestEinsum.test_einsum_errorsc Cstttjddd|dtttjddd|dtttjddd|dtttjddd |d tttjddd|d tttjd td dd|dtttjdddgddggtddd|dtttjdtd dd|dddS)Nrrtest)outrWorderrZblah)castingrZ bad_data_type)dtyper)Zbad_argrrrr rrzi->ird)rr-)rrreinsumrr r!)r#rr&r&r'test_einsum_specific_errorsTs, z&TestEinsum.test_einsum_specific_errorscsGdddtGfdddtjfddtddDd d d d }ttjd |tjfd dtddDd d d d d }ttjd|tjfddtddDd d }ttjd||ttjd||ttjd|dS)Nc@s eZdZdS)z=TestEinsum.test_einsum_object_errors..CustomExceptionN)__name__ __module__ __qualname__r&r&r&r'CustomExceptionwsr8cs<eZdZddZfddZddZfddZd d Zd S) z:TestEinsum.test_einsum_object_errors..DestructoBoxcSs||_||_dSNZ_valZ _destruct)r#valueZdestructr&r&r'__init__|szCTestEinsum.test_einsum_object_errors..DestructoBox.__init__cs*|j|j}||jkrn ||_|SdSr9r:r#othertmpr8r&r'__add__s   zBTestEinsum.test_einsum_object_errors..DestructoBox.__add__cSs|dkr |S||SdSNr)rAr#r>r&r&r'__radd__szCTestEinsum.test_einsum_object_errors..DestructoBox.__radd__cs*|j|j}||jkrn ||_|SdSr9r:r=r@r&r'__mul__s   zBTestEinsum.test_einsum_object_errors..DestructoBox.__mul__cSs|dkr |S||SdSrB)rErCr&r&r'__rmul__szCTestEinsum.test_einsum_object_errors..DestructoBox.__rmul__N)r5r6r7r<rArDrErFr&r@r&r' DestructoBoxzs   rGcsg|]}|dqS)rr&.0rrGr&r' z8TestEinsum.test_einsum_object_errors..r0 objectr/rzij->icsg|]}|dqS)dr&rHrJr&r'rKrLrz i...k->...csg|]}|dqS)7r&rHrJr&r'rKrLrij, jzij, jhzij->) Exceptionrarrayranger!rr3r#r$r%r&)r8rGr'test_einsum_object_errorsss("z$TestEinsum.test_einsum_object_errorsc szdD]n}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)5NTFrr rz...rrrr0Z WRITEABLEFZji )rrrcsg|]}||fqSr&r&rHr$r&r'rKrLz0TestEinsum.test_einsum_views..rcsg|]}||fqSr&r&rHr\r&r'rKrLrQ)rrrz ...ii->...ics"g|]fddtdDqS)csg|]}||fqSr&r&rHxr&r'rKrL;TestEinsum.test_einsum_views...rrVrIr&r]r'rKrLcs"g|]fddtdDqS)csg|]}||fqSr&r&rHr]r&r'rKrLr_rr`rar&r]r'rKrLz ii...->...ics"g|]fddtdDqS)csg|]}||fqSr&r&rHr]r&r'rKrLr_rr`rar&r]r'rKsr cs"g|]fddtdDqS)csg|]}||fqSr&r&rHr]r&r'rKrLr_rr`rar&r]r'rKsz ...ii->i...csg|]}dd||fqSr9r&rHr\r&r'rKrLcsg|]}dd||fqSr9r&rHr\r&r'rKrLzjii->ijcsg|]}dd||fqSr9r&rHr\r&r'rKrL)r0rrcsg|]}dd||fqSr9r&rHr\r&r'rK rLz ii...->i...cs(g|] }ddddd||fqSr rr0N transposerHr\r&r'rK rLcs(g|] }ddddd||fqSrbrcrHr\r&r'rKrLz i...i->i...cs(g|] }ddddd||fqSr0rr NrcrHr\r&r'rKrLcs(g|] }ddddd||fqSrercrHr\r&r'rKrLz i...i->...ics"g|]fddtdDqS)csg|]}||fqSr&r&rHr]r&r'rKrLr_rr`rar&r]r'rKscs"g|]fddtdDqS)csg|]}||fqSr&r&rHr]r&r'rK"rLr_rr`rar&r]r'rK"sziii->icsg|]}|||fqSr&r&rHr\r&r'rK+rL)rrrcsg|]}|||fqSr&r&rHr\r&r'rK/rLr rrzijk->jikrr0r )r0rr ) rr shaper3rbaseEllipsisrflagsTrVrdZswapaxes)r#rr%r&r\r'test_einsum_viewss                    zTestEinsum.test_einsum_viewsc Cst|}tddD]d}tj||d}tj|dd}t|drH||}ttjd||d|ttj|d gg|d|qtddD]v}tjd ||d d d |}tj|dd}t|dr||}ttjd ||d|ttj|t d gt g|d|qtddD]x}tjd ||d d |}tj|d d}t|drH||}ttjd||d|ttj|d t gt g|d|qtddD]z}tjd ||d d d |}tj|d d}t|dr||}ttjd||d|ttj|d t gt g|d|qtddD]}tj|||d ||}t |}t|drN||}ttjd||d|ttj|d d g|d|t d d g}ttj|||d|ttj|t ||d|qttdd ddtddD]}tjd ||d d |}tjd ||d d d |}ttjd|||dt||ttj|t g|t g|dt||qtddD]z}tjd ||d d d |}tj||d}ttjd|||dt||ttj|t d g|t d g|dt||qltddD]}tj|d d |d |d d }tj||d}ttjd|||dt|j|jjttj|d t g|d t g|dt|j|jjqtddD]p}tjd |dd}tj||dd}ttjd|||dt||ttj|d g|dg|dt||qt}|tjjtddD] }tjd||d d|}tj||d}ttjd|||dt||ttj|d dg|dg|dt||tjd|d}tjd|||dd|dt|t|d|d|d |d<tj|d dg|dg|dd|dt|t|d|d|qtddD],}tjd||d d|}tj||d}ttjd|j|j|dt|j|jttj|jdd g|jdg|dt|j|jtjd|d}tjd|j|j|dd|dt|t|jd|jd|d |d<tj|jdd g|jdg|dd|dt|t|jd|jd|q6tddD]}|dks|dkrptjd||d d|}tj|d |d |d }ttjd |||dt||ttj|d dg|dd g|dt||qptddD]}tjd||d d|}tj|d |d |d }tjd!|d dd }tjd |||dd|dt|t|d|d|d |d<tj|d dg|dd g|dd|dt|t|d|d|qtjd|d d d}tjd"|d dd#}tjd$|d d#d }|dk rttjd%||||d|||ttj|d dg|dd g|d d g|d|||tjd&|d d d } tjd%|||| dd|d|d|d} | |d|} t| | d | d<tj|d dg|dd g|d d g| dd|d |d|d} | |d|} t| | t|tdk rtjd'|d d dd#}tjd!|d dd d }ttd(||tj||dd gd dgfd)tt|gd*|gd+d d gtj||dd gd dgfd)tjd,|d d#d }tjd-|||dd|dt|tj|d|ddd gd dgfd)|d |d<tj|gd*|gd+d d g|dd|d t|tj|d|ddd gd dgfd)|Wdn1 s0Y|jd.k r d/nt|jd} tjdd | d dd0d dg|d}tjd d1d2| d dd dg|d}tgd3}ttjd4|||d5d|d6tt|d k|d k|d kttj|d g|d g|d gd gd5dd7 tt|d k|d k|d ktjd8|d}ttd9d |d t|ttd g|d ggd t|ttd:|d d t|tt|d gd ggd t|tdd;D]}tj||d}t|jdk rttjd<|||dt||ttjd=|||dt||ttjd>|d |dd |ttjd?d ||dd |ttjd:|d |dd t|ttjd9d ||dd t|ttjd<|dd|dd|dt|dd|ddttjd=|dd|dd|dt|dd|ddttjd>|ddd |dd |ddttjd?d |dd|dd |ddttjd:|ddd |dd t|ddttjd9d |dd|dd t|dd qtjd8td}tjd||dd7}t|t|t|d@rt|jt|tj|d gg|dd7}t|t|t|d@r4t|jt|td d} td d d d } td d d dA}ttdB| | |dCtdD} tdE} t tjdF| | dGdtjdF| | dHdt tjdF| | dGddIgd tdJdKg}tdLg}t tjdM||dHddNt tjdM||dGddNtdOd } tdPd } dQD]L}t tjdR| | |dtjdR| | |dt tjdR| | |dt!dOdSqFtj"d |d}tjd |d}t tjdT|||ddJgt tjdU|||ddJgt tjdV|||ddJgdS)WNr0rOr1)Zaxisastypei->rrrr rz ...i->...z i...->...rz..., ...r z ...i, ...i z i..., i...i,jrSzij,jf8unsafe)r*r/r.r.zji,jf2zij,jkrfrzij,jk,kl<zijk, jil -> klZaxesrh)r0rrrMz ijk,jil->klu g @g)TTFTTFTTzi,i,i->i?)r/r.r)r/r.r[,i->i,->z...,...zi,ii,->i,i->ir/z z,mz,zm->)rMr r0r zij,ij->jTFg$@g@@g@zi, ig4@)r0rrrrY...ij,...jk->...ikg?zji,i->zi,ij->zij,i->)#rr/rVr sumhasattrrprr3r!rktraceZasarraylistmultiplyinnerrmouterrfilter exceptionsZComplexWarningdot tensordotkindZiinfomaxrU logical_anditemsizerNr"rfulleye)r#r/rnr$r%Znp_arraysupr r2tgtZneg_valpqrr^yrr&r&r'check_einsum_sums=s        "  "                          & $$  """",,         zTestEinsum.check_einsum_sumscCs2tjdkrtdkstr$td|ddS)Ndarwinx86_64FFails on macOS x86-64 and when using clang-cl with Meson, see gh-23838i1sysplatformmachineUSING_CLANG_CLpytestZxfailrr#r&r&r'test_einsum_sums_int8os  z TestEinsum.test_einsum_sums_int8cCs2tjdkrtdkstr$td|ddS)Nrrru1rrr&r&r'test_einsum_sums_uint8ys  z!TestEinsum.test_einsum_sums_uint8cCs|ddS)Ni2rrr&r&r'test_einsum_sums_int16sz!TestEinsum.test_einsum_sums_int16cCs|ddS)Nu2rrr&r&r'test_einsum_sums_uint16sz"TestEinsum.test_einsum_sums_uint16cCs|d|dddS)Ni4Trrr&r&r'test_einsum_sums_int32s z!TestEinsum.test_einsum_sums_int32cCs|d|dddS)NZu4Trrr&r&r'test_einsum_sums_uint32s z"TestEinsum.test_einsum_sums_uint32cCs|ddS)Ni8rrr&r&r'test_einsum_sums_int64sz!TestEinsum.test_einsum_sums_int64cCs|ddS)Nu8rrr&r&r'test_einsum_sums_uint64sz"TestEinsum.test_einsum_sums_uint64cCs|ddS)Nrxrrr&r&r'test_einsum_sums_float16sz#TestEinsum.test_einsum_sums_float16cCs|ddS)NZf4rrr&r&r'test_einsum_sums_float32sz#TestEinsum.test_einsum_sums_float32cCs|d|dddS)NruTrrr&r&r'test_einsum_sums_float64s z#TestEinsum.test_einsum_sums_float64cCs|tjdSr9)rrZ longdoublerr&r&r'test_einsum_sums_longdoublesz&TestEinsum.test_einsum_sums_longdoublecCs|d|dddS)NZc8Trrr&r&r'test_einsum_sums_cfloat64s z$TestEinsum.test_einsum_sums_cfloat64cCs|ddS)NZc16rrr&r&r'test_einsum_sums_cfloat128sz%TestEinsum.test_einsum_sums_cfloat128cCs|tjdSr9)rrZ clongdoublerr&r&r'test_einsum_sums_clongdoublesz'TestEinsum.test_einsum_sums_clongdoublecCs|d|dddS)NrNTrrr&r&r'test_einsum_sums_objects z"TestEinsum.test_einsum_sums_objectcCstd}td}ttd||dgdgggttjd||dddgdgggttd||dgdgggttdgdgd d ttjdgdgd d dd td tj}td tj}ttd|||td||ttjd|||ddtjd||ddtdd}tdddd}tdddd}ttd|||ddgddgddgddggddgddgddgddgggttjd|||ddddgddgddgddggddgddgddgddgggttjddgdgdd dggdS)!Nr)r r r0zij...,j...->i...r Trz ...i,...i)r0r rrgrygreedy)rrrrr r)rrrrszijklm,ijn,ijn->z ijklm,ijn->r0rrr[rz x,yx,zx->xzyrrw rf0@rtr*)rr"rr3Zint64r r!)r#r$r%r r&r&r'test_einsum_miscsB  "  zTestEinsum.test_einsum_misccCsGddd}t|g}tjdtdjdtd}tt t ddg|Wdn1sh0Ytt t d|dgWdn1s0Yt d||dksJdS) Nc@seZdZddZdS)z)TestEinsum.test_object_loop..MultcSsdS)N*r&rCr&r&r'rEsz1TestEinsum.test_object_loop..Mult.__mul__N)r5r6r7rEr&r&r&r'Multsrrr0)bufferrir/rtr) rrUZndarrayZintprrNrZraisesrr3)r#rZobjMultZobjNULLr&r&r'test_object_loops . .zTestEinsum.test_object_loopcstdtdtjddgddgddgddtjddgddgddgddtjdd gd dgddgddttfd d ttfd d dS) NrZrrrryr FrrQ3cs"tjddgddgddgddS)Nr4r Frrr3r&r$r%r&r'rLz1TestEinsum.test_subscript_range..cs"tjddgddgddgddS)Nr1rr Frrr&rr&r'rrL)rr"r3rrrr&rr'test_subscript_ranges  """zTestEinsum.test_subscript_rangec Cs8tdddd}td}tjd||dd}dD]L}ttjd |||d|ttjd |||d|ttjd |||d|q4td d }tdd}tjd||dd}dD]d}ttjd|||d|ttjd|||d|ttjd|||d|ttjd|||d|qgd}tt||}t|d}tjd||dd}dD]N}ttjd|||d|ttjd|||d|ttjd|||d|q`d\}} } t|| | ddd|| | }t|| | d|| | d}tjd||dd}dD]}ttjd|||d|qdS)Nrfr rrz ijk,j->ijkFrrYzij...,j...->ij...zij...,...j->ij...zij...,j->ij...rrrrr)rr z ik,kj->ijzik...,k...->i...zik...,...kj->i...jz...k,kjz ik,k...->i...)r rrrz ijkl,k->ijlzijkl,kz...kl,kz ...kl,k...)rxr0z...lmn,...lmno->...oz...lmn,lmno->...o)rr r!r3rprod) r#ABrefoptdimsr$vJKMr&r&r'test_einsum_broadcastsB  "" z TestEinsum.test_einsum_broadcastcCstdddtj}tddddtj}td||}tj||dd}t||td ddtj }td ddd d tj}td ||}tj||dd}t||dS) Nrr ri@i z cl, cpx->lpx)rrr}r[irzcl, cpxy->lpxy) rr r!rpfloat32Zint16r3rrZfloat64)r#rrestpr&r&r'test_einsum_fixedstridebugs z%TestEinsum.test_einsum_fixedstridebugcCsjtjddd}td}tjd||dtd}||dddf|dddf||f}t||dS)Nrr0)rrrrrzaabb->abrr)rrandomnormalzerosr3r r)r#r^y1idxy2r&r&r'test_einsum_fixed_collapsingbug:s   (z*TestEinsum.test_einsum_fixed_collapsingbugcCs8tjd}td|}|jddd}t||dS)N)rMrMrMrMzijij->rr )Zaxis1Zaxis2)rrZ random_sampler3rr )r#Ztensorr^rr&r&r'"test_einsum_failed_on_p9_and_s390xDs  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) NrrMr rz mi,mi,mi->mrz im,im,im->m)r r r ).r)r r ij,jk->ik)rr"r3rrjr)r#r^r*Z correct_baser&r&r'(test_einsum_all_contig_non_contig_outputLs     z3TestEinsum.test_einsum_all_contig_non_contig_outputr/ZAllFloatZ AllIntegercCst|}tdd|}tjd|d}td|}||ksHJtd||}t|||td|dddd|dddd}t|||td||||ksJtj d|d}tjd|| d|d }t||| dtd ||}t||| dtd ||}|td||ksBJtd ||}|td||ksjJtjgd |d}td|||}t||||td||||}t|||||dS)Nr?r rOrqzi,i->izi,i->rrrrr)rrg?g@rzi,i,i->z i,i,i,i->) rr/r rprUr3rrrepeatr"type)r#r/arrZscalarresr*r&r&r'test_different_pathscs0  .zTestEinsum.test_different_pathscCshtjdtjddd}d|d<tjdtjddd}tjdtjd}tjd|||d}t||dS) N)rr0r0rOr T.)r r0r0rr)rrboolr"r3r)r#r$r*rrr&r&r'test_small_boolean_arrayss z$TestEinsum.test_small_boolean_arrayscCs4tddd}tjd|||d}||us0JdS)Nr[rrr)rr r!r3)r#r$rr&r&r'test_out_is_resszTestEinsum.test_out_is_resNc Cs|durN|g}|ddd}|D]$}dd|D}|tjj|q&n |g|}tj|ddi}tj|ddi}t||tj|dd i}t||dS) N->rrcSsg|] }t|qSr&)global_size_dictrIr^r&r&r'rKrLz/TestEinsum.optimize_compare..rFroptimal)splitappendrrrandr3r) r#Z subscriptsoperandsargstermstermrnooptrr&r&r'optimize_compares  zTestEinsum.optimize_comparecCs|d|ddS)Nz a,ab,abc->abcz a,b,ab->abrrr&r&r'test_hadamard_like_productss z&TestEinsum.test_hadamard_like_productscCs"|d|d|ddS)Nzea,fb,gc,hd,abcd->efghzea,fb,abcd,gc,hd->efghzabcd,ea,fb,gc,hd->efghrrr&r&r'test_index_transformationss  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,hibdrrr&r&r' test_complexs       zTestEinsum.test_complexcCs@|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->rrr&r&r' test_collapses      zTestEinsum.test_collapsecCs@|d|d|d|d|d|ddS)Nzab,cd,ef->abcdefzab,cd,ef->acdfzab,cd,de->abcdez ab,cd,de->bezab,bcd,cd->abcdzab,bcd,cd->abdrrr&r&r' test_expands      zTestEinsum.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->bcdrrr&r&r'test_edge_casess           zTestEinsum.test_edge_casescCs6|d|d|d|d|ddS)Nzab,abzab,bazabc,abczabc,baczabc,cbarrr&r&r'test_inner_products     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->bderrr&r&r'test_random_casess          zTestEinsum.test_random_casescCs4tdddddd}td|}t|dgdS)Nr[r0rzbbcdc->drr)rr r!r3rrWr&r&r'test_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)Nr0rrrrMz ijk,kl,jl)r zijk,kl,jl,i->irz abjk,kl,jlzabjk,kl,jl,ab->abrr rwz obk,ijk->ioj)rrrrr r!)r#r$r%r r2efgr&r&r'test_broadcasting_dot_casess z&TestEinsum.test_broadcasting_dot_casescCsbtjddd}tjddd}dD]}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 uq tjddd}dD]$}tjd||d|d}t|jjqtjddd}dD]&}tjd||d|d}t|jjq6dS)N)r rrF)r-rrYz...ft,mf->...mtr$r,r r kFrC)rr"r3rrl f_contiguous c_contiguous)r#r$r%rr?r r2r&r&r'test_output_orders.   zTestEinsum.test_output_order)F)N)7r5r6r7rmarkZ parametrizerr3 einsum_pathr(r4rXrnZ_no_nep50_warningrrrrrrrrrrrrrrrrrrrrrrrrr typecodesrrrrrrrrrrrrrr"r(r&r&r&r'rsl 8 ?  3  & *  ,     rc@sXeZdZefddZddZddZddZd d Zd d Z d dZ ddZ ddZ dS)TestEinsumPathcsL|g}|ddd}|D](}fdd|D}|tjj|q|S)Nrrrcsg|] }|qSr&r&r size_dictr&r'rKDrLz1TestEinsumPath.build_operands..)rrrrr)r#stringr.r r r rr&r-r'build_operands>s zTestEinsumPath.build_operandscCslt|t|k}t|tt|dD]6}|t||dtM}|||d||dkM}q(t|dS)Nr0)lenrrV isinstancetuple)r#compZ benchmarkretposr&r&r'assert_path_equalIs z TestEinsumPath.assert_path_equalcCs|d}tj|ddi\}}||ddgtj|ddi\}}||ddg|d}tj|ddi\}}||ddgtj|ddi\}}||ddgdS) Nz a,b,c->abcr)rrr*rh)rrzacdf,jbje,gihb,hfacrr0r rr0rr*r7)r#Z outer_testpathpath_strZ long_testr&r&r'test_memory_contraintsRs  z%TestEinsumPath.test_memory_contraintscCs|d}tj|ddi\}}||gdtj|ddi\}}||gd|d}tj|ddi\}}||gdtj|ddi\}}||gddS) Nrrr)r*)rrr)r rrZrr rr0rr)r*rrrrr0rrr>)r*)rr)r0rrr@rr>r9)r#Z long_test1r:r;Z long_test2r&r&r'test_long_pathsds  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*r=r>rr)r*r?r>r>r)r*rr=r>rr*rr>r>za,ac,ab,ad,cd,bd,bc->ry)r$r%r r2r-)r*r>)rr0r rrrr9)r#Z edge_test1r:r;Z edge_test2Z edge_test3Z edge_test4r&r&r'test_edge_paths{s6     zTestEinsumPath.test_edge_pathscCs|d}tj|ddi\}}||ddgtj|ddi\}}||gdgd}tj|d|i\}}|||tj|ddi}tj|d|i}t||dS) NrrFr*r8TrB)r*r=r=r>r0rr*r7r3r)r# path_testr:r;exp_pathr rr&r&r'test_path_type_inputs  z#TestEinsumPath.test_path_type_inputcCs`|d}gd}tj|d|i\}}|||tj|ddi}tj|d|i}t||dS)Nz cab,cdd->abr*)r0r>rFrD)r#rErFr:r;r rr&r&r'#test_path_type_input_internal_traces  z2TestEinsumPath.test_path_type_input_internal_tracecCs|d}gd}tttjg|Rd|itttjg|Rd|i|d}gd}tttjg|Rd|itttjg|Rd|idS)Nzab,bc,cd,de->ae)r*rZr>rza,a,a->arH)r0r RuntimeErrorrr3r*)r#rErFr&r&r'test_path_type_input_invalids(  z+TestEinsumPath.test_path_type_input_invalidcCs<tdgg}tjddgddD]}tdj||q dS)Nr0r r)rz{}...a{}->{}...a{})rrU itertoolsproductr3format)r#rspr&r&r' test_spacesszTestEinsumPath.test_spacesN) r5r6r7rr0r7r<rArCrGrIrKrQr&r&r&r'r,=s  ,  r,cCsptjdtddd}tjdtddd}t||}td||}t||tjd|||d}t||dS)Nr[rOrrr)rr intr!rr3r)r$r%r2r r&r&r' test_overlaps  rS)rMrrrnumpyrZ numpy.testingrrrrrrrr Z show_configZ COMPILERSrrcharsrUsizesdictziprrr,rSr&r&r&r's2(  ,