
    QiT=                       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 ZdWS )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|                     |          S t          |t                    r|                    |           S | |k    S N)
isinstancer"   equals)arg1arg2s     v/var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/sympy/tensor/tests/test_tensor.py	_is_equalr7      sT    $!! !{{4   	D(	#	# !{{4   4<    c                     t          dd          } t          d|           \  }}}}t          d| gt          j        d                    \  }} ||            ||          z  }|                                }t          |          dk    sJ  ||           ||          z  }|                                }||k    sJ  ||           ||          z  }	|	                                }t          |          dk    sJ t          d	| gd
z  t          j        d
                    } |||            |||          z  }|                                }t          |          dk    sJ t          d| gt          j        d                    \  }}
 |||            ||          z   |
|           z  }|                                }t          |          dk    sJ t          d	| gd
z  t          j        d
                    } |||            ||          z   |
|           z  }|                                }t          |          dk    sJ t          d| gd
z  t          j        d
                    } |||            || |          z  }|                                }t          |          dk    sJ  || |           || |          z  }|                                }t          |          dk    sJ t          d| gd
z  t          j        d
                    }
 |||           || |           z   |
| |           z  }|                                }t          |          dk    sJ t          d	| gd
z  t          j        d
                    } |||           || |           z   |
| |           z  }|                                }t          |          dk    sJ t          d| gd
z  t          j        d
                    }
 |||           || |           z   |
| |           z  }|                                }t          |          dk    sJ d S )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888G!+w77LAq"by.*DQ*G*GHHDAq	2#qquuA	
Br77&&&&& 	
!QQqTT	A	
B7777	
1aaddB	Br77k!!!! 	3	!^%CA%F%FGGA	!bS		!!B((A	
Br77,,,,, y.*DQ*G*GHHDAq	"rc

11R55B3A	
Br7733333
 	3	!^%?%B%BCCA	"rc

11R55B3A	
Br7733333
 	3	!^%?%B%BCCA	"rc

11bS"::A	
Br7711111 	
2#r

11bS"::A	
Br7711111
 	3	!^%?%B%BCCA	"b		!!QB**QQsQBZZ'A	
Br77;;;;;
 	3	!^%CA%F%FGGA	"b		!!QB**QQsQBZZ'A	
Br77;;;;;
 	3	!^%CA%F%FGGA	"b		!!QB**QQsQBZZ'A	
Br77;;;;;;;r8   c                  >   t          dd          } t          d|           \  }}}}t          d| gt          j        d                    } ||           ||          z   ||          z  }|                                }t          |          dk    sJ t          d| gt          j        d          d          } ||           ||          z   ||          z  }|                                }t          |          dk    sJ t          d| gd	z  t          j        d	                    } |||           |||          z  }|                                }t          |          d
k    sJ t          d| gd	z  t          j        d	          d          } |||           |||          z  }|                                }t          |          dk    sJ  |||           |||          z  }|                                }t          |          d
k    sJ d S )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888Gg66JAq!Q
 	3	>#=a#@#@AAA	!QQqTT	!!A$$A	
Br77&&&&&
 	3	>#=a#@#@!DDA	!QQqTT	!!A$$A	
Br77'''''
 	3	!^%CA%F%FGGA	!Q!QA	
Br77'''''
 	3	!^%CA%F%FJJA	!Q!QA	
Br77((((( 	
!Q!QA	
Br77'''''''r8   c                      t          d          } t          d| | g          }t          d| | gt          j        d                    }||k    sJ t          d| | gt          j        d                    }||k    sJ d S )Nr:   r@   rA   )r   r#   r   rD   rF   )r;   A1A2A3s       r6   -test_tensorhead_construction_without_symmetryrX      s    	""A	C!Q	 	 B	C!Q!;A!>!>	?	?B8888	C!Q!?!B!B	C	CB888888r8   c                     t          ddd          } t          d|           \  }}}}t          d| gdz  t          j        d                    } |||            |||           z  }|                                }t          |          dk    sJ  |||            |||           z   |||           z   |||           z  }|                                }t          |          d	k    sJ  |||            |||           z   |||           z   |||           z  }|                                }t          |          d
k    sJ d S )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^      st    iCKKKG#E733NBB3	!^%?%B%BCCA	"rc

11R"::A	
Br7711111 	
"rc

11R"::aaRCjj(2s3A	
Br77KKKKK 	
"rc

11R"::aaRCjj(2s3A	
Br77KKKKKKKr8   c            
         t          dd          } t          d|           \
  }}}}}}}}}	}
t          d| gt          j        d                    } ||            ||          z  }|                                }t          |          dk    sJ  ||            ||           z   ||	           z   ||	          z   ||          z   ||          z  }|                                }t          |          dk    sJ t          d| gt          j        d          d          } ||            ||           z   ||	           z   ||	          z   ||          z   ||          z  }|                                }|d	k    sJ t          d| gd
z  t          j        d
                    } |||           |||           z   |||           z  }|                                }t          |          dk    sJ t          d| gd
z  t          j        d
                    } |||           |||           z   |||           z  }|                                }t          |          dk    sJ t          d| gdz  t          j        d                    } ||||           ||| |           z  }|                                }t          |          dk    sJ  ||
||	           ||| |	           z   |||
 |          z   ||||           z  }|                                }t          |          dk    sJ t          d| gdz  t          j        d                    }t          d| gd
z  t          j        d                    } ||||	           ||	 |
 |           z   || |
          z  }|                                }|d	k    sJ t          d| gdz  t          j        d          d          }t          d| gd
z  t          j        d                    } ||||	           ||	 |
 |           z   || |
          z  }|                                }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  }|                                }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  }|                                }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  }|                                }t          |          dk    sJ  |||           |||          z   ||           z   ||| |           z  }|                                }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  }|                                }t          |          d&k    sJ d S )'Nr:   r;   r<   za,a0,a1,a2,a3,b,d0,d1,d2,d3r@   r?   zA(L_0)*A(-L_0)z,A(L_0)*A(-L_0)*A(L_1)*A(-L_1)*A(L_2)*A(-L_2)r   rA   z!A(a, L_0)*A(b, L_1)*A(-L_0, -L_1)rB   z!A(b, L_0)*A(-L_0, L_1)*B(a, -L_1)   zA(a, L_0, L_1)*A(b, -L_0, -L_1)zCA(a0, L_0, L_1)*A(a1, -L_0, L_2)*A(a2, a3, L_3)*A(-L_1, -L_2, -L_3)z1A(L_0, L_1, L_2)*A(-L_0, -L_1, L_3)*B(-L_2, -L_3)Spinorr
   rZ   z2-A(S_0, S_1, S_2)*A(-S_0, -S_1, S_3)*B(-S_2, -S_3)MatM)r[   r=   z1A(M_0, M_1, M_2)*A(-M_0, -M_1, -M_3)*B(-M_2, M_3)zalpha,beta,gamma,mu,nu,rhoGammaz4-Gamma(L_0, L_1)*Gamma(rho)*Gamma(alpha, -L_0, -L_1)zGGamma(L_0, L_1)*Gamma(beta, gamma)*Gamma(-rho)*Gamma(alpha, -L_0, -L_1)FlavorFa,b,c,d,e,fzmu,nufzY-f(F_0, F_1, F_2)*f(-F_0, F_3, F_4)*A(L_0, -F_1)*A(-L_0, -F_3)*A(L_1, -F_2)*A(-L_1, -F_4))	r   r   r#   r   rD   r$   rE   rF   direct_product) r:   rG   a0a1a2a3rH   rI   rJ   r\   r]   r@   rK   rL   rB   rb   rd   alphabetagammamunurhorf   Gamma2Gamma3rh   rQ   rR   effrk   s                                    r6   test_canonicalize1r{      s	   iC888G4g>> )Ar2r2q"b"b
 	3	>#=a#@#@AAA	2#qquuA	
Br77&&&&&
 	
2#qq"vvaaffQQrUU"11R55(2.A	
Br77DDDDD
 	3	>#=a#@#@!DDA	2#qq"vvaaffQQrUU"11R55(2.A	
B7777
 	3	!^%CA%F%FGGA	"a1rc11R"::%A	
Br7799999
 	3	!^%CA%F%FGGA	"a2sAAa"II%A	
Br7799999
 	3	!^%CA%F%FGGA	"b!QQq2#s^^#A	
Br7777777 	
"b"aaRC"oo%aaRCnn4QQr2s^^CA	
Br77[[[[[ 	3	!^%CA%F%FGGA3	!^%CB%G%GHHA	"b"aabS2#&&&qq"bzz1A	
B7777
 	3	!^%CA%F%FJJA3	!^%CB%G%GHHA	"b"aabS2#&&&qq"bzz1A	
Br77IIIII
 X#rJJJF4f== )Ar2r2q"b"b3
N$B1$E$EqIIA3
N$B2$F$FGGA	"b"aabS2#&&&qq"bzz1A	
Br77JJJJJ %s
C
C
CC4c:: )Ar2r2q"b"b3a!?!B!BAFFA3a!?!C!CDDA	"b"aabS2#&&&qq"bzz1A	
Br77IIIII 	3W== $E4Bw	%5a88!= =E'1&6r::A? ?F'1&6r::A? ?FsRCs#FF2r5$9$99A	
Br77LLLLL 	r2vvdE***55#;;6vvebS2#7N7NNA	
Br77_____ X#666F&}f==Aq!Q2GW--FB3
N$A!R$H$HIIA3&)>+Ea+H+HIIA	!aR!QQrA2r]]"11bS!99,QQsAYY6qqQxx?"aHA	
Br77qqqqqqqr8   c                      t          d          } t          d|           }t          |t          t          f          rJ t          |t
                    sJ d S )Nr@   i)r   r   r2   tuplelistr   )r@   r}   s     r6   "test_bug_correction_tensor_indicesr   ?  sV     	AsAA!eT]+++++a%%%%%%%r8   c                  <   t          dd          } t          d|           \  }}}}}}}}}	}
}}t          d| gdz  t          j                              } |||| |           }|                                }t          |          dk    sJ  || || |           |||||           z   || | |	 |
           z   || | | |           z   |||||           z   ||	|
||          z  }|                                }t          |          dk    sJ d S )	Nr:   r;   r<   zd0:12R   z-R(L_0, L_1, -L_0, -L_1)zR(L_0, L_1, L_2, L_3)*R(-L_0, -L_1, L_4, L_5)*R(-L_2, -L_3, L_6, L_7)*R(-L_4, -L_5, L_8, L_9)*R(-L_6, -L_7, L_10, L_11)*R(-L_8, -L_9, -L_10, -L_11))r   r   r#   r   riemannr$   rE   )r:   rI   rJ   r\   r]   d4d5d6d7d8d9d10d11r   rK   rL   s                   r6   test_riemann_invariantsr   H  s{   iC888Gw(( 5BBBBBC 	3	!^%;%=%=>>A	"b2#sA	
Br7700000 	
3$r2#b!!Br"bS//)!!RCRC*<*<<	3$sB3s	AbC,,	--.Qr"R__	=A	
Br77  l  l  l  l  l  l  lr8   c                  6   t          dd          } t          d|           \  }}}}}}}t          d|           \  }}	}
}}}t          d|           \  }}t          d| gdz  t          j                              } |||||           }|                                }|d	k    sJ  |||||           }|                                }t          |          d
k    sJ  ||| ||            |||| |          z  }|                                }t          |          dk    sJ t          d| gdz  t          j        d                    } |||| |           |||||          z   || |           z   || |           z   || |           z  }|                                }t          |          dk    sJ  ||||
|           ||| |	|          z   |||| |           z  }|                                }t          |          dk    sJ d S )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   _  sg   iC888G!/!@!@BBBB+FG<<BBB%))DAq3	!^%;%=%=>>A	!QRCA	
B7777 	
"aRCA	
Br77+++++ 	
"rc1rc11RRC,,,A	
Br77CCCCC 	3	!^%CA%F%FGGA	"b2#r11RR,,,QQsRC[[8B3DQQsRC[[PA	
Br77ooooo 	
"b"b!!BR,,,QQr2sRC-@-@@A	
Br77VVVVVVVr8   c                     t          d          } t          dd| d          }t          d|          \  }}}}}}}}	}
}}}}}}t          d|gdz  t	          j        d	                    } ||||           || ||          z   || |	|          z   || | |          z   || | |
          z  }|                                }|d
k    sJ  ||||           || ||          z   || ||          z   || |	|
          z   || |	 |          z   ||
 ||          z   || | |          z   || | |          z   || | |          z  }|                                }|d
k    sJ d S )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!LLLDw%% 6Br"R2bBr#c#c#3q."@"D"DEEA
 	
"RAArc"RLL B3r"-aaRCmm;AArc2#bMMIA	
B7777
 	
"RAArc"RLL B3r"-aaBrll:11bS"R==H	2#c#	q"cT#	''(q"cT#	778q"cT#	GA	
B777777r8   c                     t          d          } t          d| dd          }t          d|          \  }}}}}t          d|gt	          j        d          d          \  }} ||           ||          z  }	|	                                }
|
|	k    sJ  ||           ||          z  }	|	                                }
|
 ||            ||          z  k    sJ d S )	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QQQF#FF33NBr"RIx1KA1N1NPQRRHCBBA	
B7777BBA	
B##b''##b''!!!!!!!r8   c                      t          dd          } t          d|           }t          d| g          }t           ||          d ||          z            }|                                 ||           k    sJ d S )N	Cartesianr`   r   pKra   )r   r   r#   r   r$   )r   r   r   exprs       r6   test_canonicalize4r     s    333IsI&&A3$$AAAaDD3qqtt8%%D==??qqtte######r8   c                     t          dd          } t          d|           }t          d| g          }t          dt                    }t          d          }t           ||          |d	d
f           ||          z  }|                                                                t           ||          |d	d
f                                           ||          z  k    sJ d S )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QQqTTAa7##aadd*D==??##%%11Q44!Aa)A)A)J)J)L)LqqQRtt)SSS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           |||                                                     dk    sJ d S )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!"#5 5 5G'88BBB)!,,D3A667E5====Aq66)))))?gk))))XH===FGV,,FBA3
D))AqqRCyy!!##$$(@@@@@@@r8   c            	      l  	 t          dd          t          d          \  	} j        k    sJ  k    sJ t          dgdz  t	          j        d                    \  }            | 	          z  }|                                }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 d S )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9 r8   c                                  S r1    r@   rG   rH   rQ   s   r6   r   ztest_indices.<locals>.<lambda>  s    qq1Qxx 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888G	733JAq!Q'))))7777y{N,J1,M,MNNDAq	!Aqq!AwwAmmooG
eW
%
%Cq#tQ'''''
:9999:::
:'''''''(((3'*++A1S#;;!!KW55'W557 7 7 7 7 71S$<<11[g66(gUCCCE E E E E E1S+c7++,,+c72K2K2=c72K2K1M 1M M M M 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 d S )
NrA   rg   r`   Trc   r?   r   r   )
r   rF   r   rl   rD   rankbaser   
generatorsr	   )syms    r6   test_TensorSymmetryr     s   )!,,.q11223 3 3 3)"--.q$77889 9 9 9(,,&r**+ + + +)"--&q))* * * *(B22"1%%& & & &1!4455/2234 4 4 4 
(
,
,C8q====8uQ{{"""">U#4;q!#4#4Q#:#:<MK1<M<MaQR<S<STTTTTTTTr8   c            	         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            n# 1 swxY w Y   t          t          fd           t          t          fd           d S )Nr:   r;   r<   r   r   rA   c                  6                           z  S r1   r   )rG   rH   rQ   rR   r   s   r6   r   ztest_TensExpr.<locals>.<lambda>      qqAwwqqAww r8   c                  6    t           j                    z  S r1   r
   One)rG   rH   r   s   r6   r   ztest_TensExpr.<locals>.<lambda>  s    quQQq!WW} r8   c                  P                           z              z  S r1   r   )r@   rG   rH   rQ   rR   r   s   r6   r   ztest_TensExpr.<locals>.<lambda>  s/    !Q!!Aq'' 111Q77: r8   c                  P    t           j                               z   z  S r1   r   )r@   rQ   rR   r   s   r6   r   ztest_TensExpr.<locals>.<lambda>  s'    quaa1gg!Q&78 r8   c                  6                            z   S r1   r   r   s   r6   r   ztest_TensExpr.<locals>.<lambda>   s     qqAww1a0 r8   c                  "                dz  S NrA   r   r@   rG   rH   s   r6   r   ztest_TensExpr.<locals>.<lambda>  s    11Q77A: r8   c                  "    d            z  S r   r   r   s   r6   r   ztest_TensExpr.<locals>.<lambda>  s    11Q77
 r8   c                  6    t                                S r1   )absr   s   r6   r   ztest_TensExpr.<locals>.<lambda>  s    AAaGG 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888G	733JAq!QAy{N,J1,M,MNNDAq
:........///
:,,,,,,---
::::::::::;;;
:8888888999
:0000000111 
 	!	! / /z------.../ / / / / / / / / / / / / / /  2 2 2 2 2 2333
 4 4 4 4 4 455555s   5D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 d S )Nr:   r;   r<   r@   rA   r   )	r   r#   nameindex_typesr   symmetryr   rD   comm)r:   r@   s     r6   test_TensorHeadr     s    iC888G3	!$$A6S=====Wg.....6Q;;;;:3A6666666Q;;;;;;r8   c            	         t                      j        dk    sJ t                                                      dk    sJ t          dd          } t	          d|           \  }}}}}}}t          d| gdz  t          j        d                    \  }}	 |||            |	||          z  }
t          |
                              |
          sJ  |	||           |||          z   } |||           |z  }t          |          d	k    sJ |
                                }t          |          d
k    sJ |                                }t          |          dk    sJ ||
z   }t          |          dk    s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 |
                                }t          |          dk    sJ ||
z  }|
                                }t          |          dk    sJ |                                }t          |          dk    sJ  ||          d ||          z  z   }
|
|z  }|                                }t          |          dk    sJ  ||          d ||          z  z
  }
t          |
          dk    sJ  ||           d ||           z  z   }|
|z  }|                                }| ||           ||           z  d ||          z   ||           z  z
  k    sJ  ||           ||          z   ||           ||          z   z   ||           ||           ||          z   z   ||          d ||          z  z
  z  z   }|                                }|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   }|                                }|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
  }|                                }| ||            ||          z  z   }|dk    sJ |                                }|                    d          sJ t          j         ||           ||           z  z   }| ||            ||          z  z
                                                      d          sJ  |||           |	||          z   }|j        dk    sJ | |||          z
   |	||          z
  }
|
dk    sJ d |||            |	||           z   z
  }d |||            |	||           z   z   }
||
z   
                                                    d          sJ d |||           z   }|
|k    sJ |t          j        dg g g           k    sJ t           ||          t          d ||                                                               ||          k    sJ d S )Nr   r   r:   r;   r<   a,b,d0,d1,i,j,kr>   rA   z"A(b, -L_0)*(A(L_0, a) + B(L_0, a))z+A(b, -L_0)*A(L_0, a) + A(b, -L_0)*B(L_0, a)z+A(a, L_0)*A(b, -L_0) + A(b, L_0)*B(a, -L_0)zBA(a, L_0)*A(b, -L_0) + A(b, -L_0)*B(L_0, a) + A(b, L_0)*B(a, -L_0)z-A(a, L_0)*A(b, -L_0) + 2*A(b, L_0)*B(a, -L_0)p,q,rz2*q(d0)z2*q(d0) + p(d0)z2*q(-d0) + p(-d0)zp(L_0)*(2*q(-L_0) + p(-L_0))z!p(L_0)*p(-L_0) + 2*p(L_0)*q(-L_0)z!p(-L_0)*p(L_0) + 2*q(-L_0)*p(L_0)z4p(L_0)*p(-L_0) + 4*p(L_0)*q(-L_0) + 4*q(L_0)*q(-L_0)z-2*q(d0) + p(d0)r   r`   r?   )r   argsdoitr   r   r    r   rF   r3   rE   r   r$   r
   r   r   r   	from_data)r:   rG   rH   rI   rJ   r}   jkr@   rB   rM   t2at2t2br   qrrK   t3tz1s                       r6   	test_add1r    s	   99>R99>>q    iC888G$%6@@OAa2a!y{N,J1,M,MNNDAq	
1rc11R88	B2;;b!!!!!
!B((QQr1XX
C	
1rc3Br77:::::	Br77CCCCC	Br77CCCCC
r'Cs88[[[[[
,,..Cs88FFFFF7WI..GAq!	"aAq66Y	!!B%%Aq66Y	
211R55Br77'''''	
B3!AArcFF(	Br77)))))	
2B	BBr7744444	Br7799999	BB	Br7799999	Br7799999	
211R55B	BB	Br77LLLLL	
211R55Br77(((((	
B3!AArcFF(	B	BB	B2qq"vv!!B%%2#.....	!QQqTT	11Q44!!A$$;!!A$$!qqtt"4aaddQqqttVm"DDA	

A!!A$$qqttAAaDD 1QQqTT6!!A$$;qqtt#33aadd11Q44i!nDq1vaaPQdd{STSTUVSWSWGWWWWWW
!A$$1+!!A$$
1!	-B
!A$$1+!!A$$
1!	-B
RA	

A!!A$$qqtta!fQQqTTk)AaaddF11Q44K7!AAaDD&1+E!!A$$qqQRttSVWXYXYZ[X\X\V\]^]^_`]a]aVaaaaaa	!QQqTT	!AQ3!!A$$qqtt)	
1!aAQ3!!A$$1+	!QQrUU
A	

A
aaeeAAaDDj.C!8888
,,..C::a==	!QQrUU
A1"aadd
N$$&&--a00000	!Q!!Aq''A6Q;;;;	
QQq!WWqqAww	B7777	QQq1"XX!aR !A	
aaA2hh1qb!	"BF??##A&&&&&	
QQq1"XXB8888"1b"b111111 11Q44AAaDD))++0022aadd::::::r8   c                  2   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  |
|           |||          k    sJ  |||            |||          k    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    |||          k    sJ  |
|           ||          z    |||           |	||          z   k    sJ  |
|           |
|          z
  dk    sJ  |
|           |
|          z
  t          j        u sJ t           |||           |||                    sJ d S )
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  so   iC888G*+<gFFAq"b!Qy{N,J1,M,MNNDAq7WI..GAq!	!!Aq''	AQ??Q1Q4411Q77????1Q88qqAwwaa1gg!Q A%%%%aa1gg!Q AF****aa1gg!Q AF****1Q44!!A$$;!!Aq''!!!!1Q44!!A$$;!!Aq''AAaGG+++++1Q44!!A$$;!1Q44!!A$$;!&    QQq!WWaa1gg&&&&&&&r8   c                  6   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  }|                                }|dk    sJ t          d
d           |||||          z  t          dd           |||||          z  z
  t          dd           |||||          z  z   }| || | |           z  }|                                }|dk    sJ  ||| |           ||||           z   }	|	                                }	|	dk    sJ d S )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    s   iC888G	733JAq!Q3	!^%;%=%=>>A3	!^%CB%G%GHHA	
11Q1a==11Q1a==	(11Q1a==	8B	AAqb1"qbMM	B	B7777	!Q!Aa

	"Xa^^AAa!AJJ%>	>!QPQPQRSTUVWXYPZPZAZ	ZB	AAqb1"qbMM	B	B7777	!aRaa1qbkk!A	

A666666r8   c            
      x   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 d S )
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    s   iC888GFG,,FBL))MAr2r3	""A3	""AAbEE!!RC&&LAqD2q5L2q502q589E:1a4%QAr1uaaeeAArcFFlCCCCCqD2q5L2q5 2q5(11R55B3<7E:!Q$QQQ2qq"vvFFFFFAbEE!!RC&&L1a4"a%'"a%/"a%7E:1a4%QAr1uaaeeAArcFFlCCCCCAbEE!!RC&&L1QT6!Ab!eG+aAg5"a%?!!B%%2#,NE:!AqD&"RU(Br1uHbQh"aaffqqQSuufUVUVXZWZU[U[m\\\\\\\r8   c                  8  	
 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'          |                                 }||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           d S )Nr   )r   r:   r;   r<   r   1r   rA   r?   z(x + 1)*A(a, b)zA(a, b)rC   c                  6                            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888G	733JAq!Q!%R,,Aq66S====y{N,J1,M,MNNDAq	
Q!QAq66&&&&&=Wg.....6Q;;;;5B;;;;7a!e!&>>q!fq!f-----<A3	
1aBr77i>gw/////7a<<<<6R<<<<8q===="'??1v1v.....=QC	1"aA2q!!QB(("A	QWWYY	B7777r?g/r2rBBBBBB!RR((A3Aqqss88s????q66S====6666
:......./////r8   c                     t          dd          } t          d|           \  }}}}}}}}t          d| gdz  t          j        d                    \  }	}
t          d| g          } ||          }|                    ||f          }||k    sJ |                    ||f          }| ||          k    sJ |                    || f          }| ||           k    sJ |                    | |f          }| ||           k    sJ |                    | | f          }| ||          k    sJ  |	||          }|                    ||f|| f          }| |	||           k    sJ t          |||f|| f          }| |	||           k    sJ  |	||           |
| |           z  }|                    ||f||f          } |	||           |
| |           z  }||k    sJ t          |||f||f          }||k    sJ  |	||           |
||          z   }|                    || f          } |	||            |
||           z   }||k    sJ t          ||| f          }||k    sJ d S )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*    s   iC888G+,=wGGAq!Q1ay{N,J1,M,MNNDAq3	""A	!A	
		q!f	%	%B7777	
		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9999	A1v1v	.	.B9999	!Q!!Aq''A	
		q1"g	&	&B
!Ar((QQq1"XX
C9999	AA2w	'	'B999999r8   c                     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 d S )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888G#E733NBB3	!^%;%=%=>>A	"b"bA		"	"B
2q//!!BB++
+hq!nnQQr2r2=N=N.N
NQYZ[]^Q_Q_`a`abdfhjlnp`q`qQq
qC999999r8   c            	         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 d S )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888G+,=wGGAq!Q1a3	!^%;%=%=>>A	!Aa

QQq1QZZ!!Aa!**,	!Aa

	Qq1QZZ	 "#!Aa!**	-A	
11aRA2qb>>	B			B7777	!Aa

AAqb!QBrNNQqq!QBr1"~~%556A			B7777	!Aa

A			B"a1aA.!Q!Q11MMPXYZ\]P^P^_`_`abdeghjk_l_lPllllll	!Aa

11aR1Q<<A2qb!QB!AAqb!QBrNN2B!BCA			B777777r8   c                  |   t          dd          } t          d|           \  }}}}t          d| gdz  t          j                              } |||| |          }|t          d          z  }t          |          dk    sJ |                                }|j        rJ |dz  }|j        sJ |dz  }|j        sJ d S )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888G#FG44NBB3	!^%;%=%=>>A	"RBA	
1Q44Br7722222	

A	
1B?	AB?r8   c                     t          d          } t          d| d          }t          d|          \  }}}}}|j        }t	          d|g          } |||           ||           z  }	|	                    |          }
|
 ||          k    sJ t          d|gdz  t          j        d                    \  }} |||           || |          z   |||          z  }
|
                    |          }|
|k    sJ  |||           || |          z   || |          z  }
|
                    |          }||  |||          z   || |          z  k    sJ  |||           || |           z   |||          z  }
|
                    |          }| |||           || |          z  k    sJ  |||           || |           z   |||           z  }
|
                    |          }t          | |||           || |           z            sJ  |||           || |           z   |||          z   || |           z  }
|
                    |          }t          | |||           || |           z            sJ  |||           || |           z  }
|
                    |          }t          | |||                     sJ |j
        rJ t          dd	          }t          d
|          \  }}|j        }t           |||                               |          |j                  sJ d S )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";88MAq!QA3	""A	!Q1"A	
		1		B1::::y{N,J1,M,MNNDAq 
1Q1"Q!Q	B			A		B8888 
1Q1"Q1"a	 B			A		B11Q7711aR88##### 
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"""""wiC888G%))DAqAQQq1"XX--a00'+>>>>>>>r8   c                  :   t          d          } t          d| d          }t          d|          \  }}}}}}|j        }t	          d|g          \  }	}
 |||           |	|          z   |	|           z  }d || |           z   |
|          z   |
|           z  }||z  }|                    |          }|d| z   |	|          z   |	|           z   |
|          z   |
|           z  k    sJ  |||           |	|          z   |	|           z  }d |
|           z   |
|           z  }||z  }|                    |          }|                                }|d |	|          z   |	|           z   |
|          z   |
|           z  k    sJ d |||          z   |	|          z   |	|           z  }d	 || |           z   |
|          z   |
|           z  }||z  }|                    |          }d
 |||          z   || |           z   |	|          z   |	|           z   |
|          z   |
|           z  }|                    |          }d |||          z   |	|          z   |	|           z  } |
|            |
|           z  d || |           z   |
|          z   |
|           z  z   }||z  }|                    |          }|dd
| z  z    |	|          z   |	|           z   |
|          z   |
|           z  k    sJ  |	|           |	|          z   |	|           |
|          z  z   d |||          z   |	|          z   |	|           z  z   } |
|            |
|           z   || |            |
|          z   |
|           z  z
  }||z  }|                    |          }dd| z  z
   |	|          z   |	|           z   |
|          z   |
|           z   |	|           |
|           z   |	|          z   |
|           z  z   }t          ||z
            dk    sJ  |||           |||          z   || |           z  }|                    |          }| |||          k    sJ  |||           |||          z   |||           |||          z  z    |||           |||          z  z   }|                    || f|| f|| f|| f          }||z  }|                    |          }|                    d| dz  z  d
| z  z             sJ d |	|          z   |||           z  }|                    |          }|                    d| z   |	|          z            sJ d |	|          z   |||           z  }|                    |          }|d |	|          z  k    sJ t          d          } |	|           |	|          z   |||          |dz  z  z    || |           z  | |dz  z  z
  }|                    |          }| |	|           |	|           z  k    sJ t          d|gdz  t          j        d                    } |||           |	|          z   || |           z  }|                    |          }t          |          dk    st          |          dk    sJ d S d S )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AAq!Q3Ay))DAq	
1Q!QQrUU	B	
11aR88AAaDDA2	B
2A	!A!AAaDDA2qqtt#AAqbEE)))))	
1Q!QQrUU	B	
11aR55A2B
2A	!A	

A!!A$$qq!uuQQqTT!!!QB%%'''''	
11Qq66!!A$$qq!uu	B	QQr1"XXaadd	11aR55	 B
2A	!A	!!Aa&&A2qb!!A$$qq!uu$QQqTT)!!QB%%/A	!A	
11Qq66!!A$$qq!uu	B	
A2qq!uuqA2qbz!!A$$qq!uu,	,B
2A	!AQqS!!A$$qq!uu$QQqTT)!!QB%%/////	
1aaddQQqTT!!A$$Y	11Qq66!!A$$qq!uu!4	4B	
A2qq!uuqq!QBxx!}QQrUU*	*B
2A	!A
ac'11Q441"	aadd	"11aR55	(11Q441":aadd?11aR55+@	@BAFq    	!Aqq1vvaaA2hhA	
		1		B1a====	
1Q!A1Q!A	&1Q!A	6B			1"vq!faVQrF	;	;B
2A	!A88AadFQqSL!!!!!	!!A$$qqA2wwA	
		1		B99QqS1X	!!A$$qqA2wwA	
		1		B11Q44<<<<sA	
1aaddQQq!WWQT\	!11aR!99,qAv5A	
		1		B1aaee3	!^%CA%F%FGGA	!Q#qq!aRyy A	
		1		Br77+++s2ww:O/O/O/O/O++/O/Or8   c                  x   t          d          } t          d| dd          }t          d|          \  }}}}}|j        }t	          d|gt          j        d          d          \  }}	t          d	|gd
z  t          j        d
                    }
 |||           }|                    |          }|	                    |            sJ  || |          }|                    |          }|	                    |           sJ  |||           || |           z  }|                    |          }|	                    |           sJ  |||           || |           z  }|                    |          }|	                    |            sJ  || |           |||           z  }|                    |          }|	                    |            sJ  |||            |||           z  }|                    |          }|	                    |           sJ  |||           |
| |           z  }|                    |          }|
                                }t          | |
||                     sJ  |||           |
| |           z  }|                    |          }t          | |
||                      sJ  |||            |
||           z  }|                    |          }t          | |
||                      sJ  || |           |
| |          z  }|                    |          }t          | |
||                      sJ  || |            |
||          z  }|                    |          }t          | |
||                     sJ  || |           |
||           z  }|                    |          }t          | |
||                     sJ  |||           |	|           z  }|                    |          }t          | |	|                    sJ  |||           |	|           z  }|                    |          }t          | |	|                     sJ  |||           ||           z   |	|           z  }|                    |          }t          | ||            |	|           z            sJ  |||           ||           z   |	|           z  }|                    |          }t          | ||           |	|           z            sJ  || |           ||           z   |	|          z  }|                    |          }t          | ||            |	|          z            sJ  |||            ||           z   |	|          z  }|                    |          }t          | ||             |	|          z            sJ  || |            ||          z   |	|          z  }|                    |          }t          | ||            |	|          z            sJ  || |            ||          z   |	|          z  }|                    |          }t          | ||             |	|          z            sJ  || |            |
||          z   |	|          z  }|                    |          }t          | |
| |            |	|          z            sJ  |||           |
| |           z   |	|           z  }|                    |          }t          | |
| |           |	|           z            sJ d S )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;    sp   sAX1bSQQQF'77BBBAIx1KA1N1NPQRRHC3
N$>q$A$AB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

11R88A	
		1		BR2rc#####	2#r

11R99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((33r77"A	
		1		BRbS##b'')*****	"bS		##rc((33r77"A	
		1		BR##rc((33r77*+++++	2#rc

33r7733r77"A	
		1		BRbS##b'')*****	2#rc

33r7733r77"A	
		1		BR##rc((33r77*+++++	2#rc

11R88CCGG#A	
		1		BR!!RC))CCGG+,,,,,	"RB3sCCHH$A	
		1		BRB3r33s88+,,,,,,,r8   c                  0   t          dd          } t          d|           \  }}}| j        }| j        }t	          d| g          } ||||           ||            ||           z   || |           z   z  }|                    |          dk    sJ d S )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!HE
*C3A 3q1::1"aaeeeeQBrll24D&&!++++++r8   c                  B   t          dd          } t          d|           \  }}}| j        }t          d| g          }t	          d          }t          d          }d ||          z    ||           z   ||           z  }|                    |          |k    sJ d S )	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!HE3AAsA aaddFAAqbEE>!!QB%%D&&$......r8   c                     t          ddd          } t          d|           \  }}}}}| j        }t          d| g          \  }}}	}
 |||||          }|                                }| |||||           k    sJ  |||||          }|                                }| |||||          k    sJ  |||||          }|                                }| |||||           k    sJ  |||||           ||           z   ||           z  }|                                }| |||||           ||           z   ||           z  k    sJ  |||||           ||           z   ||           z  }|                                }| |||||           ||           z   ||           z  k    sJ  |||||           ||           z   ||           z  }|                                }| |||||            ||           z   ||           z  k    sJ  |||||           ||           z   ||           z  }|                                }|dk    sJ  |||||           ||           z   ||           z   |||||           ||           z   ||           z  z   }|                                }|d |||||          z   ||           z   ||           z  k    sJ t          dt          d          d          } | j        }t          |t                    sJ d S )	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";88MAq!QoGi'33JAq!Q!AaA	
B''!Aa"""""""!AaA	
B1Qq!!!!!!!AaA	
B''!Aa"""""""!AaA2qq!uu$A	
B1Qq!!!!QB%%'1"-----!AaA2qq!uu$A	
B1Qq!!!!QB%%'1"-----!AaA2qq!uu$A	
B''!Aa"""11aR55(A2.....!AaA2qq!uu$A	
B7777!AaA2qq!uu$wwq1Q'7'71"'=aaee'CCA	
BGGAa!$$$QQrUU*11aR5500000 iWQZZCHHHGoGgz*******r8   c            	      
   t          d          t          dd          } t          d|           \  }}}}}}| j        fdfdfd}fd	} ||| ||            ||| ||           z  }	|	                              }
t          |
 ||| ||           z
            d
k    sJ  ||| ||            ||| ||           z  }	|	                              }
|
 ||| ||           k    sJ  ||| ||            ||| ||           z  }	|	                              }
|
d
k    sJ  ||| ||           }	|	                              }
|
                    dz  dz
            sJ d S )Nr  ColorrC   r3  rj   c                 v    | 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  L    w"17"""G'qw'''uQqzz%%!**$$r8   c                 v    | 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                 J     | |||          dz   | |||          z  z
  S Nr?   r   )rG   rH   rQ   rR   rN  rK  r  s       r6   P1z test_contract_delta1.<locals>.P1N  s2    s1Qq||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    s11Qq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  =  sB   sAGs;;;E%mU;;Aq!Q1KE% % % % %
% % % % %
- - - - - - -      	1qb!aRAr1qb)))A	
		%	 	 BBAr1qb)))**a////
1qb!aRAr1qb)))A	
		%	 	 BAr1qb!!!!!!
1qb!aRAr1qb)))A	
		%	 	 B7777
1qb!aRA	
		%	 	 B99QTAXr8   c                  8   t          dd          } t          d|           \  }}| j        }t          d| g          }d ||           ||          z   || |           z  z   }|                    |          d ||           ||           z  z   k    sJ d S )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HE3A qqttAAaDDyr1"%%Du%%QQqTT!!QB%%Z777777r8   c            	         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 |
                    ||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
  }
|
                    |          }
|
dk    sJ  |	|           ||          z   |	|          z  }
 |
|||           |	|           ||          z   |	|          z  k    sJ 	 d d d            d S # 1 swxY w Y   d S )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   		!	! * *3KK!)sCCC&{G<<1aANEG9--1AaDD1IaaddNQQqVVAAaFF]11aR5500q1Qxx1}}}}AAa!HHqqttAAaDDy1~5!QQqTT	!!A$$FGG1LLLLq1Qxx11Q44!9QQqTT>AAaFF11Qq66M!!QB%%,??????!!1Q%1..QQqTT!!A$$Yqqtt^+aa!ffQQqVVmAAqbEE.AABBaGGGG wik>+HA+N+NOOqq1vvrr1"aR||bb!QBrll:RRA2qb\\IJBr1"aRLL11aR88EE!QBrNN22QQr1"XXeeAqb!nn5LLa  AvvvvAaDD1IaaddNq1Qxx11Q44!9QQqTT>)))))5* * * * * * * * * * * * * * * * * *s   L&MM
M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n 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 d S )Nr:   r;   r<   LorentzHLHzi,jzih,jhrW  zph qhGsymbolGHsymbolr   Gr?   GHrA   c                  0    t          j         dd          S Nr?   rA   )r!   set_comm)ra  s   r6   r   z$test_TensorManager.<locals>.<lambda>  s    }5h1E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    sG   iC888Gzd;;;H%))DAqGX..FBy))DAq'H:..FBYGj!!H7Ha0003	>#=a#@#@'JJA'/7::::	D8*n&@&C&CX	N	NB	
1aaeeB
"R&&RC.C
SA	
1BBBJ2c)CG3449999	
1aaeeB
"R&&RC.CRVSV$$$$$B2&&&&&$W--A&q))W4444}44444
:EEEEFFFWXa0'!A???!!Q''=+A!Q+G+GLLLL1LLLLLLQ!q//a13E3E!t}}!UUUUU=88888		%h	/	/B&r**h6666}4444444r8   c                  	   t          d          } t          d| d          }t          d|          \  }}}}}|j        }t	          d|g          \  }}	|j        d         }
 ||           |	|          z  } ||           ||          z  }t          |          t          |          k    sJ  ||           ||          z   |||          z   } ||           ||          z   |||          z
  }t          |          t          |          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  |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 d S )Nr   r:   r;   r3  r4  rW  r?   c                 >    t          d | j        D                       S )Nc              3   @   K   | ]}t          |t                    V  d S r1   )r2   r   ).0_s     r6   	<genexpr>z/test_hash.<locals>.check_all.<locals>.<genexpr>  s,      ::A:a''::::::r8   )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    s^   sAiQ3???G";88MAq!QAy))DAqVAYF	
1aaddB	
1aaddB88tBxx	
1aaddQQqVV	B	
1aaddQQqVV	B88tBxx1616?a7<&'11111616?a1616?a6;$....11Q449qqttk"aadd****27BG""""27BG""""27BG""""27BG""""  DGG++++gl+,,W====  DGG++++  DGG++++V[)**d6ll::::	!	AAaDD;'((D1JJ6666!""d2hh....!""d2hh....!""d2hh....!""d2hh....; ; ; 9Q<<9W9Q<<9Q<<9V9QQqTT??9R==9R==9R==9R==-b!Q77I9>9>*i7777		/00DOOCCCC9Yr8   c                     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            }d t          dd          D             |_        t          d|gdz            }d t          dd          D             |_        |||||||||	|
|||||||||||| |||||||fS )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
      NBc                 H    g | ]fd t          dd          D             S )c                     g | ]}|z   S r   r   r{  r   r}   s     r6   
<listcomp>z>_get_valued_base_test_variables.<locals>.<listcomp>.<listcomp>  s    +++!+++r8   r  r  ranger{  r}   s    @r6   r  z3_get_valued_base_test_variables.<locals>.<listcomp>  s6    CCC++++U2r]]+++CCCr8   NCr`   c                 H    g | ]fd t          dd          D             S )c                 L    g | ]fd t          dd          D              S )c                      g | ]
}z   |z   S r   r   )r{  r   r}   r   s     r6   r  zI_get_valued_base_test_variables.<locals>.<listcomp>.<listcomp>.<listcomp>!  s!    ,,,11Q,,,r8   r   r  r  r  s    @r6   r  z>_get_valued_base_test_variables.<locals>.<listcomp>.<listcomp>!  s:    BBB,,,,,a,,,BBBr8   r?   r   r  r  s    @r6   r  z3_get_valued_base_test_variables.<locals>.<listcomp>!  s6    XXXqBBBBeAqkkBBBXXXr8   r  )	r   r   datar   r   r#   r   rD   r  )	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  s                                r6   _get_valued_base_test_variablesr    sL      I iQ///GGL'88BBBL))MAr2r3	""AR_AF3	>#=a#@#@'JJA1XXAF	D7)A+	&	&BBG   I 
D7)A+	&	&BBG z**H!MMHM"7H55MCc3
##AR_AFJ
 %
 
 CCH,,JBB	D3%	 	 BBmmBG	D3%'	"	"BCCU2r]]CCCBG	D3%'	"	"BXXERSUVKKXXXBGq"b!WaRXsCcSUWYBIy*b"b"bR Rr8   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 |D             k    sJ t          d |||          z            d	 |D             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 |D             k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr  r  r  r  )r?   rA   r`   r   r  r8  r  r  r  r   rc   ra   rg   r   r  r  r`   c                     g | ]}d |z  S )r`   r   r  s     r6   r  z+test_valued_tensor_iter.<locals>.<listcomp>5  s    '?'?'?!A'?'?'?r8   r  c                     g | ]}d |z  S )r  r   r  s     r6   r  z+test_valued_tensor_iter.<locals>.<listcomp>6  s    (A(A(AAa(A(A(Ar8   rA   r   c                     g | ]}| S r   r   r  s     r6   r  z+test_valued_tensor_iter.<locals>.<listcomp><  s    4I4I4IAaR4I4I4Ir8   )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_BAs                                 r6   test_valued_tensor_iterr  '  s   		!	! J JQpQrQr	OAr2q'1b"b(Cc3PRTV	RRIz2r2r2&&lll(;(;U>>>=R=RTYZjZjZjTkTklAww1b"b/))))I"X"X"XXXXXBxx7"""" AAbEE{{q"b"o----BBr2JJ7****A2r

N##'?'?w'?'?'?????BBO$$(A(A(A(A(AAAAA AAbEEAAbEEM""qsAbD!B$"&=====r"bzzBBr2JJ&!++++BBr2JJRRBZZ/004I4I4I4I4IIIIII)J J J J J J J J J J J J J J J J J Js   GG<<H H 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            d S # 1 swxY w Y   d S )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   		!	! 
& 
&QpQrQr	OAr2q'1b"b(Cc3PRTV	RRIz2r2r2q"vvayAAbEE!H$$$$q"vvayQQrUU1XI%%%%r"bzz$2%%%%r"rc{{4 A%%%%r2#s||D!R''''r2#r{{4 A%%%%%
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
& 
&s   C C==DDc                  h   t                      5  t                      \  } }}}}}}}}}	}
}}}}}}}}}}}}}}}}}} |||                                          }|t          g dg dg dg dg          k    sJ  |||                                           t	          d          k    sJ  | |                                          t          ||||	g          k    sJ  | |                                           t          || | |	 g          k    sJ 	 d d d            d S # 1 swxY w Y   d S )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 AQpQrQr	OAr2q'1b"b(Cc3PRTV	RRIz2r2r22r

%%'' / / / /	 " # # # # # # r"rc{{%%''3q661111 quu!!VQBO%<%<<<<<q"vv  ""fa"rcB3-?&@&@@@@@@#A A A A A A A A A A A A A A A A A As   D
D''D+.D+c                  T   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 ]O}t          d          D ]=} | |           ||           z  ||f         ||||	g|         g d|         z  k    sJ >P ||           ||           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    sJ 	 d d d            d S # 1 swxY w Y   d S )NrA   r`   r   )r   rc   ra   rg   r?   )r.   r  r  r  r   ) r@   rB   r  r  rC   r:   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   r}   r   contrexps                                    r6   test_valued_tensor_contractionr  a  s    		!	! 5 5QpQrQr	OAr2q'1b"b(Cc3PRTV	RRIz2r2r2"2#$Qq(827(BR1W(LLLLL"2#$Q...."2#$"
2222"2#$a"fq2v(=====q 	Y 	YA1XX Y Y"2#1-!RR1CoooVWFX1XXXXXXY #C4 &16'B!G*;bAg*Ea*OOOOO1R5522b2#;;&quuzQr"rc{{1$$$$}!!!!q 	5 	5AA;1b"b/!"444444	5)5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5s   H HH!$H!c                     t                      5  t                      \  } }}}}}}}}}	}
}}}}}}}}}}}}}}}}}} |||           j        dk    sJ  |||           j        dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   rA   r.   r  r  r  s                                r6   #test_valued_tensor_self_contractionr  y  s   		!	! % %QpQrQr	OAr2q'1b"b(Cc3PRTV	RRIz2r2r2r"rc{{1$$$$r"rc{{1$$$$$% % % % % % % % % % % % % % % % % %s   AA::A>A>c                     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            d S # 1 swxY w Y   d S )NrA   r?   )r.   r  r   r  s                                r6   test_valued_tensor_powr    su   		!	! ! !QpQrQr	OAr2q'1b"b(Cc3PRTV	RRIz2r2r2!t1ur1u}r1u,r1u44444!ttQTEBEMBE1BE9::::::qvvqyAqD    qvvqyAqD     ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !s   B*CCCc                     t                      5  t                      \  } }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}t          d          \  }}}| | |          z   ||          z  } | d         ||z  k    sJ | d         d|	z  |z  k    sJ | | |          z   ||           |z  z  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                                        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            d S # 1 swxY w Y   d S )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   		!	! %_ %_QpQrQr	OAr2q'1b"b(Cc3PRTV	RRIz2r2r2V__
B !!B%%Z!!B%%'
$27****$1r6B;....AAbEEzaaffrk28
  ""rc"fRi!B$r'"*&<qtBwrz&IIIII1R5511R55={a{b1f$$$${b1f$$$${b1f$$$$1R5511R55={a{b1f$$$${b1f$$$${b1f$$$$11bS66!'B32:"+<r+AAAAA11R552aaee8#"$"RRBZZ'	qyE!!!!RC"%z  ""bd2g2b&82b58&CbeBh&NQTUWQW&WZ[\^Z^&^^^^^^K%_ %_ %_ %_ %_ %_ %_ %_ %_ %_ %_ %_ %_ %_ %_ %_ %_ %_s   I%JJ	J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            d S # 1 swxY w Y   d S )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+   		!	!  QpQrQr	OAr2q'1b"b(Cc3PRTV	RRIz2r2r2 "aaff1r1ur1u 4r1u <=zQ 1r1ur1u$r1u,qquuQQsVV|;zQ 2qq"vv1$r1u,r1u4r1u<zQ #qq#ww1a4'!BE'1Ab!eG;aAgE"aaQSPSffTzQ%                 s   EE##E'*E'c                     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   k    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   k    sJ | |"||           z  j        }&|&                                ||z  ||!z  z   k    sJ 	 d d d            d S # 1 swxY w Y   d S )
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   		!	! , ,QpQrQr	OAr2q'1b"b(Cc3PRTV	RRIz2r2r2 --!f#FF33
BYE:::
1avhqj))q6Aq6"vhqj))q6Aq6"bRjj22rcB3<<'x1a4!Q$;A-144444x1a4!A#a%<!Q$.....r"bzz""bS2#,,&yAqD1Q3J1,q!t33333yAqD1Q3q5L1a4/////""R"++o#yy{{a!ea!em+++++3, , , , , , , , , , , , , , , , , ,s   F!F>>GGc                     t                      5  t                      \  } }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}t          |          } ||           ||           z  j         ||                                          j        |z   ||                                          z  d         k    sJ 	 d d d            d S # 1 swxY w Y   d S )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    sG   		!	! f fQpQrQr	OAr2q'1b"b(Cc3PRTV	RRIz2r2r2$$2rr2#ww$B):):)<)<)>)H22b66K\K\K^K^)^`d(eeeeeef f f f f f f f f f f f f f f f f fs   B&CC
Cc                     t                      5  t                      \  } }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}|dz   |dz
  ||	g}t          |          | _        t	          d          D ]$} | |          j        |         ||         k    sJ %t          d          \  }} }!t          ||| |!g           | |           _        t	          d          D ]K} | |          j        |         || |  |! g|         k    sJ | j        |         || |  |! g|         k    sJ Ld t	          d          D             }"|" || |           _        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    s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    sJ ό	 d d d            d S # 1 swxY w Y   d S )Nr?   r   zqx qy qzc                 F    g | ]fd t          d          D             S )c                 8    g | ]}|d z  d |dz  z  z
  dz   z  S )r`   rA   r  r   )r{  r}   r   s     r6   r  z?test_valued_assign_numpy_ndarray.<locals>.<listcomp>.<listcomp>  s2    BBBAQT!AqD&[1Q3/BBBr8   r   r  )r{  r   s    @r6   r  z4test_valued_assign_numpy_ndarray.<locals>.<listcomp>  s4    UUUqBBBBqBBBUUUr8   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qzrandom_4x4_datar   s$                                       r6    test_valued_assign_numpy_ndarrayr    s   		!	! "Y "YQpQrQr	OAr2q'1b"b(Cc3PRTV	RRIz2r2r2 sBqD"b!sq 	/ 	/Aquuz!}A.....Z((
BQBO,,2#q 	6 	6A1R55:a=QbS2#$6q$999996!9RC"rc 21 555555 VUERSHHUUU+B3q 	H 	HA1XX H Hr"bzzq!t,0B10EQ~rrTU0V^_XfXZXZef0gggggr2#r{{'1-1CA1FaUV1WWWWWr"rc{{'1-1CA1FaUV1WWWWWr2#s||(A./!2DQ2GGGGGG	H +B3q 	Y 	YA1XX Y Yr"bzzq!t,0B10EQ~rrTU0VVVVVr2#r{{'1-1CA1FFFFFr"rc{{'1-1CA1FaUV1W_`YgY[Y[fg1hhhhhr2#s||(A./!2DQ2GqVW2XXXXXX	Y	Y;"Y "Y "Y "Y "Y "Y "Y "Y "Y "Y "Y "Y "Y "Y "Y "Y "Y "Ys   L/MMMc                  `   t                      5  t                      \  } }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}g dg dg dg dg}||_        t          |          }|j        }|                                } t          d          }!|                                }"t          d          D ]f}#t          d          D ]R}$ |||          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    sJ Th	 d d d            d S # 1 swxY w Y   d S )N)rA   rA   rA   r?   )rA   r`   r?   r   )rA   r?   rA   r`   )r?   r   r`   rA   r   )	r.   r  r  r   r   invr   get_kronecker_deltar  )%r@   rB   r  r  rC   r:   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   mdr  r   minvmeyeKDr}   r   s%                                        r6   test_valued_metric_inverser    s   		!	! 7 7QpQrQr	OAr2q'1b"b(Cc3PRTV	RRIz2r2r2
 llLLL,,,E2JJuuww1vv ((**q 	7 	7A1XX 
7 
7vb"~~*1a40AadG;;;;vrcB3'',QT2d1a4j@@@@vb2#+AqD1T!Q$Z????vrc2+AqD1T!Q$Z????vb"~~ad+qAw6666vrcB3''1-ad;;;;vb2#q!t,QT
::::vrc2q!t,QT
::::r"rc{{1a4(DAJ66666
7	7%7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7s   HH##H'*H'c                     t                      5  t                      \  } }}}}}}}}}	}
}}}}}}}}}}}}}}}}}} | |           | |          z  }|                                }| | |           | |          z  k    sJ t          d          D ],}t          d          D ]} ||| f         || |f         k    sJ - ||           | |          z   ||          z  }!|!                                }"t          d          D ]@}t          d          D ].} t          d          D ]}#|!|| |#f         |"| ||#f         k    sJ /A	 d d d            d S # 1 swxY w Y   d S )Nr   )r.   r  r$   r  )$r@   rB   r  r  rC   r:   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r   e1e2r}   r   o1o2r   s$                                       r6   test_valued_canon_bp_swapaxesr  8  s   		!	! 6 6QpQrQr	OAr2q'1b"b(Cc3PRTV	RRIz2r2r2QrUU11R55[[[]]QQrUU11R55[    q 	, 	,A1XX , ,!Q$x2ad8+++++,QrUU11R55[2[[]]q 	6 	6A1XX 6 6q 6 6AaAg;"Q1W+5555566	66 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6s   D8EEEc                  6  	
 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            d S # 1 swxY w Y   d S )NITr`   r   i0:4r?   r?   r?   r@   rA   ra   )r?   rA   r`   )r   r  r8  )r  r  r  c                     || _         d S r1   )r  )r@   dats     r6   assignz:test_valued_components_with_wrong_symmetry.<locals>.assign\  s    AFFFr8   c                                  S r1   r   )A_symr
  	mat_nosyms   r6   r   z<test_valued_components_with_wrong_symmetry.<locals>.<lambda>`  s    66%#;#; r8   c                                  S r1   r   )r  r
  mat_antisyms   r6   r   z<test_valued_components_with_wrong_symmetry.<locals>.<lambda>a  s    66%#=#= r8   c                                  S r1   r   )	A_antisymr
  mat_syms   r6   r   z<test_valued_components_with_wrong_symmetry.<locals>.<lambda>d  s    66)W#=#= r8   c                                  S r1   r   )r  r
  r  s   r6   r   z<test_valued_components_with_wrong_symmetry.<locals>.<lambda>e  s    66)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  s%   		!	! ; ;Tq)))'33BB))S2$q&))3Q(Fq(I(IJJsRDFN,J2,N,NOO	GGGGGGGGG455	ik))+- "	 	 	 
z;;;;;;<<<z======>>>$	z======>>>z??????@@@iiIII6
#))YYY			:	9; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;s   E,FFFc                     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            d S # 1 swxY w Y   d S )Nr:   r?   r}   rA   r[   r=   r   rc   \mu, \nu, \alpha, \betaur   ri   ra   )r.   r   r  r   r#   r   rF   r   )	r:   rt   ru   rq   rr   r  ri   mul_1mul_2s	            r6   test_issue_10972_TensMul_datar  j  s   		!	! 8 8!)Q3TUVVVAw,-J-46 6Bt sWI&&QsWIaK)G)K)KLLa&q' "eqq%yy(11R;;6D5A
eaVaV$4555555"eqqT{{*QQvYY6D5A
ej(((($EJ66666)8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8s   D0EEE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         ||           ||          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            d S # 1 swxY w Y   d S )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 8!)Q3TUVVV$}},-J-46 6Bt sWI&&sWIaK)G)K)KLL!()B!C!CBBBBOS!R"S2#q"S"rc1	 Ab"II2#22$|||q"r'27;b"'27;b"r'27;= > >> > > > 22((**/AAbEEAAbEEM3GGGGG2u$+aaii7!!TE((BH1R5511R55=&&' ' ' ' 5"$+aaii7!!TE((BH22$% % % % sWIaK)G)J)JKK quuqquu}qqRyy(2#b"%
eLLL1111112#b%(44D>>9
ek!Q222222R$$r4..011eVdU3C3CC
1aaa4 E,,,$7$77777
111a4 E,,,$7$777772#r2&
eLLL111111 Fq8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8s   NN88N<?N<c                  8   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            d S # 1 swxY w Y   d S )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 4!)Q3TUVVVAw#L'::
1a11B sWIaK)G)J)JKKsWI&&Q!Q!!Ar(("QQsVV+aa1gg!n<
ek!Q222222!Q!!Ar(("QQsVV+aa1gg!n<
ek!Q222222 qttaadd{QQq!WW$1"Q

"
eQFmm++++1"Q

"TT!QZZ/
ek!Q222222274 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4s   G2HHH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 |
	                                ||gk    sJ |

                                ||gk    sJ |	                                || gk    sJ |
                                g k    sJ |	                                ||||gk    sJ |
                                ||||gk    sJ |	                                |||| gk    sJ |
                                ||gk    sJ |	                                ||| | gk    sJ |
                                g k    sJ d S )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_iterationr9    s   	c222A'22BBB	q	!	!B	q	!	!B3AA3A >q A ABBA	
2bB	
2rcB	
2b!!Br((	B	
2b!!Bs))	B	
2b!!RC**	B	bB())r6lRL-IIIII)**b0000#$$"fF|(DDDDD())R////)**F|rc6].KKKKK#$$"fV}(EEEEE())r9oIQSU^P_bdfoap-qqqqq)**b0000#$$"i2y/BPY?]_aj\k(lllll())r9oI-OOOOO)**I"i@P.QQQQQ#$$"i2y/BPY?^`]`bk\l(mmmmm())R////)**IYSURUW`Qaegdgircs.ttttt#$$"i2y/RCQZK[_a^acl]m(nnnnn())r<.@2|BTWY[dVehjlugv-wwwww)**L/ARCCV.W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4>>BRC00000  RH,,,,>>BbS1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   k    s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   k    sJ |	                                 ||            ||          z   ||          z   ||            ||          z   ||          z   ||          z   ||           z  z   k    sJ t          |          d	k    sJ t          |                                          d
k    sJ  ||           d ||          z   ||          z   ||           ||          z  z   z  }|	                                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          |	                                          dk    sJ t          t          d          t                    sJ t          d                                          }|dk    sJ t          |t                     sJ  ||           ||           z   ||           ||           z  z   } ||           |z  } ||          |z  }|	                                 ||           ||           z   ||          z   ||           z   ||           ||           z   ||          z   ||           z  z   k    sJ  ||           ||            ||            ||           ||           z   ||           ||           z  z   z  z   z  }|	                                 ||           ||           z   ||           ||           z   ||          z   ||           z  z    ||           ||           z   ||          z   ||           z  z   k    sJ  ||            ||           ||           z   ||           ||           z  z   z  }|	                                 ||            ||          z   ||           z   ||            ||          z   ||           z  z   k    sJ 	 d |	|
          z    ||          z  }|	                                }t          |t                    sJ |j
        d ||          z   |	|
           ||          z  fk    sJ d |	|
          z    ||          z   ||          z   }|	                                }t          |t                    sJ |j
        d ||          z   |	|
           ||          z   ||          fk    sJ d S )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_expandrA    s   AWa((GAq!
eQ

Ci!--JAq!QAsAc!!A$$!oow/////fQQqTT!!A$$Y''111111Q44A2qq!uuD93C411cT77!23333311Q441":!QQrUU
*****;;==AAaDDA2J1aaee33333t99444441Q44!9qqttAAaDDy Dt99/////1aR55!!A$$qqtt)aadd11Q44i!nQQrUU223D11aR551:aadd?QQrUU11Q44Z!_QQqTT%9!!QB%%%??????;;==AAqbEE!!A$$JqqttOaaeeAAaDDj1oaadd.B11aR55.HHHHHHt99LLLLLt}}#]]]]]1aR55!AAaDD&1+!QQqTT	)*D;;==AaaeeGAAaDDL1-1"aadd
11Q44?????QQqTT6!!QB%%<D:????1Q441aaddQQqTT11Q44!!A$$;//0Dt99?????t{{}}!SSSSSgajj'*****			B7777b'"""""	
1aaeeaadd11aR55j	 B	
A2rB	
1bB99;;!!A$$qq!uu*QQqTT/!!QB%%/!!A$$qq!uu*QQqTT/!!QB%%2GGGGGG1Q44A2A2!QQrUU
QQqTT!!QB%%Z 7889D;;==AAaDDA2J1aaeeAAaDDA2)>>1aaeeAAaDDQRQRTUSUQVQVAVVVVVV1aR55!!A$$qq!uu*qqttAAqbEEz)*D;;==AAqbEE!!A$$Jqq!uu,qq!uuQQqTTz!!QB%%/??????
 !Haadd?D++--Kk7+++++!!A$$!QQqTT	22222!Haadd?QQqTT!D++--Kk7+++++!!A$$!QQqTT	11Q44888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           d S )Nr;   r  r@   zx yr   c                         z             S r1   r   )r@   r   ys   r6   r   z6test_tensor_alternative_construction.<locals>.<lambda>^  s    aa!ff r8   c                         dz            S r   r   )r@   r   s   r6   r   z6test_tensor_alternative_construction.<locals>.<lambda>_  s    qq1vv r8   )r   r   r#   r   r   r,   	TypeErrorr   )r;   r   r   r   r   r@   r   rD  s        @@@r6   $test_tensor_alternative_constructionrG  V  s    A#FA..NBB3A5>>DAq1R55AAfTllOO####1bS66QQt}%%%%%%
9nnnnnn%%%
:~~~~~&&&&&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                              gt          d
dgddgg          fk    sJ                               t          d
dgddgg          k    sJ                     g          t          d
dgddgg          k    sJ                      g          t          d
dgdd	gg          k    sJ                     t          d          t          d           g          t          d
dgdd	gg          k    sJ                      g          t          d
dgdd	gg          k    sJ                       g          t          d
dgddgg          k    sJ                     g          t          d
dgddgg          k    sJ                      g          t          d
dgdd	gg          k    sJ                      g          t          d
dgdd	gg          k    sJ                       g          t          d
dgddgg          k    sJ                               t          d
dgddgg          k    sJ  |           |          d
dgdd	gg| t	          d
d          i                              gt          d
dgdd	gg          fk    sJ                               t          d
dgdd	gg          k    sJ                     g          t          d
dgdd	gg          k    sJ                      g          t          d
dgddgg          k    sJ                      g          t          d
dgddgg          k    sJ                       g          t          d
dgdd	gg          k    sJ                     g          t          d
dgdd	gg          k    sJ                      g          t          d
dgddgg          k    sJ                      g          t          d
dgddgg          k    sJ                       g          t          d
dgdd	gg          k    sJ  ||           |          d
dgdd	gg| t	          d
d          i                              |gt          d
dgdd	gg          fk    sJ  |           |           z   |          d
dg| t	          d
d          i                              g dfk    sJ                     g           dk    sJ  |	 |           |           z   ||           z   |          d
dg |	||          t          d
gdz            	                    dddd          | t	          d
d          i                              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                              |gt          dd	gddggg          fk    sJ                     |g          t          dd	gddggg          k    sJ                     |g          t          ddgd	dggg          k    sJ  ||           ||           z  dz    ||          ddg| t	          d
d
          i                    g           dk    sJ  |           |          z    |          d
dgdd	ggi                              gt          ddgddgg          fk    sJ                     g          t          ddgddgg          k    sJ                     g          t          ddgddgg          k    sJ  |           |          z
   |          d
dgdd	ggi                    g          t          ddgd
dgg          k    sJ                     g          t          dd
gddgg          k    sJ  |	||            |	||           d
dgdd	ggi                              gt          d
dgdd	gg          fk    sJ  |            |           di                              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                              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%           d S )&Nr;   L2rA   r   zi j k lr;  Hr   r   r?   r`   rc   ra   r   r}   r   rg      c                  .                                    S r1   _extract_datar   repls   r6   r   z)test_tensor_replacement.<locals>.<lambda>      t11$77 r8   c                  .                                    S r1   rM  rO  s   r6   r   z)test_tensor_replacement.<locals>.<lambda>  rQ  r8   c                  .                                    S r1   rM  rO  s   r6   r   z)test_tensor_replacement.<locals>.<lambda>  rQ  r8   r8  r  d   q   r  r   *   r  r  r  r  c                  2                          g          S r1   replace_with_arrays)r   r   rP  s   r6   r   z)test_tensor_replacement.<locals>.<lambda>      t77qcBB r8   c                  2                          g          S r1   rX  )r   r}   rP  s   r6   r   z)test_tensor_replacement.<locals>.<lambda>  rZ  r8   zu1:4Uc                  6                           g          S r1   rX  )r   rP  u1u2s   r6   r   z)test_tensor_replacement.<locals>.<lambda>  s    t77rB3iHH r8   )r   r   r    r#   r/   rN  r   rY  r   reshaper,   r   )r;   rI  r   r(  r@   rB   rC   r   rJ  r   u3r\  r   r}   r   rP  r^  r_  s               @@@@@@r6   test_tensor_replacementrb  b  sW   A	1	%	%	%B	1--JAq!Qi!--JAq!Q3AA3AA1Q77DAaGGqeQqE]AtAr{{3Dd##A2wB6H0I0I'JJJJJ##D))UQGaW3E-F-FFFFF##D1a&11UQGaW;M5N5NNNNN##D1qb'22eaVaV<L6M6MMMMM##D6#;;*EFF%RSUVQWZ[]^Y_P`JaJaaaaa##DA2q'22eaWr1g<N6O6OOOOO##DA2r(33uq!fr2h=O7P7PPPPP##D1a&11UQFRH;M5N5NNNNN##D1qb'22eaWr1g<N6O6OOOOO##DA2q'22eaVaV<L6M6MMMMM##DA2r(33uq"g2w=O7P7PPPPP##D))UQGaW3E-F-FFFFF1Qq66DAaFFaUAa5M1d1bkk2Dd##A1v1v6F0G0G'HHHHH##D))UQFQF3C-D-DDDDD##D1a&11UQFQF;K5L5LLLLL##D1qb'22eaWq"g<N6O6OOOOO##DA2q'22eaVb"X<N6O6OOOOO##DA2r(33uq"gAw=O7P7PPPPP##D1a&11UQFQF;K5L5LLLLL##D1qb'22eaWq"g<N6O6OOOOO##DA2q'22eaVb"X<N6O6OOOOO##DA2r(33uq"gAw=O7P7PPPPP 1Qq66DAaFFaUAa5M1d1bkk2Dd##A1v1v6F0G0G'HHHHH1Q441":DAaDD1Q%DBKK(Dd##Bx////##D"--33331QA2q>>!!QB%%1"%DAaDD1a&!!Aa!**eQCHoo&=&=a!A&F&F4PQSU;;WDd#####1Q77DAaFFaUAa5M1d1bkk2D
:777778881Q44DAaDD1a&>D
:777778881Q44DAaDDAq6Aq6"#D
:77777888 1Q44!Q<!!A$$qqAww,&DAaDD1#qqttaS!!Aq''QFAa5>1T!AYYGDd##Aq	5Aq6Aq6:J9K3L3L'MMMMM##D1a)44AA?O>P8Q8QQQQQ##D1a)44AA?O>P8Q8QQQQQ1Q441":DAaDD1a&!T!QZZ(D##D"--4444 1Q77QQq!WWDAaGGq!fq!f%&Dd##A1v1v6F0G0G'HHHHH##D1a&11UQFQF;K5L5LLLLL##D1a&11UQFQF;K5L5LLLLL 1Q77QQq!WWDAaGGq!fq!f%&D##D1a&11UQGaV;L5M5MMMMM##D1a&11UQFRG;L5M5MMMMM 1Q1qb>>DAaArNNaVaV,-Dd##A1v1v6F0G0G'HHHHH1Q88DAa!HHb>Dd##Bx////1Q88D	1"qb		5,,,}}}mmmTUU	5,,,}}}mmmLMMD d##Aw.... 1Q44!9DAaDD1a&>D
:BBBBBBCCC 1Q44DAaDDAq6(D
:BBBBBBCCC  ++JBB3A1R55B3<DAbEEQC5>D
:HHHHHHHIIIIIr8   c                  0   t          dd          } t          d| gdz            }t          d| g          }t          d          \  }}}}t          d          \  }} |||||          }	|	                    t                    t	          t          d          ||||          k    sJ  ||| ||          }
|
                    t                    t          t	          t          d          ||||          |dd	f          k    sJ |
 |||||           z   }|                    t                    t          t	          t          d          ||||          |dd	f          t          t	          t          d          ||||          |dd	f          z   k    sJ  ||           |	z  }|                    t                    t          t	          t          d          |          t	          t          d          ||||          z  |dd	f          k    sJ  ||           |
z  }|                    t                    t          t	          t          d          |          t	          t          d          ||||          z  |dd	f|dd	f          k    sJ d S )
Nr;   r   r   r@   rB   r  zL_0:2r   r`   )r   r#   r   rewriter   r   r   )r;   r@   rB   r   r   r   r   r   r.  rn   ro   rp   b1b2s                 r6   test_rewrite_tensor_to_Indexedrg    s   ###A3AA3AV__NBBwHC	
2r2r		B::g'&++r2r2"F"FFFFF	
2sB		B::g#gfSkk3R&L&LsTUWXk"Z"ZZZZZ	aaBRC  	 B::gGF3KKc2r22S!QK@@GF3KKRc22S!QK@@	AA A A A 
B3B::g#gfSkk3&?&?sUXZ\^`bd@e@e&ehkmnpqgr"s"sssss	
B3B::g#gfSkk3&?&?sUXZ]_acf@g@g&gjmoprsitwz|}  @A  wB  #C  #C  C  C  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          }|                    |          ||ik    sJ |                    |           || ik    sJ |                    |           dk    sJ |                    |          ||ik    sJ  |	|| |                               |	|||                    dk    sJ  |	|| |                               |	|||                    ||| |ik    sJ  |	|| |          	                     |	|||          d          dk    sJ  |                                 |
|           ||          z             |             |
|           ||          z  ik    sJ  ||                               |
|                    || ||          j
        t           |
|                    ik    sJ  |||                               |
|           ||          z            || |||          j
        t           |
|           ||          z            ik    sJ  |||                               |
|           ||          z             |||          j
        t           |
|           ||          z            ik    sJ  |||                               |||                     |||          j
        t           |||                    ik    sJ  |||                               |||                    dk    sJ  |
|           |
|          z  	                     |||          d          dk    sJ  |||                               |||                    i k    sJ  |	|||                               |	|||                    J  |	|||                               |	|||                    i k    sJ dS )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_indicesr\  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@   rk  r\  s                  r6   test_tensor_matchingrq    s    
1	%	%	%BWb))GAq!G?bX\]]]EAaR  AHE
*C3A3A3R!!Asd333AsA99Q<<Aa5    99aR==QrF""""99aR==D    99Q<<Aa5    3q!A;;Aa

,,44443q!A;;Aa

,,Ar1====3q!A;;ss1Qqzz1--2222133;;!QQqTT	##QQqTT!!A$$Y'777771Q44<<1Aa1M!!A$$4G4G#HHHHH1Qq66>>11Q44!9&&1Q!A]11Q44PQPQRSPTPT9=U=U*VVVVV1Qq66>>11Q44!9&&11Qq66;aadd11Q44i8P8P*QQQQQ1Qq66>>11Qq66##!A]11Q775K5K'LLLLL1Qq66>>11Qq66##t++++QqTT!!A$$Y  !!Aa&&!,,1111 51::eeAajj))R////3q1::cc!Aajj))1113q1::cc!Aajj))R//////r8   c                     t          dd          } t          d|           \  }}t          d| g          }t          d| g          }t          dd	          } ||           ||          z   ||           ||          z  z                        ||           ||          z   ||           ||          z  z             i k    sJ  ||           ||          z   ||           ||          z  z                        ||           ||          z   ||           ||          z  z    ||           ||          z  z    ||           ||          z  z             J  ||           ||          z   ||           ||          z  z    ||           ||          z  z    ||           ||          z  z                        |||           ||           ||          z  z    ||           ||          z  z    |||          d ||          z   ||          z  z                                              ||           ||          z  d ||          z   ||          z  z   k    sJ d
S )zA
    Test match and replace with the pattern being a TensAdd
    r   r`   r   rW  r   r   rk  Trl  Nr   )r   r   r#   r*   rn  ro  r   )r   r   r  r   r   rk  s         r6   test_TensAdd_matchingrs    s    
1	%	%	%B%$$DAq3A3Asd333AQqTT!!A$$Y1aadd",,aadd11Q44i!!A$$qqtt).CEEKKKKQqTT!!A$$Y1aadd",,aadd11Q44i!!A$$qqtt).Caadd11Q44i.ORSRSTURVRVWXWXYZW[W[R[.[]]eeeQqTT!!A$$Y1aadd"QQqTT!!A$$Y.1aadd:DD	!A1aaddQQqTT!!A$$Y&	!A11Q44!
 
 $&&AAaDD1I!!A$$qqtt+, , , , , ,r8   c            	         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  
                     ||                    |dik    sJ | ||||          z  
                     ||||                    |dik    sJ  ||           ||           z                       ||           ||           z  d          dk    sJ  ||           ||          z   ||           z                       |||           ||           z  d          dk    sJ  ||           ||           z                       ||            ||          z  d          dk    sJ  ||           ||          z   ||           z                       ||           ||          z   ||           z  d          dk    sJ  ||           ||          z                       |             ||          z   ||          z   |             ||          z   ||          z                                             ||           ||          z  k    sJ  ||||           || | |           z                       ||||           || |	|
          z   |||	           |||
          z   |||
           |||	          z  z
                                                                             |||            |||           z   |||            |||           z  z
  k    sJ  ||||           || | |           z                       ||	||           ||	 |
|          z   |||
           |||          z   |||           |||
          z  z
                                |                                          dk    sJ  ||            ||          z   ||           z                      | |            z   ||          z   ||           z  | |            z                                             ||           k    sJ |dz   ||          z   ||           z                      | |            z   ||          z   ||           z  | |            z  |dz  z                                            |dz  k    sJ  ||           ||          z                       ||           ||          z   ||           ||          z             ||           ||          z  k    sJ  ||           ||          z   ||          z                       |||           ||          z   |||           |||          z   ||           z             ||           ||          z   ||          z   ||          z   ||           z  k    sJ t          d|           \  }}}} || |            ||          z   ||          z   ||           z  } |             ||          z   ||           z  
                    |          }||                                vsJ dS )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 fTri  r   r   rk  rl  r\  r?   rc   r8  r   rA   zR_0 R_1 R_2 R_3N)r   r   r   r   r)   r>  r?  r#   r*   r   rn  ro  r   r$   rT  values)r   r   r  r  rE  rK   ru  rG   rH   rQ   rR   ry   rk   r>  r@  r   r   rk  r\  r   D0D1D2D3r   r  s                             r6   test_TensMul_matchingr{  +  s    
1	%	%	%B";33MAq!Q	dB-RTdhiiiKAa!AaHE
*C3A3Asd333AsAsA!W!&&2q'1111##a!**_&&ss1Qqzz22r"g====QqTT!!QB%%Z!!11Q441":q11Q6666QqTT!!A$$Yqq!uu_&&!Aqq!uua88A====QqTT!!QB%%Z!!11aR551:q22a7777QqTT!!A$$Yqq!uu_&&!QQqTT	!!QB%%;;q@@@@	
1aaddAACC!HQQqTTM1133qqtt8AAaDD=99>>@@1Q44!9	 	 	 	 #a!**SS!QBr]]
",,C!AJJssA2a{{"E!AJJuuQqzz!EE!AJJuuQqzz$99	 	 dffXXZZ5A2;;uuQr{{"UU1aR[[q!%<<		= 	= 	= 	= #a!**SS!QBr]]
",,C!AJJssA2a{{"E!AJJuuQqzz!EE!AJJuuQqzz$99	 	 nU##DDFF		 	 	 	 QrUU11Q44Z1"''AACC!QQrUU):BqqssFDDIIKKqqRSQSuuTTTTT!!A$$Yqq!uu_&&1133qqttAAqbEE(92aacc6!Q$;HHMMOOSTVWSWWWWW !A$$qqtt)aadd11Q44i1aadd331Q44!9	 	 	 	 !A$$qqtt)AAaDD.""11Qq66!!A$$;!Aqq1vvaaee0CEE1Q44!9QQqTT>!!A$$qq!uu$	% 	% 	% 	%
 $$5r::NBB5"rc??11R55 2&qq"vv-D
!##aadd(11aR55.""4((AQXXZZ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                       ||           ||           ||           z  i           ||           ||          z   ||           z   ||           z  k    sJ  ||           ||          z   ||           z                       ||           ||           ||           z  i           ||           ||          z   ||           z   ||           z  k    sJ  ||           ||          z                      || ||           ||           ||           z  i           ||           ||          z   ||           z  k    sJ  ||           |||           z   ||           z                                   ||           |||           z   ||           z  k    sJ  ||           ||           z  	                     ||           ||           ||          z   ||           z             ||           ||          z   ||           z   ||           z  k    sJ dS )z;
    Test subs and xreplace in TensMul. See bug #24337
    r   r`   r   r=  r   r   r@   _0TrG   )rj  N)
r   r   r#   r   r=   r)   subsxreplacer   ro  )	r   r   r  r  r   r   r@   C0rG   s	            r6   test_TensMul_subsr  f  s:    
1	%	%	%BWb))GAq!3A3A3R!!A	R]T)2t	4	4BRt444AQqTT!!A$$Yqq!uu_##QQqTT11Q441":$67711Q44!9QQrUU?11aR55;PPPPPQqTT!!A$$Yqq!uu_''1qqttAAqbEEz(:;;qqttAAaDDyA2qqRSQSuu?TTTTTQqTT!!A$$Y!!1b!!A$$!QQrUU
";<<"aadd
11aR55@PPPPPQqTT!!Aqb''\!!QB%%&&((AAaDD1aRLA2,>>>>>QqTT!!QB%%Z!!11Q441aadd11aR55::aadd11Q44i1"oaaQRPRee>SSSSSSSr8   c                  z    t                      5  t          dgdz             d d d            d S # 1 swxY w Y   d S re  )r.   r&   r   r8   r6   test_tensorsymmetryr  y  s    		!	!  s1u                 s   044c                  t    t                      5  t          dg            d d d            d S # 1 swxY w Y   d S )Nr@   )r.   r%   r   r8   r6   test_tensorheadr  }  s    		!	!  3                 s   -11c                      t                      5  t          j        d          } t          d          }t	          |gdz  |           }t          |t                    sJ 	 d d d            d S # 1 swxY w Y   d S )NrA   r:   )r.   r   rF   r   r'   r2   )r   r:   S2s      r6   test_TensorTyper    s    		!	! * *-a00!),,	!T**"j))))))	* * * * * * * * * * * * * * * * * *s   AA,,A03A0c                  v    t                      5  t          dd           d d d            d S # 1 swxY w Y   d S )Nr:   r;   )	dummy_fmt)r.   r   r   r8   r6   test_dummy_fmtr    s    		!	! 2 2	S11112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2s   .22c            	      z   t          dd          } t          d|           }t          d| g          }t          d          \  }}}t	          |dz                      | ||          i          t                    sJ t	          |dz                       | ||           ||           z  i          t                    sJ t	          |dz                      | ||          i          t                    sJ t	          |dz                       | ||           ||           z  i          t                    sJ t	          |dz  	                    | ||                    t                    sJ t	          |dz   	                    | ||           ||           z            t                    sJ dS )	z
    Test if substituting a Tensor into a Mul or Add automatically converts it
    to TensMul or TensAdd respectively. See github issue #25051
    r   r`   r   r}   r   zx y zrA   N)
r   r   r#   r   r2   r  r   r   r~  ro  )r   r}   r   r   rD  zs         r6   test_postprocessorr    s   
 
1	%	%	%BsBA3AGEAaqsnna1Y//99999qsnna1aaee_55w?????qsjj!QQqTT++W55555qsjj!QQqTT!!QB%%Z117;;;;;qsmmAqqtt,,g66666qsmmAqqttAAqbEEz22G<<<<<<<r8   c                     t          dd          } t          d|           \  }}t          d| g          }t          d| g          }t          d ||           ||                    }|j        |j        z  |k    sJ dS )	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    s    
 
1	%	%	%B%$$DAq3A3A1aaddAAaDD!!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,  r9  rA  rG  rb  rg  rq  rs  r{  r  r  r  r  r  r  r  r   r8   r6   <module>r     s   ) ) ) ) ) ) & & & & & & & & & & & & . . . . . . . . ( ( ( ( ( ( + + + + + + F F F F F F F F F F F F F F F F F F ' ' ' ' ' ' % % % % % % 9 9 9 9 9 9 % % % % % % $ $ $ $ $ $3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 G F F F F F F F F F        K< K< K<Z(( (( ((T  L L L.Gr Gr GrT& & &l l l.$W $W $WP  ," " "$ $ $T T TA A A$M M M*U U U&6 6 62  T; T; T;l' ' '6  "] ] ](#0 #0 #0J# # #J    (   *? *? *?XAP AP APF_- _- _-D	, 	, 	,/ / /)+ )+ )+V% % %N8 8 8* * *:#5 #5 #5L7  7  7 z6R 6R 6RrJ J J0& & &A A A(5 5 50% % %! ! !&_ &_ &_R  *, , ,:f f f#Y #Y #YL7 7 7B6 6 6&; ; ;>8 8 809 9 9v4 4 4>0' 0' 0'fD9 D9 D9N	' 	' 	'xJ xJ xJvC C C2"0 "0 "0H, , ,"9  9  9 vT T T&    * * *2 2 2= = =&- - - - -r8   