
    ,Vh<                        d dl mZ d dlZd dlmZmZmZmZ d dlm	Z	m
Z
mZ d dlmZ 	 	 d dlmZ d dlmZ  e       Zdej*                  _        g d	Zej0                  j3                  d
e      d
eddfd       Zej0                  j3                  dd dhd dhddhg      dee   ddfd       Zej0                  j3                  d
e      d
eddfd       Zej0                  j3                  d
e      d
eddfd       Zej0                  j3                  dd dhd dhddhg      dee   ddfd       Z ej0                  j3                  d
e      d
eddfd       Z!ej0                  j3                  d
e      d
eddfd       Z"ej0                  j3                  dd dhd dhddhg      dee   ddfd       Z#ej0                  j3                  d
e      d
eddfd       Z$ej0                  j3                  dd dhd dhddhg      dee   ddfd       Z%d!dZ&d!dZ'ej0                  j3                  d
e      d
eddfd       Z(ej0                  j3                  d
e      d
eddfd       Z)ej0                  j3                  d
e      d
eddfd       Z*ej0                  j3                  dd dhd dhddhg      dee   ddfd       Z+d!dZ,ej0                  j3                  d
e      d
eddfd        Z-y# e$ r d dlmZ d dlmZ Y w xY w# e$ r Y w xY w)"    )SetN)backendscontractcontract_expressionsharingArrayShapedinfer_backendparse_backend)build_views)ConfigProto)SessionT)z	ab,bc->cazabc,bcd,deazabc,def->fedcbazabc,bcd,df->fazijk,ikjzi,j->ijz	ijk,k->ijz	AB,BC->CAstringreturnc                 &   t        j                  d      }t        j                  d       t        |       }t        | g|ddd}|j	                  |      }|D cg c]  }|j
                   }}t        | g|ddi}t        t              }|j                         5   ||d|d d d d        |j                          |j                  ||      sJ |D 	cg c]  }	t        j                  |	       }
}	 ||
  y c c}w # 1 sw Y   ZxY wc c}	w )	Nnumpy
tensorflowFoptimizeuse_blasr   Tconfig)backendout)pytestimportorskipr   r   
empty_likeshaper   	TFSession
_TF_CONFIG
as_defaultcloseallcloser   to_tensorflow)r   npviewseinoptvshpsexprsessviewtensorflow_viewss              N/home/dcms/DCMS/lib/python3.12/site-packages/opt_einsum/tests/test_backends.pytest_tensorflowr0   $   s   			W	%B
%E
6
BE
BEE
BC
--
C"#AGG#D#v<<t<DJ'D		 4e\s34JJL;;sC    BGG..t4GG
 $4 4 Hs   C=
DDD	constants      c                     t        j                  d      }t        j                  d      }d}d}h d z
  \  }t        |      D cg c]$  \  }}| v r |j                  j                  | n|& c}} |j                  j                  ||    t        |g fdt        d      D         }t        |gd i}	t        t        	      j                         5   |	d
      }
d d d        t        d |	j                  d   D              sJ |j                  |
      sJ  |	d
      }|j                  ||      sJ  |	t        j                              }t!        ||j"                        sJ y c c}}w # 1 sw Y   xY w)Nr   r   ij,jk,kl->lir3      r8      )r:         r   r2   r3   c              3   4   K   | ]  }|v r|   n  y wN .0ir1   opsvars     r/   	<genexpr>z1test_tensorflow_with_constants.<locals>.<genexpr>F         Q1qI~SV3>Q   r8   r1   r   r   c              3   D   K   | ]  }|d u xs t        |      dk(    y w)Nr   r
   rA   arrays     r/   rE   z1test_tensorflow_with_constants.<locals>.<genexpr>M   s+      BG=u-==    )r   r   	enumeraterandomrandr   ranger   r   r    r!   all_evaluated_constantsr#   r   r$   
isinstanceTensor)r1   r%   tfeqshapes	non_constrB   shpres_expr+   res_gotres_got2res_got3rC   rD   s   `            @@r/   test_tensorflow_with_constantsr_   <   s{   			W	%B			\	*B	B#Fy(LYIRSYIZ
[vq#1	>>299>>3s:
[C
"))..&+
,CrRQaQRGr=C=9=D 
*	%	0	0	2 2sL12 KOKdKdeqKr    ;;w((( C)H;;w))) H**3/0Hh		***) \2 2s   	)E9E??Fc                    t        j                  d      }t        j                  d      t        |       }t        | g|ddd}|D cg c]  }|j                   }}t        | g|ddi}t        t              }|j                         5  t        j                         5 } ||ddi}	t        j                         |u sJ t        |      }
|
d	kD  sJ  ||ddi}t        |      |
k(  sJ 	 d d d        d d d        t        fd
j                         D              sJ |j                  |	      sJ |j                  |      sJ y c c}w # 1 sw Y   cxY w# 1 sw Y   gxY w)Nr   r   Fr   r   Tr   r   r   c              3   J   K   | ]  }t        |j                          y wr>   )rT   rU   )rA   trV   s     r/   rE   z/test_tensorflow_with_sharing.<locals>.<genexpr>p   s     @Az!RYY'@s    #)r   r   r   r   r   r   r   r    r!   r   shared_intermediatesget_sharing_cachelenrR   valuesr#   )r   r%   r&   r'   r)   r*   r+   r,   cachetfl1cache_sztfl2rV   s               @r/   test_tensorflow_with_sharingrk   [   s^   			W	%B			\	*BE
6
BE
BEE
BC"#AGG#D#v<<t<DJ'D		 &G88: &eU1L1((*e333u:!||U1L15zX%%%& & @@@@@;;sD!!!;;sD!!!! $
& & & &s+   EE$AE0EE	EE'c                    t        j                  d      }t        j                  d      }t        |       }t        | g|ddd}|D cg c]  }|j                   }}t        | g|ddi} ||ddi}|j                  ||      sJ |D 	cg c]  }	t        j                  |	       }
}	 ||
 }t        ||j                  j                        sJ y c c}w c c}	w )Nr   theanoFr   r   Tr   )r   r   r   r   r   r   r#   r   	to_theanorT   tensorTensorVariable)r   r%   rm   r&   r'   r)   r*   r+   r(   r-   theano_views
theano_opts               r/   test_theanors   v   s    			W	%B  *FE
6
BE
BEE
BC"#AGG#D#v<<t<D

(x
(C;;sC    :??H&&t,?L?|$Jj&--">">??? $ @s   
CCc                     t        j                  d      }t        j                  d      }d}d}h d z
  \  }t        |      D cg c]$  \  }}| v r |j                  j                  | n|& c}} |j                  j                  ||    t        |g fdt        d      D         }t        |gd i}	 |	d	      }
t        d
 |	j                  d   D              sJ |j                  ||
      sJ  |	d	      }|j                  ||      sJ  |	t        j                              }t        ||j                  j                        sJ y c c}}w )Nr   rm   r5   r6   r<   c              3   4   K   | ]  }|v r|   n  y wr>   r?   r@   s     r/   rE   z-test_theano_with_constants.<locals>.<genexpr>   rF   rG   r8   r1   rH   c              3   D   K   | ]  }|d u xs t        |      dk(    y w)Nrm   rJ   rK   s     r/   rE   z-test_theano_with_constants.<locals>.<genexpr>   s&     rUu}@e 4 @@rrM   )r   r   rN   rO   rP   r   rQ   r   rR   rS   r#   r   rn   rT   ro   rp   )r1   r%   rm   rW   rX   rY   rB   rZ   r[   r+   r\   r]   r^   rC   rD   s   `            @@r/   test_theano_with_constantsrw      sN   			W	%B  *F	B#Fy(LYIRSYIZ
[vq#1	>>299>>3s:
[C
"))..&+
,CrRQaQRGr=C=9=D 3)GrdNgNghpNqrrrr;;w((( C)H;;w))) H&&s+,Hh < <===# \s   	)Ec                 j   t        j                  d      }t        j                  d      t        |       }t        | g|ddd}|D cg c]  }|j                   }}t        | g|ddi}t        j                         5 } ||ddi}t        j                         |u sJ t        |      }	|	dkD  sJ  ||ddi}
t        |      |	k(  sJ 	 d d d        t        fd	j                         D              sJ |j                  |      sJ |j                  |
      sJ y c c}w # 1 sw Y   [xY w)
Nr   rm   Fr   r   Tr   r   c              3   ^   K   | ]$  }t        |j                  j                         & y wr>   )rT   ro   rp   )rA   rb   rm   s     r/   rE   z+test_theano_with_sharing.<locals>.<genexpr>   s"     Sqz!V]]99:Ss   *-)r   r   r   r   r   r   r   rc   rd   re   rR   rf   r#   )r   r%   r&   r'   r)   r*   r+   rg   thn1ri   thn2rm   s              @r/   test_theano_with_sharingr|      s6   			W	%B  *FE
6
BE
BEE
BC"#AGG#D#v<<t<D		%	%	' &5U-H-((*e333u:!||U-H-5zX%%%& SELLNSSSS;;sD!!!;;sD!!! $& &s   D$AD))D2c                    t        j                  d      }t        j                  d      }t        |       }t        | g|ddd}|D cg c]  }|j                   }}t        | g|ddi} ||ddi}|j                  ||      sJ |D 	cg c]  }	t        j                  |	       }
}	 ||
 }t        ||j                        sJ |j                  ||j                  |            sJ y c c}w c c}	w )Nr   cupyFr   r   Tr   )r   r   r   r   r   r   r#   r   to_cupyrT   ndarrayasnumpy)r   r%   r~   r&   r'   r)   r*   r+   r(   r-   
cupy_viewscupy_opts               r/   	test_cupyr      s    			W	%Bv&DE
6
BE
BEE
BC"#AGG#D#v<<t<D

&v
&C;;sC    6;;T(""4(;J;Z Hh---;;sDLL2333 $ <s   
C-C2c                     t        j                  d      }t        j                  d      }d}d}h d z
  \  }t        |      D cg c]$  \  }}| v r |j                  j                  | n|& c}} |j                  j                  ||    t        |g fdt        d      D         }t        |gd i}	 |	d	      }
t        d
 |	j                  d   D              sJ |j                  ||
      sJ  |	d	      }|j                  ||      sJ  |	|j                              }t        ||j                        sJ |j                  ||j                               sJ y c c}}w )Nr   r~   r5   r6   r<   c              3   4   K   | ]  }|v r|   n  y wr>   r?   r@   s     r/   rE   z+test_cupy_with_constants.<locals>.<genexpr>   rF   rG   r8   r1   rH   c              3   D   K   | ]  }|d u xs t        |      dk(    y w)Nr~   rJ   rK   s     r/   rE   z+test_cupy_with_constants.<locals>.<genexpr>   s&     n5u}>e 4 >>nrM   )r   r   rN   rO   rP   r   rQ   r   rR   rS   r#   asarrayrT   r   get)r1   r%   r~   rW   rX   rY   rB   rZ   r[   r+   r\   r]   r^   rC   rD   s   `            @@r/   test_cupy_with_constantsr      s`   			W	%Bv&D	B#Fy(LYIRSYIZ
[vq#1	>>299>>3s:
[C
"))..&+
,CrRQaQRGr=C=9=D 3'GnDLeLeflLmnnnn;;w((( C)H;;w))) DLL%&Hh---;;w///' \s   	)E0c                 P   t        j                  d      }t        j                  d       t        |       }t        | g|ddd}|D cg c]  }|j                   }}t        | g|ddi} ||ddi}|j                  ||      sJ t        ||j                        sJ y c c}w )Nr   jaxFr   r   Tr   )	r   r   r   r   r   r   r#   rT   r   )r   r%   r&   r'   r)   r*   r+   r(   s           r/   test_jaxr      s    			W	%B
E
6
BE
BEE
BC"#AGG#D#v<<t<D

%u
%C;;sC   c2::&&& $s   
B#c                 v    t        j                  d      }|j                  j                  d      }d}d}h d z
  \  }t	        |      D cg c]'  \  }}| v r|j                  j                  ||      n|) c}}|j                  j                  |||         t        |g fdt        d      D         }t        |gd i}	 |	d	      }
t        d
 |	j                  d   D              sJ |j                  j                  |j                  j                  ||
z
              dk  sJ y c c}}w )Nr   *   r5   r6   r<   c              3   4   K   | ]  }|v r|   n  y wr>   r?   r@   s     r/   rE   z*test_jax_with_constants.<locals>.<genexpr>  rF   rG   r8   r1   rH   c              3   \   K   | ]$  }|d u xs t        |      j                  d       & y w)Nr   )r
   
startswithrK   s     r/   rE   z*test_jax_with_constants.<locals>.<genexpr>  s,     u5u}Fe 4 ? ? FFus   *,g:0yE>)r   r   rO   PRNGKeyrN   uniformr   rQ   r   rR   rS   r   sumabs)r1   r   keyrW   rX   rY   rB   rZ   r[   r+   r\   rC   rD   s   `          @@r/   test_jax_with_constantsr     s   


e
$C
**

R
 C	B#Fy(LYQZ[aQb
cvq#1	>3::c3'sB
cC
**

S&"3
4CrRQaQRGr=C=9=D 3&GuTXTmTmnsTtuuuu99==w'89:TAAA ds   ,D5c                     t        j                  d      } | j                  j                  d      }d}d}|D cg c]  }| j                  j	                  ||        }}t        |g|  | }| j                        } || j                         }|t        j                  |d      k(  sJ | j                  | j                  fd            }	 |	|      }
t        d t        ||
      D              sJ t        ||
      D cg c]  \  }}|d	|z  z
   }}} || j                         }||k  sJ y c c}w c c}}w )
Nr   r   
ij,jk,kl->r7   r9   )r:   r3   gh㈵>)relc                      |  S r>   r?   r&   r+   s    r/   <lambda>z'test_jax_jit_gradient.<locals>.<lambda>&  s    tU|     c              3   T   K   | ]   \  }}|j                   |j                   k(   " y wr>   r   rA   v1v2s      r/   rE   z(test_jax_jit_gradient.<locals>.<genexpr>(  !     IBrxx288#I   &(MbP?)r   r   rO   r   r   r   jititemapproxgradrR   zip)r   r   rW   rX   sr&   x0jit_exprx1	grad_expr
view_gradsr)   dv	new_viewsx2r+   s                  @r/   test_jax_jit_gradientr     s6   


e
$C
**

R
 C	B#F178ASZZQ'8E8r+F+D	uBwwt}H	5				 Brt,,,, !;<=I5!JI#eZ2HIIII .1
-CDEArURZDID	9		"	"	$B7N7! 9 Es   #D8D=c                     t        j                  d      } t        j                  d      }d}d}|D cg c]  } | j                  j                  |  }}t	        |g|  | }|j                  fd      } ||      }t        d t        ||      D              sJ t        ||      D 	
cg c]  \  }	}
|	d|
z  z
   }}	}
 | }||k  sJ y c c}w c c}
}	w )Nr   autogradr   r   c                      |  S r>   r?   r   s    r/   r   z(test_autograd_gradient.<locals>.<lambda>;  s    D%L r   c              3   T   K   | ]   \  }}|j                   |j                   k(   " y wr>   r   r   s      r/   rE   z)test_autograd_gradient.<locals>.<genexpr>=  r   r   r   )r   r   rO   randnr   r   rR   r   )r%   r   rW   rX   r   r&   r   r   r   r)   r   r   r   r+   s                @r/   test_autograd_gradientr   0  s    			W	%B"":.H	B#F*01Q_RYY__a 1E1r+F+D	uB 89I5!JI#eZ2HIIII .1
-CDEArURZDID	y	B7N7 2 Es    C0Cc                 @   t        j                  d      }t        j                  d      }t        |       }t        | g|ddd}|D cg c]  }|j                   }}t        | g|ddi}|D cg c]  }|j                  |d       }	} ||	 }
t        |
|j                        sJ |j                  ||j                  |
            sJ t        | g|	 }
t        |
|j                        sJ |j                  ||j                  |
            sJ y c c}w c c}w )	Nr   z
dask.arrayFr   r   Tr3   )chunks)r   r   r   r   r   r   
from_arrayrT   Arrayr#   rL   )r   r%   dar&   r'   r)   r*   r+   xda_viewsda_opts              r/   	test_daskr   E  s   			W	%B			\	*BE
6
BE
BEE
BC"#AGG#D#v<<t<D 7<<a,<H<8_F fbhh''';;sBHHV,--- f(x(Ffbhh''';;sBHHV,--- $ =s   
D2Dc                 @   t        j                  d      }t        j                  d      }t        |       }|D ]N  }|j                  j	                  d       |j                  j                  ddg|j                  dddg      }d||<   P t        | g|ddd	}|D cg c]  }|j                   }}t        | g|d
di}	|D 
cg c]  }
|j                  j                  |
       }}
 |	| }|j                  st        j                  |      dk(  sJ y t        ||j                        sJ |j                  ||j                               sJ t        | g| }t        ||j                        sJ |j                  ||j                               sJ y c c}w c c}
w )Nr   sparser   FTg?gffffff?r   r   r   g        )r   r   r   rO   seedchoicer   r   r   COO
from_numpyr   rT   r#   todense)r   r%   r   r&   r-   maskr'   r)   r*   r+   r   sparse_views
sparse_opts                r/   test_sparser   ^  s   			W	%B  *FE  
		ryytzz4$NT

 6
BE
BEE
BC"#AGG#D#v<<t<D 7<<FJJ))!,<L<|$J 99}}S!S((( j&**---;;sJ..0111 &0<0Jj&**---;;sJ..0111' $ =s   F"Fc                    t        j                  d      }t        | |j                        } |j                  | g| }|D cg c]  }|j
                   }}t        | g|ddi} ||ddi}|j                  j                  ||       |D cg c]  }t        j                  |       }	} ||	 }
t        |
|j                        sJ |j                  j                  ||
       y c c}w c c}w )Ntorch)array_functionr   Tr   )r   r   r   rP   einsumr   r   testingassert_closer   to_torchrT   rU   )r   r   r&   r'   r)   r*   r+   r(   r-   torch_views	torch_opts              r/   
test_torchr     s    (Euzz:E
%,,v
&
&C"#AGG#D#v<<t<D

'w
'C	MMsC( 8==t8$$T*=K=k"Ii...	MMsI. $ >s   C(C-c                     t        j                  d      }d}d}h d z
  \  }t        |      D cg c]  \  }}| v r |j                  | n| c}} |j                  ||    t	        |g fdt        d      D        ddi}t        |gd i} |d	      }	t        d
 |j                  d   D              sJ |j                  j                  ||	        |d	      }
|j                  j                  ||
        |t        j                              }t        ||j                        sJ |j                  j                  ||       y c c}}w )Nr   r5   r6   r<   c              3   4   K   | ]  }|v r|   n  y wr>   r?   r@   s     r/   rE   z,test_torch_with_constants.<locals>.<genexpr>  rF   rG   r8   r   r1   rH   c              3   D   K   | ]  }|d u xs t        |      dk(    y w)Nr   rJ   rK   s     r/   rE   z,test_torch_with_constants.<locals>.<genexpr>  s&     pEu}?e 4 ??prM   )r   r   rN   rP   r   rQ   r   rR   rS   r   r   r   r   rT   rU   )r1   r   rW   rX   rY   rB   rZ   r[   r+   r\   r]   r^   rC   rD   s   `           @@r/   test_torch_with_constantsr     sI   (E	B#Fy(LYENvEV
W61cqI~:5::s36
WC
%**fY'
(CrcQaQc[bcGr=C=9=D 3(GpTMfMfgnMopppp	MMw0 C)H	MMw1 H%%c*+Hh---	MMw1% Xs   Ec                      t        d      } t        |       dk(  sJ t        | gd      dk(  sJ t        | gd       dk(  sJ y )N)r2   r3   r8   
opt_einsumautor   r   )r   s    r/   +test_auto_backend_custom_array_no_tensordotr     sM    IA|+++!f%000!d#w...r   c                 T   t        j                  d      }t        |       }t        | g|ddd}|j                  t
        k7  sJ |D cg c]  }|j                   }}t        | g|ddi}|D cg c]  }|j                  t
               }}t        | g|ddi}	|	j                  t
        k(  sJ |j                  ||	j                  t                    sJ  ||ddi}	|	j                  t
        k(  sJ |j                  ||	j                  t                    sJ y c c}w c c}w )Nr   Fr   r   Tr   object)r   r   r   r   dtyper   r   r   astyper#   float)
r   r%   r&   r'   r)   r*   r+   r-   	obj_viewsobj_opts
             r/   test_object_arrays_backendr     s   			W	%BE
6
BE
BEE
BC99"#AGG#D#v<<t<D167V$7I7 v<	<8<G==F""";;sGNN51222 I0x0G==F""";;sGNN51222 $ 8s   
D 2D%)r   N).typingr   r   r   r   r   r   r   opt_einsum.contractr	   r
   r   opt_einsum.testingr   r   r   r   r   ImportErrortensorflow.compat.v1r    gpu_optionsallow_growthtestsmarkparametrizestrr0   intr_   rk   rs   rw   r|   r   r   r   r   r   r   r   r   r   r   r   r   r?   r   r/   <module>r      s     G G I I *	>*3 J*.J'

	 5)C D  *. 1v1v1v&>?+c#h +4 + @+< 5)" " " *"4 5)@ @ @ *@& 1v1v1v&>?>#c( >t > @>6 5)"S "T " *"0 5)4c 4d 4 *4( 1v1v1v&>?0C 0T 0 @0: 5)'S 'T ' *' 1v1v1v&>?Bs3x BD B @B(2* 5).c .d . *.0 5) 2  2  2 * 2F 5)/s /t / */& 1v1v1v&>?2S 2d 2 @26/ 5)3s 3t 3 *3[  >4==>
  		s.   K# K; #K84K; 7K88K; ;LL