
    sg(                       d dl mZ d dlmZ d dlmZ d dlmZmZ d dl	m
Z
 d dlmZ d dlmZmZmZmZmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1 d dl2m3Z3m4Z4m5Z5 d dl6m7Z7 d Z8d Z9d Z:d Z;d Z<d Z=d Z>d Z?d Z@d ZAd ZBd ZCd ZDd ZEd ZFd ZGd ZHd  ZId! ZJd" ZKd# ZLd$ ZMd% ZNd& ZOe4d'        ZPd( ZQd) ZRd* ZSd+ ZTd, ZUd- ZVd. ZWd/ ZXd0 ZYd1 ZZd2 Z[d3 Z\d4 Z]d5 Z^d6 Z_d7 Z`d8 Zad9 Zbd: Zcd; Zdd< Zed= Zfd> Zgd? Zhd@ ZidA ZjdB ZkdC ZldD ZmdE ZndF ZodG ZpdH ZqdI ZrdJ ZsdK ZtdL ZudM ZvdN ZwyO)P    )Sum)expand)Integer)Matrixeye)Indexed)Permutation)SRationalSymbolBasicAdd)Tuple)symbols)sqrt)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                     t        | t              r| j                  |      S t        |t              r|j                  |       S | |k(  S N)
isinstancer   equals)arg1arg2s     Q/var/www/html/venv/lib/python3.12/site-packages/sympy/tensor/tests/test_tensor.py	_is_equalr4      s>    $!{{4  	D(	#{{4  4<    c                  L   t        dd      } t        d|       \  }}}}t        d| gt        j                  d            \  }} ||        ||      z  }|j                         }t        |      dk(  sJ  ||       ||      z  }|j                         }||k(  sJ  ||       ||      z  }	|	j                         }t        |      dk(  sJ t        d	| gd
z  t        j                  d
            } |||        |||      z  }|j                         }t        |      dk(  sJ t        d| gt        j                  d            \  }}
 |||        ||      z   |
|       z  }|j                         }t        |      dk(  sJ t        d	| gd
z  t        j                  d
            } |||        ||      z   |
|       z  }|j                         }t        |      dk(  sJ t        d| gd
z  t        j                  d
            } |||        || |      z  }|j                         }t        |      dk(  sJ  || |       || |      z  }|j                         }t        |      dk(  sJ t        d| gd
z  t        j                  d
            }
 |||       || |       z   |
| |       z  }|j                         }t        |      dk(  sJ t        d	| gd
z  t        j                  d
            } |||       || |       z   |
| |       z  }|j                         }t        |      dk(  sJ t        d| gd
z  t        j                  d
            }
 |||       || |       z   |
| |       z  }|j                         }t        |      dk(  sJ y )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)r7   abd0d1r=   r?   ttct1r@   s              r3   test_canonicalize_no_slot_symrK      s   iC8G!+w7LAq"by.*D*DQ*GHDAq	2#quA	
Br7&&&& 	
!QqT	A	
B7N7	
1adB	Br7k!!! 	3	!^%C%CA%FGA	!bS	!B(A	
Br7,,,, y.*D*DQ*GHDAq	"rc
1R5B3A	
Br73333
 	3	!^%?%?%BCA	"rc
1R5B3A	
Br73333
 	3	!^%?%?%BCA	"rc
1bS":A	
Br71111 	
2#r
1bS":A	
Br71111
 	3	!^%?%?%BCA	"b	!QB*QsQBZ'A	
Br7;;;;
 	3	!^%C%CA%FGA	"b	!QB*QsQBZ'A	
Br7;;;;
 	3	!^%C%CA%FGA	"b	!QB*QsQBZ'A	
Br7;;;;r5   c                  r   t        dd      } t        d|       \  }}}}t        d| gt        j                  d            } ||       ||      z   ||      z  }|j                         }t        |      dk(  sJ t        d| gt        j                  d      d      } ||       ||      z   ||      z  }|j                         }t        |      dk(  sJ t        d| gd	z  t        j                  d	            } |||       |||      z  }|j                         }t        |      d
k(  sJ t        d| gd	z  t        j                  d	      d      } |||       |||      z  }|j                         }t        |      dk(  sJ  |||       |||      z  }|j                         }t        |      d
k(  sJ y )Nr7   r8   r9   
a, b, c, dr=   r<   zA(a)*A(b)*A(c)z-A(a)*A(b)*A(c)r>   zA(a, c)*A(b, d)z-A(a, c)*A(b, d))r   r   r    r   rA   r!   rB   rC   )r7   rD   rE   cdr=   rH   rI   s           r3   test_canonicalize_no_dummiesrP   k   s   iC8Gg6JAq!Q
 	3	>#=#=a#@AA	!QqT	!A$A	
Br7&&&&
 	3	>#=#=a#@!DA	!QqT	!A$A	
Br7''''
 	3	!^%C%CA%FGA	!Q!QA	
Br7''''
 	3	!^%C%CA%FJA	!Q!QA	
Br7(((( 	
!Q!QA	
Br7''''r5   c                      t        d      } t        d| | g      }t        d| | gt        j                  d            }||k(  sJ t        d| | gt        j                  d            }||k7  sJ y )Nr7   r=   r>   )r   r    r   rA   rC   )r8   A1A2A3s       r3   -test_tensorhead_construction_without_symmetryrU      sl    	"A	C!Q	 B	C!Q!;!;A!>	?B8O8	C!Q!?!?!B	CB8O8r5   c                      t        ddd      } t        d|       \  }}}}t        d| gdz  t        j                  d            } |||        |||       z  }|j                         }t        |      dk(  sJ  |||        |||       z   |||       z   |||       z  }|j                         }t        |      d	k(  sJ  |||        |||       z   |||       z   |||       z  }|j                         }t        |      d
k(  sJ y )Nr7   r8   r   r:   metric_symmetryzd:4r=   r>   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   rA   r!   rB   )r7   rF   rG   d2d3r=   rH   rI   s           r3   test_no_metric_symmetryr[      s%    iCKG#E73NBB3	!^%?%?%BCA	"rc
1R":A	
Br71111 	
"rc
1R":aRCj(2s3A	
Br7KKKK 	
"rc
1R":aRCj(2s3A	
Br7KKKKr5   c            
         t        dd      } t        d|       \
  }}}}}}}}}	}
t        d| gt        j                  d            } ||        ||      z  }|j                         }t        |      dk(  sJ  ||        ||       z   ||	       z   ||	      z   ||      z   ||      z  }|j                         }t        |      dk(  sJ t        d| gt        j                  d      d      } ||        ||       z   ||	       z   ||	      z   ||      z   ||      z  }|j                         }|d	k(  sJ t        d| gd
z  t        j                  d
            } |||       |||       z   |||       z  }|j                         }t        |      dk(  sJ t        d| gd
z  t        j                  d
            } |||       |||       z   |||       z  }|j                         }t        |      dk(  sJ t        d| gdz  t        j                  d            } ||||       ||| |       z  }|j                         }t        |      dk(  sJ  ||
||	       ||| |	       z   |||
 |      z   ||||       z  }|j                         }t        |      dk(  sJ t        d| gdz  t        j                  d            }t        d| gd
z  t        j                  d            } ||||	       ||	 |
 |       z   || |
      z  }|j                         }|d	k(  sJ t        d| gdz  t        j                  d      d      }t        d| gd
z  t        j                  d            } ||||	       ||	 |
 |       z   || |
      z  }|j                         }t        |      dk(  sJ t        ddd      }t        d|      \
  }}}}}}}}}	}
t        d|gdz  t        j                  d      d      }t        d|gd
z  t        j                  d            } ||||	       ||	 |
 |       z   || |
      z  }|j                         }t        |      dk(  sJ t        dd	d      }t        d|      \
  }}}}}}}}}	}
t        d|gdz  t        j                  d      d      }t        d|gd
z  t        j                  d            } ||||	       ||	 |
 |       z   || |
      z  }|j                         }t        |      dk(  sJ t        d|       \  }}}}}}t        d| gt        j                  d      d
      }t        d| gd
z  t        j                  d      d
      }t        d| gdz  t        j                  d      d
      } || |        ||      z   ||||      z  }|j                         }t        |      dk(  sJ  |||       |||      z   ||       z   ||| |       z  }|j                         }t        |      d k(  sJ t        d!d"      }t        d#|      \  }}}}}}t        d$|       \  }}t        d%|gdz  t        j                  dd            }t        d| |gt        j                  d
            } ||| |        || | |       z   || |      z   || |      z   |||      z   |||      z  }|j                         }t        |      d&k(  sJ y )'Nr7   r8   r9   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   r>   z!A(a, L_0)*A(b, L_1)*A(-L_0, -L_1)r?   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
   rW   z2-A(S_0, S_1, S_2)*A(-S_0, -S_1, S_3)*B(-S_2, -S_3)MatM)rX   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   rA   r!   rB   rC   direct_product) r7   rD   a0a1a2a3rE   rF   rG   rY   rZ   r=   rH   rI   r?   r_   ra   alphabetagammamunurhorc   Gamma2Gamma3re   rN   rO   effrh   s                                    r3   test_canonicalize1rx      se   iC8G4g> )Ar2r2q"b"b
 	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	"a1rc1R":%A	
Br79999
 	3	!^%C%CA%FGA	"a2sAa"I%A	
Br79999
 	3	!^%C%CA%FGA	"b!Qq2#s^#A	
Br77777 	
"b"aRC"o%aRCn4Qr2s^CA	
Br7[[[[ 	3	!^%C%CA%FGA3	!^%C%CB%GHA	"b"abS2#&&q"bz1A	
B7N7
 	3	!^%C%CA%FJA3	!^%C%CB%GHA	"b"abS2#&&q"bz1A	
Br7IIII
 X#rJF4f= )Ar2r2q"b"b3
N$B$B1$EqIA3
N$B$B2$FGA	"b"abS2#&&q"bz1A	
Br7JJJJ %s
CC4c: )Ar2r2q"b"b3a!?!?!BAFA3a!?!?!CDA	"b"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=Aq!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qr5   c                      t        d      } t        d|       }t        |t        t        f      rJ t        |t
              sJ y )Nr=   i)r   r   r/   tuplelistr   )r=   rz   s     r3   "test_bug_correction_tensor_indicesr}   >  s>     	AsAA!eT]+++a%%%r5   c                     t        dd      } t        d|       \  }}}}}}}}}	}
}}t        d| gdz  t        j                               } |||| |       }|j                         }t        |      dk(  sJ  || || |       |||||       z   || | |	 |
       z   || | | |       z   |||||       z   ||	|
||      z  }|j                         }t        |      dk(  sJ y )	Nr7   r8   r9   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!   rB   )r7   rF   rG   rY   rZ   d4d5d6d7d8d9d10d11r   rH   rI   s                   r3   test_riemann_invariantsr   G  s1   iC8Gw( 5BBBBBC 	3	!^%;%;%=>A	"b2#sA	
Br70000 	
3$r2#b!Br"bS/)!RCRC*<<	3$sB3s	bC,	--.r"R_	=A	
Br7  l  l  l  lr5   c                  n   t        dd      } t        d|       \  }}}}}}}t        d|       \  }}	}
}}}t        d|       \  }}t        d| gdz  t        j                               } |||||       }|j                         }|d	k(  sJ  |||||       }|j                         }t        |      d
k(  sJ  ||| ||        |||| |      z  }|j                         }t        |      dk(  sJ t        d| gdz  t        j                  d            } |||| |       |||||      z   || |       z   || |       z   || |       z  }|j                         }t        |      dk(  sJ  ||||
|       ||| |	|      z   |||| |       z  }|j                         }t        |      dk(  sJ y )Nr7   r8   r9   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)Vr>   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!   rB   rC   )r7   rF   rG   rY   rZ   r   r   r   rj   rk   rl   rm   a4a5rD   rE   r   rH   rI   r   s                       r3   test_riemann_productsr   ^  s   iC8G!/!@BBBB+FG<BBB%)DAq3	!^%;%;%=>A	!QRCA	
B7N7 	
"aRCA	
Br7++++ 	
"rc1rc1RRC,,A	
Br7CCCC 	3	!^%C%CA%FGA	"b2#r1RR,,QsRC[8B3DQsRC[PA	
Br7oooo 	
"b"b!BR,,Qr2sRC-@@A	
Br7VVVVr5   c                  h   t        d      } t        dd| d      }t        d|      \  }}}}}}}}	}
}}}}}}t        d|gdz  t	        j
                  d	            } ||||       || ||      z   || |	|      z   || | |      z   || | |
      z  }|j                         }|d
k(  sJ  ||||       || ||      z   || ||      z   || |	|
      z   || |	 |      z   ||
 ||      z   || | |      z   || | |      z   || | |      z  }|j                         }|d
k(  sJ y )NDEuclr<   E)rX   dimr:   zi0:15r=   r]   rd   r   )r   r   r   r    r   rC   r!   )r   r   i0i1i2i3i4i5i6i7i8i9i10i11i12i13i14r=   rH   rJ   s                       r3   test_canonicalize2r     s~   sA61!LDw% 6Br"R2bBr#c#c#3q."@"@"DEA
 	
"RArc"RL B3r"-aRCm;Arc2#bMIA	
B7N7
 	
"RArc"RL B3r"-aBrl:1bS"R=H	2#c#	"cT#	''("cT#	778"cT#	GA	
B7N7r5   c                  f   t        d      } t        d| dd      }t        d|      \  }}}}}t        d|gt	        j
                  d      d      \  }} ||       ||      z  }	|	j                         }
|
|	k(  sJ  ||       ||      z  }	|	j                         }
|
 ||        ||      z  k(  sJ y )	Nr   r_   r`   r
   r   rX   r:   a0:5chi,psir<   )r   r   r   r   r   rA   r!   )r   r_   rj   rk   rl   rm   r   chipsirH   rJ   s              r3   test_canonicalize3r     s    sAX1bSQF#FF3NBr"RIx1K1KA1NPQRHCBBA	
B7N7BBA	
B#b'#b'!!!!r5   c                     t        d      } t        ddd| d      }t        d|      \  }}}}}t        j                  d      }t        t        d       }||k(  sJ |j                  }	t        |	      d	k(  sJ |j                  |j                  k(  sJ t        d
d
      }
t        d|
      \  }}|
j                  }	t        d|
gdz  |      }t         |||       j                               dk(  sJ y )Nr   r7   gr<   r8   )metric_namerX   r   r:   zm0:5r>   zg(Lorentz,Lorentz)TSpacer9   zi0 i1r=   zA(TSpace_0, -TSpace_0))r   r   r   r   rC   r   metricrB   eps_dimr   r    r!   )r   r7   m0m1m2m3m4sym2sym2nr   r   r   r   r=   s                 r3   test_TensorIndexTyper     s    sAiS!"#5G'8BBB))!,D3A67E5==Aq6))))??gkk)))XH=FGV,FBA3
D)AqRCy!!#$(@@@@r5   c            	        	 t        dd      t        d      \  	} j                  k(  sJ  k7  sJ t        dgdz  t	        j
                  d            \  }        | 	      z  }|j                         }t        d      }||| 	gk(  sJ t        t        fd       t        t        	fd	       t        d
g       dd       t        d      t        d            k(  sJ  dd       t        d      t        dd            k(  sJ  dt        d             t        d      t        d            k(  sJ y )Nr7   r8   r9   a,b,c,dA Br>   L_0c                      t        d       S )Nr]   )r   )r7   s   r3   <lambda>ztest_indices.<locals>.<lambda>  s    ~a9 r5   c                              S r.    r=   rD   rE   rN   s   r3   r   ztest_indices.<locals>.<lambda>  s    q1Qx r5   r=   rD   rE   z-bFis_up)r   r   tensor_index_typer   r   rC   get_indicesr   r)   
ValueErrorr    )
rO   r?   rH   indicesr   r=   r7   rD   rE   rN   s
        @@@@@r3   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r5   c            	         t        j                  d      t        t        d            k(  sJ t        j                  d      t        t        dd            k(  sJ t        j                  d      t        j                  d      k(  sJ t        j                  d      t        j                  d      k(  sJ t        j                  ddd      t        j                  d      k(  sJ t        t        d            t        t        d       k(  sJ t        j                  d      } | j
                  dk(  sJ | j                  t        dd      k(  sJ | j                  t         t        dd      dd	       t        dd      dd	            k(  sJ y )
Nr>   rd   r]   Tr`   r<   r   r   )
r   rC   r   ri   rA   rankbaser   
generatorsr	   )syms    r3   test_TensorSymmetryr     s   ))!,.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#4;q!#4Q#:<MK1<MaQR<STTTTr5   c            	      N   t        dd      } t        d|       \  | j                  t        d| gdz  t	        j
                  d            \  }t        t        fd       t        t        fd       t        t        fd	       t        t        fd
       t        t        fd       t               5  t        t        fd       d d d        t        t        fd       t        t        fd       y # 1 sw Y   4xY w)Nr7   r8   r9   r   r   r>   c                  *                   z  S r.   r   )rD   rE   rN   rO   r   s   r3   r   ztest_TensExpr.<locals>.<lambda>      qAwqAw r5   c                  8    t         j                          z  S r.   r
   One)rD   rE   r   s   r3   r   ztest_TensExpr.<locals>.<lambda>  s    quuQq!W} r5   c                  >                   z          z  S r.   r   )r=   rD   rE   rN   rO   r   s   r3   r   ztest_TensExpr.<locals>.<lambda>  s#    !Q!Aq' 11Q7: r5   c                  L    t         j                                 z   z  S r.   r   )r=   rN   rO   r   s   r3   r   ztest_TensExpr.<locals>.<lambda>  s!    quua1g!Q&78 r5   c                  *                    z   S r.   r   r   s   r3   r   ztest_TensExpr.<locals>.<lambda>  s    qAw1a0 r5   c                              dz  S Nr>   r   r=   rD   rE   s   r3   r   ztest_TensExpr.<locals>.<lambda>  s    1Q7A: r5   c                      d        z  S r   r   r   s   r3   r   ztest_TensExpr.<locals>.<lambda>  s    1Q7
 r5   c                  (    t                      S r.   )absr   s   r3   r   ztest_TensExpr.<locals>.<lambda>  s    AaG r5   )
r   r   r   r   r   rC   r)   r   r+   NotImplementedError)r7   r?   r=   rD   rE   rN   rO   r   s     @@@@@@r3   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                     t        dd      } t        d| gdz        }|j                  dk(  sJ |j                  | | gk(  sJ |j                  dk(  sJ |j
                  t        j                  d      k(  sJ |j                  dk(  sJ y )Nr7   r8   r9   r=   r>   r   )	r   r    nameindex_typesr   symmetryr   rA   comm)r7   r=   s     r3   test_TensorHeadr     s    iC8G3	!$A66S====Wg....66Q;;::33A666666Q;;r5   c            	      $   t               j                  dk(  sJ t               j                         dk(  sJ t        dd      } t	        d|       \  }}}}}}}t        d| gdz  t        j                  d            \  }}	 |||        |	||      z  }
t        |
      j                  |
      sJ  |	||       |||      z   } |||       |z  }t        |      d	k(  sJ |j                         }t        |      d
k(  sJ |j                         }t        |      dk(  sJ ||
z   }t        |      dk(  sJ |j                         }t        |      dk(  sJ t        d| g      \  }}} ||      dz  }t        |      dk(  sJ d ||      z  }t        |      dk(  sJ  ||      d ||      z  z   }
t        |
      dk(  sJ  ||       d ||       z  z   }t        |      dk(  sJ  ||      }
|
|z  }t        |      dk(  sJ |j                         }t        |      dk(  sJ ||
z  }|j                         }t        |      dk(  sJ |j                         }t        |      dk(  sJ  ||      d ||      z  z   }
|
|z  }|j                         }t        |      dk(  sJ  ||      d ||      z  z
  }
t        |
      dk(  sJ  ||       d ||       z  z   }|
|z  }|j                         }| ||       ||       z  d ||      z   ||       z  z
  k(  sJ  ||       ||      z   ||       ||      z   z   ||       ||       ||      z   z   ||      d ||      z  z
  z  z   }|j                         }|d ||      z   ||      z   ||      z  d ||      z   ||      z   ||      z  z
   ||       ||      z   ||      z  z   d ||      z   ||      z   ||      z  z
  k(  sJ  ||       ||      z   d ||      z  z    ||       ||      z
  z  }
 ||       ||      z   d ||      z  z    ||       ||      z
  z  }|
|z   }|j                         }|d ||      z   ||      z  d ||      z   ||      z  z   d ||      z   ||      z  z   d ||      z   ||      z  z
  d ||      z   ||      z  z
  d ||      z   ||      z  z
  k(  sJ  ||       ||      z  dz  }d|z   ||       ||      z  k(  sJ  ||       ||      z   dz  }d|z   ||       ||      z   k(  sJ t        j                   ||       ||       z  z
  }|j                         }| ||        ||      z  z   }|dk7  sJ |j                         }|j                  d      sJ t        j                   ||       ||       z  z   }| ||        ||      z  z
  j                         j                  d      sJ  |||       |	||      z   }|j                  dk(  sJ | |||      z
   |	||      z
  }
|
dk(  sJ d |||        |	||       z   z
  }d |||        |	||       z   z   }
||
z   j                         j                  d      sJ d |||       z   }|
|k7  sJ |t        j                   dg g g       k7  sJ t         ||      t        d ||                  j                          ||      k(  sJ y )Nr   r   r7   r8   r9   a,b,d0,d1,i,j,kr;   r>   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   rC   r0   rB   r   r!   r
   r   r   r   	from_data)r7   rD   rE   rF   rG   rz   jkr=   r?   rJ   t2at2t2bpqrrH   t3tz1s                       r3   	test_add1r   	  sU   9>>R9>>q   iC8G$%6@OAa2a!y{N,J,J1,MNDAq	
1rc1R8	B2;b!!!
B(Qr1X
C	
1rc3Br7::::	Br7CCCC	Br7CCCC
r'Cs8[[[[
,,.Cs8FFFF7WI.GAq!	"aAq6Y	!B%Aq6Y	
21R5Br7''''	
B3!ArcF(	Br7))))	
2B	BBr74444	Br79999	BB	Br79999	Br79999	
21R5B	BB	Br7LLLL	
21R5Br7((((	
B3!ArcF(	B	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
R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	!Q!Aq'A66Q;;	
Qq!WqAw	B7N7	Qq1"X!aR !A	
aA2h1qb!	"BF??##A&&&	
Qq1"XB8O8""1b"b1111 1Q4AaD)+002ad:::r5   c                  ~   t        dd      } t        d|       \  }}}}}}}t        d| gdz  t        j                  d            \  }}	t        d| g      \  }
}}d |||      z  }t        |d      sJ t        |t        j                        sJ  |
|       |||      k7  sJ  |||        |||      k7  sJ d |||       |	||      z   z  dk(  sJ d |||       |	||      z   z  t        j                  u sJ d	 |||       |||      z
  z  t        j                  u sJ  |
|       ||      z    |||      k7  sJ  |
|       ||      z    |||       |	||      z   k7  sJ  |
|       |
|      z
  dk(  sJ  |
|       |
|      z
  t        j                  u sJ t         |||       |||            sJ y )
Nr7   r8   r9   r   r;   r>   r   r   r]   )r   r   r   r   rC   r4   r
   Zero)r7   rD   rE   rF   rG   rz   r   r   r=   r?   r   r   r   rH   s                 r3   test_special_eq_ner   _  s   iC8G*+<gFAq"b!Qy{N,J,J1,MNDAq7WI.GAq!	!Aq'	AQ??QQ41Q7??Q8qAwa1g!Q A%%%a1g!Q AFF***a1g!Q AFF***Q4!A$;!Aq'!!!Q4!A$;!Aq'AaG++++Q4!A$;!Q4!A$;!&&   Qq!Wa1g&&&r5   c                     t        dd      } t        d|       \  }}}}t        d| gdz  t        j                               }t        d| gdz  t        j
                  d	            }d
 |||||      z   |||||      z
   |||||      z   }| || | |       z  }|j                         }|dk(  sJ t        d
d       |||||      z  t        dd       |||||      z  z
  t        dd       |||||      z  z   }| || | |       z  }|j                         }|dk(  sJ  ||| |       ||||       z   }	|	j                         }	|	dk(  sJ y )Nr7   r8   r9   zm,n,p,qr   r   r=   r]   rd   r>   r   r<   )r   r   r    r   r   rC   r!   r   )
r7   mnr   r   r   r=   rJ   r   rH   s
             r3   	test_add2r   z  ss   iC8G	73JAq!Q3	!^%;%;%=>A3	!^%C%CB%GHA	
1Q1a=1Q1a=	(1Q1a=	8B	Aqb1"qbM	B	B7N7	!Q!Aa
	"Xa^Aa!AJ%>	>!QPQRSTUVWXYPZAZ	ZB	Aqb1"qbM	B	B7N7	!aRa1qbk!A	

A6M6r5   c            
         t        dd      } t        d|       \  }}t        d      \  }}}}t        d| g      }t        d| g      } ||       ||       z  |dz  |dz  z
  |dz  z
  |dz  z
  z
  }	|	j                  |dz   |dz  |dz  |dz   ||       ||       z  fk(  sJ |dz  |dz  z
  |dz  z
  |dz  z
   ||       ||       z  z
  }
|
j                  |dz  |dz   |dz   |dz    ||        ||       z  fk(  sJ  ||       ||       z  |dz  z
  |dz  z   |dz  z   |dz  z   }|j                  |dz   |dz  |dz  |dz   ||       ||       z  fk(  sJ  ||       ||       z  d|dz  z  z   d|dz  z  z
  d|dz  z  z
  d|dz  z  z
   ||       ||       z  z
  }|j                  d|dz  z  d	|dz  z  d	|dz  z  d	|dz  z   ||       ||       z   ||        ||       z  fk(  sJ y )
Nr7   r8   r9   zi0:2
E px py pzr=   r?   r>   r^   )r   r   r   r    r   )r7   r   r   r   pxpypzr=   r?   expr1expr2expr3expr4s                r3   	test_add3r
    sh   iC8GFG,FBL)MAr2r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\\\\r5   c                    	
 ddl m}  t        dd      }t        d|      \  	
}t	        j
                  t        j                  g g g       }t        |      dk(  sJ t        d|gd	z  t        j                  d	            \  }d
| z    	
      z  }t        |      dk(  sJ |j                  ||gk(  sJ |j                  d	k(  sJ |j                  g k(  sJ |j                  d
| z   k(  sJ t!        |j"                        	df
d
fgk(  sJ |j$                  gk(  sJ  	
      }t        |      dk(  sJ |j                  ||gk(  sJ |j                  d	k(  sJ |j                  g k(  sJ |j                  d
k(  sJ t!        |j"                        	df
d
fgk(  sJ |j$                  gk(  sJ  
 	       |	       z    |      z  }t'        |j)                          }||k(  sJ t'        g  t	        j
                  t        j                  g g g       k(  sJ t	        j
                  d
g g g       }t+        dg       }t         |             dk(  sJ t        |      dk(  sJ |d
k(  sJ t-        t.        	
fd       y )Nr   )xr7   r8   r9   r   1r   r>   r<   z(x + 1)*A(a, b)zA(a, b)r@   c                  *                    z  S r.   r   r   s   r3   r   ztest_mul.<locals>.<lambda>  r   r5   )	sympy.abcr  r   r   r   r   r
   r   rB   r   r   rC   r   r   dumcoeffsortedfree
componentsr   splitr    r)   r   )r  r7   rO   rH   r?   tsrJ   r@   r=   rD   rE   rN   s           @@@@r3   test_mulr    s{   iC8G	73JAq!Q!%%R,Aq6S==y{N,J,J1,MNDAq	
Q!QAq6&&&&==Wg....66Q;;55B;;77a!e!&&>q!fq!f----<<A3	
1aBr7i>>gw////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
:./r5   c                     t        dd      } t        d|       \  }}}}}}}}t        d| gdz  t        j                  d            \  }	}
t        d| g      } ||      }|j                  ||f      }||k(  sJ |j                  ||f      }| ||      k(  sJ |j                  || f      }| ||       k(  sJ |j                  | |f      }| ||       k(  sJ |j                  | | f      }| ||      k(  sJ  |	||      }|j                  ||f|| f      }| |	||       k(  sJ t        |||f|| f      }| |	||       k(  sJ  |	||       |
| |       z  }|j                  ||f||f      } |	||       |
| |       z  }||k(  sJ t        |||f||f      }||k(  sJ  |	||       |
||      z   }|j                  || f      } |	||        |
||       z   }||k(  sJ t        ||| f      }||k(  sJ y )Nr7   r8   r9   i,j,k,l,m,n,p,qr;   r>   r   )r   r   r   r   rC   r    r%   )r7   rz   r   r   lr   r   r   r   r=   r?   rH   rJ   t1as                 r3   test_substitute_indicesr    st   iC8G+,=wGAq!Q1ay{N,J,J1,MNDAq3	"A	!A	
		q!f	%B7N7	
		q!f	%B1::	
		q1"g	&BA2;;	
		r1g	&BA2;;	
		rA2h	'B1::	!QA	
		q!fq1"g	.B1qb>>	A1vA2w	/B1qb>>	!Q1"qb	A	
		q!fq!f	-B
Aq'!QB)
C99	A1v1v	.B99	!Q!Aq'A	
		q1"g	&B
Ar(Qq1"X
C99	AA2w	'B99r5   c                  T   t        dd      } t        d|       \  }}}}t        d| gdz  t        j                               } |||||      }t        |      }t        dd       |||||      z  t        d	d       |||||      z  z   t        d
d       |||||      z  z   }||k(  sJ y )Nr7   r8   r9   zm:4r   r   r`   r]   r<   r>   )r   r   r    r   r   r   r   )	r7   r   r   r   r   r   rH   rJ   r  s	            r3   test_riemann_cyclic_replacer    s    iC8G#E73NBB3	!^%;%;%=>A	"b"bA		"B
2q/!BB+
+hq!nQr2r2=N.N
NQYZ[]^Q_`abdfhjlnp`qQq
qC99r5   c            	      J   t        dd      } t        d|       \  }}}}}}}}t        d| gdz  t        j                               }	 |	||||       |	||||      z    |	||||      z    |	||||      z
   |	||||      z
   |	||||      z
  }
|
 |	| | | |       z  }t        |      }|dk(  sJ  |	||||       |	| | | |       d |	| | | |       z  z
  z  }
t        |
      }|dk(  sJ  |	||||      }
t        |
      }|t        d	d
       |	||||      z  t        dd
       |	||||      z  z   t        dd
       |	||||      z  z   k(  sJ  |	||||       |	| | ||      z   |	| | | |       d |	| | | |       z  z   z  }
t        |
      }|dk(  sJ y )Nr7   r8   r9   r  r   r   r   r>   r`   r]   r<   )r   r   r    r   r   r   r   )r7   rz   r   r   r  r   r   r   r   r   rH   r   r   rJ   s                 r3   test_riemann_cyclicr     s   iC8G+,=wGAq!Q1a3	!^%;%;%=>A	!Aa
Qq1QZ!Aa!*,	!Aa
	q1QZ	 "#Aa!*	-A	
1aRA2qb>	B		B7N7	!Aa
Aqb!QBrNQq!QBr1"~%556A		B7N7	!Aa
A		B"a1aA.!Q!Q11MMPXYZ\]P^_`abdeghjk_lPlllll	!Aa
1aR1Q<A2qb!QB!Aqb!QBrN2B!BCA		B7N7r5   c                  b   t        dd      } t        d|       \  }}}}t        d| gdz  t        j                               } |||| |      }|t        d      z  }t        |      dk(  sJ |j                         }|j                  rJ |dz  }|j                  sJ |dz  }|j                  sJ y )Nr7   r8   r9   zm0:4r   r   z(1/4)*R(m0, L_0, -L_0, m3))	r   r   r    r   r   r
   rB   r!   _is_canon_bp)r7   r   r   r   r   r   rH   rJ   s           r3   test_divr#    s    iC8G#FG4NBB3	!^%;%;%=>A	"RBA	
1Q4Br72222	

A	
1B???	AB???r5   c                  r   t        d      } t        d| d      }t        d|      \  }}}}}|j                  }t	        d|g      } |||       ||       z  }	|	j                  |      }
|
 ||      k(  sJ t        d|gdz  t        j                  d            \  }} |||       || |      z   |||      z  }
|
j                  |      }|
|k(  sJ  |||       || |      z   || |      z  }
|
j                  |      }||  |||      z   || |      z  k(  sJ  |||       || |       z   |||      z  }
|
j                  |      }| |||       || |      z  k(  sJ  |||       || |       z   |||       z  }
|
j                  |      }t        | |||       || |       z        sJ  |||       || |       z   |||      z   || |       z  }
|
j                  |      }t        | |||       || |       z        sJ  |||       || |       z  }
|
j                  |      }t        | |||             sJ |j                  rJ t        dd	      }t        d
|      \  }}|j                  }t         |||       j                  |      |j                        sJ y )Nr   r7   r8   r   r:   	a,b,c,d,er   r;   r>   r9   r   )r   r   r   r   r    contract_metricr   r   rC   r4   r  r   )r   r7   rD   rE   rN   rO   rv   r   r   rH   rJ   r=   r?   r   s                 r3   test_contract_metric1r(    s   sAiQ3?G";8MAq!QA3	"A	!Q1"A	
		1	B1::y{N,J,J1,MNDAq 
1Q1"Q!Q	B			A	B8O8 
1Q1"Q1"a	 B			A	B1Q71aR8#### 
1Q1"aR1a	 B			A	B1aA2q!!!! 
1Q1"aR1qb	!B			A	BR1aA2r*+++	
1Q1"aR1a	 A2r	*B			A	BR1Q1"aR)))	
1Q1"aRB			A	BR1qb"""ww;iC8G%)DAqAQq1"X--a0'++>>>r5   c                  X   t        d      } t        d| d      }t        d|      \  }}}}}}|j                  }t	        d|g      \  }	}
 |||       |	|      z   |	|       z  }d || |       z   |
|      z   |
|       z  }||z  }|j                  |      }|d| z   |	|      z   |	|       z   |
|      z   |
|       z  k(  sJ  |||       |	|      z   |	|       z  }d |
|       z   |
|       z  }||z  }|j                  |      }|j                         }|d |	|      z   |	|       z   |
|      z   |
|       z  k(  sJ d |||      z   |	|      z   |	|       z  }d	 || |       z   |
|      z   |
|       z  }||z  }|j                  |      }d
 |||      z   || |       z   |	|      z   |	|       z   |
|      z   |
|       z  }|j                  |      }d |||      z   |	|      z   |	|       z  } |
|        |
|       z  d || |       z   |
|      z   |
|       z  z   }||z  }|j                  |      }|dd
| z  z    |	|      z   |	|       z   |
|      z   |
|       z  k(  sJ  |	|       |	|      z   |	|       |
|      z  z   d |||      z   |	|      z   |	|       z  z   } |
|        |
|       z   || |        |
|      z   |
|       z  z
  }||z  }|j                  |      }dd| z  z
   |	|      z   |	|       z   |
|      z   |
|       z   |	|       |
|       z   |	|      z   |
|       z  z   }t        ||z
        dk(  sJ  |||       |||      z   || |       z  }|j                  |      }| |||      k(  sJ  |||       |||      z   |||       |||      z  z    |||       |||      z  z   }|j                  || f|| f|| f|| f      }||z  }|j                  |      }|j                  d| dz  z  d
| z  z         sJ d |	|      z   |||       z  }|j                  |      }|j                  d| z   |	|      z        sJ d |	|      z   |||       z  }|j                  |      }|d |	|      z  k(  sJ t        d      } |	|       |	|      z   |||      |dz  z  z    || |       z  | |dz  z  z
  }|j                  |      }| |	|       |	|       z  k(  sJ t        d|gdz  t        j                  d            } |||       |	|      z   || |       z  }|j                  |      }t        |      dk(  st        |      dk(  sJ y y )Nr   r7   r8   r%  za,b,c,d,e,L_0zp,qr]   r>   rd      r<   r   rb   r=   zA(L_1, -L_1)*p(L_0)zA(-L_1, L_1)*p(L_0))r   r   r   r   r   r'  r!   r%   r0   r    r   rC   rB   )r   r7   rD   rE   rN   rO   rv   r   r   r   r   rJ   r   rH   rb   r=   s                   r3   test_contract_metric2r+  A  s>   sAiQ3?G'AAq!Q3Ay)DAq	
1Q!QrU	B	
1aR8AaDA2	B
2A	!A!AaDA2qt#AqbE))))	
1Q!QrU	B	
1aR5A2B
2A	!A	

A!A$q!uQqT!!QB%''''	
1Qq6!A$q!u	B	Qr1"Xad	1aR5	 B
2A	!A	!Aa&A2qb!A$q!u$QqT)!QB%/A	!A	
1Qq6!A$q!u	B	
A2q!uqA2qbz!A$q!u,	,B
2A	!AQqS!A$q!u$QqT)!QB%////	
1adQqT!A$Y	1Qq6!A$q!u!4	4B	
A2q!uq!QBx!}QrU*	*B
2A	!A
ac'1Q41"	ad	"1aR5	(1Q41":ad?1aR5+@	@BAFq   	!Aq1vaA2hA	
		1	B1a==	
1Q!A1Q!A	&1Q!A	6B			1"vq!faVQrF	;B
2A	!A88AadFQqSL!!!	!A$qA2wA	
		1	B99QqS1X	!A$qA2wA	
		1	B1Q4<<sA	
1adQq!WQT\	!1aR!9,qAv5A	
		1	B1ae3	!^%C%CA%FGA	!Q#q!aRy A	
		1	Br7++s2w:O/OOO/O+r5   c                  8   t        d      } t        d| dd      }t        d|      \  }}}}}|j                  }t	        d|gt        j                  d      d      \  }}	t        d	|gd
z  t        j                  d
            }
 |||       }|j                  |      }|j                  |        sJ  || |      }|j                  |      }|j                  |       sJ  |||       || |       z  }|j                  |      }|j                  |       sJ  |||       || |       z  }|j                  |      }|j                  |        sJ  || |       |||       z  }|j                  |      }|j                  |        sJ  |||        |||       z  }|j                  |      }|j                  |       sJ  |||       |
| |       z  }|j                  |      }|j                         }t        | |
||             sJ  |||       |
| |       z  }|j                  |      }t        | |
||              sJ  |||        |
||       z  }|j                  |      }t        | |
||              sJ  || |       |
| |      z  }|j                  |      }t        | |
||              sJ  || |        |
||      z  }|j                  |      }t        | |
||             sJ  || |       |
||       z  }|j                  |      }t        | |
||             sJ  |||       |	|       z  }|j                  |      }t        | |	|            sJ  |||       |	|       z  }|j                  |      }t        | |	|             sJ  |||       ||       z   |	|       z  }|j                  |      }t        | ||        |	|       z        sJ  |||       ||       z   |	|       z  }|j                  |      }t        | ||       |	|       z        sJ  || |       ||       z   |	|      z  }|j                  |      }t        | ||        |	|      z        sJ  |||        ||       z   |	|      z  }|j                  |      }t        | ||         |	|      z        sJ  || |        ||      z   |	|      z  }|j                  |      }t        | ||        |	|      z        sJ  || |        ||      z   |	|      z  }|j                  |      }t        | ||         |	|      z        sJ  || |        |
||      z   |	|      z  }|j                  |      }t        | |
| |        |	|      z        sJ  |||       |
| |       z   |	|       z  }|j                  |      }t        | |
| |       |	|       z        sJ y )Nr   r_   r`   r
   r   r   r   r<   r?   r>   )r   r   r   r   r   r   rA   r    r'  r0   r!   r4   )r   r_   rj   rk   rl   rm   r   r@   r   r   r?   rH   rJ   s                r3   test_metric_contract3r-    sk   sAX1bSQF'7BBBAIx1K1KA1NPQRHC3
N$>$>q$ABA	"bS	A	
		1	B99aR==	2#b	A	
		1	B99Q<<	"RB3sA	
		1	B99Q<<	"RB3sA	
		1	B99aR==	2#b	!Bs)A	
		1	B99aR==	"bS	!Bs)A	
		1	B99Q<<	"RB3sA	
		1	B	BR2rc###	"RB3sA	
		1	BR!Bs)$$$	"bS	!Bs)A	
		1	BR!Bs)$$$	2#b	!RC)A	
		1	BR!Bs)$$$	2#rc
1R8A	
		1	BR2rc###	2#r
1R9A	
		1	BR2rc###	"RbSA	
		1	BRR!!!	"RbSA	
		1	BR#b'"""	"RbS#rc("A	
		1	BR#b'#rc(*+++	"RbS#rc("A	
		1	BRRbS)***	2#b	#rc(3r7"A	
		1	BRbS#b')***	"bS	#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
1R8CG#A	
		1	BR!RC)CG+,,,	"RB3sCH$A	
		1	BRB3r3s8+,,,r5   c                     t        dd      } t        d|       \  }}}| j                  }| j                  }t	        d| g      } ||||       ||        ||       z   || |       z   z  }|j                  |      dk(  sJ y )NR3r]   r   p q rKr   )r   r   deltaepsilonr    r'  )r/  r   r   r   r3  epsr2  exprs           r3   test_contract_metric4r7    s    	1	%BWb)GAq!HHE
**C3A q1:1"aeeQBrl24D&!+++r5   c                  <   t        ddd      } t        d|       \  }}}}}| j                  }t        d| g      \  }}}	}
 |||||      }|j	                         }| |||||       k(  sJ  |||||      }|j	                         }| |||||      k(  sJ  |||||      }|j	                         }| |||||       k(  sJ  |||||       ||       z   ||       z  }|j	                         }| |||||       ||       z   ||       z  k(  sJ  |||||       ||       z   ||       z  }|j	                         }| |||||       ||       z   ||       z  k(  sJ  |||||       ||       z   ||       z  }|j	                         }| |||||        ||       z   ||       z  k(  sJ  |||||       ||       z   ||       z  }|j	                         }|dk(  sJ  |||||       ||       z   ||       z   |||||       ||       z   ||       z  z   }|j	                         }|d |||||      z   ||       z   ||       z  k(  sJ t        dt        d      d      } | j                  }t        |t              sJ y )	Nr7   r   r8   r%  r&  zp,q,r,sr   r^   )r   r   r4  r   r!   r   r/   r    )r7   rD   rE   rN   rO   rv   r4  r   r   r   srH   rJ   s                r3   test_epsilonr:    s   iQ3?G";8MAq!QooGi'3JAq!Q!AaA	
B'!Aa"""""!AaA	
B1Qq!!!!!AaA	
B'!Aa"""""!AaA2q!u$A	
B1Qq!!QB%'1"----!AaA2q!u$A	
B1Qq!!QB%'1"----!AaA2q!u$A	
B'!Aa""1aR5(A2....!AaA2q!u$A	
B7N7!AaA2q!u$wq1Q'71"'=ae'CCA	
BGAa!$$QrU*1aR50000 iWQZCHGooGgz***r5   c            	         t        d      t        dd      } t        d|       \  }}}}}}| j                  fdfdfd}fd	} ||| ||        ||| ||       z  }	|	j	                        }
t        |
 ||| ||       z
        d
k(  sJ  ||| ||        ||| ||       z  }	|	j	                        }
|
 ||| ||       k(  sJ  ||| ||        ||| ||       z  }	|	j	                        }
|
d
k(  sJ  ||| ||       }	|	j	                        }
|
j                  dz  dz
        sJ y )Nr   Colorr@   r%  rg   c                     | j                   r|j                   sJ |j                   s|j                   rJ  | |       ||      z  S r.   r   rD   rE   rO   rN   r3  s       r3   idnz!test_contract_delta1.<locals>.idn$  @    ww177""GGqww''Qqz%!*$$r5   c                     | j                   r|j                   sJ |j                   s|j                   rJ  | |       ||      z  S r.   r   r>  s       r3   Tztest_contract_delta1.<locals>.T)  r@  r5   c                 >     | |||      dz   | |||      z  z
  S Nr<   r   )rD   rE   rN   rO   rB  r?  r   s       r3   P1z test_contract_delta1.<locals>.P1.  s*    1Qq|ac!Aa!*n,,r5   c                 &    dz   | |||      z  S rD  r   )rD   rE   rN   rO   rB  r   s       r3   P2z test_contract_delta1.<locals>.P21  s    s1Qq1:~r5   r   r>   r<   )r   r   r   r3  contract_deltar!   r0   )r<  rD   rE   rN   rO   rv   rh   rE  rG  rH   rJ   rB  r3  r?  r   s              @@@@r3   test_contract_delta1rI    s   sAGs;E%mU;Aq!Q1KKE%
%
- 	1qb!aRAr1qb))A	
		%	 BBAr1qb))*a///
1qb!aRAr1qb))A	
		%	 BAr1qb!!!!
1qb!aRAr1qb))A	
		%	 B7N7
1qb!aRA	
		%	 B99QTAXr5   c            	      L   t               5  t        d      } t        d| d      }t        d|      \  }}}}}|j                  }t        d|g      \  }}	 |	|       ||      z   |	|      z   |||       |||      z   |	|       z  z   }
 |
|||      |
k(  sJ t        |
 |
|||      z
   |	|       ||      z   |	|      z  z
   |	|       ||      z   |	|      z  z         dk(  sJ  |
|||       |	|       ||      z   |	|      z   |||       |||      z   |	|       z  z   k(  sJ |
j                  ||f||f      }t        | |	|       ||      z   |	|      z  z
   |||       |||      z   |	|       z  z
        dk(  sJ t        d|gd	z  t        j                  d
d            }t        j                   |||      z   || | |        || | |       z    || | |       z
  z  } || | |        || |        ||| |       z  z
   || |        ||| |       z  z
  }
|
j                  |      }
|
dk(  sJ  |	|       ||      z   |	|      z  }
 |
|||       |	|       ||      z   |	|      z  k(  sJ 	 d d d        y # 1 sw Y   y xY w)Nr   r7   r8   r%  r&  p qr   dgr]   r<   r>   )r+   r   r   r   r   r   r!   r%   r    r   ri   r
   Halfr'  )r   r7   rD   rE   rN   rO   rv   r   r   r   rH   rJ   rL  rp   s                 r3   test_funrN  D  s   		! *3K!)sC&{G<1aANNEG9-1aD1IadNQqVAaF]1aR5001Qx1}}Aa!HqtAaDy1~5!QqT	!A$FG1LLL1Qx1Q4!9QqT>AaF1Qq6M!QB%,?????!!1Q%1.QqT!A$Yqt^+a!fQqVmAqbE.AABaGGG wik>+H+HA+NOq1vr1"aR|b!QBrl:RA2qb\IJr1"aRL1aR8E!QBrN22Qr1"XeAqb!n5LLa AvvaD1IadN1Qx1Q4!9QqT>)))5* * *s   JJJ#c                     t        dd      } t        dd      }t        d|       \  }}t        d|      \  }}t        d| g      \  }}t        d	|g      \  }}	t        d
      }
t        d      t	        j
                  |
d       t        d| gt        j                  d      |
      }t        j                  |j                     |
k(  sJ t        d|gt        j                  d            } ||       ||       z  } ||       ||       z  }||z   }||z  }t        |||z  z
  d|z  |z  z
  ||z  z
        dk(  sJ  ||       ||       z  } ||       |	|       z  }t        ||z  ||z        sJ t        ||z  ||z        rJ t	        j                  |
      }t	        j                  |      |
k(  sJ t        j                  v sJ t!        t"        fd       t	        j$                  |
df|
ddf       t	        j&                  |d      t	        j&                  d|      cxk(  rdk(  sJ  J t	        j(                          t        j                  ddddddd ddd dgk(  sJ t        j                  vsJ t	        j                        }t	        j                  |      k(  sJ t        j                  v sJ y )Nr7   r8   r9   LorentzHLHzi,jzih,jhrK  zph qhGsymbolGHsymbolr   Gr<   GHr>   c                  2    t        j                   dd      S Nr<   r>   )r   set_comm)rS  s   r3   r   z$test_TensorManager.<locals>.<lambda>|  s    }55h1E r5   )r   r<   r>   )r   r<   )r   r   r   r   r   rX  r    r   rA   _comm_i2symbolr   r!   r4   comm_symbols2icomm_i2symbol_comm_symbols2ir)   r   	set_commsget_commclear)r7   rP  rz   r   ihjhr   r   phqhrR  rT  rU  pspshrH   rJ   qsqshr   nhrS  s                        @r3   test_TensorManagerri  a  s   iC8Gzd;H%)DAqGX.FBy)DAq'H:.FBYGj!H7Ha03	>#=#=a#@'JA''/7:::	D8*n&@&@&CX	NB	
1aeB
R&RC.C
SA	
1BBBJ2c)CG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4r5   c                  	   t        d      } t        d| d      }t        d|      \  }}}}}|j                  }t	        d|g      \  }}	|j
                  d   }
 ||       |	|      z  } ||       ||      z  }t        |      t        |      k7  sJ  ||       ||      z   |||      z   } ||       ||      z   |||      z
  }t        |      t        |      k7  sJ  |j                  |j
                   |k(  sJ  |j                  |j
                   |k(  sJ  |j                  |j
                   |k(  sJ  |j                  |j
                   |k(  sJ  |
j                  |
j
                   |
k(  sJ   ||      j                   ||      j
                    ||      k(  sJ  |j                  |j
                   |k(  sJ  |j                  |j
                   |k(  sJ  |j                  |j
                   |k(  sJ  |j                  |j
                   |k(  sJ t         |j                  |j
                         t        |      k(  sJ t         |j                  |j
                         t        |      k(  sJ t         |j                  |j
                         t        |      k(  sJ t         |j                  |j
                         t        |      k(  sJ t         |
j                  |
j
                         t        |
      k(  sJ t          ||      j                   ||      j
                         t         ||            k(  sJ t         |j                  |j
                         t        |      k(  sJ t         |j                  |j
                         t        |      k(  sJ t         |j                  |j
                         t        |      k(  sJ t         |j                  |j
                         t        |      k(  sJ d } ||      sJ  ||      sJ  ||      sJ  ||      sJ  ||
      sJ  | ||            sJ  ||      sJ  ||      sJ  ||      sJ  ||      sJ t        j                  d	dd
      } |j                  |j
                   |k(  sJ t         |j                  |j
                         t        |      k(  sJ  ||      sJ y )Nr   r7   r8   r%  r&  rK  r<   c                 :    t        d | j                  D              S )Nc              3   <   K   | ]  }t        |t                y wr.   )r/   r   ).0_s     r3   	<genexpr>z/test_hash.<locals>.check_all.<locals>.<genexpr>  s     :A:a':s   )allr   )objs    r3   	check_allztest_hash.<locals>.check_all  s    ::::r5   r^   r]   )
r   r   r   r   r   r   hashfuncr   ri   )r   r7   rD   rE   rN   rO   rv   r   r   r   p_typerJ   r   r   t4rr  	tsymmetrys                    r3   	test_hashrx    sy   sAiQ3?G";8MAq!QAy)DAqVVAYF	
1adB	
1adB8tBx	
1adQqV	B	
1adQqV	B8tBx166166?a7<<&'111166166?a166166?a6;;$...1Q499qtkk"ad***277BGG"""277BGG"""277BGG"""277BGG""" 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>>9>>*i777		/0DOCCCYr5   c                  l   t        d      } t        dd      }| |_        t        d|      \  }}}}}t	        d      \  }}}	}
t        d|g      }|||	|
g|_        t        d|gt        j                  d	      d
      }t        d      |_        t        d|gdz        }| |_        t        d      }t        d|gdz        }||_        t        d      }g d|_        t        d|      \  }}}t        d|g      }|||	|
g|_        d}t        d      }||_        t        d|      \  }}}t        d|g      }t        dd      |_        t        d|gdz        }t        dd      D cg c]  }t        dd      D cg c]  }||z   	 c}! c}}|_        t        d|gdz        }t        dd      D cg c]<  }t        d	d      D cg c]"  }t        dd      D cg c]
  }||z   |z    c}$ c}}> c}}}|_        |||||||||	|
|||||||||||| |||||||fS c c}w c c}}w c c}w c c}}w c c}}}w )N)r<   r   r   r   r   r`   r   r   r   r   r`   r   r   r   r   r`   r7   r   r0  i0:5r  r=   r?   r<   GcommABr>   )r<   r>   r]   r      r*        	   r   r`   r^   rd   r   BALorentzDr`   r<   r<   r<   zmu0:3r@   )r<   r<   r   )r<   r   r<   r   r<   r   ndmzn0:3NA
      NBNCr]   r  r  )	r   r   datar   r   r    r   rA   range) 	minkowskir7   r   r   r   r   r   r   r  r  r  r=   r?   r  	ba_matrixr  r  mu0mu1mu2r@   
ndm_matrixr  n0n1n2r  r  rz   r   r  r   s                                    r3   _get_valued_base_test_variablesr    sS     I iQ/GGL'8BBBL)MAr2r3	"AR_AF3	>#=#=a#@'JA1XAF	D7)A+	&BBG  I 
D7)A+	&BBG 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XXqeAqkBa,11Q,BXBGq"b!WaRXsCcSUWYBIy*b"b"bR R	 ,C,BXsB   "H5HH/H/H)H$%H)*H/H$H))H/c                     t               5  t               \  } }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}t        g d      t        g d      t        g d      t        g d      g}t        |       ||||	gk(  sJ t        |      g dk(  sJ t        |      |k(  sJ t         | |            ||||	gk(  sJ t         |||            |k(  sJ t        d |||      z        |D cg c]  }d|z  	 c}k(  sJ t        d |||      z        |D cg c]  }d|z  	 c}k(  sJ t         | |       | |      z         d|z  d|z  d|z  d|	z  gk(  sJ  |||       |||      z
  d	k(  sJ t         |||      d |||      z  z
        |D cg c]  }|  c}k(  sJ 	 d d d        y c c}w c c}w c c}w # 1 sw Y   y xY w)
Nr  r  r  r  )r<   r>   r]   r   r  r*  r  r  r  r   r`   r^   rd   r   r  r  r]   r  r>   r   )r+   r  r   r|   )r=   r?   r  r  r@   r7   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   list_BArz   s                                  r3   test_valued_tensor_iterr    s   		! JQpQr	OAr2q'1b"b(Cc3PRTV	RRIz2r2r2&l(;U>=RTYZjTklAw1b"b/)))I"XXXXBx7""" AbE{q"b"o---Br2J7***A2r
N#w'?!A'????BBO$(AAa(AAAA AbEAbEM"qsAbD!B$"&===="bzBr2J&!+++Br2JRBZ/04IAaR4IIII)J J (@(A 5J)J Js7   CF6%F'1F6F,A0F6
F1F6'F66F?c                     t               5  t               \  } }}}}}}}}}	}
}}}}}}}}}}}}}}}}}} | |       d    | |      d   k(  sJ  | |       d    | |      d    k(  sJ  |||      d   dk(  sJ  |||       d   dk(  sJ  || |       d   dk(  sJ  || |      d   dk(  sJ 	 d d d        y # 1 sw Y   y xY w)Nr   r<   r<   r<   r`   )r+   r  r=   r?   r  r  r@   r7   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   s                                r3   3test_valued_tensor_covariant_contravariant_elementsr    s   		! 
&QpQr	OAr2q'1b"b(Cc3PRTV	RRIz2r2r2"vayAbE!H$$$"vayQrU1XI%%%"bz$2%%%"rc{4 A%%%2#s|D!R'''2#r{4 A%%%
& 
& 
&s   B&B;;Cc                     t               5  t               \  } }}}}}}}}}	}
}}}}}}}}}}}}}}}}}} |||      j                         }|t        g dg dg dg dg      k(  sJ  |||       j                         t	        d      k(  sJ  | |      j                         t        ||||	g      k(  sJ  | |       j                         t        || | |	 g      k(  sJ 	 d d d        y # 1 sw Y   y xY w)Nrz  r{  r|  r}  r   )r+   r  
get_matrixr   r   )r=   r?   r  r  r@   r7   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   matabs                                 r3   test_valued_tensor_get_matrixr  #  s(   		! AQpQr	OAr2q'1b"b(Cc3PRTV	RRIz2r2r22r
%%' / / / /	 " # # 	# # "rc{%%'3q6111 u!VQBO%<<<<"v  "fa"rcB3-?&@@@@#A A As   CC++C4c                     t               5  t               \  } }}}}}}}}}	}
}}}}}}}}}}}}}}}}}} | |       | |       z  j                  |dz  |dz  z
  |dz  z
  |	dz  z
  k(  sJ  | |       | |       z  j                  | dz  k(  sJ  | |       | |       z  j                   | |      dz  k(  sJ  | |       ||       z  j                  | d|z  z
  d|	z  z
  k(  sJ t        d      D ]=  }t        d      D ]-  } | |       ||       z  ||f   ||||	g|   g d|   z  k(  r-J  ?  ||       ||       z  j                  |dz   |dz  z   |dz  z   |	dz  z   k(  sJ  | |       |||       z  } | |      j                  dk(  sJ  |||       j                  dk(  sJ |j                  dk(  sJ t        d      D ]  }||   ||||	g|   k(  rJ  	 d d d        y # 1 sw Y   y xY w)Nr>   r]   r   )r   r`   r^   rd   r<   )r+   r  r  r  r   ) r=   r?   r  r  r@   r7   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   rz   r   contrexps                                    r3   test_valued_tensor_contractionr  7  sc   		! 5QpQr	OAr2q'1b"b(Cc3PRTV	RRIz2r2r2"2#$$Qq(827(BR1W(LLLL"2#$$Q..."2#$$"
222"2#$$a"fq2v(====q 	YA1X Y"2#1-!RR1CoVWFX1XXXXY	Y
 #C4 &&16'B!G*;bAg*Ea*OOOOR52b2#;&uzzQ"rc{1$$$}}!!!q 	5AA;1b"b/!"4444	5)5 5 5s   D G',B-G'G''G0c                      t               5  t               \  } }}}}}}}}}	}
}}}}}}}}}}}}}}}}}} |||       j                  dk(  sJ  |||       j                  dk(  sJ 	 d d d        y # 1 sw Y   y xY w)Nr   r>   r+   r  r  r  s                                r3   #test_valued_tensor_self_contractionr  O  s    		! %QpQr	OAr2q'1b"b(Cc3PRTV	RRIz2r2r2"rc{1$$$"rc{1$$$% % %s   AA00A9c                  r   t               5  t               \  } }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}|dz  |dz   |dz  z   |dz  z   |	dz  z   k(  sJ |dz  t        |dz   |dz  z   |dz  z   |	dz  z         k(  sJ  ||      dz  |dz  k(  sJ  ||      dz  |dz  k(  sJ 	 d d d        y # 1 sw Y   y xY w)Nr>   r<   )r+   r  r   r  s                                r3   test_valued_tensor_powr  X  s   		! !QpQr	OAr2q'1b"b(Cc3PRTV	RRIz2r2r2!t1ur1u}r1u,r1u4444!ttQTEBEMBE1BE9::::vqyAqD   vqyAqD   ! ! !s   BB--B6c                  ^   t               5  t               \  } }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}t        d      \  }}}| | |      z   ||      z  } | d   ||z  k(  sJ | d   d|	z  |z  k(  sJ | | |      z   ||       |z  z  j                  }!|!j	                         | |z  |z  d|z  |z  |z  z
  d|	z  |z  |z  z
  k(  sJ  | |       ||      z   }"|"d   |k(  sJ |"d   |dz   k(  sJ |"d   |dz   k(  sJ |"d   |	dz   k(  sJ  | |       ||      z
  }#|#d   |k(  sJ |#d   |dz
  k(  sJ |#d   |dz
  k(  sJ |#d   |	dz
  k(  sJ |" ||       z  j                  | d|z  z
  d|	z  z
  dz
  k(  sJ | | |      z  | ||      z  z   }$|$ ||      z  d	z  }%|%d|z   |||      z  z   }&|&dz  }'|'dz  |&k(  sJ |' || |       z  }(|(j                  j	                         d
|z  |z  d|z  |z  z   d|z  |z  z   d
|	z  |z  z   d|z  z   d|z  z   k(  sJ 	 d d d        y # 1 sw Y   y xY w)Nzx1:4r  )r]   r]   r]   r>   r   r<      r               )r+   r  r   r  r   ))r=   r?   r  r  r@   r7   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)                                            r3   test_valued_tensor_expressionsr  c  s   		! %_QpQr	OAr2q'1b"b(Cc3PRTV	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##H,c                     t               5  t               \  } }}}}}}}}}	}
}}}}}}}}}}}}}}}}}} | |       | |       z  |dz  |dz  z
  |dz  z
  |	dz  z
  z
  }|j                  dk(  sJ |dz  |dz  z
  |dz  z
  |	dz  z
   | |       | |       z  z
  }|j                  dk(  sJ  | |       | |       z  |dz  z
  |dz  z   |dz  z   |	dz  z   }|j                  dk(  sJ  ||       ||       z  d|dz  z  z   d|dz  z  z
  d|dz  z  z
  d|	dz  z  z
   | |       | |       z  z
  } | j                  dk(  sJ 	 d d d        y # 1 sw Y   y xY w)Nr>   r   r  )!r=   r?   r  r  r@   r7   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!                                    r3   test_valued_tensor_add_scalarr    s   		! QpQr	OAr2q'1b"b(Cc3PRTV	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   D4E		Ec                  V   t               5  t               \  } }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}t        d      }ddg|_        t	        d|      \  }}}t        dd      \  }}} }!t        d|gdz        }"||g| |!fg|"_        t        d	|gdz        }#|| g||!gg|#_         |"||       |#| |       z  }$|$j                  |dz  |dz  z   | dz  z   |!dz  z   k(  sJ |$j                  |dz  d|z  | z  z   |!dz  z   k7  sJ  |"||       |"| |       z  }%|%j                  |dz  || z  z   | |z  z   |!dz  z   k(  sJ |%j                  |dz  d|z  | z  z   |!dz  z   k7  sJ | |"||       z  j                  }&|&j                         ||z  ||!z  z   k(  sJ 	 d d d        y # 1 sw Y   y xY w)
N	Euclideanr<   zi1:4za b c dF)commutativeV1r>   V2)r+   r  r   r  r   r   r    r   )'r=   r?   r  r  r@   r7   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   euclidrD   rE   rN   rO   r  r  vtpvtp2Vcs'                                          r3   test_noncommuting_componentsr    s   		! ,QpQr	OAr2q'1b"b(Cc3PRTV	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                  b   t               5  t               \  } }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}t        |      } ||       ||       z  j                   ||      j	                         j
                  |z   ||      j	                         z  d   k(  sJ 	 d d d        y # 1 sw Y   y xY w)N)r   r   )r+   r  r   r  r  rB  )r=   r?   r  r  r@   r7   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   mmatrixs                                 r3   test_valued_non_diagonal_metricr    s    		! fQpQr	OAr2q'1b"b(Cc3PRTV	RRIz2r2r2$2r2#w$$B):):)<)>)>)H2b6K\K\K^)^`d(eeeef f fs   BB%%B.c                  (   t               5  t               \  } }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}|dz   |dz
  ||	g}t        |      | _        t	        d      D ]  } | |      j                  |   ||   k(  rJ  t        d      \  }} }!t        ||| |!g       | |       _        t	        d      D ]D  } | |      j                  |   || |  |! g|   k(  sJ | j                  |   || |  |! g|   k(  rDJ  t	        d      D "cg c]-  }"t	        d      D cg c]  }|dz  d|dz  z  z
  |"dz   z   c}/ }#}"}|# || |       _        t	        d      D ]  }t	        d      D ]  }" |||      j                  ||"f   |#|   |"   |rdndz  |"rdndz  k(  sJ  || |      j                  ||"f   |#|   |"   |"rdndz  k(  sJ  |||       j                  ||"f   |#|   |"   |rdndz  k(  sJ  || |       j                  ||"f   |#|   |"   k(  rJ   |# || |      _        t	        d      D ]  }t	        d      D ]  }" |||      j                  ||"f   |#|   |"   |rdndz  k(  sJ  || |      j                  ||"f   |#|   |"   k(  sJ  |||       j                  ||"f   |#|   |"   |rdndz  |"rdndz  k(  sJ  || |       j                  ||"f   |#|   |"   |"rdndz  k(  rJ   	 d d d        y c c}w c c}}"w # 1 sw Y   y xY w)Nr<   r   zqx qy qzr]   r>   r  r`   )r+   r  r   r  r  r   )$r=   r?   r  r  r@   r7   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   arrrz   qxqyqzr   random_4x4_datas$                                       r3    test_valued_assign_numpy_ndarrayr    s   		! "YQpQr	OAr2q'1b"b(Cc3PRTV	RRIz2r2r2 sBqD"b!sq 	/Auzz!}A...	/ Z(
BQBO,2#q 	6AR5::a=QbS2#$6q$999966!9RC"rc 21 5555	6
 MRRSHUqqBAQT!AqD&[1Q3/BUU+B3q 	HA1X H"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	H	H +B3q 	YA1X Y"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	Y	Y;"Y "Y$ CU%"Y "YsK   A.L:A;L6LLK=4L9CLCL.L=LLLc                     t               5  t               \  } }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}g dg dg dg dg}||_        t        |      }|j                  }|j                         } t        d      }!|j                         }"t        d      D ]  }#t        d      D ]  }$ |||      j                  |#|$f   ||#|$f   k(  sJ  || |       j                  |#|$f   | |#|$f   k(  sJ  |||       j                  |#|$f   |!|#|$f   k(  sJ  || |      j                  |#|$f   |!|#|$f   k(  sJ  |||      |#|$f   ||#|$f   k(  sJ  || |       |#|$f   | |#|$f   k(  sJ  |||       |#|$f   |!|#|$f   k(  sJ  || |      |#|$f   |!|#|$f   k(  sJ  |"||       |#|$f   |!|#|$f   k(  rJ  ! 	 d d d        y # 1 sw Y   y xY w)N)r>   r>   r>   r<   )r>   r]   r<   r   )r>   r<   r>   r]   )r<   r   r]   r>   r   )	r+   r  r  r   r   invr   get_kronecker_deltar  )%r=   r?   r  r  r@   r7   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KDrz   r   s%                                        r3   test_valued_metric_inverser    sR   		! 7QpQr	OAr2q'1b"b(Cc3PRTV	RRIz2r2r2
 L,E2Juuw1v ((*q 	7A1X 
7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
7	7%7 7 7s   F%G2GGc                  >   t               5  t               \  } }}}}}}}}}	}
}}}}}}}}}}}}}}}}}} | |       | |      z  }|j                         }| | |       | |      z  k(  sJ t        d      D ]#  }t        d      D ]  } ||| f   || |f   k(  rJ  %  ||       | |      z   ||      z  }!|!j                         }"t        d      D ]5  }t        d      D ]%  } t        d      D ]  }#|!|| |#f   |"| ||#f   k(  rJ  ' 7 	 d d d        y # 1 sw Y   y xY w)Nr   )r+   r  r!   r  )$r=   r?   r  r  r@   r7   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   e1e2rz   r   o1o2r   s$                                       r3   test_valued_canon_bp_swapaxesr    sb   		! 6QpQr	OAr2q'1b"b(Cc3PRTV	RRIz2r2r2rU1R5[[[]QrU1R5[   q 	,A1X ,!Q$x2ad8+++,	, rU1R5[2[[]q 	6A1X 6q 6AaAg;"Q1W+55566	66 6 6s   BDA*DDDc                    	
 t               5  t        dd      } t        d|       \  }}}}g d| _        t	        d| gdz        }t	        d| gdz  t        j                  d            t	        d| gdz  t        j                  d            t        g d	g d
g dg      


j                  z   

j                  z
  	
|_        |_        	|_        d _        t        t        
fd       t        t        	fd       	_        t        t        fd       t        t        
fd       g dg dg dg_        g dg dg dg_        d d d        y # 1 sw Y   y xY w)NITr]   r0  i0:4r<   r<   r<   r=   r>   r^   )r<   r>   r]   )r   r  r*  )r  r  r  c                     || _         y r.   )r  )r=   dats     r3   assignz:test_valued_components_with_wrong_symmetry.<locals>.assign2  s	    AFr5   c                              S r.   r   )A_symr  	mat_nosyms   r3   r   z<test_valued_components_with_wrong_symmetry.<locals>.<lambda>6  s    6%#; r5   c                              S r.   r   )r  r  mat_antisyms   r3   r   z<test_valued_components_with_wrong_symmetry.<locals>.<lambda>7  s    6%#= r5   c                              S r.   r   )	A_antisymr  mat_syms   r3   r   z<test_valued_components_with_wrong_symmetry.<locals>.<lambda>:  s    6)W#= r5   c                              S r.   r   )r  r  r  s   r3   r   z<test_valued_components_with_wrong_symmetry.<locals>.<lambda>;  s    6)Y#? r5   )r   r   r   )r+   r   r   r  r    r   rC   r   rB  r)   r   )r  r   r   r   r   A_nosymr  r  r  r  r  r  s         @@@@@@r3   *test_valued_components_with_wrong_symmetryr  !  s4   		! ;Tq)'3BB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&&E/c                  x   t               5  t        dddd      } ddg| _        t        d|       \  }}}}t	        d| g      }dd	g|_        t	        d
| gdz  t        j                  d            }d	dgdd	gg|_         |||       ||       z   |||      z   ||       z  }|j                  t        d	d	gd	dgg      k(  sJ  |||       |||      z   ||       z   ||       z  }|j                  |j                  k(  sJ ||z   j                  d|j                  z  k(  sJ 	 d d d        y # 1 sw Y   y xY w)Nr7   r<   rz   r>   rX   r:   r   r`   \mu, \nu, \alpha, \betaur   rf   r^   )r+   r   r  r   r    r   rC   r   )	r7   rq   rr   rn   ro   r  rf   mul_1mul_2s	            r3   test_issue_10972_TensMul_datar   @  sW   		! 8!)Q3TUVAw,-J-46Bt sWI&QsWIaK)G)G)KLa&q' "eq%y(1R;6D5A

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

ejj()($$EJJ676)8 8 8s   DD00D9c                     t               5  t        dddd      } g d| _        t        d|       \  }}}}t	        d| g      }g d	|_        t	        d
| gdz  t        j                  d            }t        d      \  }}}	}
}}d|||	g| d|| g| | d|
g|	 ||
 dgg|_         |||       ||       z  } ||       ||      z  j                  t        g dd|dz  ||z  ||	z  gd||z  |dz  ||	z  gd||	z  ||	z  |	dz  gg      k(  sJ  ||       ||      z  j                         j                   ||       ||      z  j                  k(  sJ  |||       |||      z   ||       z   ||       z  j                   ||       ||      z  j                   k(  sJ  |||       |||      z   ||       z   ||       z  j                   ||       ||      z  j                  k(  sJ t	        d| gdz  t        j                  d            }| j                  |_         ||       ||      z   |||      z   } ||        |||      z  }|j                  t        g d      k(  sJ  ||        |||      z   |||      z  }|j                  t        j                  ddd      k(  sJ  |||       |||      z   || |       z  }|j                  dd d f   t        g d      k(  sJ |j                  d d df   t        g d      k(  sJ  ||        |||      z  }|j                  t        g d      k(  sJ |`d d d        y # 1 sw Y   y xY w)Nr7   r<   r8   r   r  r  r  r  rz  rf   r>   r^   zE_x E_y E_z B_x B_y B_zr   )r   r   r   r   r   )r+   r   r  r   r    r   rC   r   r   r!   zeros)r7   rq   rr   rn   ro   r  rf   ExEyEzBxByBzr   r   perpr  r  Fperpmul_3s                       r3   test_TensMul_datar  X  s   		! 8!)Q3TUV$,-J-46Bt sWI&sWIaK)G)G)KL!()B!CBBBBOS!R"S2#q"S"rc1	 b"I2#22$$|q"r'27;b"'27;b"r'27;= >> 	 > 22((*//AbEAbEM3G3GGHG2u$+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Ry(2#b"%

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

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

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

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

eL1121 Fq8 8 8s   L>MMc                     t               5  t        dddd      } ddg| _        t        d|       \  }}}}t        d|       \  }}t	        d	| gdz  t        j                  d            }| j                  |_        t	        d
| g      }ddg|_         |||       |||      z   ||       z   |||       ||      z  z
  }	|	j                  t        j                  ddd      k(  sJ  |||       |||      z   ||       z   |||       ||      z  z
  }
|
j                  t        j                  ddd      k(  sJ  ||       ||      z   |||      z   } ||        |||      z  }|j                  t        ddg      k(  sJ  ||        |||      z   |||      z  }|j                  t        j                  ddd      k(  sJ 	 d d d        y # 1 sw Y   y xY w)Nr7   r<   rz   r>   r  r`   rM   zi_0:2r   r  r   )	r+   r   r  r   r    r   rC   r   r  )r7   rD   rE   rN   rO   r   r   r   r  add_1add_2r	  r  r  s                 r3   test_issue_11020_TensAdd_datar    s   		! 4!)Q3TUVAw#L':
1a1B sWIaK)G)G)JKsWI&Q!Q!Ar("QsV+a1g!n<

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

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

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

ekk!Q223274 4 4s   F=GGc                     t        dd      } t        d|       \  }}}}}t        d|       }t        d|       }t        d| | g      }t        d| | gt        j                  d	            }	 |||      }
 |||       } |||       |	||      z  } |||       |	||       z  } |||       |	| |       z  }|
|z   }t        |
j                        |d
f|dfgk(  sJ t        |
j                        g k(  sJ t        |
j                        |d
f|dfgk(  sJ t        |j                        g k(  sJ t        |j                        |d
f| dfgk(  sJ t        |j                        |d
f| dfgk(  sJ t        |j                        |df|df|df|dfgk(  sJ t        |j                        g k(  sJ t        |j                        |df|df|df|dfgk(  sJ t        |j                        |df|dfgk(  sJ t        |j                        |df| dfgk(  sJ t        |j                        |df|df|df| dfgk(  sJ t        |j                        g k(  sJ t        |j                        |df|df| df| dfgk(  sJ t        |j                        |df|df| df| dfgk(  sJ t        |j                        |df|df|df|dfgk(  sJ t        |j                        |df| dfgk(  sJ t        |j                        |df|df|df| df|df|dfgk(  sJ |
j                         ||gk(  sJ |
j                         ||gk(  sJ |j                         || gk(  sJ |j                         g k(  sJ |j                         ||||gk(  sJ |j                         ||||gk(  sJ |j                         |||| gk(  sJ |j                         ||gk(  sJ |j                         ||| | gk(  sJ |j                         g k(  sJ y )Nr7   r8   r9   r~  r   L_1r=   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   r    r   rC   r|   _iterate_free_indices_iterate_dummy_indices_iterate_indicesr   get_free_indices)r8   r   r   r   r   r   L0L1r=   r?   r  r  e3e4e5e6s                   r3   test_index_iterationr    s.   	c2A'2BBB	q	!B	q	!B3AA3A > >q ABA	
2bB	
2rcB	
2b!Br(	B	
2b!Bs)	B	
2b!RC*	B	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[  )\  \  \  \>>Bx''' RH,,,>>RCy((( B&&&>>BB//// RR$4444>>BRC0000 RH,,,>>BbS1111 B&&&r5   c                  Z   t        d      } t        d|       \  }}}t        d|       }t        d| g      \  }}}}t	        t         ||       ||            t              sJ t	        t         ||       ||      z         t              sJ  ||       ||        ||       z   z  }	|	j                   ||       ||        ||       z   fk(  sJ |	 ||       ||       z   ||       ||       z  z   k7  sJ |	j                          ||       ||       z   ||       ||       z  z   k(  sJ t        |	      dk(  sJ  ||       ||      z   ||       ||      z  z   }	t        |	      dk(  sJ  ||        ||       ||      z   ||       ||      z   ||      z   ||       z  z   z  }	|	 ||        ||      z   ||      z   ||        ||      z   ||      z   ||      z   ||       z  z   k7  sJ |	j                          ||        ||      z   ||      z   ||        ||      z   ||      z   ||      z   ||       z  z   k(  sJ t        |	      dk(  sJ t        |	j                               dk(  sJ  ||       d	 ||      z   ||      z   ||       ||      z  z   z  }	|	j                         d	 ||       z   ||      z   ||      z   ||        ||      z   ||      z  z   k(  sJ d	 ||      z   ||       z  }	|	j                  d	k(  sJ  ||       ||       ||      z   ||       ||       ||      z   z  z   z  }	t        |	      d
k(  sJ t        |	j                               dk(  sJ t	        t        d      t              sJ t        d      j                         }
|
dk(  sJ t	        |
t              sJ  ||       ||       z   ||       ||       z  z   } ||       |z  } ||      |z  }|j                          ||       ||       z   ||      z   ||       z   ||       ||       z   ||      z   ||       z  z   k(  sJ  ||       ||        ||        ||       ||       z   ||       ||       z  z   z  z   z  }	|	j                          ||       ||       z   ||       ||       z   ||      z   ||       z  z    ||       ||       z   ||      z   ||       z  z   k(  sJ  ||        ||       ||       z   ||       ||       z  z   z  }	|	j                          ||        ||      z   ||       z   ||        ||      z   ||       z  z   k(  sJ y )Nr8   zi j kr   A B C Dz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)r>   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   r   r   r   rB   r!   r  r   r   r   )r8   rz   r   r   r   r=   r?   r@   r   r6  tmp1p2p3s                 r3   test_tensor_expandr$    s   AWa(GAq!
eQ
Ci!-JAq!Qc!A$!ow///fQqT!A$Y'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%/?????r5   c                  >   t        d      } t        d|       \  }}}}t        d| g      t        d      \   |       t	        d            k(  sJ  |        t	        d             k(  sJ t        t        fd       t        t        fd       y )Nr8   r  r=   zx yr   c                        z         S r.   r   )r=   r  ys   r3   r   z6test_tensor_alternative_construction.<locals>.<lambda>"  s    a!f r5   c                        dz        S r   r   )r=   r  s   r3   r   z6test_tensor_alternative_construction.<locals>.<lambda>#  s    q1v r5   )r   r   r    r   r   r)   	TypeErrorr   )r8   r   r   r   r   r=   r  r'  s        @@@r3   $test_tensor_alternative_constructionr*    s    A#FA.NBB3A5>DAqR5AfTlO###bS6Qt}%%%%
9n%
:~&r5   c                     t        d      } t        dd      }t        d|       \  }}t        d| g      \  }}}}t        d| | g      }t        d| gd	z        }	 |       |       d
dgdd	gg| t	        d
d      ij                        gt        d
dgddgg      fk(  sJ j                        t        d
dgddgg      k(  sJ j                  g      t        d
dgddgg      k(  sJ j                   g      t        d
dgdd	gg      k(  sJ j                  t        d      t        d       g      t        d
dgdd	gg      k(  sJ j                   g      t        d
dgdd	gg      k(  sJ j                    g      t        d
dgddgg      k(  sJ j                  g      t        d
dgddgg      k(  sJ j                   g      t        d
dgdd	gg      k(  sJ j                   g      t        d
dgdd	gg      k(  sJ j                    g      t        d
dgddgg      k(  sJ j                        t        d
dgddgg      k(  sJ  |       |      d
dgdd	gg| t	        d
d      ij                        gt        d
dgdd	gg      fk(  sJ j                        t        d
dgdd	gg      k(  sJ j                  g      t        d
dgdd	gg      k(  sJ j                   g      t        d
dgddgg      k(  sJ j                   g      t        d
dgddgg      k(  sJ j                    g      t        d
dgdd	gg      k(  sJ j                  g      t        d
dgdd	gg      k(  sJ j                   g      t        d
dgddgg      k(  sJ j                   g      t        d
dgddgg      k(  sJ j                    g      t        d
dgdd	gg      k(  sJ  ||       |      d
dgdd	gg| t	        d
d      ij                        |gt        d
dgdd	gg      fk(  sJ  |       |       z   |      d
dg| t	        d
d      ij                        g dfk(  sJ j                  g       dk(  sJ  |	 |       |       z   ||       z   |      d
dg |	||      t        d
gdz        j                  dddd      | t	        d
d      ij                        sJ  ||       |      d
dgdd	gg| t	        d
d      it        t        fd        |       |      d
dgit        t        fd        |       |      d
dgdd	ggit        t        fd        ||       |      z   ||       |      z  z    ||      d
g ||      d
g |      d
dgdd	gg| t	        d
d
      ij                        |gt        dd	gddggg      fk(  sJ j                  |g      t        dd	gddggg      k(  sJ j                  |g      t        ddgd	dggg      k(  sJ  ||       ||       z  dz    ||      ddg| t	        d
d
      ij                  g       dk(  sJ  |       |      z    |      d
dgdd	ggij                        gt        ddgddgg      fk(  sJ j                  g      t        ddgddgg      k(  sJ j                  g      t        ddgddgg      k(  sJ  |       |      z
   |      d
dgdd	ggij                  g      t        ddgd
dgg      k(  sJ j                  g      t        dd
gddgg      k(  sJ  |	||        |	||       d
dgdd	ggij                        gt        d
dgdd	gg      fk(  sJ  |        |       dij                        g dfk(  sJ  |        |        t        g dg dg dg d g      | t        g dg dg dg d g      ij                        g d	fk(  sJ  |       |      z   |      d
dgit        t        fd!        |       |      d
dggit        t        fd"       t        d#|      \  }
t        d$|g      } |       |       z   |      d
ggit        t        fd%       y )&Nr8   L2r>   r0  zi j k lr  Hr2  r   r<   r]   r`   r^   r   rz   r   rd      c                  &     j                        S r.   _extract_datar6  repls   r3   r   z)test_tensor_replacement.<locals>.<lambda>]      t11$7 r5   c                  &     j                        S r.   r0  r2  s   r3   r   z)test_tensor_replacement.<locals>.<lambda>a  r4  r5   c                  &     j                        S r.   r0  r2  s   r3   r   z)test_tensor_replacement.<locals>.<lambda>e  r4  r5   r*  r  d   q   r  r   *   rz  r{  r|  r}  c                  *     j                  g      S r.   replace_with_arrays)r6  r   r3  s   r3   r   z)test_tensor_replacement.<locals>.<lambda>      t77qcB r5   c                  *     j                  g      S r.   r;  )r6  rz   r3  s   r3   r   z)test_tensor_replacement.<locals>.<lambda>  r=  r5   zu1:4Uc                  .     j                   g      S r.   r;  )r6  r3  u1u2s   r3   r   z)test_tensor_replacement.<locals>.<lambda>  s    t77rB3iH r5   )r   r   r   r    r,   r1  r   r<  r   reshaper)   r   )r8   r,  r   r  r=   r?   r@   r   r-  r2  u3r?  r6  rz   r   r3  rA  rB  s               @@@@@@r3   test_tensor_replacementrE  &  sn   A	1	%B	1-JAq!Qi!-JAq!Q3A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1qb>DaArNa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Ir5   c                     t        dd      } t        d| gdz        }t        d| g      }t        d      \  }}}}t        d      \  }} |||||      }	|	j                  t              t	        t        d      ||||      k(  sJ  ||| ||      }
|
j                  t              t        t	        t        d      ||||      |dd	f      k(  sJ |
 |||||       z   }|j                  t              t        t	        t        d      ||||      |dd	f      t        t	        t        d      ||||      |dd	f      z   k(  sJ  ||       |	z  }|j                  t              t        t	        t        d      |      t	        t        d      ||||      z  |dd	f      k(  sJ  ||       |
z  }|j                  t              t        t	        t        d      |      t	        t        d      ||||      z  |dd	f|dd	f      k(  sJ y )
Nr8   r   r0  r=   r?   r  zL_0:2r   r]   )r   r    r   rewriter   r   r   )r8   r=   r?   r   r   r   r   r   r  rk   rl   rm   b1b2s                 r3   test_rewrite_tensor_to_IndexedrJ    s%   #A3AA3AV_NBBwHC	
2r2r	B::g'&+r2r2"FFFF	
2sB	B::g#gfSk3R&LsTUWXk"ZZZZ	aBRC 	 B::gGF3Kc2r2S!QK@GF3KRc2S!QK@	AA A A 
B3B::g#gfSk3&?sUXZ\^`bd@e&ehkmnpqgr"ssss	
B3B::g#gfSk3&?sUXZ]_acf@g&gjmoprsitwz|}  @A  wB  #C  C  C  Cr5   c            
      `   t        dd      } t        d|       \  }}}t        dt        | d      \  }}}t        d|       }| j                  }| j
                  }	t        d	| g      }
t        d
| g      }t        d| | g      }t        dd      }t        d      }|j                  |      ||ik(  sJ |j                  |       || ik(  sJ |j                  |       dk(  sJ |j                  |      ||ik(  sJ  |	|| |      j                   |	|||            dk(  sJ  |	|| |      j                   |	|||            ||| |ik(  sJ  |	|| |      j                   |	|||      d      dk(  sJ  |       j                   |
|       ||      z         |        |
|       ||      z  ik(  sJ  ||      j                   |
|            || ||      j                  t         |
|            ik(  sJ  |||      j                   |
|       ||      z        || |||      j                  t         |
|       ||      z        ik(  sJ  |||      j                   |
|       ||      z         |||      j                  t         |
|       ||      z        ik(  sJ  |||      j                   |||             |||      j                  t         |||            ik(  sJ  |||      j                   |||            dk(  sJ  |
|       |
|      z  j                   |||      d      dk(  sJ  |||      j                   |||            i k(  sJ  |	|||      j                   |	|||            J  |	|||      j                   |	|||            i k(  sJ y)zY
    Test match and replace with the pattern being a WildTensor or a WildTensorIndex
    r/  r]   r0  r1  za b cT)clsr   ignore_updownr   r2  r   r=   W)unordered_indicesr?  Nr<   )r   r   r   r&   r3  r4  r    r'   matchesreplaceheadr(   )r/  r   r   r   rD   rE   rN   r   r3  r5  r2  r   r=   rN  r?  s                  r3   test_tensor_matchingrS    s    
1	%BWb)GAq!G?bX\]EAaR AHHE
**C3A3A3R!Asd3AsA99Q<Aa5   99aR=QrF"""99aR=D   99Q<Aa5   q!A;Aa
,444q!A;Aa
,Ar1===q!A;s1Qqz1-2223;;!QqT	#QqT!A$Y'7777Q4<<1Aa1M!A$4G#HHHHQq6>>1Q4!9&1Q!A]1Q4PQRSPT9=U*VVVVQq6>>1Q4!9&1Qq6;;ad1Q4i8P*QQQQQq6>>1Qq6#!A]1Q75K'LLLLQq6>>1Qq6#t+++qT!A$Y  !Aa&!,111 1:eAaj)R///q1:c!Aaj)111q1:c!Aaj)R///r5   c            	         t        dd      } t        d|       \  }}}t        d| g      }t        d| g      }t        d| | g      }t        | j                  dz   | d	      } ||       ||      z   ||       z  j                   ||       ||       ||       z  i       ||       ||      z   ||       z   ||       z  k(  sJ  ||       ||      z   ||       z  j                   ||       ||       ||       z  i       ||       ||      z   ||       z   ||       z  k(  sJ  ||       ||      z  j                  || ||       ||       ||       z  i       ||       ||      z   ||       z  k(  sJ  ||       |||       z   ||       z  j                          ||       |||       z   ||       z  k(  sJ y
)z;
    Test subs and xreplace in TensMul. See bug #24337
    r/  r]   r0  r1  r2  r   r=   _0TN)r   r   r    r   r:   subsxreplacer   )r/  r   r   r   r2  r   r=   C0s           r3   test_TensMul_subsrY    s    
1	%BWb)GAq!3A3A3R!A	R]]T)2t	4B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!!1b!A$!QrU
";<"ad
1aR5@PPPPqT!Aqb'\!QB%&&(AaD1aRLA2,>>>>r5   c                  `    t               5  t        dgdz         d d d        y # 1 sw Y   y xY wrW  )r+   r#   r   r5   r3   test_tensorsymmetryr[    s+    		! s1u  s   $-c                  Z    t               5  t        dg        d d d        y # 1 sw Y   y xY w)Nr=   )r+   r"   r   r5   r3   test_tensorheadr]    s'    		! 3  s   !*c                      t               5  t        j                  d      } t        d      }t	        |gdz  |       }t        |t              sJ 	 d d d        y # 1 sw Y   y xY w)Nr>   r7   )r+   r   rC   r   r$   r/   )r   r7   S2s      r3   test_TensorTyper`    sY    		! *--a0!),	!T*"j)))	* * *s   AAA!c                  \    t               5  t        dd       d d d        y # 1 sw Y   y xY w)Nr7   r8   )	dummy_fmt)r+   r   r   r5   r3   test_dummy_fmtrc    s'    		! 2	S12 2 2s   "+c            	         t        dd      } t        d|       }t        d| g      }t        d      \  }}}t	        |dz  j                  | ||      i      t              sJ t	        |dz   j                  | ||       ||       z  i      t              sJ t	        |dz  j                  | ||      i      t              sJ t	        |dz   j                  | ||       ||       z  i      t              sJ t	        |dz  j                  | ||            t              sJ t	        |dz   j                  | ||       ||       z        t              sJ y)	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]   r0  rz   r2  zx y zr>   N)
r   r   r    r   r/   rW  r   r   rV  rQ  )r/  rz   r2  r  r'  zs         r3   test_postprocessorrf    s2   
 
1	%BsBA3AGEAaqsnna1Y/999qsnna1ae_5w???qsjj!QqT+W555qsjj!QqT!QB%Z17;;;qsmmAqt,g666qsmmAqtAqbEz2G<<<r5   N)xsympy.concrete.summationsr   sympy.core.functionr   sympy.core.numbersr   sympy.matrices.denser   r   sympy.tensor.indexedr   sympy.combinatoricsr	   
sympy.corer
   r   r   r   r   sympy.core.containersr   sympy.core.symbolr   (sympy.functions.elementary.miscellaneousr   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,   r4   rK   rP   rU   r[   rx   r}   r   r   r   r   r   r   r   r   r   r   r   r   r
  r  r  r  r   r#  r(  r+  r-  r7  r:  rI  rN  ri  rx  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r$  r*  rE  rJ  rS  rY  r[  r]  r`  rc  rf  r   r5   r3   <module>ru     s   ) & & . ( + 6 6 ' % 9 $3 3 3 3 3 3 G F K<Z((TL.GrT&l.$WP,"A$M*U&62T;l'6"](#0J#J(  *?XAPF_-D	,)+V%N*:#5L7 z6RrJ0&A(50%!&_R*,:f#YL7B6&;>809v4>0'f2@j	'xJvC2"0H?"*2=r5   