
    oVhT=                       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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 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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 d dl6m7Z7m8Z8m9Z9 d dl:m;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# ZOd$ ZPd% ZQd& ZRd' ZSd( ZTd) ZUe8d*        ZVd+ ZWd, ZXd- ZYd. ZZd/ Z[d0 Z\d1 Z]d2 Z^d3 Z_d4 Z`d5 Zad6 Zbd7 Zcd8 Zdd9 Zed: Zfd; Zgd< Zhd= Zid> Zjd? Zkd@ ZldA ZmdB ZndC ZodD ZpdE ZqdF ZrdG ZsdH ZtdI ZudJ ZvdK ZwdL ZxdM ZydN ZzdO Z{dP Z|dQ Z}dR Z~dS ZdT ZdU ZdV ZyW)X    )Sum)expand)Integer)Matrixeye)Indexed)Permutation)SRationalSymbolBasicAddWildFunction)Tuple)symbols)sqrt)	integrate)Array)TensorIndexTypetensor_indicesTensorSymmetryget_symmetric_group_sgsTensorIndex
tensor_mulTensAddriemann_cyclic_replaceriemann_cyclicTensMultensor_headsTensorManagerTensExpr
TensorHeadcanon_bp
tensorheadtensorsymmetry
TensorTypesubstitute_indicesWildTensorIndexWildTensorHead_WildTensExpr)raisesXFAILwarns_deprecated_sympy)diagc                     t        | t              r| j                  |      S t        |t              r|j                  |       S | |k(  S N)
isinstancer"   equals)arg1arg2s     N/home/dcms/DCMS/lib/python3.12/site-packages/sympy/tensor/tests/test_tensor.py	_is_equalr7      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)r:   abd0d1r@   rB   ttct1rC   s              r6   test_canonicalize_no_slot_symrN      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;;;;r8   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 )Nr:   r;   r<   
a, b, c, dr@   r?   zA(a)*A(b)*A(c)z-A(a)*A(b)*A(c)rA   zA(a, c)*A(b, d)z-A(a, c)*A(b, d))r   r   r#   r   rD   r$   rE   rF   )r:   rG   rH   cdr@   rK   rL   s           r6   test_canonicalize_no_dummiesrS   l   s   iC8Gg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''''r8   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 )Nr:   r@   rA   )r   r#   r   rD   rF   )r;   A1A2A3s       r6   -test_tensorhead_construction_without_symmetryrX      sl    	"A	C!Q	 B	C!Q!;!;A!>	?B8O8	C!Q!?!?!B	CB8O8r8   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 )Nr:   r;   r   r=   metric_symmetryzd:4r@   rA   zA(L_0, -L_1)*A(L_1, -L_0)z3A(L_0, -L_1)*A(L_1, -L_0)*A(L_2, -L_3)*A(L_3, -L_2)z3A(L_0, -L_1)*A(L_1, -L_2)*A(L_2, -L_3)*A(L_3, -L_0))r   r   r#   r   rD   r$   rE   )r:   rI   rJ   d2d3r@   rK   rL   s           r6   test_no_metric_symmetryr^      s%    iCKG#E7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Kr8   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 )'Nr:   r;   r<   za,a0,a1,a2,a3,b,d0,d1,d2,d3r@   r?   zA(L_0)*A(-L_0)z,A(L_0)*A(-L_0)*A(L_1)*A(-L_1)*A(L_2)*A(-L_2)r   rA   z!A(a, L_0)*A(b, L_1)*A(-L_0, -L_1)rB   z!A(b, L_0)*A(-L_0, L_1)*B(a, -L_1)   zA(a, L_0, L_1)*A(b, -L_0, -L_1)zCA(a0, L_0, L_1)*A(a1, -L_0, L_2)*A(a2, a3, L_3)*A(-L_1, -L_2, -L_3)z1A(L_0, L_1, L_2)*A(-L_0, -L_1, L_3)*B(-L_2, -L_3)Spinorr
   rZ   z2-A(S_0, S_1, S_2)*A(-S_0, -S_1, S_3)*B(-S_2, -S_3)MatM)r[   r=   z1A(M_0, M_1, M_2)*A(-M_0, -M_1, -M_3)*B(-M_2, M_3)zalpha,beta,gamma,mu,nu,rhoGammaz4-Gamma(L_0, L_1)*Gamma(rho)*Gamma(alpha, -L_0, -L_1)zGGamma(L_0, L_1)*Gamma(beta, gamma)*Gamma(-rho)*Gamma(alpha, -L_0, -L_1)FlavorFa,b,c,d,e,fzmu,nufzY-f(F_0, F_1, F_2)*f(-F_0, F_3, F_4)*A(L_0, -F_1)*A(-L_0, -F_3)*A(L_1, -F_2)*A(-L_1, -F_4))	r   r   r#   r   rD   r$   rE   rF   direct_product) r:   rG   a0a1a2a3rH   rI   rJ   r\   r]   r@   rK   rL   rB   rb   rd   alphabetagammamunurhorf   Gamma2Gamma3rh   rQ   rR   effrk   s                                    r6   test_canonicalize1r{      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qr8   c                      t        d      } t        d|       }t        |t        t        f      rJ t        |t
              sJ y )Nr@   i)r   r   r2   tuplelistr   )r@   r}   s     r6   "test_bug_correction_tensor_indicesr   ?  s>     	AsAA!eT]+++a%%%r8   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 )	Nr:   r;   r<   zd0:12R   z-R(L_0, L_1, -L_0, -L_1)zR(L_0, L_1, L_2, L_3)*R(-L_0, -L_1, L_4, L_5)*R(-L_2, -L_3, L_6, L_7)*R(-L_4, -L_5, L_8, L_9)*R(-L_6, -L_7, L_10, L_11)*R(-L_8, -L_9, -L_10, -L_11))r   r   r#   r   riemannr$   rE   )r:   rI   rJ   r\   r]   d4d5d6d7d8d9d10d11r   rK   rL   s                   r6   test_riemann_invariantsr   H  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r8   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 )Nr:   r;   r<   zd0:7za0:6a,br   r   r   z-R(a, L_0, b, -L_0)z+-R(a, L_0, L_1, L_2)*R(b, -L_0, -L_1, -L_2)VrA   zW-R(L_0, L_1, L_2, L_3)*R(-L_0, L_4, L_5, L_6)*V(-L_1, -L_4)*V(-L_2, -L_5)*V(-L_3, -L_6)z>R(a0, L_0, a2, L_1)*R(a1, a3, -L_0, L_2)*R(a4, a5, -L_1, -L_2))r   r   r#   r   r   r$   rE   rF   )r:   rI   rJ   r\   r]   r   r   r   rm   rn   ro   rp   a4a5rG   rH   r   rK   rL   r   s                       r6   test_riemann_productsr   _  s   iC8G!/!@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Vr8   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)r[   dimr=   zi0:15r@   r`   rg   r   )r   r   r   r#   r   rF   r$   )r   r   i0i1i2i3i4i5i6i7i8i9i10i11i12i13i14r@   rK   rM   s                       r6   test_canonicalize2r     s~   sA61!LDw% 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7N7r8   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   rb   rc   r
   r   r[   r=   a0:5chi,psir?   )r   r   r   r    r   rD   r$   )r   rb   rm   rn   ro   rp   r   chipsirK   rM   s              r6   test_canonicalize3r     s    sAX1bSQF#FF3NBr"RIx1K1KA1NPQRHCBBA	
B7N7BBA	
B#b'#b'!!!!r8   c                      t        dd      } t        d|       }t        d| g      }t         ||      d ||      z        }|j	                          ||       k(  sJ y )N	Cartesianr`   r   pKra   )r   r   r#   r   r$   )r   r   r   exprs       r6   test_canonicalize4r     sZ    3IsI&A3$AAaD3qt8%D==?qte###r8   c                  ^   t        dd      } t        d|       }t        d| g      }t        dt              }t        d      }t         ||      |d	d
f       ||      z  }|j                         j                         t         ||      |d	d
f      j                          ||      z  k(  sJ y )NR3r`   r   r   r   rk   )clsxr   r?   )r   r   r#   r   r   r   as_dummyr$   )r   r   r   rk   r   r   s         r6   test_canonicalize5r     s    	1	%BsBA3A"AAQqTAa7#ad*D==?##%1Q4!Aa)A)J)J)LqQRt)SSSSr8   c                     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   r:   gr?   r;   )metric_namer[   r   r=   zm0:5rA   zg(Lorentz,Lorentz)TSpacer<   zi0 i1r@   zA(TSpace_0, -TSpace_0))r   r   r   r   rF   r   metricrE   eps_dimr   r#   r$   )r   r:   m0m1m2m3m4sym2sym2nr   r   r   r   r@   s                 r6   test_TensorIndexTyper     s    sAiS!"#5G'8BBB))!,D3A67E5==Aq6))))??gkk)))XH=FGV,FBA3
D)AqRCy!!#$(@@@@r8   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 )Nr:   r;   r<   a,b,c,dA BrA   L_0c                      t        d       S )Nr`   )r   )r:   s   r6   <lambda>ztest_indices.<locals>.<lambda>  s    ~a9 r8   c                              S r1    r@   rG   rH   rQ   s   r6   r   ztest_indices.<locals>.<lambda>  s    q1Qx r8   r@   rG   rH   z-bFis_up)r   r   tensor_index_typer    r   rF   get_indicesr   r,   
ValueErrorr#   )
rR   rB   rK   indicesr   r@   r:   rG   rH   rQ   s
        @@@@@r6   test_indicesr     s}   iC8G	73JAq!Q')))7N7y{N,J,J1,MNDAq	!Aq!AwAmmoG
eW
%Cq#tQ''''
:9:
:'(3'*+AS#;!KW5'W57 7 7 7S$<1[g6(gUCE E E ES+c7+,+c72K2=c72K1M M M Mr8   c            	         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 )
NrA   rg   r`   Trc   r?   r   r   )
r   rF   r   rl   rD   rankbaser   
generatorsr	   )syms    r6   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Tr8   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)Nr:   r;   r<   r   r   rA   c                  *                   z  S r1   r   )rG   rH   rQ   rR   r   s   r6   r   ztest_TensExpr.<locals>.<lambda>      qAwqAw r8   c                  8    t         j                          z  S r1   r
   One)rG   rH   r   s   r6   r   ztest_TensExpr.<locals>.<lambda>  s    quuQq!W} r8   c                  >                   z          z  S r1   r   )r@   rG   rH   rQ   rR   r   s   r6   r   ztest_TensExpr.<locals>.<lambda>  s#    !Q!Aq' 11Q7: r8   c                  L    t         j                                 z   z  S r1   r   )r@   rQ   rR   r   s   r6   r   ztest_TensExpr.<locals>.<lambda>  s!    quua1g!Q&78 r8   c                  *                    z   S r1   r   r   s   r6   r   ztest_TensExpr.<locals>.<lambda>   s    qAw1a0 r8   c                              dz  S NrA   r   r@   rG   rH   s   r6   r   ztest_TensExpr.<locals>.<lambda>  s    1Q7A: r8   c                      d        z  S r   r   r   s   r6   r   ztest_TensExpr.<locals>.<lambda>  s    1Q7
 r8   c                  (    t                      S r1   )absr   s   r6   r   ztest_TensExpr.<locals>.<lambda>  s    AaG r8   )
r   r   r   r    r   rF   r,   r   r.   NotImplementedError)r:   rB   r@   rG   rH   rQ   rR   r   s     @@@@@@r6   test_TensExprr     s    iC8G	73JAq!QAy{N,J,J1,MNDAq
:./
:,-
:::;
:89
:01 
 	! /z-./  23
 45	/ /s   DD$c                     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 )Nr:   r;   r<   r@   rA   r   )	r   r#   nameindex_typesr   symmetryr   rD   comm)r:   r@   s     r6   test_TensorHeadr     s    iC8G3	!$A66S====Wg....66Q;;::33A666666Q;;r8   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   r:   r;   r<   a,b,d0,d1,i,j,kr>   rA   z"A(b, -L_0)*(A(L_0, a) + B(L_0, a))z+A(b, -L_0)*A(L_0, a) + A(b, -L_0)*B(L_0, a)z+A(a, L_0)*A(b, -L_0) + A(b, L_0)*B(a, -L_0)zBA(a, L_0)*A(b, -L_0) + A(b, -L_0)*B(L_0, a) + A(b, L_0)*B(a, -L_0)z-A(a, L_0)*A(b, -L_0) + 2*A(b, L_0)*B(a, -L_0)p,q,rz2*q(d0)z2*q(d0) + p(d0)z2*q(-d0) + p(-d0)zp(L_0)*(2*q(-L_0) + p(-L_0))z!p(L_0)*p(-L_0) + 2*p(L_0)*q(-L_0)z!p(-L_0)*p(L_0) + 2*q(-L_0)*p(L_0)z4p(L_0)*p(-L_0) + 4*p(L_0)*q(-L_0) + 4*q(L_0)*q(-L_0)z-2*q(d0) + p(d0)r   r`   r?   )r   argsdoitr   r   r    r   rF   r3   rE   r   r$   r
   r   r   r   	from_data)r:   rG   rH   rI   rJ   r}   jkr@   rB   rM   t2at2t2br   qrrK   t3tz1s                       r6   	test_add1r    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:::r8   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 )
Nr:   r;   r<   r   r>   rA   r   r   r`   )r   r   r    r   rF   r7   r
   Zero)r:   rG   rH   rI   rJ   r}   r   r   r@   rB   r   r  r  rK   s                 r6   test_special_eq_ner  q  s   iC8G*+<gF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&&&r8   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 )Nr:   r;   r<   zm,n,p,qr   r   r@   r`   rg   rA   r   r?   )r   r   r#   r   r   rF   r$   r   )
r:   mnr   r  r   r@   rM   r  rK   s
             r6   	test_add2r    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6M6r8   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 )
Nr:   r;   r<   zi0:2
E px py pzr@   rB   rA   ra   )r   r   r   r#   r   )r:   r   r   r   pxpypzr@   rB   expr1expr2expr3expr4s                r6   	test_add3r    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\\\\r8   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   )r   r:   r;   r<   r   1r   rA   r?   z(x + 1)*A(a, b)zA(a, b)rC   c                  *                    z  S r1   r   r   s   r6   r   ztest_mul.<locals>.<lambda>  r   r8   )	sympy.abcr   r   r   r   r   r
   r   rE   r    r   rF   r   r   dumcoeffsortedfree
componentsr   splitr#   r,   r   )r   r:   rR   rK   rB   tsrM   rC   r@   rG   rH   rQ   s           @@@@r6   test_mulr%    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
:./r8   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 )Nr:   r;   r<   i,j,k,l,m,n,p,qr>   rA   r   )r   r   r    r   rF   r#   r(   )r:   r}   r   r   lr  r  r   r  r@   rB   rK   rM   t1as                 r6   test_substitute_indicesr*    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9r8   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 )Nr:   r;   r<   zm:4r   r   rc   r`   r?   rA   )r   r   r#   r   r   r   r   )	r:   r   r   r   r   r   rK   rM   r)  s	            r6   test_riemann_cyclic_replacer,    s    iC8G#E73NBB3	!^%;%;%=>A	"b"bA		"B
2q/!BB+
+hq!nQr2r2=N.N
NQYZ[]^Q_`abdfhjlnp`qQq
qC99r8   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 )Nr:   r;   r<   r'  r   r   r   rA   rc   r`   r?   )r   r   r#   r   r   r   r   )r:   r}   r   r   r(  r  r  r   r  r   rK   r  r  rM   s                 r6   test_riemann_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7N7r8   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 )Nr:   r;   r<   zm0:4r   r   z(1/4)*R(m0, L_0, -L_0, m3))	r   r   r#   r   r   r
   rE   r$   _is_canon_bp)r:   r   r   r   r   r   rK   rM   s           r6   test_divr1    s    iC8G#FG4NBB3	!^%;%;%=>A	"RBA	
1Q4Br72222	

A	
1B???	AB???r8   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   r:   r;   r   r=   	a,b,c,d,er   r>   rA   r<   r   )r   r   r   r   r#   contract_metricr    r   rF   r7   r!  r   )r   r:   rG   rH   rQ   rR   ry   r   r   rK   rM   r@   rB   r  s                 r6   test_contract_metric1r6  '  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'++>>>r8   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   r:   r;   r3  za,b,c,d,e,L_0zp,qr`   rA   rg      r?   r   re   r@   zA(L_1, -L_1)*p(L_0)zA(-L_1, L_1)*p(L_0))r   r   r   r   r    r5  r$   r(   r3   r#   r   rF   rE   )r   r:   rG   rH   rQ   rR   ry   r   r   r   r  rM   r  rK   re   r@   s                   r6   test_contract_metric2r9  S  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+r8   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   rb   rc   r
   r   r   r   r?   rB   rA   )r   r   r   r   r    r   rD   r#   r5  r3   r$   r7   )r   rb   rm   rn   ro   rp   r   rC   r   r   rB   rK   rM   s                r6   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+,,,r8   c                     t        dd      } t        d|       \  }}}| j                  }| j                  }t	        d| g      } ||||       ||        ||       z   || |       z   z  }|j                  |      dk(  sJ y )Nr   r`   r   p q rr   r   )r   r   deltaepsilonr#   r5  )r   r   r  r  r>  epsr   r   s           r6   test_contract_metric4rA    s    	1	%BWb)GAq!HHE
**C3A q1:1"aeeQBrl24D&!+++r8   c                     t        dd      } t        d|       \  }}}| j                  }t        d| g      }t	        d      }t        d      }d ||      z    ||       z   ||       z  }|j                  |      |k(  sJ y )	Nr   r`   r   r=  r   ri   r   rA   )r   r   r>  r#   r   r   r5  )	r   r   r  r  r>  r   ri   r   r   s	            r6   test_contract_metric5rC    s    	1	%BWb)GAq!HHE3AAsA adFAqbE>!QB%D&$...r8   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 )	Nr:   r   r;   r3  r4  zp,q,r,sr   ra   )r   r   r?  r    r$   r   r2   r#   )r:   rG   rH   rQ   rR   ry   r?  r   r  r  srK   rM   s                r6   test_epsilonrF    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***r8   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  ColorrC   r3  rj   c                     | j                   r|j                   sJ |j                   s|j                   rJ  | |       ||      z  S r1   r   rG   rH   rR   rQ   r>  s       r6   idnz!test_contract_delta1.<locals>.idnD  @    ww177""GGqww''Qqz%!*$$r8   c                     | j                   r|j                   sJ |j                   s|j                   rJ  | |       ||      z  S r1   r   rJ  s       r6   Tztest_contract_delta1.<locals>.TI  rL  r8   c                 >     | |||      dz   | |||      z  z
  S Nr?   r   )rG   rH   rQ   rR   rN  rK  r  s       r6   P1z test_contract_delta1.<locals>.P1N  s*    1Qq|ac!Aa!*n,,r8   c                 &    dz   | |||      z  S rP  r   )rG   rH   rQ   rR   rN  r  s       r6   P2z test_contract_delta1.<locals>.P2Q  s    s1Qq1:~r8   r   rA   r?   )r   r   r   r>  contract_deltar$   r3   )rH  rG   rH   rQ   rR   ry   rk   rQ  rS  rK   rM   rN  r>  rK  r  s              @@@@r6   test_contract_delta1rU  =  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r8   c                      t        dd      } t        d|       \  }}| j                  }t        d| g      }d ||       ||      z   || |       z  z   }|j	                  |      d ||       ||       z  z   k(  sJ y )Nr   r`   r   p qr   r?   )r   r   r>  r#   rT  )r   r   r  r>  r   r   s         r6   test_contract_delta2rX  d  s    	1	%B%$DAqHHE3A qtAaDyr1"%%Du%QqT!QB%Z777r8   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   r:   r;   r3  r4  rW  r   dgr`   r?   rA   )r.   r   r   r   r   r    r$   r(   r#   r   rl   r
   Halfr5  )r   r:   rG   rH   rQ   rR   ry   r   r   r  rK   rM   rZ  rs   s                 r6   test_funr\  n  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 )Nr:   r;   r<   LorentzHLHzi,jzih,jhrW  zph qhGsymbolGHsymbolr   Gr?   GHrA   c                  2    t        j                   dd      S Nr?   rA   )r!   set_comm)ra  s   r6   r   z$test_TensorManager.<locals>.<lambda>  s    }55h1E r8   )r   r?   rA   )r   r?   )r   r   r    r   r!   rf  r#   r   rD   _comm_i2symbolr   r$   r7   comm_symbols2icomm_i2symbol_comm_symbols2ir,   r   	set_commsget_commclear)r:   r^  r}   r   ihjhr   r  phqhr`  rb  rc  pspshrK   rM   qsqshr  nhra  s                        @r6   test_TensorManagerrw    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4r8   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   r:   r;   r3  r4  rW  r?   c                 :    t        d | j                  D              S )Nc              3   <   K   | ]  }t        |t                y wr1   )r2   r   ).0_s     r6   	<genexpr>z/test_hash.<locals>.check_all.<locals>.<genexpr>  s     :A:a':s   )allr   )objs    r6   	check_allztest_hash.<locals>.check_all  s    ::::r8   ra   r`   )
r   r   r   r   r    r   hashfuncr   rl   )r   r:   rG   rH   rQ   rR   ry   r   r   r  p_typerM   r  r  t4r  	tsymmetrys                    r6   	test_hashr    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r8   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   rc   r   r   r   r   rc   r   r   r   r   rc   r:   r   r   i0:5r  r@   rB   r?   GcommABrA   )r?   rA   r`   r      r8        	   r   rc   ra   rg   r   BALorentzDrc   r?   r?   r?   zmu0:3rC   )r?   r?   r   )r?   r   r?   r   r?   r   ndmzn0:3NA
      NBNCr`   r  r  )	r   r   datar   r   r#   r   rD   range) 	minkowskir:   r   r   r   r   r   r   r  r  r  r@   rB   r  	ba_matrixr  r  mu0mu1mu2rC   
ndm_matrixr  n0n1n2r  r  r}   r   r  r   s                                    r6   _get_valued_base_test_variablesr    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?   rA   r`   r   r  r8  r  r  r  r   rc   ra   rg   r   r  r  r`   r  rA   r   )r.   r  r   r   )r@   rB   r  r  rC   r:   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   list_BAr}   s                                  r6   test_valued_tensor_iterr  '  s   		! 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?   rc   )r.   r  r@   rB   r  r  rC   r:   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   s                                r6   3test_valued_tensor_covariant_contravariant_elementsr  ?  s   		! 
&QpQr	O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)Nr  r  r  r  r   )r.   r  
get_matrixr   r   )r@   rB   r  r  rC   r:   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   matabs                                 r6   test_valued_tensor_get_matrixr  M  s(   		! 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)NrA   r`   r   )r   rc   ra   rg   r?   )r.   r  r  r  r   ) r@   rB   r  r  rC   r:   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   r}   r   contrexps                                    r6   test_valued_tensor_contractionr  a  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   rA   r.   r  r  r  s                                r6   #test_valued_tensor_self_contractionr  y  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)NrA   r?   )r.   r  r   r  s                                r6   test_valued_tensor_powr    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`   rA   r   r?      r               )r.   r  r   r  r   ))r@   rB   r  r  rC   r:   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   x1x2x3
rank2coeff
coeff_expradd_exprsub_exprr  r  r  r  expr5s)                                            r6   test_valued_tensor_expressionsr    s   		! %_QpQr	O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)NrA   r   r  )!r@   rB   r  r  rC   r:   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   r  r  r  r  s!                                    r6   test_valued_tensor_add_scalarr    s   		! QpQr	O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V1rA   V2)r.   r  r   r  r   r   r#   r   )'r@   rB   r  r  rC   r:   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   euclidrG   rH   rQ   rR   r  r  vtpvtp2Vcs'                                          r6   test_noncommuting_componentsr    s   		! ,QpQr	O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  rN  )r@   rB   r  r  rC   r:   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   mmatrixs                                 r6   test_valued_non_diagonal_metricr    s    		! 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`   rA   r  rc   )r.   r  r   r  r  r   )$r@   rB   r  r  rC   r:   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   arrr}   qxqyqzr   random_4x4_datas$                                       r6    test_valued_assign_numpy_ndarrayr    s   		! "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)rA   rA   rA   r?   )rA   r`   r?   r   )rA   r?   rA   r`   )r?   r   r`   rA   r   )	r.   r  r  r   r   invr   get_kronecker_deltar  )%r@   rB   r  r  rC   r:   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   mdr  r   minvmeyeKDr}   r   s%                                        r6   test_valued_metric_inverser    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@   rB   r  r  rC   r:   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   e1e2r}   r   o1o2r   s$                                       r6   test_valued_canon_bp_swapaxesr  8  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`   r   i0:4r?   r?   r?   r@   rA   ra   )r?   rA   r`   )r   r  r8  )r  r  r  c                     || _         y r1   )r  )r@   dats     r6   assignz:test_valued_components_with_wrong_symmetry.<locals>.assign\  s	    AFr8   c                              S r1   r   )A_symr  	mat_nosyms   r6   r   z<test_valued_components_with_wrong_symmetry.<locals>.<lambda>`  s    6%#; r8   c                              S r1   r   )r  r  mat_antisyms   r6   r   z<test_valued_components_with_wrong_symmetry.<locals>.<lambda>a  s    6%#= r8   c                              S r1   r   )	A_antisymr  mat_syms   r6   r   z<test_valued_components_with_wrong_symmetry.<locals>.<lambda>d  s    6)W#= r8   c                              S r1   r   )r  r  r  s   r6   r   z<test_valued_components_with_wrong_symmetry.<locals>.<lambda>e  s    6)Y#? r8   )r   r   r   )r.   r   r   r  r#   r   rF   r   rN  r,   r   )r  r   r   r   r   A_nosymr  r  r  r  r  r  s         @@@@@@r6   *test_valued_components_with_wrong_symmetryr  K  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)Nr:   r?   r}   rA   r[   r=   r   rc   \mu, \nu, \alpha, \betaur   ri   ra   )r.   r   r  r   r#   r   rF   r   )	r:   rt   ru   rq   rr   r  ri   mul_1mul_2s	            r6   test_issue_10972_TensMul_datar  j  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)Nr:   r?   r;   r   r	  r  r
  r  r  ri   rA   ra   zE_x E_y E_z B_x B_y B_zr   )r   r   r   r   r   )r.   r   r  r   r#   r   rF   r   r   r$   zeros)r:   rt   ru   rq   rr   r  ri   ExEyEzBxByBzr   r   perpr  r  Fperpmul_3s                       r6   test_TensMul_datar    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)Nr:   r?   r}   rA   r	  rc   rP   zi_0:2r   r  r   )	r.   r   r  r   r#   r   rF   r   r  )r:   rG   rH   rQ   rR   r   r   r   r  add_1add_2r  r  r  s                 r6   test_issue_11020_TensAdd_datar    s   		! 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 )Nr:   r;   r<   r  r   L_1r@   rB   rA   )r?   r   r  r  )r   r?   r?   r  r  )r   r   r?   r   )r   r?   r?   r   )r   r   r?   r?   )r   r?   r?   r?   )r   r   r#   r   rF   r   _iterate_free_indices_iterate_dummy_indices_iterate_indicesr   get_free_indices)r;   r   r   r   r   r   L0L1r@   rB   r  r  e3e4e5e6s                   r6   test_index_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&&&r8   c                  ,   t        d      } t        d|       \  }}}t        d|       }t        d| g      \  }}}}t	        d      }	t        d      }
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 	 d |	|
      z    ||      z  }|j                         }t        |t              sJ |j                  d ||      z   |	|
       ||      z  fk(  sJ d |	|
      z    ||      z   ||      z   }|j                         }t        |t              sJ |j                  d ||      z   |	|
       ||      z   ||      fk(  sJ y )Nr;   zi j kr   A B C Dri   r   zA(L_0)*(A(-L_0) + B(-L_0))zA(i)*A(j) + A(i)*B(j)z2A(-L_0)*(A(L_0)*A(j) + A(L_0)*B(j)*C(L_1)*C(-L_1))z8A(j)*A(L_0)*A(-L_0) + A(L_0)*A(-L_0)*B(j)*C(L_1)*C(-L_1)rA   z%A(i)*(B(j)*C(k) + C(j)*(A(k) + D(k)))z0A(i)*B(j)*C(k) + A(i)*C(j)*A(k) + A(i)*C(j)*D(k)r`   )r   r   r   r    r   r   r2   r   r   r   r   rE   r$   r  r   r   r   )r;   r}   r   r   r   r@   rB   rC   r   ri   r   r   tmp1p2p3expr_expands                    r6   test_tensor_expandr3    s   AWa(GAq!
eQ
Ci!-JAq!QAsA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%/?????
 !Had?D++-Kk7+++!A$!QqT	2222!Had?QqT!D++-Kk7+++!A$!QqT	1Q48888r8   c                  >   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 )Nr;   r  r@   zx yr   c                        z         S r1   r   )r@   r   ys   r6   r   z6test_tensor_alternative_construction.<locals>.<lambda>^  s    a!f r8   c                        dz        S r   r   )r@   r   s   r6   r   z6test_tensor_alternative_construction.<locals>.<lambda>_  s    q1v r8   )r   r   r#   r   r   r,   	TypeErrorr   )r;   r   r   r   r   r@   r   r6  s        @@@r6   $test_tensor_alternative_constructionr9  V  s    A#FA.NBB3A5>DAqR5AfTlO###bS6Qt}%%%%
9n%
:~&r8   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 )&Nr;   L2rA   r   zi j k lr-  Hr   r   r?   r`   rc   ra   r   r}   r   rg      c                  &     j                        S r1   _extract_datar   repls   r6   r   z)test_tensor_replacement.<locals>.<lambda>      t11$7 r8   c                  &     j                        S r1   r?  rA  s   r6   r   z)test_tensor_replacement.<locals>.<lambda>  rC  r8   c                  &     j                        S r1   r?  rA  s   r6   r   z)test_tensor_replacement.<locals>.<lambda>  rC  r8   r8  r  d   q   r  r   *   r  r  r  r  c                  *     j                  g      S r1   replace_with_arrays)r   r   rB  s   r6   r   z)test_tensor_replacement.<locals>.<lambda>      t77qcB r8   c                  *     j                  g      S r1   rJ  )r   r}   rB  s   r6   r   z)test_tensor_replacement.<locals>.<lambda>  rL  r8   zu1:4Uc                  .     j                   g      S r1   rJ  )r   rB  u1u2s   r6   r   z)test_tensor_replacement.<locals>.<lambda>  s    t77rB3iH r8   )r   r   r    r#   r/   r@  r   rK  r   reshaper,   r   )r;   r;  r   r(  r@   rB   rC   r   r<  r   u3rN  r   r}   r   rB  rP  rQ  s               @@@@@@r6   test_tensor_replacementrT  b  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Ir8   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 )
Nr;   r   r   r@   rB   r  zL_0:2r   r`   )r   r#   r   rewriter   r   r   )r;   r@   rB   r   r   r   r   r   r   rn   ro   rp   b1b2s                 r6   test_rewrite_tensor_to_IndexedrY    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r8   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`   r   r=  za b cTr   r   ignore_updownr   r   r   r@   Wunordered_indicesrN  Nr?   )r   r   r   r)   r>  r?  r#   r*   matchesreplaceheadr+   )r   r   r  r  rG   rH   rQ   r   r>  r@  r   r   r@   r]  rN  s                  r6   test_tensor_matchingrc    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///r8   c                     t        dd      } t        d|       \  }}t        d| g      }t        d| g      }t        dd	      } ||       ||      z   ||       ||      z  z   j	                   ||       ||      z   ||       ||      z  z         i k(  sJ  ||       ||      z   ||       ||      z  z   j	                   ||       ||      z   ||       ||      z  z    ||       ||      z  z    ||       ||      z  z         J  ||       ||      z   ||       ||      z  z    ||       ||      z  z    ||       ||      z  z   j                   |||       ||       ||      z  z    ||       ||      z  z    |||      d ||      z   ||      z  z         j                          ||       ||      z  d ||      z   ||      z  z   k(  sJ y
)zA
    Test match and replace with the pattern being a TensAdd
    r   r`   r   rW  r   r   r]  Tr^  Nr   )r   r   r#   r*   r`  ra  r   )r   r   r  r   r   r]  s         r6   test_TensAdd_matchingre    s    
1	%B%$DAq3A3Asd3AqT!A$Y1ad",,ad1Q4i!A$qt).CEKKKqT!A$Y1ad",,ad1Q4i!A$qt).Cad1Q4i.ORSTURVWXYZW[R[.[]eeeqT!A$Y1ad"QqT!A$Y.1ad:DD	!A1adQqT!A$Y&	!A1Q4!
 $&AaD1I!A$qt+, , ,r8   c            	      B   t        dd      } t        d|       \  }}}}}t        d      }t        dt        | d      \  }}}	}
}}| j
                  }| j                  }t        d	| g      }t        d
| g      }t        dd      }t        d      }t        d	      }| ||      z  j                   ||            |dik(  sJ | ||||      z  j                   ||||            |dik(  sJ  ||       ||       z  j                   ||       ||       z  d      dk(  sJ  ||       ||      z   ||       z  j                   |||       ||       z  d      dk(  sJ  ||       ||       z  j                   ||        ||      z  d      dk(  sJ  ||       ||      z   ||       z  j                   ||       ||      z   ||       z  d      dk(  sJ  ||       ||      z  j                   |        ||      z   ||      z   |        ||      z   ||      z        j                          ||       ||      z  k(  sJ  ||||       || | |       z  j                   ||||       || |	|
      z   |||	       |||
      z   |||
       |||	      z  z
        j                         j                          |||        |||       z   |||        |||       z  z
  k(  sJ  ||||       || | |       z  j                   ||	||       ||	 |
|      z   |||
       |||      z   |||       |||
      z  z
        j                  |      j                         dk(  sJ  ||        ||      z   ||       z  j                  | |       z   ||      z   ||       z  | |       z        j                          ||       k(  sJ |dz   ||      z   ||       z  j                  | |       z   ||      z   ||       z  | |       z  |dz  z        j                         |dz  k(  sJ  ||       ||      z  j                   ||       ||      z   ||       ||      z         ||       ||      z  k(  sJ  ||       ||      z   ||      z  j                   |||       ||      z   |||       |||      z   ||       z         ||       ||      z   ||      z   ||      z   ||       z  k(  sJ t        d|       \  }}}} || |        ||      z   ||      z   ||       z  } |        ||      z   ||       z  j                  |      }||j                         vsJ y)zA
    Test match and replace with the pattern being a TensMul
    r   r`   r   z	p q r s twiza b c d e fTr[  r   r   r]  r^  rN  r?   rc   r8  r   rA   zR_0 R_1 R_2 R_3N)r   r   r   r   r)   r>  r?  r#   r*   r   r`  ra  r   r$   rT  values)r   r   r  r  rE  rK   rg  rG   rH   rQ   rR   ry   rk   r>  r@  r   r   r]  rN  r   D0D1D2D3r   r  s                             r6   test_TensMul_matchingrm  +  s    
1	%B";3MAq!Q	dB-RTdhiKAa!AaHHE
**C3A3Asd3AsAsA!W!&2q'111#a!*_&&s1Qqz2r"g===qT!QB%Z!!1Q41":q1Q666qT!A$Yq!u_&&!Aq!ua8A===qT!QB%Z!!1aR51:q2a777qT!A$Yq!u_&&!QqT	!QB%;q@@@	
1adAC!HQqTM13qt8AaD=9>>@Q4!9	
	 a!*S!QBr]
",,!AJsA2a{"!AJuQqz!E!AJuQqz$99	 dfXXZA2;uQr{"U1aR[q!%<<		=
	= a!*S!QBr]
",,!AJsA2a{"!AJuQqz!E!AJuQqz$99	 nU#DDF		
	 rU1Q4Z1"''AC!QrU):BqsFDIIKqRSQSuTTTT!A$Yq!u_&&13qtAqbE(92ac6!Q$;HMMOSTVWSWWWW A$qt)ad1Q4i1ad3Q4!9	
	 A$qt)AaD.""1Qq6!A$;!Aq1vae0CEQ4!9QqT>!A$q!u$	%
	%
 $$5r:NBB"rc?1R5 2&q"v-D
#ad(1aR5.""4(AQXXZr8   c            	         t        dd      } t        d|       \  }}}t        d| g      }t        d| g      }t        d| | g      }t        | j                  dz   | d	      }t        d
| 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  ||       ||       z  j                   ||       ||       ||      z   ||       z         ||       ||      z   ||       z   ||       z  k(  sJ y)z;
    Test subs and xreplace in TensMul. See bug #24337
    r   r`   r   r=  r   r   r@   _0TrG   )r\  N)
r   r   r#   r   r=   r)   subsxreplacer   ra  )	r   r   r  r  r   r   r@   C0rG   s	            r6   test_TensMul_subsrs  f  sM    
1	%BWb)GAq!3A3A3R!A	R]]T)2t	4BRt4AqT!A$Yq!u_##QqT1Q41":$671Q4!9QrU?1aR5;PPPPqT!A$Yq!u_''1qtAqbEz(:;qtAaDyA2qRSQSu?TTTTqT!A$Y!!1b!A$!QrU
";<"ad
1aR5@PPPPqT!Aqb'\!QB%&&(AaD1aRLA2,>>>>qT!QB%Z!!1Q41ad1aR5:ad1Q4i1"oaQRPRe>SSSSr8   c                  `    t               5  t        dgdz         d d d        y # 1 sw Y   y xY wre  )r.   r&   r   r8   r6   test_tensorsymmetryru  y  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   r8   r6   test_tensorheadrw  }  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)NrA   r:   )r.   r   rF   r   r'   r2   )r   r:   S2s      r6   test_TensorTyperz    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)Nr:   r;   )	dummy_fmt)r.   r   r   r8   r6   test_dummy_fmtr}    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`   r   r}   r   zx y zrA   N)
r   r   r#   r   r2   rq  r   r   rp  ra  )r   r}   r   r   r6  zs         r6   test_postprocessorr    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<<<r8   c                      t        dd      } t        d|       \  }}t        d| g      }t        d| g      }t        d ||       ||            }|j                  |j
                  z  |k(  sJ y)	zQ
    Ensure that for any TensMul instance, self.coeff * self.nocoeff == self
    r   r`   r   zi jr   PrA   N)r   r   r#   r   r  nocoeff)r   r}   r   r   r  r   s         r6   test_TensMul_nocoeffr    sm    
 
1	%B%$DAq3A3A1adAaD!D::$,,,r8   N)sympy.concrete.summationsr   sympy.core.functionr   sympy.core.numbersr   sympy.matrices.denser   r   sympy.tensor.indexedr   sympy.combinatoricsr	   
sympy.corer
   r   r   r   r   r   r   sympy.core.containersr   sympy.core.symbolr   (sympy.functions.elementary.miscellaneousr   sympy.integralsr   sympy.tensor.arrayr   sympy.tensor.tensorr   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   sympy.testing.pytestr,   r-   r.   sympy.matricesr/   r7   rN   rS   rX   r^   r{   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r%  r*  r,  r.  r1  r6  r9  r;  rA  rC  rF  rU  rX  r\  rw  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r+  r3  r9  rT  rY  rc  re  rm  rs  ru  rw  rz  r}  r  r  r   r8   r6   <module>r     s   ) & & . ( + F F F ' % 9 % $3 3 3 3 3 3 G F K<Z((TL.GrT&l.$WP,"$TA$M*U&62T;l'6"](#0J#J(  *?XAPF_-D	,/)+V%N8*:#5L7 z6RrJ0&A(50%!&_R*,:f#YL7B6&;>809v4>0'fD9N	'xJvC2"0H,"9 vT&*2=&-r8   