
    io1                        S SK r S SKrS SKJr  S SKrS SKrS SKJrJ	r	J
r
JrJrJr  S SKJrJr  S SKJr  S SKJr  S SKJrJrJr   S SKrSr S SKrSr S\ \/r!/ SQr"S \\S.r#\R:                  RI                  S\"5      \R:                  RI                  S\!5      S 5       5       r%\R:                  RI                  S\!5      S 5       r&\R:                  RI                  S\!5      S 5       r'\R:                  RI                  S\!5      S 5       r(\R:                  RI                  S\!5      S 5       r)\R:                  RI                  S\"5      \R:                  RI                  S\!5      S 5       5       r*\R:                  RI                  S\!5      S 5       r+\R:                  RI                  S\!5      S 5       r,\R:                  RI                  S/ SQ5      \R:                  RI                  S\!5      S 5       5       r-\R:                  RI                  S/ SQ5      \R:                  RI                  S\!5      S  5       5       r.S! r/\R:                  RI                  S\!5      S" 5       r0\R:                  RI                  S/ SQ5      \R:                  RI                  S\!5      S# 5       5       r1S$ r2g! \ a-    \R8                  " S\R:                  R=                  S	S
9/S9r GNf = f! \ a-    \R8                  " S\R:                  R=                  SS
9/S9r  GNf = f)%    N)Counter)contractcontract_expressioncontract_path
get_symbolhelpersshared_intermediates)to_cupyto_torch)_einsum)parse_einsum_input)count_cached_opscurrently_sharingget_sharing_cachecupyzCuPy not installed.)reason)markstorchzPyTorch not installed.numpy)z	ab,bc->cazabc,bcd,deazabc,def->fedcbazabc,bcd,df->fazijk,ikjzi,j->ijz	ijk,k->ijz	AB,BC->CAc                     U $ N )xs    ]/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/opt_einsum/tests/test_sharing.py<lambda>r   '   s    q    )r   r   r   eqbackendc                 $   [         R                  " U 5      nU Vs/ s H  o3R                  PM     nn[        U /UQ76 nU" USU06n[	        5          U" USU06nS S S 5        WU:H  R                  5       (       d   eg s  snf ! , (       d  f       N.= f)Nr   )r   build_viewsshaper   r	   all)r   r   viewsvshapesexprexpectedactuals           r   test_sharing_valuer)   -   s     #E$%u!gguF%r+F+DU,G,H		u.g. 
  h##%%%% & 
 	s   A<	B
Bc                 *   Sn[         R                  " U5      n[        U/S U 5       Q76 n[        S5        [        S5        [	        5        nU" USU 06  [        U5      nS S S 5        [        S5        [        S5        [	        5        nU" USU 06  U" USU 06  [        U5      nS S S 5        [        S5        [        SR                  W5      5        [        SR                  W5      5        Xe:X  d   eg ! , (       d  f       N= f! , (       d  f       Nf= f)	N
ab,bc,cd->c              3   8   #    U  H  oR                   v   M     g 7fr   r!   .0r$   s     r   	<genexpr>(test_complete_sharing.<locals>.<genexpr>?        $<eWWe   (----------------------------------------Without sharing:r   With sharing:Without sharing: {} expressionsWith sharing: {} expressionsr   r    r   printr	   r   formatr   r   r#   r&   cacher'   r(   s          r   test_complete_sharingr>   ;   s    	B#Er=$<e$<=D	(O	
		5e%W%#E* 
  
(O	/		5e%W%e%W%!%( 
 
 
(O	
+
2
28
<=	
(
/
/
78 
 	 
 	s   C3D3
D
Dc                 t   Sn[         R                  " U5      n[        U/S U 5       Q76 n[        S5        [        S5        [	        5        nU" USU 06  [        U5      nS S S 5        [        S5        [        S5        [	        5        nU" USU 06  S S S 5        [	        W5         U" USU 06  [        U5      nS S S 5        [        S5        [        SR                  W5      5        [        SR                  W5      5        Xe:X  d   eg ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Nw= f)	Nr+   c              3   8   #    U  H  oR                   v   M     g 7fr   r-   r.   s     r   r0   ,test_sharing_reused_cache.<locals>.<genexpr>X   r2   r3   r4   r5   r   r6   r7   r8   r9   r<   s          r   test_sharing_reused_cacherB   T   s   	B#Er=$<e$<=D	(O	
		5e%W%#E* 
  
(O	/		5e%W% 
 	e	$e%W%!%( 
% 
(O	
+
2
28
<=	
(
/
/
78 
 	 
 		$	$s$   D	D$D)
D
D&)
D7c                    Sn[         R                  " U5      n[        U/S U 5       Q76 n[        S5        [        S5        [	        5        nU" USU 06  [        U5      nUR                  [        U5      5        S S S 5        [        S5        [        S5        [	        5        nU" USU 06  [        U5      nS S S 5        [	        5        nU" USU 06  WR                  [        U5      5        S S S 5        [        S5        [        SR                  W5      5        [        SR                  W5      5        Xu:X  d   eg ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Nw= f)	Nr+   c              3   8   #    U  H  oR                   v   M     g 7fr   r-   r.   s     r   r0   1test_no_sharing_separate_cache.<locals>.<genexpr>r   r2   r3   r4   r5   r   r6   r7   r8   )r   r    r   r:   r	   r   updater;   )	r   r   r#   r&   r=   r'   cache1r(   cache2s	            r   test_no_sharing_separate_cacherI   n   s-   	B#Er=$<e$<=D	(O	
		5e%W%#E*(/0 
 
 
(O	/		6e%W%!&) 
  
	6e%W%&v./ 
  
(O	
+
2
28
<=	
(
/
/
78# 
 	 
 	 
 	s$   .D:"E#E:
E
E
E*c                    ^ ^^^^ / SQm[         R                  " TS   5      nU Vs/ s H  o"R                  PM     snm[        R                  " 5       mU UUU4S jmU UUUU4S jnT" U5        U" U5        g s  snf )N)ab,bc,cd->aab,bc,cd->bab,bc,cd->crM   r   c                 ^  > [        5          [        TS   /TQ76 " U ST06n[        TS   /TQ76 " U ST06n[        SUR                  UR                  5      " XTS9nUTS'   UTS'   AAST;   d   eST;   d   e S S S 5        ST;  d   S5       eST;  d   S5       eW$ ! , (       d  f       N*= f)	Nr   r      za,b->r   wr   zcache leakager	   r   r!   )r#   rQ   r   resultr   eqsrefsr%   s       r   method1%test_sharing_nesting.<locals>.method1   s    !##CF4V4eMWMA#CF4V4eMWMA(!''177CARYZFDIDI1$;;$;; $ $//$// $#s   A-B
B,c                 ^  > [        5          [        TS   /TQ76 " U ST06n[        TS   /TQ76 " U ST06nUTS'   UTS'   [        SUR                  UR                  5      " XTS9nUT" U 5      -   nAAST;   d   eST;   d   e S S S 5        ST;  d   eST;  d   eg ! , (       d  f       N= f)NrO   r      yzzc,d->rP   rR   )	r#   rZ   r[   rS   r   rT   rV   rU   r%   s	       r   method2%test_sharing_nesting.<locals>.method2   s    !##CF4V4eMWMA#CF4V4eMWMADIDI(!''177CARYZFgen,F1$;;$;; $ $$ $#s   A8B
B,)r   r    r!   weakrefWeakValueDictionary)r   r#   r$   r\   rT   rV   rU   r%   s   `   @@@@r   test_sharing_nestingr`      sj    
FCA'E$%u!ggu%F&&(D   ENENA &s   A8c                    [         R                  " U 5      nU Vs/ s H  n[        U   " U5      PM     nn[        U /U-   5      u  pEnUR	                  S5      n[        S5        [        S5        [        5        n[        U /UQ7SU06  [        U5      nS S S 5        [        S5        [        S5        [        5        n[        R                  " [        XB5      5       H[  n	U	 V
s/ s H  oS   PM	     nn
U	 V
s/ s H  oS   PM	     nn
SR                  SR                  U5      U5      n[        U/UQ7SU06  M]     [        U5      nS S S 5        [        S5        [        S	R                  W5      5        [        S
R                  W5      5        X:X  d   eg s  snf ! , (       d  f       GN= fs  sn
f s  sn
f ! , (       d  f       Nv= f)N,r4   r5   r   r6   r      {}->{}r7   r8   )r   r    
to_backendr   splitr:   r	   r   r   	itertoolspermutationszipr;   join)r   r   opsr   inputsoutput_r=   r'   permutedppermuted_inputspermuted_opspermuted_eqr(   s                  r   !test_sharing_modulo_commutativityrt      s    

b
!C+.
/3a:gq!3C
/*B4#:6FA\\#F	(O	
		5*S*'*#E* 
  
(O	/		5!..s6/?@H-56XtXO6*23(QaD(L3"//#((?*CVLKK@,@@	 A
 "%( 
  
(O	
+
2
28
<=	
(
/
/
78/ 0 
 	 73 
 	s<   F9F<'F6#F,1F67F1AF6
F),
F66
Gc                 4   Sn[         R                  " U5      u  p#nSU-  S-
  n[        XR                  UR                  UR                  5      n[	        S5        [	        S5        [        5       n[        5        nU" X#X@S9  UR                  [        U5      5        S S S 5        [        5        nU" X#XPS9  UR                  [        U5      5        S S S 5        [	        S5        [	        S5        [        5        nU" X#X@S9  U" X#XPS9  [        U5      n	S S S 5        [	        S5        [	        SR                  U5      5        [	        S	R                  W	5      5        US
   U	S
   :  d   eg ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N~= f)Nz
ab,bc,de->g       @g      ?r4   r5   rP   r6   r7   r8   einsum)
r   r    r   r!   r:   r   r	   rF   r   r;   )
r   r   r   rZ   z1z2r&   num_exprs_nosharingr=   num_exprs_sharings
             r   test_partial_sharingr{      sV   	B""2&HA"	rCBr77AGGRXX>D	(O	
!)		5Q2'""#3E#:; 
  
	5Q2'""#3E#:; 
  
(O	/		5Q2'Q2',U3 
 
 
(O	
+
2
23F
GH	
(
/
/0A
BCx(+<X+FFFF# 
 	 
 	 
 	s$   9"E'-"E87F	'
E58
F	
Fc           	         SnSnU Vs/ s H  nSR                  X5      PM     nnSnSS1n[        U5       VVs/ s H)  u  pxXv;   a  [        R                  R                  " U6 OUPM+     n	nn[        R                  R                  " US   6 n
U Vs/ s H  n[        U/UQ76 " U	S   XS   5      PM     nn[        5          U Vs/ s H  n[        U/U	Q7SU06" U
5      PM     nnS S S 5        [        X,W5       H8  u  pn[        R                  " UU5      (       a  M$   S	R                  U5      5       e   g s  snf s  snnf s  snf s  snf ! , (       d  f       Nl= f)
Nzij,jk,klijklrd   ))rO   rY   )rY      )r~      r   rO   rc   	constantszerror at {})	r;   	enumeratenprandomrandr   r	   ri   allclose)r   rl   outputsrm   	equationsr%   r   ishprk   varr   r'   r(   dimexpected_dim
actual_dims                    r   test_sharing_with_constantsr      sH   FG?FGwV0wIG#FAIIRSYIZ
[IZvq1>299>>3s:IZC
[
))..&)
$CPYZPY"#B00Q!fEPYHZ		T]^T]b%bD3D)DSIT]^ 
  *-W)G%:{{<44Om6J6J36OO4 *H H \ [ _ 
 	s.   D70D<#E EE$EE
Esize)rY   r~   r   c                    [        U 5       Vs/ s H#  n[        R                  R                  SS5      PM%     nnU Vs/ s H  oDR                  PM     nnSR                  S [        U S-   5       5       5      n[        U 5       Vs/ s H	  ovXwS-    PM     nnSR                  U5      n	[        5          [        U	5        [        U S-   5       HF  nXg   n
SR                  X5      n[        U/UQ76 n[        US   5        [        U/UQ76 nU" USU06  MH     [        S5        S S S 5        g s  snf s  snf s  snf ! , (       d  f       g = f)	NrO    c              3   8   #    U  H  n[        U5      v   M     g 7fr   r   r/   r   s     r   r0   test_chain.<locals>.<genexpr>       >oz!}}or3   rc   rb   rd   r   r4   ranger   r   r   r!   rj   r	   r:   r;   r   r   r   r   rn   xsr   r%   alphabetr   namesrl   targetr   	path_infor&   s                 r   
test_chainr      s    ).d	41"))..A
B	4!"r!ggrF"ww>eD1Ho>>H(-d41aAE4XXe_F		ftaxA[F0B%b.2.I)A,&r3F3D"&g& ! 	h 
 	 
5"4 
 	   *D+D0D53A/D::
E)rY   r~   r   
   c                    [        U 5       Vs/ s H#  n[        R                  R                  SS5      PM%     nnU Vs/ s H  oDR                  PM     nnSR                  S [        U S-   5       5       5      n[        U 5       Vs/ s H	  ovXwS-    PM     nnSR                  U5      n	[        5          [        U	5        [        U 5       HI  nXgUS-    n
SR                  X5      n[        U/UQ76 n[        US   5        [        U/UQ76 nU" USU06  MK     [        S5        S S S 5        g s  snf s  snf s  snf ! , (       d  f       g = f)	NrO   r   c              3   8   #    U  H  n[        U5      v   M     g 7fr   r   r   s     r   r0   test_chain_2.<locals>.<genexpr>  r   r3   rc   rb   rd   r   r4   r   r   s                 r   test_chain_2r     s    ).d	41"))..A
B	4!"r!ggrF"ww>eD1Ho>>H(-d41aAE4XXe_F		ftAA&F0B%b.2.I)A,&r3F3D"&g&  	h 
 	 
5"4 
 	r   c                 .    [        U 5      nUS   US   -   $ )Nrv   	tensordot)r   )r=   countss     r   _compute_costr   *  s!    e$F(f[111r   c                 h   [        [        SS5      5      n/ nU GH  n[        U5       Vs/ s H#  n[        R                  R	                  SS5      PM%     nnSR                  S [        US-   5       5       5      n[        U5       Vs/ s H	  ovXwS-    PM     nnSR                  U5      n	[        5        n
[        U5       H6  nXgUS-    nSR                  X5      n[        U/S U 5       Q76 nU" US	U 06  M8     UR                  [        U
5      5        S S S 5        GM     [        S
R                  [        U5      5      5        [        SR                  [        U5      5      5        [        X5       H  u  p>[        SR                  X>5      5        M!     g s  snf s  snf ! , (       d  f       GM  = f)Nrc      rO   r   c              3   8   #    U  H  n[        U5      v   M     g 7fr   r   r   s     r   r0   &test_chain_2_growth.<locals>.<genexpr>5  s     B/Q:a==/r3   rb   rd   c              3   8   #    U  H  oR                   v   M     g 7fr   r-   r/   r   s     r   r0   r   =  s     0E"Q"r3   r   z
sizes = {}z
costs = {}z{}	{})listr   r   r   r   rj   r	   r;   r   appendr   r:   reprri   )r   sizescostsr   rn   r   r   r   r   rl   r=   r   r   r&   costs                  r   test_chain_2_growthr   /  sb   q"EE,1$K8KqbiinnQ"K877B%q/BB,1$K8Kq!E"K8%!#u4[!AE*__V4*2F0E"0EFb*'*	 !
 LLu-. $#  
,

d5k
*+	,

d5k
*+%'
hood)* ( 98 $#s   *FF5A F!!
F1	c                    [        U 5       Vs/ s H#  n[        R                  R                  SS5      PM%     nnSR	                  S [        U S-   5       5       5      n[        U 5       Vs/ s H	  oTXUS-    PM     nnSR	                  U5      nSn[        U S-   5       HT  n[        5        n	XE   n
SR                  Xz5      n[        U/S U 5       Q76 nU" US	U06  U[        U	5      -  nS S S 5        MV     [        5        n	[        U5        [        U S-   5       HM  nXE   n
SR                  Xz5      n[        U/UQ76 n[        US   5        [        U/S
 U 5       Q76 nU" US	U06  MO     [        U	5      nS S S 5        [        S5        [        SR                  U5      5        [        SR                  W5      5        X:  d   eg s  snf s  snf ! , (       d  f       GMA  = f! , (       d  f       Nr= f)NrO   r   c              3   8   #    U  H  n[        U5      v   M     g 7fr   r   r   s     r   r0   %test_chain_sharing.<locals>.<genexpr>K  r   r3   rc   rb   r   rd   c              3   8   #    U  H  oR                   v   M     g 7fr   r-   r   s     r   r0   r   T       ,AbWWbr3   r   c              3   8   #    U  H  oR                   v   M     g 7fr   r-   r   s     r   r0   r   _  r   r3   r4   r7   r8   )r   r   r   r   rj   r	   r;   r   r   r:   r   )r   r   rn   r   r   r   r   rl   ry   r=   r   r   r&   r   rz   s                  r   test_chain_sharingr   G  s    ).d	41"))..A
B	4ww>eD1Ho>>H(-d41aAE4XXe_F4!8_!#u[F0B&rB,Ab,ABD"&g&=#77 $#  
	5ftaxA[F0B%b.2.I)A,&rB,Ab,ABD"&g& ! *%0 
  
(O	
+
2
23F
GH	
(
/
/0A
BC2229 
54
 $# 
 	s$   *G+G
+?G A6G"
G	"
G0c                  0   SSK Jn   S nU" 5       nU " S5      n[        S5       Vs/ s H  oCR                  U5      PM     nn[	        5       (       a   eU Vs/ s H  ofR                  5       PM     snU/S-  :X  d   eUR                  5         g s  snf s  snf )Nr   )
ThreadPoolc                      [         R                  " S5      u  pn[        5          [        SXU5        [        SXU5        [	        [        5       5      sS S S 5        $ ! , (       d  f       g = f)Nzab,bc,cdrK   rL   )r   r    r	   r   lenr   )XYZs      r   fn&test_multithreaded_sharing.<locals>.fnl  sL    %%j1a!#]A!,]A!,(*+	 $##s   -A
A)      )multiprocessing.poolr   r   apply_asyncr   getclose)r   r   r'   poolrn   fsfs          r   test_multithreaded_sharingr   i  s    /, tHa=D(-b		2	1

2
	B	2 """" REEGR XJO333JJL 
3 s   BB)3rg   r^   collectionsr   r   r   pytest
opt_einsumr   r   r   r   r   r	   opt_einsum.backendsr
   r   opt_einsum.contractr   opt_einsum.parserr   opt_einsum.sharingr   r   r   r   cupy_if_foundImportErrorparammarkskipr   torch_if_foundbackendsr   re   parametrizer)   r>   rB   rI   r`   rt   r{   r   r   r   r   r   r   r   r   r   r   <module>r      s'        p p 1 ' 0 W WaMfN ^]3
	 
 y)H-	& . *	& H- .0 H- .2 H- .6 H-# .#L y)H- . *8 H-G .G: H-P .P$ +H- . ,& /H- . 0&2
 H-+ .+. +H-3 . ,3@q
  aLL0@0@H]0@0^/_`Ma  f\\'&++2B2BJb2B2c1deNfs$   J# K #/KK/LL