
    shT=                       S SK Jr  S SKJr  S SK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JrJrJrJr  S SKJr  S S	KJr  S S
KJr  S SKJr  S SKJr  S SKJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'J(r(J)r)J*r*J+r+J,r,J-r-J.r.J/r/J0r0J1r1J2r2J3r3J4r4J5r5  S SK6J7r7J8r8J9r9  S SK:J;r;  S r<S r=S r>S r?S r@S rAS rBS rCS rDS rES rFS rGS rHS rIS rJS rKS  rLS! rMS" rNS# rOS$ rPS% rQS& rRS' rSS( rTS) rU\8S* 5       rVS+ rWS, rXS- rYS. rZS/ r[S0 r\S1 r]S2 r^S3 r_S4 r`S5 raS6 rbS7 rcS8 rdS9 reS: rfS; rgS< rhS= riS> rjS? rkS@ rlSA rmSB rnSC roSD rpSE rqSF rrSG rsSH rtSI ruSJ rvSK rwSL rxSM rySN rzSO r{SP r|SQ r}SR r~SS rST rSU rSV rgW)X    )Sum)expand)Integer)Matrixeye)Indexed)Permutation)SRationalSymbolBasicAddWildFunction)Tuple)symbols)sqrt)	integrate)Array)TensorIndexTypetensor_indicesTensorSymmetryget_symmetric_group_sgsTensorIndex
tensor_mulTensAddriemann_cyclic_replaceriemann_cyclicTensMultensor_headsTensorManagerTensExpr
TensorHeadcanon_bp
tensorheadtensorsymmetry
TensorTypesubstitute_indicesWildTensorIndexWildTensorHead_WildTensExpr)raisesXFAILwarns_deprecated_sympy)diagc                     [        U [        5      (       a  U R                  U5      $ [        U[        5      (       a  UR                  U 5      $ X:H  $ N)
isinstancer"   equals)arg1arg2s     r/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/sympy/tensor/tests/test_tensor.py	_is_equalr7      sB    $!!{{4  	D(	#	#{{4  <    c                  R   [        SSS9n [        SU 5      u  pp4[        SU /[        R                  " S5      5      u  pVU" U* 5      U" U5      -  nUR                  5       n[        U5      S:X  d   eU" U5      U" U5      -  nUR                  5       nX:X  d   eU" U5      U" U5      -  n	U	R                  5       n[        U5      S:X  d   e[        S	U /S
-  [        R                  " S
5      5      nU" X#* 5      U" X15      -  nUR                  5       n[        U5      S:X  d   e[        SU /[        R                  " S5      5      u  pjU" XC* 5      U" U5      -  U
" U* 5      -  nUR                  5       n[        U5      S:X  d   e[        S	U /S
-  [        R                  " S
5      5      nU" XC* 5      U" U5      -  U
" U* 5      -  nUR                  5       n[        U5      S:X  d   e[        SU /S
-  [        R                  " S
5      5      nU" XC* 5      U" U* U5      -  nUR                  5       n[        U5      S:X  d   eU" U* U5      U" U* U5      -  nUR                  5       n[        U5      S:X  d   e[        SU /S
-  [        R                  " S
5      5      n
U" XC5      U" U* U* 5      -  U
" U* U* 5      -  nUR                  5       n[        U5      S:X  d   e[        S	U /S
-  [        R                  " S
5      5      nU" XC5      U" U* U* 5      -  U
" U* U* 5      -  nUR                  5       n[        U5      S:X  d   e[        SU /S
-  [        R                  " S
5      5      n
U" XC5      U" U* U* 5      -  U
" U* U* 5      -  nUR                  5       n[        U5      S:X  d   eg )NLorentzL
dummy_namez	a,b,d0,d1A,B   zA(L_0)*B(-L_0)z	A(a)*B(b)A   zA(a, L_0)*A(b, -L_0)zB,CzA(L_0, L_1)*B(-L_0)*C(-L_1)zA(L_0, L_1)*B(-L_1)*C(-L_0)BzA(L_0, L_1)*B(-L_0, -L_1)zA(L_0, L_1)*B(-L_1, -L_0)Cz#A(L_0, L_1)*B(-a, -L_1)*C(-L_0, -b)z#A(L_0, L_1)*B(-a, -L_0)*C(-L_1, -b)z#A(L_0, L_1)*B(-a, -L_0)*C(-b, -L_1))	r   r   r    r   no_symmetryr$   strr#   fully_symmetric)r:   abd0d1r@   rB   ttct1rC   s              r6   test_canonicalize_no_slot_symrN      s   iC8G!+w7LA"y.*D*DQ*GHDA	2#quA	
Br7&&&& 	
!QqT	A	
B7N7	
1adB	Br7k!!! 	3	!^%C%CA%FGA	!S	!B(A	
Br7,,,, y.*D*DQ*GHDA	"c
1R5B3A	
Br73333
 	3	!^%?%?%BCA	"c
1R5B3A	
Br73333
 	3	!^%?%?%BCA	"c
1bS":A	
Br71111 	
2#r
1bS":A	
Br71111
 	3	!^%?%?%BCA	"	!QB*QsQBZ'A	
Br7;;;;
 	3	!^%C%CA%FGA	"	!QB*QsQBZ'A	
Br7;;;;
 	3	!^%C%CA%FGA	"	!QB*QsQBZ'A	
Br7;;;;r8   c                  n   [        SSS9n [        SU 5      u  pp4[        SU /[        R                  " S5      5      nU" U5      U" U5      -  U" U5      -  nUR                  5       n[        U5      S:X  d   e[        SU /[        R                  " S5      S5      nU" U5      U" U5      -  U" U5      -  nUR                  5       n[        U5      S:X  d   e[        SU /S	-  [        R                  " S	5      5      nU" X$5      U" X15      -  nUR                  5       n[        U5      S
:X  d   e[        SU /S	-  [        R                  " S	5      S5      nU" X$5      U" X15      -  nUR                  5       n[        U5      S:X  d   eU" X15      U" X$5      -  nUR                  5       n[        U5      S
:X  d   eg )Nr:   r;   r<   
a, b, c, dr@   r?   zA(a)*A(b)*A(c)z-A(a)*A(b)*A(c)rA   zA(a, c)*A(b, d)z-A(a, c)*A(b, d))r   r   r#   r   rD   r$   rE   rF   )r:   rG   rH   cdr@   rK   rL   s           r6   test_canonicalize_no_dummiesrS   l   s   iC8Gg6JA!
 	3	>#=#=a#@AA	!QqT	!A$A	
Br7&&&&
 	3	>#=#=a#@!DA	!QqT	!A$A	
Br7''''
 	3	!^%C%CA%FGA	!!A	
Br7''''
 	3	!^%C%CA%FJA	!!A	
Br7(((( 	
!!A	
Br7''''r8   c                      [        S5      n [        SX /5      n[        SX /[        R                  " S5      5      nX:X  d   e[        SX /[        R                  " S5      5      nX:w  d   eg )Nr:   r@   rA   )r   r#   r   rD   rF   )r;   A1A2A3s       r6   -test_tensorhead_construction_without_symmetryrX      sb    	"A	C!	 B	C!!;!;A!>	?B8O8	C!!?!?!B	CB8O8r8   c                  
   [        SSSS9n [        SU 5      u  pp4[        SU /S-  [        R                  " S5      5      nU" X!* 5      U" X* 5      -  nUR                  5       n[        U5      S:X  d   eU" X#* 5      U" X* 5      -  U" X2* 5      -  U" XA* 5      -  nUR                  5       n[        U5      S	:X  d   eU" X* 5      U" X#* 5      -  U" X4* 5      -  U" XA* 5      -  nUR                  5       n[        U5      S
:X  d   eg )Nr:   r;   r   r=   metric_symmetryzd:4r@   rA   zA(L_0, -L_1)*A(L_1, -L_0)z3A(L_0, -L_1)*A(L_1, -L_0)*A(L_2, -L_3)*A(L_3, -L_2)z3A(L_0, -L_1)*A(L_1, -L_2)*A(L_2, -L_3)*A(L_3, -L_0))r   r   r#   r   rD   r$   rE   )r:   rI   rJ   d2d3r@   rK   rL   s           r6   test_no_metric_symmetryr^      s    iCKG#E73NBB3	!^%?%?%BCA	"c
1R:A	
Br71111 	
"c
1R:aCj(2s3A	
Br7KKKK 	
"c
1R:aCj(2s3A	
Br7KKKKr8   c            
         [        SSS9n [        SU 5      u
  pp4pVpxp[        SU /[        R                  " S5      5      nU" U* 5      U" U5      -  nUR                  5       n[        U5      S:X  d   eU" U* 5      U" U* 5      -  U" U	* 5      -  U" U	5      -  U" U5      -  U" U5      -  nUR                  5       n[        U5      S:X  d   e[        SU /[        R                  " S5      S5      nU" U* 5      U" U* 5      -  U" U	* 5      -  U" U	5      -  U" U5      -  U" U5      -  nUR                  5       nUS	:X  d   e[        SU /S
-  [        R                  " S
5      5      nU" Xv5      U" X* 5      -  U" X* 5      -  nUR                  5       n[        U5      S:X  d   e[        SU /S
-  [        R                  " S
5      5      nU" Xv5      U" X* 5      -  U" X* 5      -  nUR                  5       n[        U5      S:X  d   e[        SU /S-  [        R                  " S5      5      nU" XU5      U" X* U* 5      -  nUR                  5       n[        U5      S:X  d   eU" XU	5      U" X(* U	* 5      -  U" X* U5      -  U" XEU* 5      -  nUR                  5       n[        U5      S:X  d   e[        SU /S-  [        R                  " S5      5      n[        SU /S
-  [        R                  " S5      5      nU" XxU	5      U" U	* U
* U* 5      -  U" U* U
5      -  nUR                  5       nUS	:X  d   e[        SU /S-  [        R                  " S5      S5      n[        SU /S
-  [        R                  " S5      5      nU" XxU	5      U" U	* U
* U* 5      -  U" U* U
5      -  nUR                  5       n[        U5      S:X  d   e[        SSSS9n[        SU5      u
  pp4pVpxp[        SU/S-  [        R                  " S5      S5      n[        SU/S
-  [        R                  " S5      5      nU" XxU	5      U" U	* U
* U* 5      -  U" U* U
5      -  nUR                  5       n[        U5      S:X  d   e[        SS	SS9n[        SU5      u
  pp4pVpxp[        SU/S-  [        R                  " S5      S5      n[        SU/S
-  [        R                  " S5      5      nU" XxU	5      U" U	* U
* U* 5      -  U" U* U
5      -  nUR                  5       n[        U5      S:X  d   e[        SU 5      u  nnnnnn[        SU /[        R                  " S5      S
5      n[        SU /S
-  [        R                  " S5      S
5      n[        SU /S-  [        R                  " S5      S
5      nU" U* U* 5      U" U5      -  U" UUU5      -  nUR                  5       n[        U5      S:X  d   eU" UU5      U" UU5      -  U" U* 5      -  U" UU* U* 5      -  nUR                  5       n[        U5      S :X  d   e[        S!S"S9n[        S#U5      u  pnnnn[        S$U 5      u  nn[        S%U/S-  [        R                  " SS5      5      n[        SU U/[        R                  " S
5      5      nU" UU* U* 5      U" U* U* U* 5      -  U" U* U5      -  U" U* U5      -  U" UU5      -  U" UU5      -  nUR                  5       n[        U5      S&:X  d   eg )'Nr:   r;   r<   za,a0,a1,a2,a3,b,d0,d1,d2,d3r@   r?   zA(L_0)*A(-L_0)z,A(L_0)*A(-L_0)*A(L_1)*A(-L_1)*A(L_2)*A(-L_2)r   rA   z!A(a, L_0)*A(b, L_1)*A(-L_0, -L_1)rB   z!A(b, L_0)*A(-L_0, L_1)*B(a, -L_1)   zA(a, L_0, L_1)*A(b, -L_0, -L_1)zCA(a0, L_0, L_1)*A(a1, -L_0, L_2)*A(a2, a3, L_3)*A(-L_1, -L_2, -L_3)z1A(L_0, L_1, L_2)*A(-L_0, -L_1, L_3)*B(-L_2, -L_3)Spinorr
   rZ   z2-A(S_0, S_1, S_2)*A(-S_0, -S_1, S_3)*B(-S_2, -S_3)MatM)r[   r=   z1A(M_0, M_1, M_2)*A(-M_0, -M_1, -M_3)*B(-M_2, M_3)zalpha,beta,gamma,mu,nu,rhoGammaz4-Gamma(L_0, L_1)*Gamma(rho)*Gamma(alpha, -L_0, -L_1)zGGamma(L_0, L_1)*Gamma(beta, gamma)*Gamma(-rho)*Gamma(alpha, -L_0, -L_1)FlavorFa,b,c,d,e,fzmu,nufzY-f(F_0, F_1, F_2)*f(-F_0, F_3, F_4)*A(L_0, -F_1)*A(-L_0, -F_3)*A(L_1, -F_2)*A(-L_1, -F_4))	r   r   r#   r   rD   r$   rE   rF   direct_product) r:   rG   a0a1a2a3rH   rI   rJ   r\   r]   r@   rK   rL   rB   rb   rd   alphabetagammamunurhorf   Gamma2Gamma3rh   rQ   rR   effrk   s                                    r6   test_canonicalize1r{      s%   iC8G4g> )A22""
 	3	>#=#=a#@AA	2#quA	
Br7&&&&
 	
2#q"vafQrU"1R5(2.A	
Br7DDDD
 	3	>#=#=a#@!DA	2#q"vafQrU"1R5(2.A	
B7N7
 	3	!^%C%CA%FGA	"1c1R:%A	
Br79999
 	3	!^%C%CA%FGA	"2sAaI%A	
Br79999
 	3	!^%C%CA%FGA	"!Qq#s^#A	
Br77777 	
""aC"o%aCn4Qrs^CA	
Br7[[[[ 	3	!^%C%CA%FGA3	!^%C%CB%GHA	""abS2#&&q"bz1A	
B7N7
 	3	!^%C%CA%FJA3	!^%C%CB%GHA	""abS2#&&q"bz1A	
Br7IIII
 X#rJF4f= )A22""3
N$B$B1$EqIA3
N$B$B2$FGA	""abS2#&&q"bz1A	
Br7JJJJ %s
CC4c: )A22""3a!?!?!BAFA3a!?!?!CDA	""abS2#&&q"bz1A	
Br7IIII 	3W= $E4Bw	%55a8!=E'1&66r:A?F'1&66r:A?FsRCs#F2r5$99A	
Br7LLLL 	r2vdE**5#;6vebS2#7NNA	
Br7____ X#6F&}f=A!Q2GW-FB3
N$A$A!R$HIA3&)>+E+Ea+HIA	!aR!QrA2r]"1bS!9,QsAY6qQx?"aHA	
Br7qqqqr8   c                      [        S5      n [        SU 5      n[        U[        [        45      (       a   e[        U[
        5      (       d   eg )Nr@   i)r   r   r2   tuplelistr   )r@   r}   s     r6   "test_bug_correction_tensor_indicesr   ?  sD     	AsAA!eT]++++a%%%%r8   c                     [        SSS9n [        SU 5      u  pp4pVpxpp[        SU /S-  [        R                  " 5       5      nU" XU* U* 5      nUR                  5       n[        U5      S:X  d   eU" U* X!* U5      U" XuX* 5      -  U" U* U* U	* U
* 5      -  U" U* U* U* U* 5      -  U" X8X* 5      -  U" XXK5      -  nUR                  5       n[        U5      S:X  d   eg )	Nr:   r;   r<   zd0:12R   z-R(L_0, L_1, -L_0, -L_1)zR(L_0, L_1, L_2, L_3)*R(-L_0, -L_1, L_4, L_5)*R(-L_2, -L_3, L_6, L_7)*R(-L_4, -L_5, L_8, L_9)*R(-L_6, -L_7, L_10, L_11)*R(-L_8, -L_9, -L_10, -L_11))r   r   r#   r   riemannr$   rE   )r:   rI   rJ   r\   r]   d4d5d6d7d8d9d10d11r   rK   rL   s                   r6   test_riemann_invariantsr   H  s   iC8Gw( 5BBBBBC 	3	!^%;%;%=>A	"2#sA	
Br70000 	
3$r#b!B"S/)!RCRC*<<	3$sB3s	bC,	--.rR_	=A	
Br7  l  l  l  lr8   c                  J   [        SSS9n [        SU 5      u  pp4pVn[        SU 5      u  ppp[        SU 5      u  p[        SU /S-  [        R                  " 5       5      nU" XX* 5      nUR                  5       nUS	:X  d   eU" XX* 5      nUR                  5       n[        U5      S
:X  d   eU" X#* X* 5      U" XU* U5      -  nUR                  5       n[        U5      S:X  d   e[        SU /S-  [        R                  " S5      5      nU" XvU* U5      U" XQX45      -  U" U* U* 5      -  U" U* U* 5      -  U" U* U* 5      -  nUR                  5       n[        U5      S:X  d   eU" X8X5      U" X#* X5      -  U" XU* U* 5      -  nUR                  5       n[        U5      S:X  d   eg )Nr:   r;   r<   zd0:7za0:6a,br   r   r   z-R(a, L_0, b, -L_0)z+-R(a, L_0, L_1, L_2)*R(b, -L_0, -L_1, -L_2)VrA   zW-R(L_0, L_1, L_2, L_3)*R(-L_0, L_4, L_5, L_6)*V(-L_1, -L_4)*V(-L_2, -L_5)*V(-L_3, -L_6)z>R(a0, L_0, a2, L_1)*R(a1, a3, -L_0, L_2)*R(a4, a5, -L_1, -L_2))r   r   r#   r   r   r$   rE   rF   )r:   rI   rJ   r\   r]   r   r   r   rm   rn   ro   rp   a4a5rG   rH   r   rK   rL   r   s                       r6   test_riemann_productsr   _  s   iC8G!/!@BBBB+FG<BBB%)DA3	!^%;%;%=>A	!CA	
B7N7 	
"CA	
Br7++++ 	
"c1c1RRC,,A	
Br7CCCC 	3	!^%C%CA%FGA	"2#r1RR,,QsRC[8B3DQsRC[PA	
Br7oooo 	
""!BR,,QrsRC-@@A	
Br7VVVVr8   c                  J   [        S5      n [        SSU SS9n[        SU5      u  p#pEpgppppn[        SU/S-  [        R
                  " S	5      5      nU" X#U5      U" U* XV5      -  U" U* X5      -  U" U* U* U5      -  U" U* U* U
5      -  nUR                  5       nUS
:X  d   eU" X#U5      U" U* XV5      -  U" U* Xx5      -  U" U* X5      -  U" U* U	* U5      -  U" U
* X5      -  U" U* U* U5      -  U" U* U* U5      -  U" U* U* U5      -  nUR                  5       nUS
:X  d   eg )NDEuclr?   E)r[   dimr=   zi0:15r@   r`   rg   r   )r   r   r   r#   r   rF   r$   )r   r   i0i1i2i3i4i5i6i7i8i9i10i11i12i13i14r@   rK   rM   s                       r6   test_canonicalize2r     s`   sA61!LDw% 6B"bB###3q."@"@"DEA
 	
"Arc"L B3r-aRCm;Arc2#bMIA	
B7N7
 	
"Arc"L B3r-aBl:1bS"R=H	2#c	"cT#	''("cT#	778"cT#	GA	
B7N7r8   c                  \   [        S5      n [        SU SSS9n[        SU5      u  p#pEn[        SU/[        R
                  " S5      S5      u  pxU" U5      U" U5      -  n	U	R                  5       n
X:X  d   eU" U5      U" U5      -  n	U	R                  5       n
X" U5      * U" U5      -  :X  d   eg )	Nr   rb   rc   r
   r   r[   r=   a0:5chi,psir?   )r   r   r   r    r   rD   r$   )r   rb   rm   rn   ro   rp   r   chipsirK   rM   s              r6   test_canonicalize3r     s    sAX1bSQF#FF3NB"Ix1K1KA1NPQRHCBBA	
B7N7BBA	
B#b'#b'!!!!r8   c                      [        SSS9n [        SU 5      n[        SU /5      n[        U" U5      SU" U5      -  5      nUR	                  5       U" U5      * :X  d   eg )N	Cartesianr`   r   pKra   )r   r   r#   r   r$   )r   r   r   exprs       r6   test_canonicalize4r     sZ    3IsI&A3$AAaD3qt8%D==?qte###r8   c                  T   [        SSS9n [        SU 5      n[        SU /5      n[        S[        S9n[        S5      n[        U" U5      US	S
45      U" U5      -  nUR                  5       R                  5       [        U" U5      US	S
45      R                  5       U" U5      -  :X  d   eg )NR3r`   r   r   r   rk   )clsxr   r?   )r   r   r#   r   r   r   as_dummyr$   )r   r   r   rk   r   r   s         r6   test_canonicalize5r     s    	1	%BsBA3A"AAQqTAa7#ad*D==?##%1Q4!Aa)A)J)J)LqQRt)SSSSr8   c                     [        S5      n [        SSSU SS9n[        SU5      u  p#pEn[        R                  " S5      n[        [        S5      6 nXx:X  d   eUR                  n	[        U	5      S	:X  d   eUR                  UR                  :X  d   e[        S
S
S9n
[        SU
5      u  pU
R                  n	[        SU
/S-  U5      n[        U" X* 5      R                  5       5      S:X  d   eg )Nr   r:   gr?   r;   )metric_namer[   r   r=   zm0:5rA   zg(Lorentz,Lorentz)TSpacer<   zi0 i1r@   zA(TSpace_0, -TSpace_0))r   r   r   r   rF   r   metricrE   eps_dimr   r#   r$   )r   r:   m0m1m2m3m4sym2sym2nr   r   r   r   r@   s                 r6   test_TensorIndexTyper     s    sAiS!"#5G'8BBB))!,D3A67E==Aq6))))??gkk)))XH=FGV,FBA3
D)AqCy!!#$(@@@@r8   c            
        ^^^^^	 [        SSS9m[        ST5      u  mmm	n TR                  T:X  d   eTT* :w  d   e[        ST/S-  [        R
                  " S5      5      u  mnT" TT5      U" T* T	5      -  nUR                  5       n[        ST5      nUTXD* T	/:X  d   e[        [        U4S j5        [        [        UUUU	4S	 j5        [        S
TT/5      mT" SS5      T" [        ST5      [        ST5      5      :X  d   eT" SS5      T" [        ST5      [        STSS95      :X  d   eT" S[        ST5      5      T" [        ST5      [        ST5      5      :X  d   eg )Nr:   r;   r<   a,b,c,dA BrA   L_0c                     > [        ST 5      $ )Nr`   )r   )r:   s   r6   <lambda>test_indices.<locals>.<lambda>  s    ~a9r8   c                     > T " TTT5      $ r1    r@   rG   rH   rQ   s   r6   r   r     s    q1Qxr8   r@   rG   rH   z-bFis_up)r   r   tensor_index_typer    r   rF   get_indicesr   r,   
ValueErrorr#   )
rR   rB   rK   indicesr   r@   r:   rG   rH   rQ   s
        @@@@@r6   test_indicesr     s{   iC8G	73JAq!Q')))7N7y{N,J,J1,MNDAq	!Aq!AwAmmoG
eW
%Cq#tQ''''
:9:
:'(3'*+AS#;!KW5'W57 7 7 7S$<1[g6(gUCE E E ES+c7+,+c72K2=c72K1M M M Mr8   c                  8   [         R                  " S5      [        [        S5      5      :X  d   e[         R                  " S5      [        [        SS5      5      :X  d   e[         R                  " S5      [         R                  " S5      :X  d   e[         R                  " S5      [         R                  " S5      :X  d   e[         R                  " SSS5      [         R                  " S5      :X  d   e[        [        S5      5      [        [        S5      6 :X  d   e[         R                  " S5      n U R
                  S:X  d   eU R                  [        SS5      :X  d   eU R                  [        [        SS5      " SS	5      [        SS5      " SS	5      5      :X  d   eg )
NrA   rg   r`   Trc   r?   r   r   )
r   rF   r   rl   rD   rankbaser   
generatorsr	   )syms    r6   test_TensorSymmetryr     sz   ))!,.q123 3 3))"-.q$789 9 9((,&&r*+ + +))"-&&q)* * *((B2""1%& & &1!45/234 4 4 
(
(
,C88q==88uQ{""">>U;q!#4Q#:K1<MaQR<STTTTr8   c            	      d  ^^^^^^ [        SSS9n [        SU 5      u  mmmmU R                  m[        SU /S-  [        R
                  " S5      5      u  mn[        [        UUUUU4S j5        [        [        UUU4S j5        [        [        UUUUUU4S	 j5        [        [        UUUU4S
 j5        [        [        UUUU4S j5        [        5          [        [        UUU4S j5        S S S 5        [        [        UUU4S j5        [        [        UUU4S j5        g ! , (       d  f       N;= f)Nr:   r;   r<   r   r   rA   c                  *   > T" TT5      T" T T5      -  $ r1   r   )rG   rH   rQ   rR   r   s   r6   r   test_TensExpr.<locals>.<lambda>      qAwqAwr8   c                  8   > [         R                  T" T T5      -  $ r1   r
   One)rG   rH   r   s   r6   r   r     s    quuQq!W}r8   c                  >   > T " TT5      T" TT5      -   T" TT5      -  $ r1   r   )r@   rG   rH   rQ   rR   r   s   r6   r   r     s!    !Q!Aq' 11Q7:r8   c                  L   > [         R                  T " TT5      T" TT5      -   -  $ r1   r   )r@   rQ   rR   r   s   r6   r   r     s    quua1g!Q&78r8   c                  *   > T " TT5      T " TT5      -   $ r1   r   r   s   r6   r   r      s    qAw1a0r8   c                     > T " TT5      S-  $ NrA   r   r@   rG   rH   s   r6   r   r     s    1Q7A:r8   c                     > ST " TT5      -  $ r   r   r   s   r6   r   r     s    1Q7
r8   c                  (   > [        T " TT5      5      $ r1   )absr   s   r6   r   r     s    AaGr8   )
r   r   r   r    r   rF   r,   r   r.   NotImplementedError)r:   rB   r@   rG   rH   rQ   rR   r   s     @@@@@@r6   test_TensExprr     s    iC8G	73JAq!QAy{N,J,J1,MNDAq
:../
:,-
:::;
:89
:01 
 	!z-. 
"  23
 45	 
"	!s   D!!
D/c                     [        SSS9n [        SU /S-  5      nUR                  S:X  d   eUR                  X /:X  d   eUR                  S:X  d   eUR
                  [        R                  " S5      :X  d   eUR                  S:X  d   eg )Nr:   r;   r<   r@   rA   r   )	r   r#   nameindex_typesr   symmetryr   rD   comm)r:   r@   s     r6   test_TensorHeadr     s    iC8G3	!$A66S====W....66Q;;::33A666666Q;;r8   c            	      N   [        5       R                  S:X  d   e[        5       R                  5       S:X  d   e[        SSS9n [	        SU 5      u  pp4pVn[        SU /S-  [        R                  " S5      5      u  pU" X#* 5      U	" X15      -  n
[        U
5      R                  U
5      (       d   eU	" X15      U" X15      -   nU" X#* 5      U-  n[        U5      S	:X  d   eUR                  5       n[        U5      S
:X  d   eUR                  5       n[        U5      S:X  d   eX-   n[        U5      S:X  d   eUR                  5       n[        U5      S:X  d   e[        SU /5      u  pnU" U5      S-  n[        U5      S:X  d   eSU" U5      -  n[        U5      S:X  d   eU" U5      SU" U5      -  -   n
[        U
5      S:X  d   eU" U* 5      SU" U* 5      -  -   n[        U5      S:X  d   eU" U5      n
X-  n[        U5      S:X  d   eUR                  5       n[        U5      S:X  d   eX-  nUR                  5       n[        U5      S:X  d   eUR                  5       n[        U5      S:X  d   eU" U5      SU" U5      -  -   n
X-  nUR                  5       n[        U5      S:X  d   eU" U5      SU" U5      -  -
  n
[        U
5      S:X  d   eU" U* 5      SU" U* 5      -  -   nX-  nUR                  5       nUU" U5      U" U* 5      -  SU" U5      -  U" U* 5      -  -
  :X  d   eU" U5      U" U5      -  U" U5      U" U5      -   -  U" U5      U" U5      U" U5      -   -  U" U5      SU" U5      -  -
  -  -   nUR                  5       nUSU" U5      -  U" U5      -  U" U5      -  SU" U5      -  U" U5      -  U" U5      -  -
  U" U5      U" U5      -  U" U5      -  -   SU" U5      -  U" U5      -  U" U5      -  -
  :X  d   eU" U5      U" U5      -   SU" U5      -  -   U" U5      U" U5      -
  -  n
U" U5      U" U5      -   SU" U5      -  -   U" U5      U" U5      -
  -  nX-   nUR                  5       nUSU" U5      -  U" U5      -  SU" U5      -  U" U5      -  -   SU" U5      -  U" U5      -  -   SU" U5      -  U" U5      -  -
  SU" U5      -  U" U5      -  -
  SU" U5      -  U" U5      -  -
  :X  d   eU" U5      U" U5      -  S-  nSU-  U" U5      U" U5      -  :X  d   eU" U5      U" U5      -   S-  nSU-  U" U5      U" U5      -   :X  d   e[        R                  U" U5      U" U* 5      -  -
  nUR                  5       nUU" U* 5      U" U5      -  -   nUS:w  d   eUR                  5       nUR                  S5      (       d   e[        R                  U" U5      U" U* 5      -  -   nUU" U* 5      U" U5      -  -
  R                  5       R                  S5      (       d   eU" X5      U	" X5      -   nUR                  S:X  d   eUU" X5      -
  U	" X5      -
  n
U
S:X  d   eSU" X* 5      U	" X* 5      -   -
  nSU" X* 5      U	" X* 5      -   -   n
UU
-   R                  5       R                  S5      (       d   eSU" X* 5      -   nX:w  d   eU[        R                   " S/ / / 5      :w  d   e[        U" U5      [        SU" U5      5      5      R                  5       U" U5      :X  d   eg )Nr   r   r:   r;   r<   a,b,d0,d1,i,j,kr>   rA   z"A(b, -L_0)*(A(L_0, a) + B(L_0, a))z+A(b, -L_0)*A(L_0, a) + A(b, -L_0)*B(L_0, a)z+A(a, L_0)*A(b, -L_0) + A(b, L_0)*B(a, -L_0)zBA(a, L_0)*A(b, -L_0) + A(b, -L_0)*B(L_0, a) + A(b, L_0)*B(a, -L_0)z-A(a, L_0)*A(b, -L_0) + 2*A(b, L_0)*B(a, -L_0)p,q,rz2*q(d0)z2*q(d0) + p(d0)z2*q(-d0) + p(-d0)zp(L_0)*(2*q(-L_0) + p(-L_0))z!p(L_0)*p(-L_0) + 2*p(L_0)*q(-L_0)z!p(-L_0)*p(L_0) + 2*q(-L_0)*p(L_0)z4p(L_0)*p(-L_0) + 4*p(L_0)*q(-L_0) + 4*q(L_0)*q(-L_0)z-2*q(d0) + p(d0)r   r`   r?   )r   argsdoitr   r   r    r   rF   r3   rE   r   r$   r
   r   r   r   	from_data)r:   rG   rH   rI   rJ   r}   jkr@   rB   rM   t2at2t2br   qrrK   t3tz1s                       r6   	test_add1r
    s,   9>>R9>>q   iC8G$%6@OAa!y{N,J,J1,MNDA	
1c1R8	B2;b!!!!
B(QrX
C	
1c3Br7::::	Br7CCCC	Br7CCCC
'Cs8[[[[
,,.Cs8FFFF7WI.GA!	"aAq6Y	!B%Aq6Y	
21R5Br7''''	
B3!ArcF(	Br7))))	
2B	Br74444	Br79999	B	Br79999	Br79999	
21R5B	B	Br7LLLL	
21R5Br7((((	
B3!ArcF(	B	B	B2q"v!B%2#....	!QqT	1Q4!A$;!A$!qt"4adQqtVm"DDA	

A!A$qtAaD 1QqT6!A$;qt#33ad1Q4i!nDq1vaPQd{STUVSWGWWWWW
A$1+!A$
1!	-B
A$1+!A$
1!	-B
A	

A!A$qta!fQqTk)AadF1Q4K7!AaD&1+E!A$qQRtSVWXYZ[X\V\]^_`]aVaaaaa	!QqT	!AQ3!A$qt)	
1!aAQ3!A$1+	!QrU
A	

A
aeAaDj.C!8O8
,,.C::a===	!QrU
A1"ad
N$$&--a0000	!!A'A66Q;;	
QqWqw	B7N7	Qq"X!R !A	
a2h1b!	"BF??##A&&&&	
Qq"XB8O8""1b"b1111 1Q4AaD)+002ad:::r8   c                     [        SSS9n [        SU 5      u  pp4pVn[        SU /S-  [        R                  " S5      5      u  p[        SU /5      u  pnSU" X5      -  n[        US5      (       d   e[        U[        R                  5      (       d   eU
" U5      U" X5      :w  d   eU" X* 5      U" X5      :w  d   eSU" X5      U	" X5      -   -  S:X  d   eSU" X5      U	" X5      -   -  [        R                  L d   eS	U" X5      U" X5      -
  -  [        R                  L d   eU
" U5      U" U5      -   U" X5      :w  d   eU
" U5      U" U5      -   U" X5      U	" X5      -   :w  d   eU
" U5      U
" U5      -
  S:X  d   eU
" U5      U
" U5      -
  [        R                  L d   e[        U" X5      U" X!5      5      (       d   eg )
Nr:   r;   r<   r   r>   rA   r   r   r`   )r   r   r    r   rF   r7   r
   Zero)r:   rG   rH   rI   rJ   r}   r  r  r@   rB   r   r  r  rK   s                 r6   test_special_eq_ner  q  s   iC8G*+<gFA"!y{N,J,J1,MNDA7WI.GA!	!A'	AQ???QQ41Q7??Q8qwag! A%%%ag! AFF***ag! AFF***Q4!A$;!A'!!!Q4!A$;!A'AaG++++Q4!A$;!Q4!A$;!&&   QqWag&&&&r8   c                     [        SSS9n [        SU 5      u  pp4[        SU /S-  [        R                  " 5       5      n[        SU /S-  [        R
                  " S	5      5      nS
U" XX45      -  U" XX#5      -
  U" XX$5      -   nXv" U* U* U* 5      -  nUR                  5       nUS:X  d   e[        S
S5      U" XX45      -  [        SS5      U" XX#5      -  -
  [        SS5      U" XX$5      -  -   nXv" U* U* U* 5      -  nUR                  5       nUS:X  d   eU" X* U5      U" X#U* 5      -   n	U	R                  5       n	U	S:X  d   eg )Nr:   r;   r<   zm,n,p,qr   r   r@   r`   rg   rA   r   r?   )r   r   r#   r   r   rF   r$   r   )
r:   mnr   r  r   r@   rM   r  rK   s
             r6   	test_add2r    sQ   iC8G	73JA!3	!^%;%;%=>A3	!^%C%CB%GHA	
1Q1=1Q1=	(1Q1=	8B	Aqb1"qbM	B	B7N7	!Q!a
	"Xa^Aa!J%>	>!QPQRSVWPZAZ	ZB	Aqb1"qbM	B	B7N7	!Raqbk!A	

A6M6r8   c            
         [        SSS9n [        SU 5      u  p[        S5      u  p4pV[        SU /5      n[        SU /5      nU" U5      U" U* 5      -  US-  US-  -
  US-  -
  US-  -
  -
  n	U	R                  US-  * US-  US-  US-  U" U5      U" U* 5      -  4:X  d   eUS-  US-  -
  US-  -
  US-  -
  U" U5      U" U* 5      -  -
  n
U
R                  US-  US-  * US-  * US-  * U" U5      * U" U* 5      -  4:X  d   eU" U5      U" U* 5      -  US-  -
  US-  -   US-  -   US-  -   nUR                  US-  * US-  US-  US-  U" U5      U" U* 5      -  4:X  d   eU" U5      U" U* 5      -  SUS-  -  -   SUS-  -  -
  SUS-  -  -
  SUS-  -  -
  U" U5      U" U* 5      -  -
  nUR                  SUS-  -  S	US-  -  S	US-  -  S	US-  -  U" U5      U" U* 5      -  U" U5      * U" U* 5      -  4:X  d   eg )
Nr:   r;   r<   zi0:2
E px py pzr@   rB   rA   ra   )r   r   r   r#   r   )r:   r   r   r   pxpypzr@   rB   expr1expr2expr3expr4s                r6   	test_add3r    sb   iC8GFG,FBL)MA23	"A3	"AbE!RC&LAqD2q5L2q502q589E::1a4%QAr1uaeArcFlCCCCqD2q5L2q5 2q5(1R5B3<7E::!Q$QQQ2q"vFFFFbE!RC&L1a4"a%'"a%/"a%7E::1a4%QAr1uaeArcFlCCCCbE!RC&L1QT6!Ab!eG+aAg5"a%?!B%2#,NE::!AqD&"RU(Br1uHbQh"afqQSufUVXZWZU[m\\\\r8   c                  2  ^^	^
^ SSK Jn   [        SSS9n[        SU5      u  m	m
mn[        R
                  " [        R                  / / / 5      n[        U5      S:X  d   e[        SU/S	-  [        R                  " S	5      5      u  mnS
U -   T" T	T
5      -  n[        U5      S:X  d   eUR                  X/:X  d   eUR                  S	:X  d   eUR                  / :X  d   eUR                  S
U -   :X  d   e[!        UR"                  5      T	S4T
S
4/:X  d   eUR$                  T/:X  d   eT" T	T
5      n[        U5      S:X  d   eUR                  X/:X  d   eUR                  S	:X  d   eUR                  / :X  d   eUR                  S
:X  d   e[!        UR"                  5      T	S4T
S
4/:X  d   eUR$                  T/:X  d   eT" T
* T	5      U" T	* T5      -  T" T* U5      -  n['        UR)                  5       6 nX6:X  d   e['        / 6 [        R
                  " [        R                  / / / 5      :X  d   e[        R
                  " S
/ / / 5      n[+        S/ 5      n[        U" 5       5      S:X  d   e[        U5      S:X  d   eUS
:X  d   e[-        [.        UU	U
U4S j5        g )Nr   )r   r:   r;   r<   r   1r   rA   r?   z(x + 1)*A(a, b)zA(a, b)rC   c                  *   > T " TT5      T " TT5      -  $ r1   r   r   s   r6   r   test_mul.<locals>.<lambda>  r   r8   )	sympy.abcr   r   r   r   r   r
   r   rE   r    r   rF   r   r   dumcoeffsortedfree
componentsr   splitr#   r,   r   )r   r:   rR   rK   rB   tsrM   rC   r@   rG   rH   rQ   s           @@@@r6   test_mulr(    su   iC8G	73JAq!Q!%%R,Aq6S==y{N,J,J1,MNDAq	
Q!QAq6&&&&==W....66Q;;55B;;77a!e!&&>q!fq!f----<<A3	
1aBr7i>>g////77a<<66R<<88q=="''?1v1v....==QC	1"aA2q!QB("A	QWWY	B7N7r?g//r2rBBBB!RR(A3Aqs8s??q6S==6M6
:./r8   c                     [        SSS9n [        SU 5      u  pp4pVpx[        SU /S-  [        R                  " S5      5      u  p[        SU /5      nU" U5      nUR                  X#45      nX:X  d   eUR                  X45      nX" U5      :X  d   eUR                  X* 45      nX" U* 5      :X  d   eUR                  U* U45      nX" U* 5      :X  d   eUR                  U* U* 45      nX" U5      :X  d   eU	" XV5      nUR                  XQ4Xa* 45      nX" Xf* 5      :X  d   e[        XU4Xa* 45      nX" Xf* 5      :X  d   eU	" X5      U
" U* U* 5      -  nUR                  X4X#45      nU	" X$5      U
" U* U* 5      -  nX:X  d   e[        XU4X#45      nX:X  d   eU	" X5      U
" X5      -   nUR                  X!* 45      nU	" X* 5      U
" X* 5      -   nX:X  d   e[        XU* 45      nX:X  d   eg )Nr:   r;   r<   i,j,k,l,m,n,p,qr>   rA   r   )r   r   r    r   rF   r#   r(   )r:   r}   r  r  lr  r  r   r  r@   rB   rK   rM   t1as                 r6   test_substitute_indicesr-    s4   iC8G+,=wGA!ay{N,J,J1,MNDA3	"A	!A	
		qf	%B7N7	
		qf	%B1::	
		q"g	&BA2;;	
		r1g	&BA2;;	
		rA2h	'B1::	!A	
		qfq"g	.B1b>>	A1v2w	/B1b>>	!1"qb	A	
		qfqf	-B
A'!QB)
C99	A1vv	.B99	!!A'A	
		q"g	&B
Ar(Qq"X
C99	AA2w	'B99r8   c                  <   [        SSS9n [        SU 5      u  pp4[        SU /S-  [        R                  " 5       5      nU" XX$5      n[        U5      n[        SS5      U" XX25      -  [        S	S5      U" XX45      -  -   [        S
S5      U" XX$5      -  -   nXx:X  d   eg )Nr:   r;   r<   zm:4r   r   rc   r`   r?   rA   )r   r   r#   r   r   r   r   )	r:   r   r   r   r   r   rK   rM   r,  s	            r6   test_riemann_cyclic_replacer/    s    iC8G#E73NBB3	!^%;%;%=>A	""A		"B
2q/!BB+
+hq!nQrr=N.N
NQYZ[]^Q_`abdjl`qQq
qC99r8   c            	         [        SSS9n [        SU 5      u  pp4pVpx[        SU /S-  [        R                  " 5       5      n	U	" XX45      U	" XX#5      -   U	" XXB5      -   U	" XXC5      -
  U	" XX25      -
  U	" XX$5      -
  n
X" U* U* U* U* 5      -  n[        U5      nUS:X  d   eU	" XX45      U	" U* U* U* U* 5      SU	" U* U* U* U* 5      -  -
  -  n
[        U
5      nUS:X  d   eU	" XX45      n
[        U
5      nU[        S	S
5      U	" XX#5      -  [        SS
5      U	" XX$5      -  -   [        SS
5      U	" XX45      -  -   :X  d   eU	" XX45      U	" U* U* XV5      -  U	" U* U* U* U* 5      SU	" U* U* U* U* 5      -  -   -  n
[        U
5      nUS:X  d   eg )Nr:   r;   r<   r*  r   r   r   rA   rc   r`   r?   )r   r   r#   r   r   r   r   )r:   r}   r  r  r+  r  r  r   r  r   rK   r  r  rM   s                 r6   test_riemann_cyclicr1    s   iC8G+,=wGA!a3	!^%;%;%=>A	!a
Qq1Z!A*,	!a
	q1Z	 "#A*	-A	
1aRA2qb>	B		B7N7	!a
Aqb!QBrNQq!QBr1"~%556A		B7N7	!a
A		B"a1.!Q!1MMPXYZ\]P^_`abgh_lPlllll	!a
1aR1<A2qb!QB!Aqb!QBrN2B!BCA		B7N7r8   c                  x   [        SSS9n [        SU 5      u  pp4[        SU /S-  [        R                  " 5       5      nU" XU* U5      nU[        S5      -  n[        U5      S:X  d   eUR                  5       nUR                  (       a   eUS-  nUR                  (       d   eUS-  nUR                  (       d   eg )Nr:   r;   r<   zm0:4r   r   z(1/4)*R(m0, L_0, -L_0, m3))	r   r   r#   r   r   r
   rE   r$   _is_canon_bp)r:   r   r   r   r   r   rK   rM   s           r6   test_divr4    s    iC8G#FG4NBB3	!^%;%;%=>A	"BA	
1Q4Br72222	

A	
1B???	AB???r8   c                  j   [        S5      n [        SU SS9n[        SU5      u  p#pEnUR                  n[	        SU/5      nU" X#5      U" U* 5      -  n	U	R                  U5      n
X" U5      :X  d   e[        SU/S-  [        R                  " S5      5      u  pU" X#5      U" U* U5      -  U" XV5      -  n
U
R                  U5      nX:X  d   eU" X#5      U" U* U5      -  U" U* U5      -  n
U
R                  U5      nXU" X%5      -  U" U* U5      -  :X  d   eU" X#5      U" U* U* 5      -  U" XE5      -  n
U
R                  U5      nX" X$5      U" U* U5      -  :X  d   eU" X#5      U" U* U* 5      -  U" XB* 5      -  n
U
R                  U5      n[        X" X#5      U" U* U* 5      -  5      (       d   eU" X#5      U" U* U* 5      -  U" XE5      -  U" U* U* 5      -  n
U
R                  U5      n[        X" X#5      U" U* U* 5      -  5      (       d   eU" X#5      U" U* U* 5      -  n
U
R                  U5      n[        X" X"* 5      5      (       d   eUR                  (       a   e[        SSS	9n[        S
U5      u  p#UR                  n[        U" X"* 5      R                  U5      UR                  5      (       d   eg )Nr   r:   r;   r   r=   	a,b,c,d,er   r>   rA   r<   r   )r   r   r   r   r#   contract_metricr    r   rF   r7   r$  r   )r   r:   rG   rH   rQ   rR   ry   r   r   rK   rM   r@   rB   r  s                 r6   test_contract_metric1r9  '  s   sAiQ3?G";8MA!A3	"A	!1"A	
		1	B1::y{N,J,J1,MNDA 
11"Q!	B			A	B8O8 
11"Q1"a	 B			A	B1Q71aR8#### 
11"aR1	 B			A	B1A2q!!!! 
11"aR1b	!B			A	BR1A2r*++++	
11"aR1	 A2r	*B			A	BR11"aR))))	
11"aRB			A	BR1b""""ww;iC8G%)DAAQq"X--a0'++>>>>r8   c                  0   [        S5      n [        SU SS9n[        SU5      u  p#pEpgUR                  n[	        SU/5      u  pU" X#5      U	" U5      -  U	" U* 5      -  nSU" U* U* 5      -  U
" U5      -  U
" U* 5      -  nX-  nUR                  U5      nUSU -  U	" U5      -  U	" U* 5      -  U
" U5      -  U
" U* 5      -  :X  d   eU" X#5      U	" U5      -  U	" U* 5      -  nSU
" U* 5      -  U
" U* 5      -  nX-  nUR                  U5      nUR                  5       nUSU	" U5      -  U	" U* 5      -  U
" U5      -  U
" U* 5      -  :X  d   eSU" X#5      -  U	" U5      -  U	" U* 5      -  nS	U" U* U* 5      -  U
" U5      -  U
" U* 5      -  nX-  nUR                  U5      nS
U" X#5      -  U" U* U* 5      -  U	" U5      -  U	" U* 5      -  U
" U5      -  U
" U* 5      -  nUR                  U5      nSU" X#5      -  U	" U5      -  U	" U* 5      -  nU
" U* 5      U
" U* 5      -  SU" U* U* 5      -  U
" U5      -  U
" U* 5      -  -   nX-  nUR                  U5      nUSS
U -  -   U	" U5      -  U	" U* 5      -  U
" U5      -  U
" U* 5      -  :X  d   eU	" U5      U	" U5      -  U	" U5      U
" U5      -  -   SU" X#5      -  U	" U5      -  U	" U* 5      -  -   nU
" U* 5      U
" U* 5      -  U" U* U* 5      U
" U5      -  U
" U* 5      -  -
  nX-  nUR                  U5      nSSU -  -
  U	" U5      -  U	" U* 5      -  U
" U5      -  U
" U* 5      -  U	" U5      U
" U* 5      -  U	" U5      -  U
" U* 5      -  -   n[        X-
  5      S:X  d   eU" X#5      U" XE5      -  U" U* U* 5      -  nUR                  U5      nX" X%5      :X  d   eU" X#5      U" XE5      -  U" X$5      U" X55      -  -   U" X%5      U" X45      -  -   nUR                  X"* 4X3* 4XD* 4XU* 45      nX-  nUR                  U5      nUR                  SU S-  -  S
U -  -   5      (       d   eSU	" U5      -  U" X3* 5      -  nUR                  U5      nUR                  SU -  U	" U5      -  5      (       d   eSU	" U5      -  U" X2* 5      -  nUR                  U5      nUSU	" U5      -  :X  d   e[        S5      nU	" U5      U	" U5      -  U" X#5      US-  -  -   U" U* U* 5      -  XS-  -  -
  nUR                  U5      nX" U5      U	" U* 5      -  :X  d   e[        SU/S-  [        R                  " S5      5      nU" X#5      U	" U5      -  U" U* U* 5      -  nUR                  U5      n[        U5      S:X  d  [        U5      S:X  d   eg g )Nr   r:   r;   r6  za,b,c,d,e,L_0zp,qr`   rA   rg      r?   r   re   r@   zA(L_1, -L_1)*p(L_0)zA(-L_1, L_1)*p(L_0))r   r   r   r   r    r8  r$   r(   r3   r#   r   rF   rE   )r   r:   rG   rH   rQ   rR   ry   r   r   r   r  rM   r  rK   re   r@   s                   r6   test_contract_metric2r<  S  s   sAiQ3?G'AA!Ay)DA	
1!QrU	B	
1aR8AaDA2	B
A	!A!AaDA2qt#AqbE))))	
1!QrU	B	
1aR5A2B
A	!A	

A!A$q!uQqT!!QB%''''	
1Q6!A$q!u	B	Qr1"Xad	1aR5	 B
A	!A	!A&A2qb!A$q!u$QqT)!QB%/A	!A	
1Q6!A$q!u	B	
A2q!uqA2qbz!A$q!u,	,B
A	!AQqS!A$q!u$QqT)!QB%////	
1adQqT!A$Y	1Q6!A$q!u!4	4B	
A2q!uq!QBx!}QrU*	*B
A	!A
ac'1Q41"	ad	"1aR5	(1Q41":ad?1aR5+@	@BAFq   	!qvaA2hA	
		1	B1==	
1!1!	&1!	6B			"vqfaVQrF	;B
A	!A88AadFQqSL!!!!	!A$q2wA	
		1	B99QqS1X	!A$q2wA	
		1	B1Q4<<sA	
1adQqWQT\	!1aR!9,qAv5A	
		1	B1ae3	!^%C%CA%FGA	!#q!aRy A	
		1	Br7++s2w:O/OOO/O+r8   c                     [        S5      n [        SU SSS9n[        SU5      u  p#pEnUR                  n[	        SU/[
        R                  " S5      S5      u  p[        S	U/S
-  [
        R                  " S
5      5      n
U" X"* 5      nUR                  U5      nUR                  U * 5      (       d   eU" U* U5      nUR                  U5      nUR                  U 5      (       d   eU" X#5      U" U* U* 5      -  nUR                  U5      nUR                  U 5      (       d   eU" X25      U" U* U* 5      -  nUR                  U5      nUR                  U * 5      (       d   eU" U* U5      U" X#* 5      -  nUR                  U5      nUR                  U * 5      (       d   eU" X2* 5      U" X#* 5      -  nUR                  U5      nUR                  U 5      (       d   eU" X#5      U
" U* U* 5      -  nUR                  U5      nUR                  5       n[        X" X"* 5      5      (       d   eU" X25      U
" U* U* 5      -  nUR                  U5      n[        X" X"* 5      * 5      (       d   eU" X#* 5      U
" X2* 5      -  nUR                  U5      n[        X" X"* 5      * 5      (       d   eU" U* U5      U
" U* U5      -  nUR                  U5      n[        X" X"* 5      * 5      (       d   eU" U* U* 5      U
" X25      -  nUR                  U5      n[        X" X"* 5      5      (       d   eU" U* U5      U
" X2* 5      -  nUR                  U5      n[        X" X"* 5      5      (       d   eU" X#5      U	" U* 5      -  nUR                  U5      n[        X" U5      5      (       d   eU" X25      U	" U* 5      -  nUR                  U5      n[        X" U5      * 5      (       d   eU" X#5      U" U* 5      -  U	" U* 5      -  nUR                  U5      n[        X" U5      * U	" U* 5      -  5      (       d   eU" X25      U" U* 5      -  U	" U* 5      -  nUR                  U5      n[        X" U5      U	" U* 5      -  5      (       d   eU" U* U5      U" U* 5      -  U	" U5      -  nUR                  U5      n[        X" U* 5      U	" U5      -  5      (       d   eU" X#* 5      U" U* 5      -  U	" U5      -  nUR                  U5      n[        X" U* 5      * U	" U5      -  5      (       d   eU" U* U* 5      U" U5      -  U	" U5      -  nUR                  U5      n[        X" U* 5      U	" U5      -  5      (       d   eU" U* U* 5      U" U5      -  U	" U5      -  nUR                  U5      n[        X" U* 5      * U	" U5      -  5      (       d   eU" U* U* 5      U
" X$5      -  U	" U5      -  nUR                  U5      n[        X" U* U5      * U	" U5      -  5      (       d   eU" X25      U
" U* U* 5      -  U	" U* 5      -  nUR                  U5      n[        X" U* U5      U	" U* 5      -  5      (       d   eg )Nr   rb   rc   r
   r   r   r   r?   rB   rA   )r   r   r   r   r    r   rD   r#   r8  r3   r$   r7   )r   rb   rm   rn   ro   rp   r   rC   r   r   rB   rK   rM   s                r6   test_metric_contract3r>    so   sAX1bSQF'7BBBAIx1K1KA1NPQRHC3
N$>$>q$ABA	"S	A	
		1	B99aR===	2#b	A	
		1	B99Q<<<	"B3sA	
		1	B99Q<<<	"B3sA	
		1	B99aR===	2#b	!Bs)A	
		1	B99aR===	"S	!Bs)A	
		1	B99Q<<<	"B3sA	
		1	B	BR2c####	"B3sA	
		1	BR!Bs)$$$$	"S	!Bs)A	
		1	BR!Bs)$$$$	2#b	!RC)A	
		1	BR!Bs)$$$$	2#rc
1R8A	
		1	BR2c####	2#r
1R9A	
		1	BR2c####	"bSA	
		1	BRR!!!!	"bSA	
		1	BR#b'""""	"bS#rc("A	
		1	BR#b'#rc(*++++	"bS#rc("A	
		1	BRRbS)****	2#b	#rc(3r7"A	
		1	BRbS#b')****	"S	#rc(3r7"A	
		1	BR#rc(3r7*++++	2#rc
3r73r7"A	
		1	BRbS#b')****	2#rc
3r73r7"A	
		1	BR#rc(3r7*++++	2#rc
1R8CG#A	
		1	BR!RC)CG+,,,,	"B3sCH$A	
		1	BRB3r3s8+,,,,r8   c                      [        SSS9n [        SU 5      u  pnU R                  nU R                  n[	        SU /5      nU" XU5      U" U* 5      U" U* 5      -  U" U* U* 5      -   -  nUR                  U5      S:X  d   eg )Nr   r`   r   p q rr   r   )r   r   deltaepsilonr#   r8  )r   r   r  r  rA  epsr   r   s           r6   test_contract_metric4rD    s    	1	%BWb)GA!HHE
**C3A q1:1"aeeQBrl24D&!+++r8   c                      [        SSS9n [        SU 5      u  pnU R                  n[        SU /5      n[	        S5      n[        S5      nSU" U5      -   U" U* 5      -  U" U* 5      -  nUR                  U5      U:X  d   eg )	Nr   r`   r   r@  r   ri   r   rA   )r   r   rA  r#   r   r   r8  )	r   r   r  r  rA  r   ri   r   r   s	            r6   test_contract_metric5rF    s    	1	%BWb)GA!HHE3AAsA adFAqbE>!QB%D&$...r8   c                     [        SSSS9n [        SU 5      u  pp4nU R                  n[        SU /5      u  pxpU" X!X45      nUR	                  5       nX" XX45      * :X  d   eU" X2XA5      nUR	                  5       nX" XX45      :X  d   eU" X1XB5      nUR	                  5       nX" XX45      * :X  d   eU" XX45      U" U* 5      -  U" U* 5      -  nUR	                  5       nX" X4X5      U" U* 5      -  U" U* 5      -  :X  d   eU" X2XA5      U" U* 5      -  U" U* 5      -  nUR	                  5       nX" X4X5      U" U* 5      -  U" U* 5      -  :X  d   eU" X1XB5      U" U* 5      -  U" U* 5      -  nUR	                  5       nX" X4X5      * U" U* 5      -  U" U* 5      -  :X  d   eU" X1XB5      U" U* 5      -  U" U* 5      -  nUR	                  5       nUS:X  d   eU" X1XB5      U" U* 5      -  U" U* 5      -  U" XX45      U" U* 5      -  U" U* 5      -  -   nUR	                  5       nUSU" X4X5      -  U" U* 5      -  U" U* 5      -  :X  d   e[        S[        S5      SS9n U R                  n[        U[        5      (       d   eg )	Nr:   r   r;   r6  r7  zp,q,r,sr   ra   )r   r   rB  r    r$   r   r2   r#   )r:   rG   rH   rQ   rR   ry   rB  r   r  r  srK   rM   s                r6   test_epsilonrI    s   iQ3?G";8MA!ooGi'3JA!AA	
B'!a"""""AA	
BQ!!!!AA	
B'!a"""""AA2q!u$A	
BQ!!QB%'1"----AA2q!u$A	
BQ!!QB%'1"----AA2q!u$A	
B'!a""1aR5(A2....AA2q!u$A	
B7N7AA2q!u$wq1'71"'=ae'CCA	
BGA$$QrU*1aR50000 iWQZCHGooGgz****r8   c            	      r  ^^^^ [        S5      m[        STSS9n [        SU 5      u  pp4pVU R                  mU4S jmU4S jmUUU4S jnUU4S	 jnU" X* XV* 5      U" Xe* XC* 5      -  n	U	R	                  T5      n
[        X" X* XC* 5      -
  5      S
:X  d   eU" X* XV* 5      U" Xe* XC* 5      -  n	U	R	                  T5      n
X" X* XC* 5      :X  d   eU" X* XV* 5      U" Xe* XC* 5      -  n	U	R	                  T5      n
U
S
:X  d   eU" X* X!* 5      n	U	R	                  T5      n
U
R                  TS-  S-
  5      (       d   eg )Nr  ColorrC   r6  rj   c                    > U R                   (       a  UR                   (       d   eUR                   (       d  UR                   (       a   eT" X5      T" X!5      -  $ r1   r   rG   rH   rR   rQ   rA  s       r6   idn!test_contract_delta1.<locals>.idnD  <    ww177""GGqww''Qz%*$$r8   c                    > U R                   (       a  UR                   (       d   eUR                   (       d  UR                   (       a   eT" X5      T" X#5      -  $ r1   r   rM  s       r6   Ttest_contract_delta1.<locals>.TI  rP  r8   c                 6   > T" XX#5      ST-  T" XX#5      -  -
  $ Nr?   r   )rG   rH   rQ   rR   rR  rN  r  s       r6   P1 test_contract_delta1.<locals>.P1N  s"    1q|ac!A*n,,r8   c                 "   > ST-  T" XX#5      -  $ rU  r   )rG   rH   rQ   rR   rR  r  s       r6   P2 test_contract_delta1.<locals>.P2Q  s    s1Q:~r8   r   rA   r?   )r   r   r   rA  contract_deltar$   r3   )rK  rG   rH   rQ   rR   ry   rk   rV  rY  rK   rM   rR  rA  rN  r  s              @@@@r6   test_contract_delta1r\  =  s`   sAGs;E%mU;A!KKE%
%
- 	1b!RAr1b))A	
		%	 BBAr1b))*a///
1b!RAr1b))A	
		%	 BAr1b!!!!
1b!RAr1b))A	
		%	 B7N7
1b!RA	
		%	 B99QTAXr8   c                      [        SSS9n [        SU 5      u  pU R                  n[        SU /5      nSU" U5      U" U5      -  U" U* U* 5      -  -   nUR	                  U5      SU" U5      U" U* 5      -  -   :X  d   eg )Nr   r`   r   p qr   r?   )r   r   rA  r#   r[  )r   r   r  rA  r   r   s         r6   test_contract_delta2r_  d  s    	1	%B%$DAHHE3A qtAaDyr1"%%Du%QqT!QB%Z777r8   c            	      6   [        5          [        S5      n [        SU SS9n[        SU5      u  p#pEnUR                  n[        SU/5      u  pU	" U5      U" U5      -  U	" U5      -  U" X#5      U" XE5      -  U	" U* 5      -  -   n
U
" X#U5      U
:X  d   e[        X" X2U5      -
  U	" U5      U" U5      -  U	" U5      -  -
  U	" U5      U" U5      -  U	" U5      -  -   5      S:X  d   eU
" X4U5      U	" U5      U" U5      -  U	" U5      -  U" X45      U" XV5      -  U	" U* 5      -  -   :X  d   eU
R                  X#4X245      n[        X" U5      U" U5      -  U	" U5      -  -
  U" X#5      U" XE5      -  U	" U* 5      -  -
  5      S:X  d   e[        SU/S	-  [        R                  " S
S5      5      n[        R                  U" X%5      -  U" U* U* U* 5      U" U* U* U* 5      -   U" U* U* U* 5      -
  -  nU" U* U* U* 5      U" U* U* 5      U" XS* U* 5      -  -
  U" U* U* 5      U" XR* U* 5      -  -
  n
U
R                  U5      n
U
S:X  d   eU	" U5      U" U5      -  U	" U5      -  n
U
" X4U5      U	" U5      U" U5      -  U	" U5      -  :X  d   e S S S 5        g ! , (       d  f       g = f)Nr   r:   r;   r6  r7  r^  r   dgr`   r?   rA   )r.   r   r   r   r   r    r$   r(   r#   r   rl   r
   Halfr8  )r   r:   rG   rH   rQ   rR   ry   r   r   r  rK   rM   ra  rs   s                 r6   test_funrc  n  s   		!3K!)sC&{G<aANNEG9-aD1IadNQqVAaF]1aR500Qx1}}Aa!HqtAaDy1~5!QqT	!A$FG1LLLQx1Q4!9QqT>AaF1Q6M!QB%,?????!!1%.QqT!A$Yqt^+afQqVmAqbE.AABaGGG wik>+H+HA+NOqvr1"aR|b!QBrl:RA2qb\IJr1"aRL1aR8E!BrN22Qr1"XeAb!n5LLa AvvaD1IadNQx1Q4!9QqT>)))5 
"	!	!s   I5J


Jc                    ^ [        SSS9n [        SSS9n[        SU 5      u  p#[        SU5      u  pE[        SU /5      u  pg[        S	U/5      u  p[        S
5      n
[        S5      m[        R
                  " U
TS5        [        SU /[        R                  " S5      U
5      n[        R                  UR                     U
:X  d   e[        SU/[        R                  " S5      T5      nU" U5      U" U* 5      -  nU" U5      U" U* 5      -  nX-   nX-  n[        UX-  -
  SU-  U-  -
  X-  -
  5      S:X  d   eU" U5      U" U* 5      -  nU" U5      U	" U* 5      -  n[        UU-  UU-  5      (       d   e[        UU-  UU-  5      (       a   e[        R                  " U
5      n[        R                  " U5      U
:X  d   eT[        R                  ;   d   e[!        ["        U4S j5        [        R$                  " U
TS4U
SS45        [        R&                  " US5      [        R&                  " SU5      s=:X  a  S:X  d   e   e[        R(                  " 5         [        R                  SSSS.SSS S.SS S./:X  d   eT[        R                  ;  d   e[        R                  " T5      n[        R                  " U5      T:X  d   eT[        R                  ;   d   eg )Nr:   r;   r<   LorentzHLHzi,jzih,jhr^  zph qhGsymbolGHsymbolr   Gr?   GHrA   c                  4   > [         R                  " T SS5      $ Nr?   rA   )r!   set_comm)rh  s   r6   r   $test_TensorManager.<locals>.<lambda>  s    }55h1Er8   )r   r?   rA   )r   r?   )r   r   r    r   r!   rm  r#   r   rD   _comm_i2symbolr   r$   r7   comm_symbols2icomm_i2symbol_comm_symbols2ir,   r   	set_commsget_commclear)r:   re  r}   r  ihjhr   r  phqhrg  ri  rj  pspshrK   rM   qsqshr  nhrh  s                        @r6   test_TensorManagerr    s   iC8Gzd;H%)DAGX.FBy)DA'H:.FBYGj!H7Ha03	>#=#=a#@'JA''/7:::	D8*n&@&@&CX	NB	
1aeB
R&RC.C
A	
BBJ2c)CG34999	
1aeB
R&RC.CRVSV$$$$B2&&&&$$W-A&&q)W444}44444
:EFWXa0'!A?!!!Q'=+A+A!Q+GL1LLLLLQ!q/a13E!t}!UUUU=88888		%	%h	/B&&r*h666}44444r8   c                  l
   [        S5      n [        SU SS9n[        SU5      u  p#pEnUR                  n[	        SU/5      u  pUR
                  S   n
U" U5      U	" U5      -  nU" U5      U" U5      -  n[        U5      [        U5      :w  d   eU" U5      U" U5      -  U" X#5      -   nU" U5      U" U5      -  U" X#5      -
  n[        U5      [        U5      :w  d   eUR                  " UR
                  6 U:X  d   eUR                  " UR
                  6 U:X  d   eUR                  " UR
                  6 U:X  d   eUR                  " UR
                  6 U:X  d   eU
R                  " U
R
                  6 U
:X  d   eU" U5      R                  " U" U5      R
                  6 U" U5      :X  d   eUR                  " UR
                  6 U:X  d   eUR                  " UR
                  6 U:X  d   eUR                  " UR
                  6 U:X  d   eUR                  " UR
                  6 U:X  d   e[        UR                  " UR
                  6 5      [        U5      :X  d   e[        UR                  " UR
                  6 5      [        U5      :X  d   e[        UR                  " UR
                  6 5      [        U5      :X  d   e[        UR                  " UR
                  6 5      [        U5      :X  d   e[        U
R                  " U
R
                  6 5      [        U
5      :X  d   e[        U" U5      R                  " U" U5      R
                  6 5      [        U" U5      5      :X  d   e[        UR                  " UR
                  6 5      [        U5      :X  d   e[        UR                  " UR
                  6 5      [        U5      :X  d   e[        UR                  " UR
                  6 5      [        U5      :X  d   e[        UR                  " UR
                  6 5      [        U5      :X  d   eS nU" U5      (       d   eU" U5      (       d   eU" U5      (       d   eU" U5      (       d   eU" U
5      (       d   eU" U" U5      5      (       d   eU" U5      (       d   eU" U5      (       d   eU" U5      (       d   eU" U5      (       d   e[        R                  " S	SS
5      nUR                  " UR
                  6 U:X  d   e[        UR                  " UR
                  6 5      [        U5      :X  d   eU" U5      (       d   eg )Nr   r:   r;   r6  r7  r^  r?   c                 :    [        S U R                   5       5      $ )Nc              3   B   #    U  H  n[        U[        5      v   M     g 7fr1   )r2   r   ).0_s     r6   	<genexpr>/test_hash.<locals>.check_all.<locals>.<genexpr>  s     :A:a''s   )allr   )objs    r6   	check_alltest_hash.<locals>.check_all  s    ::::r8   ra   r`   )
r   r   r   r   r    r   hashfuncr   rl   )r   r:   rG   rH   rQ   rR   ry   r   r   r  p_typerM   r  r  t4r  	tsymmetrys                    r6   	test_hashr    s\   sAiQ3?G";8MA!Ay)DAVVAYF	
1adB	
1adB8tBx	
1adQqV	B	
1adQqV	B8tBx66166?a<<&'11166166?a66166?a;;$...Q499qtkk"ad***77BGG"""77BGG"""77BGG"""77BGG""" DG+++gll+,W=== DG+++ DG+++V[[)*d6l:::!		AaD;;'(D1J666!"d2h...!"d2h...!"d2h...!"d2h...; Q<<<WQ<<<Q<<<VQqT???R===R===R===R===--b!Q7I>>9>>*i777		/0DOCCCYr8   c                  b   [        S5      n [        SSS9nXl        [        SU5      u  p#pEn[	        S5      u  pxp[        SU/5      nXxX/Ul        [        SU/[        R                  " S	5      S
5      n[        S5      Ul        [        SU/S-  5      nXl        [        S5      n[        SU/S-  5      nXl        [        S5      n/ SQUl        [        SU5      u  nnn[        SU/5      nXxX/Ul        Sn[        S5      nUUl        [        SU5      u  nnn[        SU/5      n[        SS5      Ul        [        SU/S-  5      n[        SS5       VVs/ s H#  n[        SS5       Vs/ s H  nUU-   PM
     snPM%     snnUl        [        SU/S-  5      n[        SS5       VVVs/ s HC  n[        S	S5       VVs/ s H&  n[        SS5       Vs/ s H  nUU-   U-   PM     snPM(     snnPME     snnnUl        XXUXXU
UUUUUUUUUUUXUX#XEU4$ s  snf s  snnf s  snf s  snnf s  snnnf )N)r?   r   r   r   r   rc   r   r   r   r   rc   r   r   r   r   rc   r:   r   r   i0:5r  r@   rB   r?   GcommABrA   )r?   rA   r`   r      r;        	   r   rc   ra   rg   r   BALorentzDrc   r?   r?   r?   zmu0:3rC   )r?   r?   r   )r?   r   r?   r   r?   r   ndmzn0:3NA
      NBNCr`   r  r  )	r   r   datar   r   r#   r   rD   range) 	minkowskir:   r   r   r   r   r   r   r  r  r  r@   rB   r  	ba_matrixr  r  mu0mu1mu2rC   
ndm_matrixr  n0n1n2r  r  r}   r  r  r  s                                    r6   _get_valued_base_test_variablesr    s@     I iQ/GL'8BBBL)MA23	"AR_AF3	>#=#=a#@'JA1XAF	D7)A+	&BG  I 
D7)A+	&BG z*H!HM"7H5MCc3
#AR_AFJ
 %
 CCH,JBB	D3%	 BBmBG	D3%'	"B5:2r]C]U2r]+]!]+]CBG	D3%'	"BLQRSUVKXKqeAqkBka,11Q,kBKXBG"!WXsCcSUWYBI*bbbR R	 ,C,BXsB   H)H8H(H*=H$H#H$*H*HH$$H*c                     [        5          [        5       u  pp#pEpgppppnnnnnnnnnnnnn[        / SQ5      [        / SQ5      [        / SQ5      [        / SQ5      /n[        U 5      XgX/:X  d   e[        U5      / SQ:X  d   e[        U5      U:X  d   e[        U " U5      5      XgX/:X  d   e[        U" UU5      5      U:X  d   e[        SU" UU5      -  5      U Vs/ s H  nSU-  PM
     sn:X  d   e[        SU" UU5      -  5      U Vs/ s H  nSU-  PM
     sn:X  d   e[        U " U5      U " U5      -   5      SU-  SU-  SU-  SU	-  /:X  d   eU" UU5      U" UU5      -
  S	:X  d   e[        U" UU5      SU" UU5      -  -
  5      U Vs/ s H  nU* PM     sn:X  d   e S S S 5        g s  snf s  snf s  snf ! , (       d  f       g = f)
Nr  r  r  r  )r?   rA   r`   r   r  r;  r  r  r  r   rc   ra   rg   r   r  r  r`   r  rA   r   )r.   r  r   r   )r@   rB   r  r  rC   r:   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   list_BAr}   s                                  r6   test_valued_tensor_iterr  '  s   		!QpQr	Orq1"(3TV	RRIz2r2r2&l(;U>=RTYZjTklAw1"/)))I"XXXXBx7""" AbE{qbo---Br2J7***A2r
N#w'?w!Aw'????BBO$(AAa(AAAA AbEAbEM"qsAbD!B$"&===="bzBr2J&!+++Br2JRBZ/04IAaR4IIII) 
"	! (@(A 5J) 
"	!s7   CF=F.- F=F3A3F=F8F=.F==
Gc                     [        5          [        5       u  pp#pEpgppppnnnnnnnnnnnnnU " U* 5      S   U " U5      S   :X  d   eU " U* 5      S   U " U5      S   * :X  d   eU" UU5      S   S:X  d   eU" UU* 5      S   S:X  d   eU" U* U* 5      S   S:X  d   eU" U* U5      S   S:X  d   e S S S 5        g ! , (       d  f       g = f)Nr   r?   r?   r?   rc   )r.   r  r@   rB   r  r  rC   r:   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   s                                r6   3test_valued_tensor_covariant_contravariant_elementsr  ?  s    		!QpQr	Orq1"(3TV	RRIz2r2r2"vayAbE!H$$$"vayQrU1XI%%%"bz$2%%%"rc{4 A%%%2#s|D!R'''2#r{4 A%%% 
"	!	!s   B$B99
Cc                     [        5          [        5       u  pp#pEpgppppnnnnnnnnnnnnnU" UU5      R                  5       nU[        / SQ/ SQ/ SQ/ SQ/5      :X  d   eU" UU* 5      R                  5       [	        S5      :X  d   eU " U5      R                  5       [        XgX/5      :X  d   eU " U* 5      R                  5       [        Xg* U* U	* /5      :X  d   e S S S 5        g ! , (       d  f       g = f)Nr  r  r  r  r   )r.   r  
get_matrixr   r   )r@   rB   r  r  rC   r:   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   matabs                                 r6   test_valued_tensor_get_matrixr  M  s   		!QpQr	Orq1"(3TV	RRIz2r2r22r
%%' / / / /	 " # # 	# # "rc{%%'3q6111 u!VQBO%<<<<"v  "farcB3-?&@@@@# 
"	!	!s   CC$$
C2c                     [        5          [        5       u  pp#pEpgppppnnnnnnnnnnnnnU " U5      U " U* 5      -  R                  US-  US-  -
  US-  -
  U	S-  -
  :X  d   eU " U5      U " U* 5      -  R                  U S-  :X  d   eU " U5      U " U* 5      -  R                  U " U5      S-  :X  d   eU " U5      U" U* 5      -  R                  U* SU-  -
  SU	-  -
  :X  d   e[        S5       H?  n[        S5       H-  nU " U5      U" U* 5      -  UU4   XgX/U   / SQU   -  :X  a  M-   e   MA     U" U5      U" U* 5      -  R                  US-  * US-  -   US-  -   U	S-  -   :X  d   eU " U5      U" UU* 5      -  nU " U5      R                  S:X  d   eU" UU* 5      R                  S:X  d   eUR                  S:X  d   e[        S5       H  nUU   XgX/U   :X  a  M   e   S S S 5        g ! , (       d  f       g = f)NrA   r`   r   )r   rc   ra   rg   r?   )r.   r  r  r  r   ) r@   rB   r  r  rC   r:   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   r}   r  contrexps                                    r6   test_valued_tensor_contractionr  a  s.   		!QpQr	Orq1"(3TV	RRIz2r2r2"2#$$Qq(827(BR1W(LLLL"2#$$Q..."2#$$"
222"2#$$a"fq2v(====qA1X"2#1-!1CoVWFX1XXXX  
 #C4 &&16'B!G*;bAg*Ea*OOOOR52b2#;&uzzQ"rc{1$$$}}!!!qAA;1"/!"4444 ) 
"	!	!s   DG*(B1G*G**
G8c                      [        5          [        5       u  pp#pEpgppppnnnnnnnnnnnnnU" UU* 5      R                  S:X  d   eU" UU* 5      R                  S:X  d   e S S S 5        g ! , (       d  f       g = f)Nr   rA   r.   r  r  r  s                                r6   #test_valued_tensor_self_contractionr  y  s    		!QpQr	Orq1"(3TV	RRIz2r2r2"rc{1$$$"rc{1$$$ 
"	!	!s   AA**
A8c                  t   [        5          [        5       u  pp#pEpgppppnnnnnnnnnnnnnUS-  US-  * US-  -   US-  -   U	S-  -   :X  d   eUS-  [        US-  * US-  -   US-  -   U	S-  -   5      :X  d   eU" U5      S-  US-  :X  d   eU" U5      S-  US-  :X  d   e S S S 5        g ! , (       d  f       g = f)NrA   r?   )r.   r  r   r  s                                r6   test_valued_tensor_powr    s    		!QpQr	Orq1"(3TV	RRIz2r2r2!t1ur1u}r1u,r1u4444!ttQTEBEMBE1BE9::::vqyAqD   vqyAqD    
"	!	!s   BB))
B7c                  t   [        5          [        5       u  pp#pEpgppppnnnnnnnnnnnnn[        S5      u  nnnUU " U5      -  U" U5      -  n U S   UU-  :X  d   eU S   SU	-  U-  :X  d   eUU " U5      -  U" U* 5      U-  -  R                  n!U!R	                  5       U* U-  U-  SU-  U-  U-  -
  SU	-  U-  U-  -
  :X  d   eU " U5      U" U5      -   n"U"S   U:X  d   eU"S   US-   :X  d   eU"S   US-   :X  d   eU"S   U	S-   :X  d   eU " U5      U" U5      -
  n#U#S   U:X  d   eU#S   US-
  :X  d   eU#S   US-
  :X  d   eU#S   U	S-
  :X  d   eU"U" U* 5      -  R                  U* SU-  -
  SU	-  -
  S-
  :X  d   eUU " U5      -  UU" U5      -  -   n$U$U" U5      -  S	-  n%U%SU-  U" UU5      -  -   n&U&S-  n'U'S-  U&:X  d   eU'U" U* U* 5      -  n(U(R                  R	                  5       S
U-  U-  SU-  U-  -   SU-  U-  -   S
U	-  U-  -   SU-  -   SU-  -   :X  d   e S S S 5        g ! , (       d  f       g = f)Nzx1:4r  )r`   r`   r`   rA   r   r?      r               )r.   r  r   r  r   ))r@   rB   r  r  rC   r:   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   x1x2x3
rank2coeff
coeff_expradd_exprsub_exprr  r  r  r  expr5s)                                            r6   test_valued_tensor_expressionsr    s   		!QpQr	Orq1"(3TV	RRIz2r2r2V_
B !B%Z!B%'
$27***$1r6B;...AbEzafrk288
  "rc"fRi!B$r'"*&<qtBwrz&IIIIR51R5={a{b1f$$${b1f$$${b1f$$$R51R5={a{b1f$$${b1f$$${b1f$$$1bS6!''B32:"+<r+AAAA1R52ae8#"$"RBZ'	qyE!!!RC"%zz  "bd2g2b&82b58&CbeBh&NQTUWQW&WZ[\^Z^&^^^^K 
"	!	!s   HH))
H7c                     [        5          [        5       u  pp#pEpgppppnnnnnnnnnnnnnU " U5      U " U* 5      -  US-  US-  -
  US-  -
  U	S-  -
  -
  nUR                  S:X  d   eUS-  US-  -
  US-  -
  U	S-  -
  U " U5      U " U* 5      -  -
  nUR                  S:X  d   eU " U5      U " U* 5      -  US-  -
  US-  -   US-  -   U	S-  -   nUR                  S:X  d   eU" U5      U" U* 5      -  SUS-  -  -   SUS-  -  -
  SUS-  -  -
  SU	S-  -  -
  U " U5      U " U* 5      -  -
  n U R                  S:X  d   e S S S 5        g ! , (       d  f       g = f)NrA   r   r  )!r@   rB   r  r  rC   r:   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   r  r  r  r  s!                                    r6   test_valued_tensor_add_scalarr    s   		!QpQr	Orq1"(3TV	RRIz2r2r2 "af1r1ur1u 4r1u <=zzQ 1r1ur1u$r1u,quQsV|;zzQ 2q"v1$r1u,r1u4r1u<zzQ #q#w1a4'!BE'1Ab!eG;aAgE"aQSPSfTzzQ% 
"	!	!s   D0E
Ec                  T   [        5          [        5       u  pp#pEpgppppnnnnnnnnnnnnn[        S5      nSS/Ul        [	        SU5      u  nnn[        SSS9u  nnn n![        SU/S-  5      n"UU/U U!4/U"l        [        S	U/S-  5      n#UU /UU!//U#l        U"" UU5      U#" U* U* 5      -  n$U$R                  US-  US-  -   U S-  -   U!S-  -   :X  d   eU$R                  US-  SU-  U -  -   U!S-  -   :w  d   eU"" UU5      U"" U* U* 5      -  n%U%R                  US-  UU -  -   U U-  -   U!S-  -   :X  d   eU%R                  US-  SU-  U -  -   U!S-  -   :w  d   eUU"" UU* 5      -  R                  n&U&R                  5       UU-  UU!-  -   :X  d   e S S S 5        g ! , (       d  f       g = f)
N	Euclideanr?   zi1:4za b c dF)commutativeV1rA   V2)r.   r  r   r  r   r   r#   r   )'r@   rB   r  r  rC   r:   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   euclidrG   rH   rQ   rR   r  r  vtpvtp2Vcs'                                          r6   test_noncommuting_componentsr    s   		!QpQr	Orq1"(3TV	RRIz2r2r2 -!f#FF3
BYE:
1avhqj)q6Aq6"vhqj)q6Aq6"Rj2rcB3<'xx1a4!Q$;A-14444xx1a4!A#a%<!Q$...."bz"bS2#,&yyAqD1Q3J1,q!t3333yyAqD1Q3q5L1a4////"R"+o##yy{a!ea!em+++3 
"	!	!s   FF
F'c                  ^   [        5          [        5       u  pp#pEpgppppnnnnnnnnnnnnn[        U5      nU" U5      U" U* 5      -  R                  U" U5      R	                  5       R
                  U-  U" U5      R	                  5       -  S   :X  d   e S S S 5        g ! , (       d  f       g = f)N)r   r   )r.   r  r   r  r  rR  )r@   rB   r  r  rC   r:   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   mmatrixs                                 r6   test_valued_non_diagonal_metricr    s    		!QpQr	Orq1"(3TV	RRIz2r2r2$2r2#w$$B):):)<)>)>)H2b6K\K\K^)^`d(eeee 
"	!	!s   B	B
B,c                     [        5          [        5       u  pp#pEpgppppnnnnnnnnnnnnnUS-   US-
  X/n[        U5      U l        [	        S5       H!  nU " U5      R                  U   UU   :X  a  M!   e   [        S5      u  nn n![        UUU U!/5      U " U* 5      l        [	        S5       HG  nU " U5      R                  U   UU* U * U!* /U   :X  d   eU R                  U   UU* U * U!* /U   :X  a  MG   e   [	        S5       V"Vs/ s H1  n"[	        S5       Vs/ s H  nUS-  SUS-  -  -
  U"S-   -  PM     snPM3     n#n"nU#U" U* U* 5      l        [	        S5       H  n[	        S5       H  n"U" UU5      R                  UU"4   U#U   U"   U(       a  SOS-  U"(       a  SOS-  :X  d   eU" U* U5      R                  UU"4   U#U   U"   U"(       a  SOS-  :X  d   eU" UU* 5      R                  UU"4   U#U   U"   U(       a  SOS-  :X  d   eU" U* U* 5      R                  UU"4   U#U   U"   :X  a  M   e   M     U#U" U* U5      l        [	        S5       H  n[	        S5       H  n"U" UU5      R                  UU"4   U#U   U"   U(       a  SOS-  :X  d   eU" U* U5      R                  UU"4   U#U   U"   :X  d   eU" UU* 5      R                  UU"4   U#U   U"   U(       a  SOS-  U"(       a  SOS-  :X  d   eU" U* U* 5      R                  UU"4   U#U   U"   U"(       a  SOS-  :X  a  M   e   M     S S S 5        g s  snf s  snn"f ! , (       d  f       g = f)Nr?   r   zqx qy qzr`   rA   r  rc   )r.   r  r   r  r  r   )$r@   rB   r  r  rC   r:   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   arrr}   qxqyqzr  random_4x4_datas$                                       r6    test_valued_assign_numpy_ndarrayr    s   		!QpQr	Orq1"(3TV	RRIz2r2r2 sBqD"!sqAuzz!}A...  Z(
BQBO,2#qAR5::a=QbS2#$6q$999966!9RC"rc 21 5555 
 MRRSHUHqqBAQT!AqD&[1Q3/BHU+B3qA1X"bzq!t,0B10EQrTU0V^_XZef0gggg2#r{''1-1CA1FaUV1WWWW"rc{''1-1CA1FaUV1WWWW2#s|((A./!2DQ2GGGG	   +B3qA1X"bzq!t,0B10EQrTU0VVVV2#r{''1-1CA1FFFF"rc{''1-1CA1FaUV1W_`Y[fg1hhhh2#s|((A./!2DQ2GqVW2XXXX	  ; 
"	!$ CU% 
"	!sK   A$M3A<M3ML=L86L==C/M0C3M'M8L==M
Mc                     [        5          [        5       u  pp#pEpgppppnnnnnnnnnnnnn/ SQ/ SQ/ SQ/ SQ/nUUl        [        U5      nUR                  nUR                  5       n [        S5      n!UR                  5       n"[        S5       GH*  n#[        S5       GH  n$U" UU5      R                  U#U$4   UU#U$4   :X  d   eU" U* U* 5      R                  U#U$4   U U#U$4   :X  d   eU" UU* 5      R                  U#U$4   U!U#U$4   :X  d   eU" U* U5      R                  U#U$4   U!U#U$4   :X  d   eU" UU5      U#U$4   UU#U$4   :X  d   eU" U* U* 5      U#U$4   U U#U$4   :X  d   eU" UU* 5      U#U$4   U!U#U$4   :X  d   eU" U* U5      U#U$4   U!U#U$4   :X  d   eU"" UU* 5      U#U$4   U!U#U$4   :X  a  GM   e   GM-     S S S 5        g ! , (       d  f       g = f)N)rA   rA   rA   r?   )rA   r`   r?   r   )rA   r?   rA   r`   )r?   r   r`   rA   r   )	r.   r  r  r   r   invr   get_kronecker_deltar  )%r@   rB   r  r  rC   r:   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   mdr  r   minvmeyeKDr}   r  s%                                        r6   test_valued_metric_inverser    s.   		!QpQr	Orq1"(3TV	RRIz2r2r2
 L,E2Juuw1v ((*qA1Xb"~**1a40AadG;;;rcB3',,QT2d1a4j@@@b2#++AqD1T!Q$Z???rc2++AqD1T!Q$Z???b"~ad+qAw666rcB3'1-ad;;;b2#q!t,QT
:::rc2q!t,QT
:::"rc{1a4(DAJ666  % 
"	!	!s   F$G4	G
Gc                  P   [        5          [        5       u  pp#pEpgppppnnnnnnnnnnnnnU " U5      U " U5      -  nUR                  5       nUU " U5      U " U5      -  :X  d   e[        S5       H'  n[        S5       H  n UUU 4   UU U4   :X  a  M   e   M)     U" U5      U " U5      -  U" U5      -  n!U!R                  5       n"[        S5       H;  n[        S5       H)  n [        S5       H  n#U!UU U#4   U"U UU#4   :X  a  M   e   M+     M=     S S S 5        g ! , (       d  f       g = f)Nr   )r.   r  r$   r  )$r@   rB   r  r  rC   r:   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   e1e2r}   r  o1o2r  s$                                       r6   test_valued_canon_bp_swapaxesr  8  s/   		!QpQr	Orq1"(3TV	RRIz2r2r2rU1R5[[[]QrU1R5[   qA1X!Q$x2ad8+++   rU1R5[2[[]qA1XqAaAg;"Q1W+555 "   
"	!	!s   BDA,DD
D%c                    ^^^^	^
^ [        5          [        SSS9n [        SU 5      u  pp4/ SQU l        [	        SU /S-  5      n[	        SU /S-  [
        R                  " S5      5      m[	        SU /S-  [
        R                  " S5      5      m[        / S	Q/ S
Q/ SQ/5      m
T
T
R                  -   mT
T
R                  -
  m	T
Ul        TUl        T	Ul        S mTTl        [        [        UUU
4S j5        [        [        UUU	4S j5        T	Tl        [        [        UUU4S j5        [        [        UUU
4S j5        / SQ/ SQ/ SQ/Tl        / SQ/ SQ/ SQ/Tl        S S S 5        g ! , (       d  f       g = f)NITr`   r   i0:4r?   r?   r?   r@   rA   ra   )r?   rA   r`   )r   r  r;  )r  r  r  c                     Xl         g r1   )r  )r@   dats     r6   assign:test_valued_components_with_wrong_symmetry.<locals>.assign\  s    Fr8   c                     > T" T T5      $ r1   r   )A_symr  	mat_nosyms   r6   r   <test_valued_components_with_wrong_symmetry.<locals>.<lambda>`  s    6%#;r8   c                     > T" T T5      $ r1   r   )r	  r  mat_antisyms   r6   r   r  a  s    6%#=r8   c                     > T" T T5      $ r1   r   )	A_antisymr  mat_syms   r6   r   r  d  s    6)W#=r8   c                     > T" T T5      $ r1   r   )r  r  r
  s   r6   r   r  e  s    6)Y#?r8   )r   r   r   )r.   r   r   r  r#   r   rF   r   rR  r,   r   )r  r   r   r   r   A_nosymr  r	  r  r  r
  r  s         @@@@@@r6   *test_valued_components_with_wrong_symmetryr  K  s'   		!Tq)'3S2$q&)3Q(F(Fq(IJsRDFN,J,J2,NO	GGG45	ikk))++- "	 
z;<z=>$	z=>z?@I6
#Y	:	9 
"	!	!s   EE''
E5c                  v   [        5          [        SSSSS9n SS/U l        [        SU 5      u  pp4[	        SU /5      nSS	/Ul        [	        S
U /S-  [
        R                  " S5      5      nS	S/SS	//Ul        U" X5      U" U* 5      -  U" X$5      -  U" U* 5      -  nUR                  [        S	S	/S	S//5      :X  d   eU" X5      U" X$5      -  U" U* 5      -  U" U* 5      -  nUR                  UR                  :X  d   eXw-   R                  SUR                  -  :X  d   e S S S 5        g ! , (       d  f       g = f)Nr:   r?   r}   rA   r[   r=   r   rc   \mu, \nu, \alpha, \betaur   ri   ra   )r.   r   r  r   r#   r   rF   r   )	r:   rt   ru   rq   rr   r  ri   mul_1mul_2s	            r6   test_issue_10972_TensMul_datar  j  s@   		!!)Q3TUVAw,-J-46 sWI&QsWIaK)G)G)KLa&q' "q%y(1R;6D5A

eaVaV$45565"q{*QvY6D5A

ejj()($$EJJ676) 
"	!	!s   DD**
D8c                     [        5          [        SSSSS9n / SQU l        [        SU 5      u  pp4[	        SU /5      n/ S	QUl        [	        S
U /S-  [
        R                  " S5      5      n[        S5      u  pxppSXxU	/U* SX* /U* U* SU
/U	* X* S//Ul        U" X5      U" U* 5      -  nU" U5      U" U5      -  R                  [        / SQSUS-  Xx-  Xy-  /SXx-  US-  X-  /SXy-  X-  U	S-  //5      :X  d   eU" U5      U" U5      -  R                  5       R                  U" U5      U" U5      -  R                  :X  d   eU" X5      U" XB5      -  U" U* 5      -  U" U* 5      -  R                  U" U5      U" U5      -  R                  * :X  d   eU" X15      U" XB5      -  U" U* 5      -  U" U* 5      -  R                  U" U5      U" U5      -  R                  :X  d   e[	        SU /S-  [
        R                  " S5      5      nU R                  Ul        U" U5      U" U5      -  U" X5      -   nU" U* 5      U" X5      -  nUR                  [        / SQ5      :X  d   eU" U* 5      U" X5      -  U" X$5      -  nUR                  [        R                  " SSS5      :X  d   eU" X5      U" X$5      -  U" U* U* 5      -  nUR                  SS S 24   [        / SQ5      :X  d   eUR                  S S 2S4   [        / SQ5      :X  d   eU" U* 5      U" X5      -  nUR                  [        / SQ5      :X  d   eU?S S S 5        g ! , (       d  f       g = f)Nr:   r?   r;   r   r  r  r  r  r  ri   rA   ra   zE_x E_y E_z B_x B_y B_zr   )r   r   r   r   r   )r.   r   r  r   r#   r   rF   r   r   r$   zeros)r:   rt   ru   rq   rr   r  ri   ExEyEzBxByBzr   r   perpr  r  Fperpmul_3s                       r6   test_TensMul_datar&    sr   		!!)Q3TUV$,-J-46 sWI&sWIaK)G)G)KL!()B!COS!RS2#q"S"c1	 bI2#22$$|q"'27;"'27;"'27;= >> 	 > 22((*//AbEAbEM3G3GGHG2$+ai7!TE(BHHR51R5=&&&' 	 ' 5$+ai7!TE(BHH22$$% 	 % sWIaK)G)G)JK uqu}qy(2#b%

eL11212#b(4>9

ekk!Q2232R$r.01eVdU3CC

1a4 E,$7787

1a4 E,$77872#r&

eL1121 Fq 
"	!	!s   L-M
Mc                     [        5          [        SSSSS9n SS/U l        [        SU 5      u  pp4[        SU 5      u  pV[	        S	U /S-  [
        R                  " S5      5      nU R                  Ul        [	        S
U /5      nSS/Ul        U" X#5      U" XE5      -  U" U* 5      -  U" X#5      U" U5      -  -
  n	U	R                  [        R                  " SSS5      :X  d   eU" X#5      U" X5      -  U" U* 5      -  U" X#5      U" U5      -  -
  n
U
R                  [        R                  " SSS5      :X  d   eU" U5      U" U5      -  U" X5      -   nU" U* 5      U" X5      -  nUR                  [        SS/5      :X  d   eU" U* 5      U" X15      -  U" XB5      -  nUR                  [        R                  " SSS5      :X  d   e S S S 5        g ! , (       d  f       g = f)Nr:   r?   r}   rA   r  rc   rP   zi_0:2r   r  r   )	r.   r   r  r   r#   r   rF   r   r  )r:   rG   rH   rQ   rR   r   r   r   r  add_1add_2r#  r  r  s                 r6   test_issue_11020_TensAdd_datar*    s   		!!)Q3TUVAw#L':
a1 sWIaK)G)G)JKsWI&Q!!A("QsV+ag!n<

ekk!Q2232!!A("QsV+ag!n<

ekk!Q2232 tad{QqW$1"Q
"

eQFm+,+1"Q
"T!Z/

ekk!Q22327 
"	!	!s   F5G


Gc                      [        SSS9n [        SU 5      u  pp4n[        SU 5      n[        SU 5      n[        SX /5      n[        SX /[        R                  " S	5      5      n	U" X5      n
U" X* 5      nU" X5      U	" X45      -  nU" X5      U	" X2* 5      -  nU" X5      U	" U* U* 5      -  nX-   n[        U
R                  5      US
4US4/:X  d   e[        U
R                  5      / :X  d   e[        U
R                  5      US
4US4/:X  d   e[        UR                  5      / :X  d   e[        UR                  5      US
4U* S4/:X  d   e[        UR                  5      US
4U* S4/:X  d   e[        UR                  5      US4US4US4US4/:X  d   e[        UR                  5      / :X  d   e[        UR                  5      US4US4US4US4/:X  d   e[        UR                  5      US4US4/:X  d   e[        UR                  5      US4U* S4/:X  d   e[        UR                  5      US4US4US4U* S4/:X  d   e[        UR                  5      / :X  d   e[        UR                  5      US4US4U* S4U* S4/:X  d   e[        UR                  5      US4US4U* S4U* S4/:X  d   e[        UR                  5      US4US4US4US4/:X  d   e[        UR                  5      US4U* S4/:X  d   e[        UR                  5      US4US4US4U* S4US4US4/:X  d   eU
R                  5       X/:X  d   eU
R                  5       X/:X  d   eUR                  5       Xf* /:X  d   eUR                  5       / :X  d   eUR                  5       XX4/:X  d   eUR                  5       XX4/:X  d   eUR                  5       XX6* /:X  d   eUR                  5       X/:X  d   eUR                  5       XgU* U* /:X  d   eUR                  5       / :X  d   eg )Nr:   r;   r<   r  r   L_1r@   rB   rA   )r?   r   r  r  )r   r?   r?   r  r  )r   r   r?   r   )r   r?   r?   r   )r   r   r?   r?   )r   r?   r?   r?   )r   r   r#   r   rF   r   _iterate_free_indices_iterate_dummy_indices_iterate_indicesr   get_free_indices)r;   r   r   r   r   r   L0L1r@   rB   r  r  e3e4e5e6s                   r6   test_index_iterationr7    s    	c2A'2BBB	q	!B	q	!B3A3 > >q ABA	
2B	
2cB	
2!B(	B	
2!Bs)	B	
2!RC*	B	B(()r6lRL-IIII))*b000##$"fF|(DDDD(()R///))*F|rc6].KKKK##$"fV}(EEEE(()r9oIQSU^P_bdfoap-qqqq))*b000##$"i2y/BPY?]_aj\k(llll(()r9oI-OOOO))*I"i@P.QQQQ##$"i2y/BPY?^`]`bk\l(mmmm(()R///))*IYSURUW`Qaegdgircs.tttt##$"i2y/RCQZK[_a^acl]m(nnnn(()r<.@2|BTWY[dVehjlugv-wwww))*L/ARCCV.WWWW##$"l);b,=ORTVbQcgifikwex{}  @I  {J  MO  QZ  L[  )\  \  \  \>>x''' RH,,,>>Cy((( B&&&>>//// RR$4444>>C0000 RH,,,>>bS1111 B&&&r8   c                     [        S5      n [        SU 5      u  pn[        SU 5      n[        SU /5      u  pVpx[	        S5      n	[        S5      n
[        [        U" U5      U" U5      5      [        5      (       d   e[        [        U" U5      U" U5      -   5      [        5      (       d   eU" U5      U" U* 5      U" U* 5      -   -  nUR                  U" U5      U" U* 5      U" U* 5      -   4:X  d   eX" U5      U" U* 5      -  U" U5      U" U* 5      -  -   :w  d   eUR                  5       U" U5      U" U* 5      -  U" U5      U" U* 5      -  -   :X  d   e[        U5      S:X  d   eU" U5      U" U5      -  U" U5      U" U5      -  -   n[        U5      S:X  d   eU" U* 5      U" U5      U" U5      -  U" U5      U" U5      -  U" U5      -  U" U* 5      -  -   -  nX" U* 5      U" U5      -  U" U5      -  U" U* 5      U" U5      -  U" U5      -  U" U5      -  U" U* 5      -  -   :w  d   eUR                  5       U" U* 5      U" U5      -  U" U5      -  U" U* 5      U" U5      -  U" U5      -  U" U5      -  U" U* 5      -  -   :X  d   e[        U5      S	:X  d   e[        UR                  5       5      S
:X  d   eU" U* 5      SU" U5      -  U" U5      -  U" U5      U" U5      -  -   -  nUR                  5       SU" U* 5      -  U" U5      -  U" U5      -  U" U* 5      U" U5      -  U" U5      -  -   :X  d   eSU" U5      -  U" U* 5      -  nUR                  S:X  d   eU" U5      U" U5      U" U5      -  U" U5      U" U5      U" U5      -   -  -   -  n[        U5      S:X  d   e[        UR                  5       5      S:X  d   e[        [        S5      [        5      (       d   e[        S5      R                  5       nUS:X  d   e[        U[         5      (       d   eU" U5      U" U* 5      -  U" U5      U" U* 5      -  -   nU" U* 5      U-  nU" U5      U-  nUR                  5       U" U5      U" U* 5      -  U" U5      -  U" U* 5      -  U" U5      U" U* 5      -  U" U5      -  U" U* 5      -  -   :X  d   eU" U5      U" U* 5      U" U* 5      U" U5      U" U* 5      -  U" U5      U" U* 5      -  -   -  -   -  nUR                  5       U" U5      U" U* 5      -  U" U5      U" U* 5      -  U" U5      -  U" U* 5      -  -   U" U5      U" U* 5      -  U" U5      -  U" U* 5      -  -   :X  d   eU" U* 5      U" U5      U" U* 5      -  U" U5      U" U* 5      -  -   -  nUR                  5       U" U* 5      U" U5      -  U" U* 5      -  U" U* 5      U" U5      -  U" U* 5      -  -   :X  d   e SU	" U
5      -   U" U5      -  nUR                  5       n[        U[        5      (       d   eUR                  SU" U5      -  U	" U
5      U" U5      -  4:X  d   eSU	" U
5      -   U" U5      -  U" U5      -   nUR                  5       n[        U[        5      (       d   eUR                  SU" U5      -  U	" U
5      U" U5      -  U" U5      4:X  d   eg )Nr;   zi j kr   A B C Dri   r   zA(L_0)*(A(-L_0) + B(-L_0))zA(i)*A(j) + A(i)*B(j)z2A(-L_0)*(A(L_0)*A(j) + A(L_0)*B(j)*C(L_1)*C(-L_1))z8A(j)*A(L_0)*A(-L_0) + A(L_0)*A(-L_0)*B(j)*C(L_1)*C(-L_1)rA   z%A(i)*(B(j)*C(k) + C(j)*(A(k) + D(k)))z0A(i)*B(j)*C(k) + A(i)*C(j)*A(k) + A(i)*C(j)*D(k)r`   )r   r   r   r    r   r   r2   r   r   r   r   rE   r$   r"  r   r   r   )r;   r}   r  r  r   r@   rB   rC   r   ri   r   r   tmp1p2p3expr_expands                    r6   test_tensor_expandr?    s   AWa(GA!
eQ
Ci!-JA!AsAc!A$!ow////fQqT!A$Y'1111Q4A2q!uD993C41cT7!233331Q41":!QrU
****;;=AaDA2J1ae3333t94444Q4!9qtAaDy Dt9////aR5!A$qt)ad1Q4i!nQrU223D1aR51:ad?QrU1Q4Z!_QqT%9!QB%%?????;;=AqbE!A$JqtOaeAaDj1oad.B1aR5.HHHHHt9LLLLt}}#]]]]aR5!AaD&1+!QqT	)*D;;=AaeGAaDL1-1"ad
1Q4????QqT6!QB%<D::??Q41adQqT1Q4!A$;//0Dt9????t{{}!SSSSgaj'****		B7N7b'""""	
1aead1aR5j	 B	
A2rB	
1bB99;!A$q!u*QqT/!QB%/!A$q!u*QqT/!QB%2GGGGGQ4A2A2!QrU
QqT!QB%Z 7889D;;=AaDA2J1aeAaDA2)>>1aeAaDQRTUSUQVAVVVVVaR5!A$q!u*qtAqbEz)*D;;=AqbE!A$Jq!u,q!uQqTz!QB%/?????
 !Had?D++-Kk7++++!A$!QqT	2222!Had?QqT!D++-Kk7++++!A$!QqT	1Q48888r8   c                  B  ^^^ [        S5      n [        SU 5      u  pp4[        SU /5      m[        S5      u  mmT" U5      T" [	        S5      5      :X  d   eT" U* 5      T" [	        S5      * 5      :X  d   e[        [        UUU4S j5        [        [        UU4S j5        g )Nr;   r  r@   zx yr   c                     > T " TT-   5      $ r1   r   )r@   r   ys   r6   r   6test_tensor_alternative_construction.<locals>.<lambda>^  s    a!fr8   c                     > T " ST-  5      $ r   r   )r@   r   s   r6   r   rC  _  s    q1vr8   )r   r   r#   r   r   r,   	TypeErrorr   )r;   r   r   r   r   r@   r   rB  s        @@@r6   $test_tensor_alternative_constructionrF  V  s    A#FA.NBB3A5>DAqR5AfTlO###bS6Qt}%%%%
9n%
:~&r8   c                  d  ^^^^^^ [        S5      n [        SSS9n[        SU 5      u  mmp#[        SU /5      u  pEpg[        SX /5      n[        SU /S	-  5      n	U" TT5      mU" TT* 5      S
S/SS	//U [	        S
S5      0mTR                  T5      TT/[        S
S/SS//5      4:X  d   eTR                  T5      [        S
S/SS//5      :X  d   eTR                  TTT/5      [        S
S/SS//5      :X  d   eTR                  TTT* /5      [        S
S/SS	//5      :X  d   eTR                  T[        S5      [        S5      * /5      [        S
S/SS	//5      :X  d   eTR                  TT* T/5      [        S
S/SS	//5      :X  d   eTR                  TT* T* /5      [        S
S/SS//5      :X  d   eTR                  TTT/5      [        S
S/SS//5      :X  d   eTR                  TTT* /5      [        S
S/SS	//5      :X  d   eTR                  TT* T/5      [        S
S/SS	//5      :X  d   eTR                  TT* T* /5      [        S
S/SS//5      :X  d   eTR                  T5      [        S
S/SS//5      :X  d   eU" TT5      mU" TT5      S
S/SS	//U [	        S
S5      0mTR                  T5      TT/[        S
S/SS	//5      4:X  d   eTR                  T5      [        S
S/SS	//5      :X  d   eTR                  TTT/5      [        S
S/SS	//5      :X  d   eTR                  TTT* /5      [        S
S/SS//5      :X  d   eTR                  TT* T/5      [        S
S/SS//5      :X  d   eTR                  TT* T* /5      [        S
S/SS	//5      :X  d   eTR                  TTT/5      [        S
S/SS	//5      :X  d   eTR                  TTT* /5      [        S
S/SS//5      :X  d   eTR                  TT* T/5      [        S
S/SS//5      :X  d   eTR                  TT* T* /5      [        S
S/SS	//5      :X  d   eU" TU5      mU" TT5      S
S/SS	//U [	        S
S5      0mTR                  T5      TU/[        S
S/SS	//5      4:X  d   eU" T5      U" T* 5      -  mU" T5      S
S/U [	        S
S5      0mTR                  T5      / S4:X  d   eTR                  T/ 5      S:X  d   eU	" TTT* U5      U" T* 5      -  U" U* 5      -  mU" T5      S
S/U	" TTX#5      [        S
/S-  5      R                  SSSS5      U [	        S
S5      0mTR                  T5      (       d   eU" TU5      mU" TT5      S
S/SS	//U [	        S
S5      0m[        [        UU4S j5        U" T5      mU" T5      S
S/0m[        [        UU4S j5        U" T5      mU" T5      S
S/SS	//0m[        [        UU4S j5        U" U5      U" TT5      -  U" U5      U" TT5      -  -   mU" U5      S
/U" U5      S
/U" TT5      S
S/SS	//U [	        S
S
5      0mTR                  T5      UTT/[        SS	/SS///5      4:X  d   eTR                  TUTT/5      [        SS	/SS///5      :X  d   eTR                  TUTT/5      [        SS/S	S///5      :X  d   eU" U5      U" U* 5      -  S-   mU" U5      SS/U [	        S
S
5      0mTR                  T/ 5      S:X  d   eU" TT5      U" TT5      -   mU" TT5      S
S/SS	//0mTR                  T5      TT/[        SS/SS//5      4:X  d   eTR                  TTT/5      [        SS/SS//5      :X  d   eTR                  TTT/5      [        SS/SS//5      :X  d   eU" TT5      U" TT5      -
  mU" TT5      S
S/SS	//0mTR                  TTT/5      [        SS/S
S//5      :X  d   eTR                  TTT/5      [        SS
/SS//5      :X  d   eU	" TTX"* 5      mU	" TTX"* 5      S
S/SS	//0mTR                  T5      TT/[        S
S/SS	//5      4:X  d   eU" TT* 5      mU" TT* 5      S0mTR                  T5      / S4:X  d   eU" TT* 5      mU" T* T* 5      [        / SQ/ SQ/ SQ/ S Q/5      U [        / SQ/ SQ/ SQ/ S Q/5      0mTR                  T5      / S	4:X  d   eU" T5      U" T5      -  mU" T5      S
S/0m[        [        UUU4S! j5        U" T5      mU" T5      S
S//0m[        [        UUU4S" j5        [        S#U5      u  mmn
[        S$U/5      nU" T5      U" T* 5      -  mU" T5      S
//0m[        [        UUUU4S% j5        g )&Nr;   L2rA   r   zi j k lr9  Hr   r   r?   r`   rc   ra   r   r}   r  rg      c                  &   > T R                  T5      $ r1   _extract_datar   repls   r6   r   )test_tensor_replacement.<locals>.<lambda>      t11$7r8   c                  &   > T R                  T5      $ r1   rL  rN  s   r6   r   rP    rQ  r8   c                  &   > T R                  T5      $ r1   rL  rN  s   r6   r   rP    rQ  r8   r;  r  d   q   r  r   *   r  r  r  r  c                  *   > T R                  TT/5      $ r1   replace_with_arrays)r   r  rO  s   r6   r   rP        t77qcBr8   c                  *   > T R                  TT/5      $ r1   rX  )r   r}   rO  s   r6   r   rP    rZ  r8   zu1:4Uc                  .   > T R                  TTT* /5      $ r1   rX  )r   rO  u1u2s   r6   r   rP    s    t77rB3iHr8   )r   r   r    r#   r/   rM  r   rY  r   reshaper,   r   )r;   rH  r  r+  r@   rB   rC   r   rI  r   u3r\  r   r}   r  rO  r^  r_  s               @@@@@@r6   test_tensor_replacementrb  b  sc   A	1	%B	1-JAq!i!-JA!3A3AAQ7DaGqeQqE]AtAr{3Dd#A2wB6H0I'JJJJ##D)UQGaW3E-FFFF##D1a&1UQGaW;M5NNNN##D1qb'2eaVaV<L6MMMM##D6#;*EF%RSUVQWZ[]^Y_P`Jaaaa##DA2q'2eaWr1g<N6OOOO##DA2r(3uq!fr2h=O7PPPP##D1a&1UQFRH;M5NNNN##D1qb'2eaWr1g<N6OOOO##DA2q'2eaVaV<L6MMMM##DA2r(3uq"g2w=O7PPPP##D)UQGaW3E-FFFFQq6DaFaUAa5M1d1bk2Dd#A1v1v6F0G'HHHH##D)UQFQF3C-DDDD##D1a&1UQFQF;K5LLLL##D1qb'2eaWq"g<N6OOOO##DA2q'2eaVb"X<N6OOOO##DA2r(3uq"gAw=O7PPPP##D1a&1UQFQF;K5LLLL##D1qb'2eaWq"g<N6OOOO##DA2q'2eaVb"X<N6OOOO##DA2r(3uq"gAw=O7PPPP Qq6DaFaUAa5M1d1bk2Dd#A1v1v6F0G'HHHHQ41":DaD1Q%DBK(Dd#Bx///##D"-333QA2q>!QB%1"%DaD1a&!Aa*eQCHo&=&=a!A&F4PQSU;WDd####Q7DaFaUAa5M1d1bk2D
:78Q4DaD1a&>D
:78Q4DaDAq6Aq6"#D
:78 Q4!Q<!A$qAw,&DaD1#qtaS!Aq'QFAa5>1T!AYGDd#Aq	5Aq6Aq6:J9K3L'MMMM##D1a)4AA?O>P8QQQQ##D1a)4AA?O>P8QQQQQ41":DaD1a&!T!QZ(D##D"-444 Q7Qq!WDaGq!fq!f%&Dd#A1v1v6F0G'HHHH##D1a&1UQFQF;K5LLLL##D1a&1UQFQF;K5LLLL Q7Qq!WDaGq!fq!f%&D##D1a&1UQGaV;L5MMMM##D1a&1UQFRG;L5MMMM Q1b>DaArNaVaV,-Dd#A1v1v6F0G'HHHHQ8Da!Hb>Dd#Bx///Q8D	1"qb	5,}mTU	5,}mLMD d#Aw... Q4!9DaD1a&>D
:BC Q4DaDAq6(D
:BC  +JBB3AR5B3<DbEQC5>D
:HIr8   c                     [        SSS9n [        SU /S-  5      n[        SU /5      n[        S5      u  p4pV[        S5      u  pxU" X4XV5      n	U	R                  [        5      [	        [        S5      X4XV5      :X  d   eU" X3* XV5      n
U
R                  [        5      [        [	        [        S5      XwXV5      USS	45      :X  d   eX" XVX3* 5      -   nUR                  [        5      [        [	        [        S5      XwXV5      USS	45      [        [	        [        S5      XVXw5      USS	45      -   :X  d   eU" U* 5      U	-  nUR                  [        5      [        [	        [        S5      U5      [	        [        S5      XtXV5      -  USS	45      :X  d   eU" U* 5      U
-  nUR                  [        5      [        [	        [        S5      U5      [	        [        S5      XwXX5      -  USS	4USS	45      :X  d   eg )
Nr;   r   r   r@   rB   r  zL_0:2r   r`   )r   r#   r   rewriter   r   r   )r;   r@   rB   r   r   r   r   r   r,  rn   ro   rp   b1b2s                 r6   test_rewrite_tensor_to_Indexedrg    s   #A3AA3AV_NBBwHC	
22	B::g'&+rr"FFFF	
2sB	B::g#gfSk3R&LsTUWXk"ZZZZ	aC 	 B::gGF3K22S!QK@GF3K2S!QK@	AA A A 
B3B::g#gfSk3&?sUX^`@e&ehkmnpqgr"ssss	
B3B::g#gfSk3&?sUX_a@g&gjmoprsitwz|}  @A  wB  #C  C  C  Cr8   c            
      0   [        SSS9n [        SU 5      u  pn[        S[        U SS9u  pEn[        SU 5      nU R                  nU R
                  n	[        S	U /5      n
[        S
U /5      n[        SX /5      n[        SSS9n[        S5      nUR                  U5      XB0:X  d   eUR                  U* 5      XB* 0:X  d   eUR                  U* 5      S:X  d   eUR                  U5      Xr0:X  d   eU	" X* U5      R                  U	" XU5      5      S:X  d   eU	" X* U5      R                  U	" XU5      5      XCU* U0:X  d   eU	" X* U5      R                  U	" XEU5      S5      S:X  d   eU" 5       R                  U
" U5      U" U5      -  5      U" 5       U
" U5      U" U5      -  0:X  d   eU" U5      R                  U
" U5      5      XAU" U5      R                  [        U
" U5      5      0:X  d   eU" XA5      R                  U
" U5      U" U5      -  5      XBU" XA5      R                  [        U
" U5      U" U5      -  5      0:X  d   eU" X5      R                  U
" U5      U" U5      -  5      U" X5      R                  [        U
" U5      U" U5      -  5      0:X  d   eU" X5      R                  U" X!5      5      U" X5      R                  [        U" X!5      5      0:X  d   eU" X5      R                  U" X!5      5      S:X  d   eU
" U5      U
" U5      -  R                  U" X!5      S5      S:X  d   eU" X5      R                  U" X!5      5      0 :X  d   eU	" XU5      R                  U	" X!U5      5      b   eU	" XU5      R                  U	" X#U5      5      0 :X  d   eg)zQ
Test match and replace with the pattern being a WildTensor or a WildTensorIndex
r   r`   r   r@  za b cTr   r   ignore_updownr   r   r   r@   Wunordered_indicesr\  Nr?   )r   r   r   r)   rA  rB  r#   r*   matchesreplaceheadr+   )r   r   r  r  rG   rH   rQ   r   rA  rC  r   r   r@   rk  r\  s                  r6   test_tensor_matchingrq    s^    
1	%BWb)GA!G?bX\]EAR AHHE
**C3A3A3!Asd3AsA99Q<A5   99aR=QrF"""99aR=D   99Q<A5   qA;A
,444qA;A
,r1===qA;s1qz1-2223;;!QqT	#QqT!A$Y'7777Q4<<1A1M!A$4G#HHHHQ6>>1Q4!9&1!]1Q4PQRSPT9=U*VVVVQ6>>1Q4!9&1Q6;;ad1Q4i8P*QQQQQ6>>1Q6#!]1Q75K'LLLLQ6>>1Q6#t+++qT!A$Y  !A&!,111 :eAj)R///q1:c!aj)111q1:c!aj)R///r8   c                     [        SSS9n [        SU 5      u  p[        SU /5      n[        SU /5      n[        SSS	9nU" U5      U" U5      -  U" U5      U" U5      -  -   R	                  U" U5      U" U5      -  U" U5      U" U5      -  -   5      0 :X  d   eU" U5      U" U5      -  U" U5      U" U5      -  -   R	                  U" U5      U" U5      -  U" U5      U" U5      -  -   U" U5      U" U5      -  -   U" U5      U" U5      -  -   5      b   eU" U5      U" U5      -  U" U5      U" U5      -  -   U" U5      U" U5      -  -   U" U5      U" U5      -  -   R                  U" X5      U" U5      U" U5      -  -   U" U5      U" U5      -  -   U" X5      SU" U5      -  U" U5      -  -   5      R                  5       U" U5      U" U5      -  SU" U5      -  U" U5      -  -   :X  d   eg
)z9
Test match and replace with the pattern being a TensAdd
r   r`   r   r^  r   r   rk  Trl  Nr   )r   r   r#   r*   rn  ro  r   )r   r   r  r   r   rk  s         r6   test_TensAdd_matchingrs    s    
1	%B%$DA3A3Asd3AqT!A$Y1ad",,ad1Q4i!A$qt).CEKKKqT!A$Y1ad",,ad1Q4i!A$qt).Cad1Q4i.ORSTURVWXYZW[R[.[]eeeqT!A$Y1ad"QqT!A$Y.1ad:DD	!1adQqT!A$Y&	!1Q4!
 $&AaD1I!A$qt+, , ,r8   c            	         [        SSS9n [        SU 5      u  pp4n[        S5      n[        S[        U SS9u  pxppU R
                  nU R                  n[        S	U /5      n[        S
U /5      n[        SSS9n[        S5      n[        S	5      nXo" U5      -  R                  U" U5      5      US0:X  d   eXn" XU5      -  R                  U" XU5      5      US0:X  d   eU" U5      U" U* 5      -  R                  U" U5      U" U* 5      -  S5      S:X  d   eU" U5      U" U5      -  U" U* 5      -  R                  U" X'5      U" U* 5      -  S5      S:X  d   eU" U5      U" U* 5      -  R                  U" U* 5      U" U5      -  S5      S:X  d   eU" U5      U" U5      -  U" U* 5      -  R                  U" U5      U" U5      -  U" U* 5      -  S5      S:X  d   eU" U5      U" U5      -  R                  U" 5       U" U5      -  U" U5      -  U" 5       U" U5      -  U" U5      -  5      R                  5       U" U5      U" U5      -  :X  d   eU" X1U5      U" U* U* U* 5      -  R                  U" XU5      U" U* X5      -  U" Xy5      U" X5      -  U" Xz5      U" X5      -  -
  5      R                  5       R                  5       U" X* 5      U" X%* 5      -  U" X* 5      U" X$* 5      -  -
  :X  d   eU" X1U5      U" U* U* U* 5      -  R                  U" XU5      U" U	* X5      -  U" Xz5      U" X5      -  U" X|5      U" X5      -  -
  5      R                  U5      R                  5       S:X  d   eU" U* 5      U" U5      -  U" U* 5      -  R                  UU" 5       -  U" U5      -  U" U* 5      -  UU" 5       -  5      R                  5       U" U* 5      :X  d   eUS-  U" U5      -  U" U* 5      -  R                  UU" 5       -  U" U5      -  U" U* 5      -  UU" 5       -  US-  -  5      R                  5       US-  :X  d   eU" U5      U" U5      -  R                  U" U5      U" U5      -  U" U5      U" U5      -  5      U" U5      U" U5      -  :X  d   eU" U5      U" U5      -  U" U5      -  R                  U" X#5      U" U5      -  U" X5      U" X$5      -  U" U* 5      -  5      U" U5      U" U5      -  U" U5      -  U" U5      -  U" U* 5      -  :X  d   e[        SU 5      u  nnnnU" U* U* 5      U" U5      -  U" U5      -  U" U* 5      -  nU" 5       U" U5      -  U" U* 5      -  R                  U5      nUUR                  5       ;  d   eg)z9
Test match and replace with the pattern being a TensMul
r   r`   r   z	p q r s twiza b c d e fTri  r   r   rk  rl  r\  r?   rc   r;  r   rA   zR_0 R_1 R_2 R_3N)r   r   r   r   r)   rA  rB  r#   r*   r   rn  ro  r   r$   r[  values)r   r   r  r  rH  rK   ru  rG   rH   rQ   rR   ry   rk   rA  rC  r   r   rk  r\  r  D0D1D2D3r   r  s                             r6   test_TensMul_matchingr{  +  s    
1	%B";3MA!	dB-RTdhiKAAHHE
**C3A3Asd3AsAsA!W!&2q'111#a!*_&&s1qz2r"g===qT!QB%Z!!1Q41":q1Q666qT!A$Yq!u_&&!q!ua8A===qT!QB%Z!!1aR51:q2a777qT!A$Yq!u_&&!QqT	!QB%;q@@@	
1adAC!HQqTM13qt8AaD=9>>@Q4!9	
	 a!*S!QBr]
",,AJsA2a{"!JuQz!E!JuQz$99	 dfXXZ2;uQr{"U1R[q%<<		=
	= a!*S!QBr]
",,AJsA2a{"!JuQz!E!JuQz$99	 nU#DDF		
	 rU1Q4Z1"''AC!QrU):BqsFDIIKqRSQSuTTTT!A$Yq!u_&&13qtAqbE(92ac6!Q$;HMMOSTVWSWWWW A$qt)ad1Q4i1ad3Q4!9	
	 A$qt)AaD.""1Q6!A$;!qvae0CEQ4!9QqT>!A$q!u$	%
	%
 $$5r:NBB"rc?1R5 2&q"v-D
#ad(1aR5.""4(AQXXZr8   c            	         [        SSS9n [        SU 5      u  pn[        SU /5      n[        SU /5      n[        SX /5      n[        U R                  S-   U S	5      n[        S
U S	S9nU" U5      U" U5      -  U" U* 5      -  R                  U" U5      U" U5      U" U* 5      -  05      U" U5      U" U5      -  U" U* 5      -  U" U* 5      -  :X  d   eU" U5      U" U5      -  U" U* 5      -  R                  U" U5      U" U5      U" U* 5      -  05      U" U5      U" U5      -  U" U* 5      -  U" U* 5      -  :X  d   eU" U5      U" U5      -  R                  XU" U5      U" U5      U" U* 5      -  05      U" U5      U" U5      -  U" U* 5      -  :X  d   eU" U5      U" X"* 5      -  U" U* 5      -  R                  5       U" U5      U" X"* 5      -  U" U* 5      -  :X  d   eU" U5      U" U* 5      -  R                  U" U5      U" U5      U" U5      -  U" U* 5      -  5      U" U5      U" U5      -  U" U* 5      -  U" U* 5      -  :X  d   eg)z3
Test subs and xreplace in TensMul. See bug #24337
r   r`   r   r@  r   r   r@   _0TrG   )rj  N)
r   r   r#   r   r=   r)   subsxreplacer   ro  )	r   r   r  r  r   r   r@   C0rG   s	            r6   test_TensMul_subsr  f  sC    
1	%BWb)GA!3A3A3!A	R]]T)2t	4BRt4AqT!A$Yq!u_##QqT1Q41":$671Q4!9QrU?1aR5;PPPPqT!A$Yq!u_''1qtAqbEz(:;qtAaDyA2qRSQSu?TTTTqT!A$Y!!1!A$!QrU
";<"ad
1aR5@PPPPqT!Ab'\!QB%&&(AaD1RLA2,>>>>qT!QB%Z!!1Q41ad1aR5:ad1Q4i1"oaQRPRe>SSSSr8   c                  j    [        5          [        S/S-  5        S S S 5        g ! , (       d  f       g = frl  )r.   r&   r   r8   r6   test_tensorsymmetryr  y  s"    		!s1u 
"	!	!s   $
2c                  d    [        5          [        S/ 5        S S S 5        g ! , (       d  f       g = f)Nr@   )r.   r%   r   r8   r6   test_tensorheadr  }  s    		!3 
"	!	!s   !
/c                      [        5          [        R                  " S5      n [        S5      n[	        U/S-  U 5      n[        U[        5      (       d   e S S S 5        g ! , (       d  f       g = f)NrA   r:   )r.   r   rF   r   r'   r2   )r   r:   S2s      r6   test_TensorTyper    sS    		!--a0!),	!T*"j))))	 
"	!	!s   A	A
A,c                  `    [        5          [        SSS9  S S S 5        g ! , (       d  f       g = f)Nr:   r;   )	dummy_fmt)r.   r   r   r8   r6   test_dummy_fmtr    s    		!	S1 
"	!	!s   
-c            	         [        SSS9n [        SU 5      n[        SU /5      n[        S5      u  p4n[	        US-  R                  X2" U5      05      [        5      (       d   e[	        US-   R                  X2" U5      U" U* 5      -  05      [        5      (       d   e[	        US-  R                  X2" U5      05      [        5      (       d   e[	        US-   R                  X2" U5      U" U* 5      -  05      [        5      (       d   e[	        US-  R                  X2" U5      5      [        5      (       d   e[	        US-   R                  X2" U5      U" U* 5      -  5      [        5      (       d   eg)	z
Test if substituting a Tensor into a Mul or Add automatically converts it
to TensMul or TensAdd respectively. See github issue #25051
r   r`   r   r}   r   zx y zrA   N)
r   r   r#   r   r2   r  r   r   r~  ro  )r   r}   r   r   rB  zs         r6   test_postprocessorr    sB   
 
1	%BsBA3AGEAqsnna1Y/9999qsnna1ae_5w????qsjj!QqT+W5555qsjj!QqT!QB%Z17;;;;qsmmAqt,g6666qsmmAqtAqbEz2G<<<<r8   c                      [        SSS9n [        SU 5      u  p[        SU /5      n[        SU /5      n[        SU" U5      U" U5      5      nUR                  UR
                  -  U:X  d   eg)	zI
Ensure that for any TensMul instance, self.coeff * self.nocoeff == self
r   r`   r   zi jr   PrA   N)r   r   r#   r   r"  nocoeff)r   r}   r  r   r  r   s         r6   test_TensMul_nocoeffr    sk    
 
1	%B%$DA3A3A1adAaD!D::$,,,r8   N)sympy.concrete.summationsr   sympy.core.functionr   sympy.core.numbersr   sympy.matrices.denser   r   sympy.tensor.indexedr   sympy.combinatoricsr	   
sympy.corer
   r   r   r   r   r   r   sympy.core.containersr   sympy.core.symbolr   (sympy.functions.elementary.miscellaneousr   sympy.integralsr   sympy.tensor.arrayr   sympy.tensor.tensorr   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   sympy.testing.pytestr,   r-   r.   sympy.matricesr/   r7   rN   rS   rX   r^   r{   r   r   r   r   r   r   r   r   r   r   r   r   r
  r  r  r  r(  r-  r/  r1  r4  r9  r<  r>  rD  rF  rI  r\  r_  rc  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r&  r*  r7  r?  rF  rb  rg  rq  rs  r{  r  r  r  r  r  r  r  r   r8   r6   <module>r     s   ) & & . ( + F F F ' % 9 % $3 3 3 3 3 3 G F K<Z((TL.GrT&l.$WP,"$TA$M*U&62T;l'6"](#0J#J(  *?XAPF_-D	,/)+V%N8*:#5L7 z6RrJ0&A(50%!&_R*,:f#YL7B6&;>809v4>0'fD9N	'xJvC2"0H,"9 vT&*2=&-r8   