
    ik                        S r SSKrSSKrSSKJrJrJrJr  SSK	J
r
Jr  / SQr/ SQr\R                  R                  S\5      \R                  R                  S\5      S	 5       5       r\R                  R                  S\5      S
 5       r\R                  R                  S\5      \R                  R                  S\5      S 5       5       r\R                  R                  S\5      \R                  R                  S\5      S 5       5       r\R                  R                  S\5      \R                  R                  S\5      S 5       5       rS rS r\R                  R                  S\5      \R                  R                  S\5      \R                  R                  SSS/5      \R                  R                  SSS/5      S 5       5       5       5       rS r\R                  R                  SS/ SQ4S/ SQ4S/ SQ4S/ SQ4S/ SQ4SSS/4SSS/4/5      S  5       r\R                  R                  SS!S"/5      \R                  R                  S#S$S%/5      \R                  R                  S&S'S/5      \R                  R                  S(/ S)Q5      \R                  R                  S*SS/5      S+ 5       5       5       5       5       r\R                  R                  S,\5      S- 5       rS. rg)/zf
Tets a series of opt_einsum contraction paths to ensure the results are the same for different paths
    N)contractcontract_expressioncontract_pathhelpers)linear_to_ssassa_to_linear)Bza,ab,abc->abcz
a,b,ab->abzea,fb,gc,hd,abcd->efghzea,fb,abcd,gc,hd->efghzabcd,ea,fb,gc,hd->efgh$acdf,jbje,gihb,hfac,gfac,gifabc,hfacr	   z cd,bdhe,aidb,hgca,gc,hgibcd,hgaczabhe,hidj,jgba,hiab,gabz bde,cdh,agdb,hica,ibd,hgicd,hiaczchd,bde,agbc,hiad,hgc,hgi,hiadzchd,bde,agbc,hiad,bdi,cgh,agdbzbdhe,acad,hiab,agac,hibdz	ab,ab,c->z
ab,ab,c->czab,ab,cd,cd->zab,ab,cd,cd->aczab,ab,cd,cd->cdzab,ab,cd,cd,ef,ef->zab,cd,ef->abcdefzab,cd,ef->acdfzab,cd,de->abcdezab,cd,de->bezab,bcd,cd->abcdzab,bcd,cd->abdzeb,cb,fb->cefzdd,fb,be,cdb->cefzbca,cdb,dbf,afc->zdcc,fce,ea,dbf->abzfdf,cdd,ccd,afe->aezabcd,adzed,fcd,ff,bcf->bezbaa,dcf,af,cde->bezbd,db,eac->acezfff,fae,bef,def->abdzefc,dbc,acf,fd->abezab,abzab,bazabc,abczabc,baczabc,cbazab,bczab,cbzba,bczba,cbzabcd,cdzabcd,abz	abcd,cdefzabcd,cdef->febaz	abcd,efdcz
aab,bc->acz
ab,bcc->aczaab,bcc->aczbaa,bcc->aczaab,ccb->aczaab,fa,df,ecc->bdezecb,fef,bad,ed->aczbcf,bbb,fbf,fc->zbb,ff,be->ezbcb,bb,fc,fff->zfbb,dfd,fc,fc->zafd,ba,cc,dc->bfzadb,bc,fa,cfc->dbbd,bda,fc,db->acfzdba,ead,cad->bcezaef,fbc,dca->bde)
optimalz
branch-allzbranch-2zbranch-1greedyzrandom-greedyzrandom-greedy-128dpautozauto-hqstringoptimizec                     [         R                  " U5      n[        U/UQ7SSS.6n[        U/UQ7U SS.6n[        R                  " X45      (       d   eg )NFr   use_blasr   build_viewsr   npallcloser   r   viewseinopts        ^/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/opt_einsum/tests/test_contract.pytest_comparer   i   sU     'E
6
BE
BEE
BC
6
EE
EHu
EC;;s        c                     [         R                  " U 5      n[        U /UQ76 n[        R                  " U[        R
                  " U /UQ76 5      (       d   eg N)r   r   r   r   r   einsum)r   r   r   s      r   test_drop_in_replacementr"   s   sF    'E
6
"E
"C;;sBIIf5u56666r   c                     [         R                  " U5      n[        U/UQ7SSS.6nSR                  S U 5       5      n[        U/UQ7U SS.6n[        R
                  " X45      (       d   eg )NFr    c              3   ^   #    U  H#  oS ;  a  [        [        U5      S-   5      OUv   M%     g7fz,->.P  Nchrord.0cs     r   	<genexpr>%test_compare_greek.<locals>.<genexpr>   &     Q&Q6/SQ#&q@&   +-r   r   r   joinr   r   r   s        r   test_compare_greekr4   z   sk     'E
6
BE
BEE
BC WWQ&QQF
6
EE
EHu
EC;;s    r   c                     [         R                  " U5      n[        U/UQ7SS06n[        U/UQ7SU 06n[        R                  " X45      (       d   eg )Nr   Fr   r   s        r   test_compare_blasr6      sQ     'E
6
2E
2E
2C
6
5E
5H
5C;;s    r   c                     [         R                  " U5      n[        U/UQ7SS06nSR                  S U 5       5      n[        U/UQ7SU 06n[        R
                  " X45      (       d   eg )Nr   Fr$   c              3   ^   #    U  H#  oS ;  a  [        [        U5      S-   5      OUv   M%     g7fr&   r(   r+   s     r   r.   *test_compare_blas_greek.<locals>.<genexpr>   r0   r1   r2   r   s        r   test_compare_blas_greekr:      sg     'E
6
2E
2E
2C WWQ&QQF
6
5E
5H
5C;;s    r   c                      S[        [        S5      S-   5      -   S-   n [        R                  R	                  SSS5      n[        R
                  " [        X5      [        SU5      5      (       d   eg )	Nr-   br'   a         cxa)r)   r*   r   randomrandr   r   )r   xs     r   &test_some_non_alphabet_maintains_orderrE      sY    3s3x#~&&,F 			q!QA;;x*HUA,>????r   c                      Sn [         R                  " U 5      n[        U /UQ76 n[        [	        US   5      5      S:X  d   eg )Nr
      i  )r   r   r   lenstr)r   r   r   s      r   test_printingrJ      sA    !F'E

'
'Cs3q6{s"""r   r   FTout_specc                    [         R                  " U 5      nU Vs/ s H  oUR                  PM     nn[        U /UQ7SSS.6n[	        U /UQ7XS.6nU(       aB  SU ;   a<  U SS  S:w  a3  [         R                  " U R                  S5      S   5      u  n	U" USU	06  OU" U6 n	[        R                  " X5      (       d   eXR                  5       ;   d   eXR                  5       ;   d   eg s  snf )NFr   z->rG   out)
r   r   shaper   r   splitr   r   __repr____str__)
r   r   r   rK   r   viewshapesexpectedexprrN   s
             r   test_contract_expressionsrW      s    
 'E%*+UTjjUF+GGGHvUUUDTV^&+*=""6<<#5a#89eEl;;s%%%% ]]_$$$\\^### ,s   C'c            
          S S 5       u  pn[         R                  " U SS/USS/USS/SS/5      nS S 5       u  pEn[        USS/USS/USS/SS/5      nU" XU5      n[         R                  " X5      (       d   eg )Nc              3   b   #    U  H%  n[         R                  R                  S S 5      v   M'     g7f)r>   N)r   rB   randnr,   _s     r   r.   =test_contract_expression_interleaved_input.<locals>.<genexpr>   s"     4eryyq!$$es   -/xyzr   rG   r>   r?   c              3   &   #    U  H  nS v   M	     g7f))r>   r>   N r[   s     r   r.   r]      s     .1s   )r   r!   r   r   )	rD   yzrU   xshpyshpzshprV   rN   s	            r   *test_contract_expression_interleaved_inputrf      s    4e4GA!yyQFA1vq1a&1a&AH..DtaVTAq64!Q!QPD
qQ-C;;s%%%%r   zstring,constantszhbc,bdef,cdkj,ji,ikeh,lfo)rG   r>   r?   r@   zbdef,cdkj,ji,ikeh,hbc,lfo)r   rG   r>   r?   zijab,acd,bce,df,ef->jizab,cd,ad,cbrG   r?   ab,bc,cdc                    [         R                  " U 5      n[        U /UQ7SSS.6nU Vs/ s H  oDR                  PM     nn/ n/ n[	        [        XR5      5       HB  u  nu  pX;   a  UR                  U5        M   UR                  U	5        UR                  U5        MD     [        U /UQ7SU06n
[        U
5        U
" U6 n[        R                  " X;5      (       d   eg s  snf )NFr   	constants)r   r   r   rO   	enumeratezipappendr   printr   r   )r   ri   r   rU   rS   rT   	expr_args	ctrc_argsirO   rV   rN   s               r   'test_contract_expression_with_constantsrq      s     'EGGGH%*+UTjjUF+II%c&&89=E>T"U#T" : vG	GYGD	$K
	
C;;x%%%% ,s   Cr   r   nr@      regr>   n_out)r   r>   r@   
global_dimc           
          [         R                  " XUSSSSS9u  pVn[         R                  " XW5      n[        U/UQ7SS06n	[        U/UQ7SU 06n
[        R
                  " X5      (       d   eg )Nr>   rs   *   T)d_mind_maxseedreturn_size_dictr   F)r   rand_equationr   r   r   r   )r   rr   rt   ru   rv   eqr\   	size_dictr   rU   actuals              r   test_rand_equationr      sr     ,,QU!1SUhlmB9.E3U3U3Hb45484F;;x((((r   equationc                     [         R                  " U 5      n[        U /UQ76 u  p#[        U5      n[	        U5      nXR:X  d   eg r    )r   r   r   r   r   )r   r   linear_pathr\   ssa_pathlinear_path2s         r   test_linear_vs_ssar      sC    )E"84e4NK[)H *L&&&r   c                  .    Sn / SQn[        U /UQ7SS06  g )Nrg   ))r>   r?   )r?   r@   )r@   rs   rT   T)r   )r~   shpss     r    test_contract_path_supply_shapesr     s    	B#D")t)D)r   )__doc__numpyr   pytest
opt_einsumr   r   r   r   opt_einsum.pathsr   r   testsall_optimizersmarkparametrizer   r"   r4   r6   r:   rE   rJ   rW   rf   rq   r   r   r   r`   r   r   <module>r      s     L L 9V	p 5)^4! 5 *! 5)7 *7 5)^4	! 5 *	! 5)^4! 5 *! 5)^4	! 5 *	!@# 5)^4eT]3eT]3$ 4 4 5 *$(& + ,/ ,/ ,/ ,/|,QF!Q. &&* h	%:;q!f%A'),t}5) 6 - ( & <
) U+' ,'*r   