
    Opfk                     *   d Z ddlZddlZddlmZmZmZmZ ddl	m
Z
mZ g dZg dZej                            de          ej                            de          d	                         Zej                            de          d
             Zej                            de          ej                            de          d                         Zej                            de          ej                            de          d                         Zej                            de          ej                            de          d                         Zd Zd Zej                            de          ej                            de          ej                            dddg          ej                            dddg          d                                                 Zd Zej                            ddg dfdg dfdg dfdg dfdg dfdddgfdddgfg          d              Zej                            dd!d"g          ej                            d#d$d%g          ej                            d&d'dg          ej                            d(g d)          ej                            d*ddg          d+                                                             Zej                            d,e          d-             Zd. ZdS )/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                     t          j        |          }t          |g|R ddd}t          |g|R | dd}t          j        ||          sJ d S )NFr   use_blasr   build_viewsr   npallcloser   r   viewseinopts        ^/var/www/html/nettyfy-visnx/env/lib/python3.11/site-packages/opt_einsum/tests/test_contract.pytest_comparer   i   sp     ''E
6
BE
B
BEE
B
B
BC
6
EE
E
EHu
E
E
EC;sC           c                     t          j        |           }t          | g|R  }t          j        |t          j        | g|R            sJ d S N)r   r   r   r   r   einsum)r   r   r   s      r   test_drop_in_replacementr"   s   sW    ''E
6
"E
"
"
"C;sBIf5u5556666666r   c                     t          j        |          }t          |g|R ddd}d                    d |D                       }t          |g|R | dd}t	          j        ||          sJ d S )NFr    c              3   `   K   | ])}|d vrt          t          |          dz             n|V  *dS z,->.P  Nchrord.0cs     r   	<genexpr>z%test_compare_greek.<locals>.<genexpr>   A      QQQ!6//SQ#&&&qQQQQQQr   r   r   r   joinr   r   r   s        r   test_compare_greekr2   z   s     ''E
6
BE
B
BEE
B
B
BC WWQQ&QQQQQF
6
EE
E
EHu
E
E
EC;sC       r   c                     t          j        |          }t          |g|R ddi}t          |g|R d| i}t          j        ||          sJ d S )Nr   Fr   r   s        r   test_compare_blasr4      sl     ''E
6
2E
2
2
2E
2
2C
6
5E
5
5
5H
5
5C;sC       r   c                     t          j        |          }t          |g|R ddi}d                    d |D                       }t          |g|R d| i}t	          j        ||          sJ d S )Nr   Fr$   c              3   `   K   | ])}|d vrt          t          |          dz             n|V  *dS r&   r(   r+   s     r   r.   z*test_compare_blas_greek.<locals>.<genexpr>   r/   r   r0   r   s        r   test_compare_blas_greekr7      s     ''E
6
2E
2
2
2E
2
2C WWQQ&QQQQQF
6
5E
5
5
5H
5
5C;sC       r   c                      dt          t          d          dz             z   dz   } t          j                            ddd          }t          j        t          | |          t          d|                    sJ d S )	Nr-   br'   a         cxa)r)   r*   r   randomrandr   r   )r   xs     r   &test_some_non_alphabet_maintains_orderrB      sn    3s3xx#~&&&,F 		q!QA;x**HUA,>,>???????r   c                      d} t          j        |           }t          | g|R  }t          t	          |d                             dk    sJ d S )Nr
      i  )r   r   r   lenstr)r   r   r   s      r   test_printingrG      sU    !F''E

'
'
'
'Cs3q6{{s""""""r   r   FTout_specc                    t          j        |           }d |D             }t          | g|R ddd}t          | g|R ||d}|rJd| v rF| dd          dk    r8t          j        |                     d          d                   \  } ||d|i n || }t          j        ||          sJ | |                                v sJ | |                                v sJ d S )Nc                     g | ]	}|j         
S  shaper,   views     r   
<listcomp>z-test_contract_expressions.<locals>.<listcomp>       +++Tdj+++r   Fr   z->rD   out)	r   r   r   r   splitr   r   __repr____str__)	r   r   r   rH   r   shapesexpectedexprrS   s	            r   test_contract_expressionsrZ      s   
 ''E++U+++FGGGGGGHvUUUHUUUD TV^^&+*=*="6<<#5#5a#899edEl;sH%%%%% T]]__$$$$T\\^^######r   c            
         d dD             \  } }}t          j        | ddg|ddg|ddgddg          }d dD             \  }}}t          |ddg|ddg|ddgddg          } || ||          }t          j        ||          sJ d S )Nc              3   V   K   | ]$}t           j                            d d           V  %dS )r;   N)r   r?   randnr,   _s     r   r.   z=test_contract_expression_interleaved_input.<locals>.<genexpr>   s2      44ryq!$$444444r   xyzr   rD   r;   r<   c              3      K   | ]}d V  dS ))r;   r;   NrK   r^   s     r   r.   z=test_contract_expression_interleaved_input.<locals>.<genexpr>   s"      ..1......r   )r   r!   r   r   )	rA   yzrX   xshpyshpzshprY   rS   s	            r   *test_contract_expression_interleaved_inputrg      s    44e444GAq!yQFA1vq1a&1a&AAH.....D$taVTAq64!Q!QPPD
$q!Q--C;sH%%%%%%%r   zstring,constantszhbc,bdef,cdkj,ji,ikeh,lfo)rD   r;   r<   r=   zbdef,cdkj,ji,ikeh,hbc,lfo)r   rD   r;   r<   zijab,acd,bce,df,ef->jizab,cd,ad,cbrD   r<   ab,bc,cdc                    t          j        |           }t          | g|R ddd}d |D             }g }g }t          t	          ||                    D ]L\  }\  }}	||v r|                    |	           "|                    |           |                    |	           Mt          | g|R d|i}
t          |
            |
| }t          j	        ||          sJ d S )NFr   c                     g | ]	}|j         
S rK   rL   rN   s     r   rP   z;test_contract_expression_with_constants.<locals>.<listcomp>   rQ   r   	constants)
r   r   r   	enumeratezipappendr   printr   r   )r   rk   r   rX   rW   	expr_args	ctrc_argsirM   rO   rY   rS   s               r   'test_contract_expression_with_constantsrs      s    ''EGGGGGGH++U+++FII%c&%&8&899 # #=E4	>>T""""U###T""""vG	GGGYGGD	$KKK
$	
C;x%%%%%%%r   r   r   nr=      regr;   n_out)r   r;   r=   
global_dimc           	          t          j        |||dddd          \  }}}t          j        ||          }t          |g|R ddi}	t          |g|R d| i}
t	          j        |	|
          sJ d S )Nr;   ru   *   T)d_mind_maxseedreturn_size_dictr   F)r   rand_equationr   r   r   r   )r   rt   rv   rw   rx   eqr_   	size_dictr   rX   actuals              r   test_rand_equationr      s     ,QU!1SUhlmmmB9I..E3U333U33Hb45444844F;x(((((((r   equationc                     t          j        |           }t          | g|R  \  }}t          |          }t	          |          }||k    sJ d S r    )r   r   r   r   r   )r   r   linear_pathr_   ssa_pathlinear_path2s         r   test_linear_vs_ssar      s\    ))E"84e444NK[))H **L;&&&&&&r   c                  2    d} g d}t          | g|R ddi d S )Nrh   ))r;   r<   )r<   r=   )r=   ru   rW   T)r   )r   shpss     r    test_contract_path_supply_shapesr     s6    	B###D")t)))D)))))r   )__doc__numpyr   pytest
opt_einsumr   r   r   r   opt_einsum.pathsr   r   testsall_optimizersmarkparametrizer   r"   r2   r4   r7   rB   rG   rZ   rg   rs   r   r   r   rK   r   r   <module>r      s)         L L L L L L L L L L L L 9 9 9 9 9 9 9 9V	 V	 V	p   5))^44! ! 54 *)! 5))7 7 *)7 5))^44	! 	! 54 *)	! 5))^44! ! 54 *)! 5))^44	! 	! 54 *)	!@ @ @# # # 5))^44eT]33eT]33$ $ 43 43 54 *)$(& & & + ,,,/ ,,,/ ,,,/ ,,,/|||,QF!Q.  & & &* h	%:;;q!f%%A''))),,t}55) ) 65 -, (' &% <;
) U++' ' ,+'* * * * *r   