o
    *Î®cN ã                   @   sô  d dl mZ d dlmZ d dlmZ d dlmZmZ d dl	m
Z
 d dlmZ d dlmZmZmZmZmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z. d dl/m0Z0m1Z1m2Z2 d dl3m4Z4 dd„ Z5dd„ Z6dd„ Z7dd„ Z8dd„ Z9dd„ Z:dd„ Z;dd„ Z<dd „ Z=d!d"„ Z>d#d$„ Z?d%d&„ Z@d'd(„ ZAd)d*„ ZBd+d,„ ZCd-d.„ ZDd/d0„ ZEd1d2„ ZFd3d4„ ZGd5d6„ ZHd7d8„ ZId9d:„ ZJd;d<„ ZKd=d>„ ZLe1d?d@„ ƒZMdAdB„ ZNdCdD„ ZOdEdF„ ZPdGdH„ ZQdIdJ„ ZRdKdL„ ZSdMdN„ ZTdOdP„ ZUdQdR„ ZVdSdT„ ZWdUdV„ ZXdWdX„ ZYdYdZ„ ZZd[d\„ Z[d]d^„ Z\d_d`„ Z]dadb„ Z^dcdd„ Z_dedf„ Z`dgdh„ Zadidj„ Zbdkdl„ Zcdmdn„ Zddodp„ Zedqdr„ Zfdsdt„ Zgdudv„ Zhdwdx„ Zidydz„ Zjd{d|„ Zkd}d~„ Zldd€„ Zmdd‚„ Zndƒd„„ Zod…d†„ Zpd‡S )ˆé    )ÚSum)Úexpand)ÚInteger)ÚMatrixÚeye)ÚIndexed)ÚPermutation)ÚSÚRationalÚSymbolÚBasicÚAdd)ÚTuple)Úsymbols)Úsqrt)ÚArray)ÚTensorIndexTypeÚtensor_indicesÚTensorSymmetryÚget_symmetric_group_sgsÚTensorIndexÚ
tensor_mulÚTensAddÚriemann_cyclic_replaceÚriemann_cyclicÚTensMulÚtensor_headsÚTensorManagerÚTensExprÚ
TensorHeadÚcanon_bpÚ
tensorheadÚtensorsymmetryÚ
TensorTypeÚsubstitute_indices)ÚraisesÚXFAILÚwarns_deprecated_sympy)Údiagc                 C   s0   t | tƒr
|  |¡S t |tƒr| | ¡S | |kS ©N)Ú
isinstancer   Úequals)Úarg1Úarg2© r.   úE/tmp/pip-target-vg8gfxp4/lib/python/sympy/tensor/tests/test_tensor.pyÚ	_is_equal   s
   



r0   c                  C   s  t ddd} td| ƒ\}}}}td| gt d¡ƒ\}}|| ƒ||ƒ }| ¡ }t|ƒdks0J ‚||ƒ||ƒ }| ¡ }||ksBJ ‚||ƒ||ƒ }	|	 ¡ }t|ƒdksVJ ‚td	| gd
 t d
¡ƒ}||| ƒ|||ƒ }| ¡ }t|ƒdksyJ ‚td| gt d¡ƒ\}}
||| ƒ||ƒ |
| ƒ }| ¡ }t|ƒdks J ‚td	| gd
 t d
¡ƒ}||| ƒ||ƒ |
| ƒ }| ¡ }t|ƒdksÇJ ‚td| gd
 t d
¡ƒ}||| ƒ|| |ƒ }| ¡ }t|ƒdksëJ ‚|| |ƒ|| |ƒ }| ¡ }t|ƒdksJ ‚td| gd
 t d
¡ƒ}
|||ƒ|| | ƒ |
| | ƒ }| ¡ }t|ƒdks0J ‚td	| gd
 t d
¡ƒ}|||ƒ|| | ƒ |
| | ƒ }| ¡ }t|ƒdks\J ‚td| gd
 t d
¡ƒ}
|||ƒ|| | ƒ |
| | ƒ }| ¡ }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)r1   ÚaÚbÚd0Úd1r7   r9   ÚtÚtcÚt1r:   r.   r.   r/   Útest_canonicalize_no_slot_sym   sV   &&&rE   c                  C   sb  t ddd} td| ƒ\}}}}td| gt d¡ƒ}||ƒ||ƒ ||ƒ }| ¡ }t|ƒdks1J ‚td| gt d¡dƒ}||ƒ||ƒ ||ƒ }| ¡ }t|ƒdksTJ ‚td| gd	 t d	¡ƒ}|||ƒ|||ƒ }| ¡ }t|ƒd
ksvJ ‚td| gd	 t d	¡dƒ}|||ƒ|||ƒ }| ¡ }t|ƒdks™J ‚|||ƒ|||ƒ }| ¡ }t|ƒd
ks¯J ‚d S )Nr1   r2   r3   ú
a, b, c, dr7   r6   zA(a)*A(b)*A(c)z-A(a)*A(b)*A(c)r8   zA(a, c)*A(b, d)z-A(a, c)*A(b, d))r   r   r   r   r;   r    r<   r=   )r1   r>   r?   ÚcÚdr7   rB   rC   r.   r.   r/   Útest_canonicalize_no_dummiesj   s*   rI   c                  C   s^   t dƒ} td| | gƒ}td| | gt d¡ƒ}||ksJ ‚td| | gt d¡ƒ}||ks-J ‚d S )Nr1   r7   r8   )r   r   r   r;   r=   )r2   ÚA1ÚA2ÚA3r.   r.   r/   Ú-test_tensorhead_construction_without_symmetry”   s   rM   c                  C   sü   t dddd} td| ƒ\}}}}td| gd t d¡ƒ}||| ƒ||| ƒ }| ¡ }t|ƒdks4J ‚||| ƒ||| ƒ ||| ƒ ||| ƒ }| ¡ }t|ƒd	ksXJ ‚||| ƒ||| ƒ ||| ƒ ||| ƒ }| ¡ }t|ƒd
ks|J ‚d S )Nr1   r2   r   ©r4   Úmetric_symmetryzd:4r7   r8   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   r;   r    r<   )r1   r@   rA   Úd2Úd3r7   rB   rC   r.   r.   r/   Útest_no_metric_symmetryœ   s   00rR   c                
   C   s4  t ddd} td| ƒ\
}}}}}}}}}	}
td| gt d¡ƒ}|| ƒ||ƒ }| ¡ }t|ƒdks4J ‚|| ƒ|| ƒ ||	 ƒ ||	ƒ ||ƒ ||ƒ }| ¡ }t|ƒdks[J ‚td| gt d¡dƒ}|| ƒ|| ƒ ||	 ƒ ||	ƒ ||ƒ ||ƒ }| ¡ }|d	ks‹J ‚td| gd
 t d
¡ƒ}|||ƒ||| ƒ ||| ƒ }| ¡ }t|ƒdks´J ‚td| gd
 t d
¡ƒ}|||ƒ||| ƒ ||| ƒ }| ¡ }t|ƒdksÝJ ‚td| gd t d¡ƒ}||||ƒ||| | ƒ }| ¡ }t|ƒdksJ ‚||
||	ƒ||| |	 ƒ |||
 |ƒ |||| ƒ }| ¡ }t|ƒdks-J ‚td| gd t d¡ƒ}td| gd
 t d¡ƒ}||||	ƒ||	 |
 | ƒ || |
ƒ }| ¡ }|d	kseJ ‚td| gd t d¡dƒ}td| gd
 t d¡ƒ}||||	ƒ||	 |
 | ƒ || |
ƒ }| ¡ }t|ƒdks J ‚t dddd}td|ƒ\
}}}}}}}}}	}
td|gd t d¡dƒ}td|gd
 t d¡ƒ}||||	ƒ||	 |
 | ƒ || |
ƒ }| ¡ }t|ƒdksñJ ‚t dd	dd}td|ƒ\
}}}}}}}}}	}
td|gd t d¡dƒ}td|gd
 t d¡ƒ}||||	ƒ||	 |
 | ƒ || |
ƒ }| ¡ }t|ƒdksBJ ‚td| ƒ\}}}}}}td| gt d¡d
ƒ}td| gd
 t d¡d
ƒ}td| gd t d¡d
ƒ}|| | ƒ||ƒ ||||ƒ }| ¡ }t|ƒdksJ ‚|||ƒ|||ƒ || ƒ ||| | ƒ }| ¡ }t|ƒd ks´J ‚t d!d"d}td#|ƒ\}}}}}}td$| ƒ\}}td%|gd t dd¡ƒ}td| |gt d
¡ƒ}||| | ƒ|| | | ƒ || |ƒ || |ƒ |||ƒ |||ƒ }| ¡ }t|ƒd&ksJ ‚d S )'Nr1   r2   r3   za,a0,a1,a2,a3,b,d0,d1,d2,d3r7   r6   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   r8   z!A(a, L_0)*A(b, L_1)*A(-L_0, -L_1)r9   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	   éÿÿÿÿrN   z2-A(S_0, S_1, S_2)*A(-S_0, -S_1, S_3)*B(-S_2, -S_3)ÚMatÚM)rO   r4   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ÚGammaéýÿÿÿz4-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   r;   r    r<   r=   Údirect_product) r1   r>   Úa0Úa1Úa2Úa3r?   r@   rA   rP   rQ   r7   rB   rC   r9   rU   rW   ÚalphaÚbetaÚgammaÚmuÚnuÚrhorY   ÚGamma2ÚGamma3r[   rG   rH   ÚeÚffr^   r.   r.   r/   Útest_canonicalize1³   s    ÿ66""8**ÿ*ÿ*ÿ
ÿ
ÿ
ÿ".Nrn   c                  C   s6   t dƒ} td| ƒ}t|ttfƒrJ ‚t|tƒsJ ‚d S )Nr7   Úi)r   r   r*   ÚtupleÚlistr   )r7   ro   r.   r.   r/   Ú"test_bug_correction_tensor_indices=  s   
rr   c                  C   sö   t ddd} td| ƒ\}}}}}}}}}	}
}}td| gd t ¡ ƒ}|||| | ƒ}| ¡ }t|ƒdks7J ‚|| || |ƒ||||| ƒ || | |	 |
 ƒ || | | | ƒ ||||| ƒ ||	|
||ƒ }| ¡ }t|ƒdksyJ ‚d S )	Nr1   r2   r3   zd0:12ÚRé   z-R(L_0, L_1, -L_0, -L_1)z“R(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    r<   )r1   r@   rA   rP   rQ   Úd4Úd5Úd6Úd7Úd8Úd9Úd10Úd11rs   rB   rC   r.   r.   r/   Útest_riemann_invariantsF  s    ÿ6	ÿÿÿr~   c                  C   s¨  t ddd} td| ƒ\}}}}}}}td| ƒ\}}	}
}}}td| ƒ\}}td| gd t ¡ ƒ}||||| ƒ}| ¡ }|d	ksAJ ‚||||| ƒ}| ¡ }t|ƒd
ksUJ ‚||| || ƒ|||| |ƒ }| ¡ }t|ƒdksrJ ‚td| gd t d¡ƒ}|||| |ƒ|||||ƒ || | ƒ || | ƒ || | ƒ }| ¡ }t|ƒdks®J ‚||||
|ƒ||| |	|ƒ |||| | ƒ }| ¡ }t|ƒdksÒJ ‚d S )Nr1   r2   r3   zd0:7za0:6úa,brs   rt   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)ÚVr8   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   ru   r    r<   r=   )r1   r@   rA   rP   rQ   rv   rw   rx   r`   ra   rb   rc   Úa4Úa5r>   r?   rs   rB   rC   r€   r.   r.   r/   Útest_riemann_products]  s*   "H0rƒ   c                  C   sP  t dƒ} tdd| dd}td|ƒ\}}}}}}}}	}
}}}}}}td|gd t d	¡ƒ}||||ƒ|| ||ƒ || |	|ƒ || | |ƒ || | |
ƒ }| ¡ }|d
ksZJ ‚||||ƒ|| ||ƒ || ||ƒ || |	|
ƒ || |	 |ƒ ||
 ||ƒ || | |ƒ || | |ƒ || | |ƒ }| ¡ }|d
ks¦J ‚d S )NÚDÚEuclr6   ÚE)rO   Údimr4   zi0:15r7   rS   rZ   r   )r   r   r   r   r   r=   r    )r„   r…   Úi0Úi1Úi2Úi3Úi4Úi5Úi6Úi7Úi8Úi9Úi10Úi11Úi12Úi13Úi14r7   rB   rD   r.   r.   r/   Útest_canonicalize2…  s&    ÿHDÿÿÿÿr—   c                  C   s    t dƒ} td| ddd}td|ƒ\}}}}}td|gt d¡dƒ\}}||ƒ||ƒ }	|	 ¡ }
|
|	ks5J ‚||ƒ||ƒ }	|	 ¡ }
|
||ƒ ||ƒ ksNJ ‚d S )	Nr„   rU   rV   r	   ©r‡   rO   r4   úa0:5úchi,psir6   )r   r   r   r   r   r;   r    )r„   rU   r`   ra   rb   rc   r   ÚchiÚpsirB   rD   r.   r.   r/   Útest_canonicalize3›  s   r   c                  C   sÈ   t dƒ} tddd| dd}td|ƒ\}}}}}t d¡}ttdƒŽ }||ks(J ‚|j}	t|	ƒd	ks3J ‚|j|j	ks;J ‚td
d
d}
td|
ƒ\}}|
j}	t
d|
gd |ƒ}t||| ƒ ¡ ƒdksbJ ‚d S )Nr„   r1   Úgr6   r2   )Úmetric_namerO   r‡   r4   zm0:5r8   zg(Lorentz,Lorentz)ÚTSpacer3   zi0 i1r7   zA(TSpace_0, -TSpace_0))r   r   r   r   r=   r   Úmetricr<   Úeps_dimr‡   r   r    )r„   r1   Úm0Úm1Úm2Úm3Úm4Úsym2Úsym2nrž   r    rˆ   r‰   r7   r.   r.   r/   Útest_TensorIndexTypeª  s    ÿ
 rª   c                     sF  t ddd‰tdˆƒ\‰‰‰} ˆjˆksJ ‚ˆˆ ksJ ‚tdˆgd t d¡ƒ\‰ }ˆ ˆˆƒ|ˆ ˆƒ }| ¡ }tdˆƒ}|ˆ|| ˆgksJJ ‚tt	‡fdd	„ƒ tt	‡ ‡‡‡fd
d	„ƒ t
dˆˆgƒ‰ ˆ ddƒˆ tdˆƒtdˆƒƒksxJ ‚ˆ ddƒˆ tdˆƒtdˆddƒksŒJ ‚ˆ dtdˆƒƒˆ tdˆƒtdˆƒƒks¡J ‚d S )Nr1   r2   r3   úa,b,c,dúA Br8   ÚL_0c                      s
   t dˆ ƒS )NrS   )r   r.   )r1   r.   r/   Ú<lambda>Æ  ó   
 ztest_indices.<locals>.<lambda>c                      s   ˆ ˆˆˆƒS r)   r.   r.   ©r7   r>   r?   rG   r.   r/   r®   Ç  ó    r7   r>   r?   z-bF©Úis_up)r   r   Útensor_index_typer   r   r=   Úget_indicesr   r%   Ú
ValueErrorr   )rH   r9   rB   Úindicesr­   r.   )r7   r1   r>   r?   rG   r/   Útest_indices¼  s*   

ÿ
ÿÿr¸   c                  C   sú   t  d¡t tdƒƒksJ ‚t  d¡t tddƒƒksJ ‚t  d¡t  d¡ks'J ‚t  d¡t  d¡ks3J ‚t  ddd¡t  d¡ksAJ ‚t tdƒƒt tdƒŽ ksOJ ‚t  d¡} | jdks[J ‚| jtddƒkseJ ‚| jtt	ddƒdd	ƒt	ddƒdd	ƒƒks{J ‚d S )
Nr8   rZ   rS   TéüÿÿÿrV   r6   r   rt   )
r   r=   r   r_   r;   ÚrankÚbaser   Ú
generatorsr   )Úsymr.   r.   r/   Útest_TensorSymmetryÑ  s,   
ÿÿÿÿÿ

ÿ
0r¾   c                     s(  t ddd} td| ƒ\‰‰‰‰| j‰td| gd t d¡ƒ\‰ }tt‡‡‡‡‡fdd„ƒ tt‡‡‡fd	d„ƒ tt‡ ‡‡‡‡‡fd
d„ƒ tt‡ ‡‡‡fdd„ƒ tt‡ ‡‡‡fdd„ƒ tƒ  tt‡ ‡‡fdd„ƒ W d   ƒ n1 sww   Y  tt	‡ ‡‡fdd„ƒ tt	‡ ‡‡fdd„ƒ d S )Nr1   r2   r3   r«   r¬   r8   c                      s   ˆˆˆƒˆˆ ˆƒ S r)   r.   r.   )r>   r?   rG   rH   rž   r.   r/   r®   é  ó    ztest_TensExpr.<locals>.<lambda>c                      s   t jˆˆ ˆƒ S r)   ©r	   ÚOner.   )r>   r?   rž   r.   r/   r®   ê  s    c                      s   ˆ ˆˆƒˆˆˆƒ ˆˆˆƒ S r)   r.   r.   ©r7   r>   r?   rG   rH   rž   r.   r/   r®   ë  s    c                      s   t jˆ ˆˆƒˆˆˆƒ  S r)   rÀ   r.   )r7   rG   rH   rž   r.   r/   r®   ì  s    c                      s   ˆ ˆˆƒˆ ˆˆƒ S r)   r.   r.   r°   r.   r/   r®   í  r¿   c                      s   ˆ ˆˆƒd S ©Nr8   r.   r.   ©r7   r>   r?   r.   r/   r®   ù  ó    c                      s   dˆ ˆˆƒ S rÃ   r.   r.   rÄ   r.   r/   r®   ú  rÅ   c                      s   t ˆ ˆˆƒƒS r)   )Úabsr.   rÄ   r.   r/   r®   û  rÅ   )
r   r   r¡   r   r   r=   r%   r¶   r'   ÚNotImplementedError)r1   r9   r.   rÂ   r/   Útest_TensExprä  s   
þrÈ   c                  C   sp   t ddd} td| gd ƒ}|jdksJ ‚|j| | gksJ ‚|jdks%J ‚|jt d¡ks/J ‚|jdks6J ‚d S )Nr1   r2   r3   r7   r8   r   )	r   r   ÚnameÚindex_typesrº   Úsymmetryr   r;   Úcomm)r1   r7   r.   r.   r/   Útest_TensorHeadý  s   rÍ   c                  C   sf  t ƒ jdksJ ‚t ƒ  ¡ dksJ ‚tddd} td| ƒ\}}}}}}}td| gd t d¡ƒ\}}	||| ƒ|	||ƒ }
t |
ƒ |
¡sEJ ‚|	||ƒ|||ƒ }||| ƒ| }t	|ƒd	ks_J ‚| 
¡ }t	|ƒd
kskJ ‚| ¡ }t	|ƒdkswJ ‚||
 }t	|ƒdksƒJ ‚| ¡ }t	|ƒdksJ ‚td| gƒ\}}}||ƒd }t	|ƒdks¦J ‚d||ƒ }t	|ƒdks´J ‚||ƒd||ƒ  }
t	|
ƒdksÆJ ‚|| ƒd|| ƒ  }t	|ƒdksÚJ ‚||ƒ}
|
| }t	|ƒdksêJ ‚| 
¡ }t	|ƒdksöJ ‚||
 }| 
¡ }t	|ƒdksJ ‚| ¡ }t	|ƒdksJ ‚||ƒd||ƒ  }
|
| }| ¡ }t	|ƒdks/J ‚||ƒd||ƒ  }
t	|
ƒdksBJ ‚|| ƒd|| ƒ  }|
| }| ¡ }|||ƒ|| ƒ d||ƒ || ƒ  ksoJ ‚||ƒ||ƒ ||ƒ||ƒ  ||ƒ||ƒ||ƒ  ||ƒd||ƒ    }| ¡ }|d||ƒ ||ƒ ||ƒ d||ƒ ||ƒ ||ƒ  ||ƒ||ƒ ||ƒ  d||ƒ ||ƒ ||ƒ  ksÔJ ‚||ƒ||ƒ d||ƒ  ||ƒ||ƒ  }
||ƒ||ƒ d||ƒ  ||ƒ||ƒ  }|
| }| ¡ }|d||ƒ ||ƒ d||ƒ ||ƒ  d||ƒ ||ƒ  d||ƒ ||ƒ  d||ƒ ||ƒ  d||ƒ ||ƒ  ksIJ ‚||ƒ||ƒ d }d| ||ƒ||ƒ ksbJ ‚||ƒ||ƒ d }d| ||ƒ||ƒ ks{J ‚tj||ƒ|| ƒ  }| ¡ }||| ƒ||ƒ  }|dksJ ‚| ¡ }| d¡s©J ‚tj||ƒ|| ƒ  }||| ƒ||ƒ   ¡  d¡sÈJ ‚|||ƒ|	||ƒ }|jdksÚJ ‚||||ƒ |	||ƒ }
|
dksíJ ‚d||| ƒ|	|| ƒ  }d||| ƒ|	|| ƒ  }
||
  
¡  d¡sJ ‚d||| ƒ }|
|ks$J ‚|t dg g g ¡ks1J ‚d S )Nr.   r   r1   r2   r3   úa,b,d0,d1,i,j,kr5   r8   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)rt   rS   r6   )r   ÚargsÚdoitr   r   r   r   r=   r+   r<   r   r    r	   rÁ   rº   r   Ú	from_data)r1   r>   r?   r@   rA   ro   ÚjÚkr7   r9   rD   Út2aÚt2Út2bÚpÚqÚrrB   Út3Útz1r.   r.   r/   Ú	test_add1  sš   2Lv,,‚&rÝ   c                  C   s¨  t ddd} td| ƒ\}}}}}}}td| gd t d¡ƒ\}}	td| gƒ\}
}}d|||ƒ }t|dƒs7J ‚t|tjƒs?J ‚|
|ƒ|||ƒksJJ ‚||| ƒ|||ƒksWJ ‚d|||ƒ|	||ƒ  dksgJ ‚d|||ƒ|	||ƒ  tju sxJ ‚d	|||ƒ|||ƒ  tju s‰J ‚|
|ƒ||ƒ |||ƒks˜J ‚|
|ƒ||ƒ |||ƒ|	||ƒ ks¬J ‚|
|ƒ|
|ƒ dks¸J ‚|
|ƒ|
|ƒ tju sÅJ ‚t|||ƒ|||ƒƒsÒJ ‚d S )
Nr1   r2   r3   rÎ   r5   r8   rÏ   r   rS   )r   r   r   r   r=   r0   r	   ÚZero)r1   r>   r?   r@   rA   ro   rÓ   rÔ   r7   r9   rØ   rÙ   rÚ   rB   r.   r.   r/   Útest_special_eq_ne\  s"    ""(rß   c            
      C   sJ  t ddd} td| ƒ\}}}}td| gd t ¡ ƒ}td| gd t d	¡ƒ}d
|||||ƒ |||||ƒ |||||ƒ }||| | | ƒ }| ¡ }|dksRJ ‚td
dƒ|||||ƒ tddƒ|||||ƒ  tddƒ|||||ƒ  }||| | | ƒ }| ¡ }|dks‹J ‚||| |ƒ|||| ƒ }	|	 ¡ }	|	dks£J ‚d S )Nr1   r2   r3   zm,n,p,qrs   rt   r7   rS   rZ   r8   r   r6   )r   r   r   r   ru   r=   r    r
   )
r1   ÚmÚnrØ   rÙ   rs   r7   rD   rÖ   rB   r.   r.   r/   Ú	test_add2w  s   .Hrâ   c               	   C   s8  t ddd} td| ƒ\}}tdƒ\}}}}td| gƒ}td| gƒ}||ƒ|| ƒ |d |d  |d  |d   }	|	j|d  |d |d |d ||ƒ|| ƒ fksVJ ‚|d |d  |d  |d  ||ƒ|| ƒ  }
|
j|d |d  |d  |d  ||ƒ || ƒ fksŽJ ‚||ƒ|| ƒ |d  |d  |d  |d  }|j|d  |d |d |d ||ƒ|| ƒ fksÃJ ‚||ƒ|| ƒ d|d   d|d   d|d   d|d   ||ƒ|| ƒ  }|jd|d  d	|d  d	|d  d	|d  ||ƒ|| ƒ ||ƒ || ƒ fksJ ‚d S )
Nr1   r2   r3   zi0:2ú
E px py pzr7   r9   r8   rT   )r   r   r   r   rÐ   )r1   rˆ   r‰   r†   ÚpxÚpyÚpzr7   r9   Úexpr1Úexpr2Úexpr3Úexpr4r.   r.   r/   Ú	test_add3ˆ  s   282>28T^rë   c                     s@  ddl m}  tddd}td|ƒ\‰‰‰}t tjg g g ¡}t|ƒdks&J ‚t	d|gd	 t
 d	¡ƒ\‰ }d
|  ˆ ˆˆƒ }t|ƒdksEJ ‚|j||gksNJ ‚|jd	ksUJ ‚|jg ks\J ‚|jd
|  kseJ ‚t|jƒˆdfˆd
fgkstJ ‚|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 ‚ˆ ˆ ˆƒ|ˆ ˆƒ ˆ ˆ |ƒ }t| ¡ Ž }||ksÜJ ‚tg Ž t tjg g g ¡ksëJ ‚t 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„ƒ d S )Nr   )Úxr1   r2   r3   r«   Ú1r¬   r8   r6   z(x + 1)*A(a, b)zA(a, b)r:   c                      s   ˆ ˆˆƒˆ ˆˆƒ S r)   r.   r.   r°   r.   r/   r®   ¿  r¿   ztest_mul.<locals>.<lambda>)Ú	sympy.abcrì   r   r   r   rÒ   r	   rÁ   r<   r   r   r=   rÊ   rº   ÚdumÚcoeffÚsortedÚfreeÚ
componentsr   Úsplitr   r%   r¶   )rì   r1   rH   rB   r9   ÚtsrD   r:   r.   r°   r/   Útest_mulœ  s@   
$
rö   c                  C   s.  t ddd} td| ƒ\}}}}}}}}td| gd t d¡ƒ\}	}
td| gƒ}||ƒ}| ||f¡}||ks8J ‚| ||f¡}|||ƒksGJ ‚| || f¡}||| ƒksXJ ‚| | |f¡}||| ƒksiJ ‚| | | f¡}|||ƒkszJ ‚|	||ƒ}| ||f|| f¡}||	|| ƒks”J ‚t|||f|| fƒ}||	|| ƒks©J ‚|	||ƒ|
| | ƒ }| ||f||f¡}|	||ƒ|
| | ƒ }||ksÑJ ‚t|||f||fƒ}||ksáJ ‚|	||ƒ|
||ƒ }| || f¡}|	|| ƒ|
|| ƒ }||ksJ ‚t||| fƒ}||ksJ ‚d S )Nr1   r2   r3   úi,j,k,l,m,n,p,qr5   r8   rØ   )r   r   r   r   r=   r   r$   )r1   ro   rÓ   rÔ   Úlrà   rá   rØ   rÙ   r7   r9   rB   rD   Út1ar.   r.   r/   Útest_substitute_indicesÁ  s@   
rú   c            	      C   s¢   t ddd} td| ƒ\}}}}td| gd t ¡ ƒ}|||||ƒ}t|ƒ}tddƒ|||||ƒ td	dƒ|||||ƒ  td
dƒ|||||ƒ  }||ksOJ ‚d S )Nr1   r2   r3   zm:4rs   rt   rV   rS   r6   r8   )r   r   r   r   ru   r   r
   )	r1   r£   r¤   r¥   r¦   rs   rB   rD   rù   r.   r.   r/   Útest_riemann_cyclic_replaceæ  s   Hrû   c                  C   sÞ  t ddd} td| ƒ\}}}}}}}}td| gd t ¡ ƒ}	|	||||ƒ|	||||ƒ |	||||ƒ |	||||ƒ |	||||ƒ |	||||ƒ }
|
|	| | | | ƒ }t|ƒ}|dks_J ‚|	||||ƒ|	| | | | ƒd|	| | | | ƒ   }
t|
ƒ}|dksˆJ ‚|	||||ƒ}
t|
ƒ}|td	d
ƒ|	||||ƒ tdd
ƒ|	||||ƒ  tdd
ƒ|	||||ƒ  ks»J ‚|	||||ƒ|	| | ||ƒ |	| | | | ƒd|	| | | | ƒ   }
t|
ƒ}|dksíJ ‚d S )Nr1   r2   r3   r÷   rs   rt   r   r8   rV   rS   r6   )r   r   r   r   ru   r   r
   )r1   ro   rÓ   rÔ   rø   rà   rá   rØ   rÙ   rs   rB   rÖ   rÛ   rD   r.   r.   r/   Útest_riemann_cyclicï  s,   (ÿÿÿ>PPrü   c                  C   sš   t ddd} td| ƒ\}}}}td| gd t ¡ ƒ}|||| |ƒ}|tdƒ }t|ƒdks0J ‚| ¡ }|jr9J ‚|d }|jsBJ ‚|d }|jsKJ ‚d S )Nr1   r2   r3   zm0:4rs   rt   z(1/4)*R(m0, L_0, -L_0, m3))	r   r   r   r   ru   r	   r<   r    Ú_is_canon_bp)r1   r£   r¤   r¥   r¦   rs   rB   rD   r.   r.   r/   Útest_div  s   

rþ   c                  C   sŒ  t dƒ} td| dd}td|ƒ\}}}}}|j}td|gƒ}|||ƒ|| ƒ }	|	 |¡}
|
||ƒks5J ‚td|gd t d¡ƒ\}}|||ƒ|| |ƒ |||ƒ }
|
 |¡}|
|ks^J ‚|||ƒ|| |ƒ || |ƒ }
|
 |¡}|| |||ƒ || |ƒ ks…J ‚|||ƒ|| | ƒ |||ƒ }
|
 |¡}||||ƒ|| |ƒ ksªJ ‚|||ƒ|| | ƒ ||| ƒ }
|
 |¡}t	||||ƒ|| | ƒ ƒsÒJ ‚|||ƒ|| | ƒ |||ƒ || | ƒ }
|
 |¡}t	||||ƒ|| | ƒ ƒsJ ‚|||ƒ|| | ƒ }
|
 |¡}t	|||| ƒƒsJ ‚|j
r$J ‚tddd	}td
|ƒ\}}|j}t	||| ƒ |¡|jƒsDJ ‚d S )Nr„   r1   r2   ©r‡   r4   ú	a,b,c,d,erØ   r5   r8   r3   r   )r   r   r   r¡   r   Úcontract_metricr   r   r=   r0   rò   r‡   )r„   r1   r>   r?   rG   rH   rl   rž   rØ   rB   rD   r7   r9   rÖ   r.   r.   r/   Útest_contract_metric1  s@   
 
"
""
$
"0
$
$r  c                  C   sš  t dƒ} td| dd}td|ƒ\}}}}}}|j}td|gƒ\}	}
|||ƒ|	|ƒ |	| ƒ }d|| | ƒ |
|ƒ |
| ƒ }|| }| |¡}|d|  |	|ƒ |	| ƒ |
|ƒ |
| ƒ ksdJ ‚|||ƒ|	|ƒ |	| ƒ }d|
| ƒ |
| ƒ }|| }| |¡}| ¡ }|d|	|ƒ |	| ƒ |
|ƒ |
| ƒ ks£J ‚d|||ƒ |	|ƒ |	| ƒ }d	|| | ƒ |
|ƒ |
| ƒ }|| }| |¡}d
|||ƒ || | ƒ |	|ƒ |	| ƒ |
|ƒ |
| ƒ }| |¡}d|||ƒ |	|ƒ |	| ƒ }|
| ƒ|
| ƒ d|| | ƒ |
|ƒ |
| ƒ  }|| }| |¡}|dd
|   |	|ƒ |	| ƒ |
|ƒ |
| ƒ ksEJ ‚|	|ƒ|	|ƒ |	|ƒ|
|ƒ  d|||ƒ |	|ƒ |	| ƒ  }|
| ƒ|
| ƒ || | ƒ|
|ƒ |
| ƒ  }|| }| |¡}dd|   |	|ƒ |	| ƒ |
|ƒ |
| ƒ |	|ƒ|
| ƒ |	|ƒ |
| ƒ  }t|| ƒdks½J ‚|||ƒ|||ƒ || | ƒ }| |¡}||||ƒksÝJ ‚|||ƒ|||ƒ |||ƒ|||ƒ  |||ƒ|||ƒ  }| || f|| f|| f|| f¡}|| }| |¡}| d| d  d
|   ¡s(J ‚d|	|ƒ ||| ƒ }| |¡}| d|  |	|ƒ ¡sGJ ‚d|	|ƒ ||| ƒ }| |¡}|d|	|ƒ kscJ ‚t dƒ}|	|ƒ|	|ƒ |||ƒ|d   || | ƒ | |d   }| |¡}||	|ƒ|	| ƒ ks˜J ‚t	d|gd t
 d¡ƒ}|||ƒ|	|ƒ || | ƒ }| |¡}t|ƒdksÉt|ƒdksËJ ‚d S d S )Nr„   r1   r2   rÿ   za,b,c,d,e,L_0zp,qrS   r8   rZ   é   r6   r   rX   r7   zA(L_1, -L_1)*p(L_0)zA(-L_1, L_1)*p(L_0))r   r   r   r¡   r   r  r    r$   r+   r   r   r=   r<   )r„   r1   r>   r?   rG   rH   rl   r­   rž   rØ   rÙ   rD   rÖ   rB   rX   r7   r.   r.   r/   Útest_contract_metric2>  sn   $
4
0 $
@
 8
:@4
T"
<(
 

<
 
(r  c                  C   s†  t dƒ} td| ddd}td|ƒ\}}}}}|j}td|gt d¡dƒ\}}	td	|gd
 t d
¡ƒ}
||| ƒ}| |¡}| 	|  ¡sEJ ‚|| |ƒ}| |¡}| 	| ¡sWJ ‚|||ƒ|| | ƒ }| |¡}| 	| ¡soJ ‚|||ƒ|| | ƒ }| |¡}| 	|  ¡sˆJ ‚|| |ƒ||| ƒ }| |¡}| 	|  ¡s¡J ‚||| ƒ||| ƒ }| |¡}| 	| ¡s¹J ‚|||ƒ|
| | ƒ }| |¡}| 
¡ }t||
|| ƒƒsÙJ ‚|||ƒ|
| | ƒ }| |¡}t||
|| ƒ ƒsöJ ‚||| ƒ|
|| ƒ }| |¡}t||
|| ƒ ƒsJ ‚|| |ƒ|
| |ƒ }| |¡}t||
|| ƒ ƒs2J ‚|| | ƒ|
||ƒ }| |¡}t||
|| ƒƒsOJ ‚|| |ƒ|
|| ƒ }| |¡}t||
|| ƒƒslJ ‚|||ƒ|	| ƒ }| |¡}t||	|ƒƒs…J ‚|||ƒ|	| ƒ }| |¡}t||	|ƒ ƒsŸJ ‚|||ƒ|| ƒ |	| ƒ }| |¡}t|||ƒ |	| ƒ ƒsÃJ ‚|||ƒ|| ƒ |	| ƒ }| |¡}t|||ƒ|	| ƒ ƒsæJ ‚|| |ƒ|| ƒ |	|ƒ }| |¡}t||| ƒ|	|ƒ ƒs	J ‚||| ƒ|| ƒ |	|ƒ }| |¡}t||| ƒ |	|ƒ ƒs-J ‚|| | ƒ||ƒ |	|ƒ }| |¡}t||| ƒ|	|ƒ ƒsPJ ‚|| | ƒ||ƒ |	|ƒ }| |¡}t||| ƒ |	|ƒ ƒstJ ‚|| | ƒ|
||ƒ |	|ƒ }| |¡}t||
| |ƒ |	|ƒ ƒsšJ ‚|||ƒ|
| | ƒ |	| ƒ }| |¡}t||
| |ƒ|	| ƒ ƒsÁJ ‚d S )Nr„   rU   rV   r	   r˜   r™   rš   r6   r9   r8   )r   r   r   r¡   r   r   r;   r   r  r+   r    r0   )r„   rU   r`   ra   rb   rc   r   r:   r›   rœ   r9   rB   rD   r.   r.   r/   Útest_metric_contract3  s’   














 


 

  
""
&r  c                  C   s   t dddd} td| ƒ\}}}}}| j}td| gƒ\}}}	}
|||||ƒ}| ¡ }||||||ƒ ks5J ‚|||||ƒ}| ¡ }||||||ƒksKJ ‚|||||ƒ}| ¡ }||||||ƒ ksbJ ‚|||||ƒ|| ƒ || ƒ }| ¡ }||||||ƒ|| ƒ || ƒ ksŒJ ‚|||||ƒ|| ƒ || ƒ }| ¡ }||||||ƒ|| ƒ || ƒ ks¶J ‚|||||ƒ|| ƒ || ƒ }| ¡ }||||||ƒ || ƒ || ƒ ksáJ ‚|||||ƒ|| ƒ || ƒ }| ¡ }|dksüJ ‚|||||ƒ|| ƒ || ƒ |||||ƒ|| ƒ || ƒ  }| ¡ }|d|||||ƒ || ƒ || ƒ ks:J ‚t dtdƒdd} | j}t|tƒsNJ ‚d S )	Nr1   rt   r2   rÿ   r   zp,q,r,sr   rT   )r   r   Úepsilonr   r    r   r*   r   )r1   r>   r?   rG   rH   rl   r  rØ   rÙ   rÚ   ÚsrB   rD   r.   r.   r/   Útest_epsilonã  s>   "*"*","D0r  c                     sp  t dƒ‰tdˆdd} td| ƒ\}}}}}}| j‰‡fdd„‰‡fdd	„‰ ‡ ‡‡fd
d„}‡ ‡fdd„}||| || ƒ||| || ƒ }	|	 ˆ¡}
t|
||| || ƒ ƒdks\J ‚||| || ƒ||| || ƒ }	|	 ˆ¡}
|
||| || ƒks€J ‚||| || ƒ||| || ƒ }	|	 ˆ¡}
|
dksJ ‚||| || ƒ}	|	 ˆ¡}
|
 ˆd d ¡s¶J ‚d S )Nrá   ÚColorr:   rÿ   r]   c                    s4   | j r|j sJ ‚|j s|j rJ ‚ˆ | |ƒˆ ||ƒ S r)   r²   ©r>   r?   rH   rG   ©Údeltar.   r/   Úidn  ó   z!test_contract_delta1.<locals>.idnc                    s4   | j r|j sJ ‚|j s|j rJ ‚ˆ | |ƒˆ ||ƒ S r)   r²   r
  r  r.   r/   ÚT  r  ztest_contract_delta1.<locals>.Tc                    s$   ˆ| |||ƒdˆ ˆ | |||ƒ  S ©Nr6   r.   ©r>   r?   rG   rH   )r  r  rá   r.   r/   ÚP1  s   $z test_contract_delta1.<locals>.P1c                    s   dˆ ˆ | |||ƒ S r  r.   r  )r  rá   r.   r/   ÚP2"  s   z test_contract_delta1.<locals>.P2r   r8   r6   )r   r   r   r  Úcontract_deltar    r+   )r	  r>   r?   rG   rH   rl   r^   r  r  rB   rD   r.   )r  r  r  rá   r/   Útest_contract_delta1  s(   $
"$
$

r  c                  C   s®  t ƒ H tdƒ} td| dd}td|ƒ\}}}}}|j}td|gƒ\}}	|	|ƒ||ƒ |	|ƒ |||ƒ|||ƒ |	| ƒ  }
|
|||ƒ|
ksJJ ‚t|
|
|||ƒ |	|ƒ||ƒ |	|ƒ  |	|ƒ||ƒ |	|ƒ  ƒdkspJ ‚|
|||ƒ|	|ƒ||ƒ |	|ƒ |||ƒ|||ƒ |	| ƒ  ks“J ‚|
 ||f||f¡}t||	|ƒ||ƒ |	|ƒ  |||ƒ|||ƒ |	| ƒ  ƒdksÀJ ‚td|gd	 t	 
d
d¡ƒ}tj|||ƒ || | | ƒ|| | | ƒ || | | ƒ  }|| | | ƒ|| | ƒ||| | ƒ  || | ƒ||| | ƒ  }
|
 |¡}
|
dks#J ‚|	|ƒ||ƒ |	|ƒ }
|
|||ƒ|	|ƒ||ƒ |	|ƒ ksDJ ‚W d   ƒ d S 1 sPw   Y  d S )Nr„   r1   r2   rÿ   r   úp qr   ÚdgrS   r6   r8   )r'   r   r   r   r¡   r   r    r$   r   r   r_   r	   ÚHalfr  )r„   r1   r>   r?   rG   rH   rl   rž   rØ   rÙ   rB   rD   r  rf   r.   r.   r/   Útest_fun5  s(   
6LFFFN
,$ær  c                     sX  t ddd} t ddd}td| ƒ\}}td|ƒ\}}td| gƒ\}}td	|gƒ\}}	td
ƒ}
tdƒ‰ t |
ˆ d¡ td| gt d¡|
ƒ}tj	|j
 |
ksNJ ‚td|gt d¡ˆ ƒ}||ƒ|| ƒ }||ƒ|| ƒ }|| }|| }t|||  d| |  ||  ƒdks‰J ‚||ƒ|| ƒ }||ƒ|	| ƒ }t|| || ƒs¦J ‚t|| || ƒr±J ‚t |
¡}t |¡|
ks¿J ‚ˆ tjv sÆJ ‚tt‡ fdd„ƒ t |
ˆ df|
ddf¡ t |d¡t d|¡  krîdksñJ ‚ J ‚t ¡  tj
ddddœddd dœdd dœgksJ ‚ˆ tjvsJ ‚t ˆ ¡}t |¡ˆ ks"J ‚ˆ tjv s*J ‚d S )Nr1   r2   r3   ÚLorentzHÚLHzi,jzih,jhr  zph qhÚGsymbolÚGHsymbolr   ÚGr6   ÚGHr8   c                      s   t  ˆ dd¡S ©Nr6   r8   )r   Úset_commr.   ©r  r.   r/   r®   m  rÅ   z$test_TensorManager.<locals>.<lambda>)r   r6   r8   )r   r6   )r   r   r   r   r   r!  r   r   r;   Ú_comm_i2symbolrÌ   r    r0   Úcomm_symbols2iÚcomm_i2symbolÚ_comm_symbols2ir%   r¶   Ú	set_commsÚget_commÚclear)r1   r  ro   rÓ   ÚihÚjhrØ   rÙ   ÚphÚqhr  r  r  ÚpsÚpshrB   rD   ÚqsÚqshrá   Únhr.   r"  r/   Útest_TensorManagerR  sB   ,
,,
r3  c                  C   s¸  t dƒ} td| dd}td|ƒ\}}}}}|j}td|gƒ\}}	|jd }
||ƒ|	|ƒ }||ƒ||ƒ }t|ƒt|ƒks?J ‚||ƒ||ƒ |||ƒ }||ƒ||ƒ |||ƒ }t|ƒt|ƒkscJ ‚|j|jŽ |ksmJ ‚|j|jŽ |kswJ ‚|j|jŽ |ksJ ‚|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s9J ‚t|j|jŽ ƒt|ƒksHJ ‚t|j|jŽ ƒt|ƒksWJ ‚t|j|jŽ ƒt|ƒksfJ ‚dd	„ }||ƒsqJ ‚||ƒsxJ ‚||ƒsJ ‚||ƒs†J ‚||
ƒsJ ‚|||ƒƒs–J ‚||ƒsJ ‚||ƒs¤J ‚||ƒs«J ‚||ƒs²J ‚t 	d
dd¡}|j|jŽ |ksÄJ ‚t|j|jŽ ƒt|ƒksÓJ ‚||ƒsÚJ ‚d S )Nr„   r1   r2   rÿ   r   r  r6   c                 S   s   t dd„ | jD ƒƒS )Nc                 S   s   g | ]}t |tƒ‘qS r.   )r*   r   )Ú.0Ú_r.   r.   r/   Ú
<listcomp>ž  s    z0test_hash.<locals>.check_all.<locals>.<listcomp>)ÚallrÐ   )Úobjr.   r.   r/   Ú	check_all  s   ztest_hash.<locals>.check_allrT   rS   )
r   r   r   r¡   r   rÐ   ÚhashÚfuncr   r_   )r„   r1   r>   r?   rG   rH   rl   rž   rØ   rÙ   Úp_typerD   rÖ   rÛ   Út4r9  Ú	tsymmetryr.   r.   r/   Ú	test_hashx  s^   
 *r?  c                  C   s¬  t dƒ} tddd}| |_td|ƒ\}}}}}tdƒ\}}}	}
td|gƒ}|||	|
g|_td|gt d	¡d
ƒ}tdƒ|_td|gd ƒ}| |_t dƒ}td|gd ƒ}||_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 ƒ}dd„ tddƒD ƒ|_td|gd ƒ}dd„ tddƒD ƒ|_|||||||||	|
|||||||||||| |||||||fS ) N)©r6   r   r   r   ©r   rV   r   r   ©r   r   rV   r   ©r   r   r   rV   r1   rt   ©r‡   úi0:5rã   r7   r9   r6   ÚGcommÚABr8   )©r6   r8   rS   rt   ©é   r  é   é   ©é	   r   rV   rT   ©rZ   r¹   éûÿÿÿéúÿÿÿÚBAÚLorentzD©rV   r6   r6   r6   zmu0:3r:   )©r6   r6   r   )r6   r   r6   ©r   r6   r   Úndmzn0:3ÚNAé
   é   ÚNBc                    ó$   g | ]‰ ‡ fd d„t ddƒD ƒ‘qS )c                    s   g | ]}ˆ | ‘qS r.   r.   )r4  rÓ   ©ro   r.   r/   r6  æ  r¿   ú>_get_valued_base_test_variables.<locals>.<listcomp>.<listcomp>rY  rZ  ©Úrange©r4  r.   r]  r/   r6  æ  ó   $ z3_get_valued_base_test_variables.<locals>.<listcomp>ÚNCrS   c                    r\  )c                    s&   g | ]‰ ‡‡ fd d„t ddƒD ƒ‘qS )c                    s   g | ]}ˆ ˆ | ‘qS r.   r.   )r4  rÔ   )ro   rÓ   r.   r/   r6  è  s    zI_get_valued_base_test_variables.<locals>.<listcomp>.<listcomp>.<listcomp>rt   rK  r_  ra  r]  ©rÓ   r/   r6  è  s   & r^  r6   rt   r_  ra  r.   r]  r/   r6  è  rb  rJ  )	r   r   Údatar   r   r   r   r;   r`  )Ú	minkowskir1   rˆ   r‰   rŠ   r‹   rŒ   r†   rä   rå   ræ   r7   r9   rG  Ú	ba_matrixrR  rS  Úmu0Úmu1Úmu2r:   Ú
ndm_matrixrW  Ún0Ún1Ún2rX  r[  rc  r.   r.   r/   Ú_get_valued_base_test_variablesµ  s@   

"ÿro  c                  C   sÌ  t ƒ Ù tƒ \} }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}tg d¢ƒtg d¢ƒtg d¢ƒtg d¢ƒg}t| ƒ||||	gksFJ ‚t|ƒg d¢ksPJ ‚t|ƒ|ksXJ ‚t| |ƒƒ||||	gksfJ ‚t|||ƒƒ|ksqJ ‚td|||ƒ ƒdd„ |D ƒksƒJ ‚td	|||ƒ ƒd
d„ |D ƒks•J ‚t| |ƒ| |ƒ ƒd| d| d| d|	 gks¯J ‚|||ƒ|||ƒ dks½J ‚t|||ƒd|||ƒ  ƒdd„ |D ƒksÔJ ‚W d   ƒ d S 1 sßw   Y  d S )NrH  rI  rM  rO  )r6   r8   rS   rt   rJ  r  rK  rL  rN  r   rV   rT   rZ   r¹   rP  rQ  rS   c                 S   ó   g | ]}d | ‘qS )rS   r.   ©r4  ro   r.   r.   r/   r6  ü  r¿   z+test_valued_tensor_iter.<locals>.<listcomp>rP  c                 S   rp  )rP  r.   rq  r.   r.   r/   r6  ý  r¿   r8   r   c                 S   s   g | ]}| ‘qS r.   r.   rq  r.   r.   r/   r6    ó    )r'   ro  r   rq   )r7   r9   rG  rR  r:   r1   r†   rä   rå   ræ   rS  rh  ri  rj  rW  rl  rm  rn  rX  r[  rc  rf  rg  rk  rˆ   r‰   rŠ   r‹   rŒ   Úlist_BAr.   r.   r/   Útest_valued_tensor_iterî  s    $ÿ,$$40"ìrt  c                  C   s
  t ƒ x tƒ \} }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}| | ƒd | |ƒd ks3J ‚| | ƒd | |ƒd  ksCJ ‚|||ƒd dksNJ ‚||| ƒd dksZJ ‚|| | ƒd dksgJ ‚|| |ƒd dkssJ ‚W d   ƒ d S 1 s~w   Y  d S )Nr   r6   ©r6   r6   rV   )r'   ro  ©r7   r9   rG  rR  r:   r1   r†   rä   rå   ræ   rS  rh  ri  rj  rW  rl  rm  rn  rX  r[  rc  rf  rg  rk  rˆ   r‰   rŠ   r‹   rŒ   r.   r.   r/   Ú3test_valued_tensor_covariant_contravariant_elements  s   $ÿ "örw  c                  C   s  t ƒ v tƒ \} }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}|||ƒ ¡ }|tg d¢g d¢g d¢g d¢gƒks?J ‚||| ƒ ¡ tdƒksMJ ‚| |ƒ ¡ t||||	gƒks]J ‚| | ƒ ¡ t|| | |	 gƒksqJ ‚W d   ƒ d S 1 s|w   Y  d S )Nr@  rA  rB  rC  rt   )r'   ro  Ú
get_matrixr   r   )r7   r9   rG  rR  r:   r1   r†   rä   rå   ræ   rS  rh  ri  rj  rW  rl  rm  rn  rX  r[  rc  rf  rg  rk  rˆ   r‰   rŠ   r‹   rŒ   Úmatabr.   r.   r/   Útest_valued_tensor_get_matrix  s   $ÿü *"ïrz  c                   C   s  t ƒ   tƒ \} }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}| |ƒ| | ƒ j|d |d  |d  |	d  ksAJ ‚| |ƒ| | ƒ j| d ksQJ ‚| |ƒ| | ƒ j| |ƒd kscJ ‚| |ƒ|| ƒ j| d|  d|	  kszJ ‚tdƒD ]&}tdƒD ]}| |ƒ|| ƒ ||f ||||	g| g d¢|  ks£J ‚q„q~||ƒ|| ƒ j|d  |d  |d  |	d  ksÂJ ‚| |ƒ||| ƒ }| |ƒjdksÕJ ‚||| ƒjdksàJ ‚|jdksçJ ‚tdƒD ]}|| ||||	g| ksûJ ‚qëW d   ƒ d S 1 sw   Y  d S )Nr8   rS   rt   )r   rV   rT   rZ   r6   )r'   ro  re  r`  rº   ) r7   r9   rG  rR  r:   r1   r†   rä   rå   ræ   rS  rh  ri  rj  rW  rl  rm  rn  rX  r[  rc  rf  rg  rk  rˆ   r‰   rŠ   r‹   rŒ   ro   rÓ   Úcontrexpr.   r.   r/   Útest_valued_tensor_contraction(  s*   
$ÿ8 $.<ÿ:ÿ$ìr|  c                  C   s˜   t ƒ ? tƒ \} }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}||| ƒjdks/J ‚||| ƒjdks:J ‚W d   ƒ d S 1 sEw   Y  d S )Nrt   r8   ©r'   ro  re  rv  r.   r.   r/   Ú#test_valued_tensor_self_contraction@  s   $ÿ"ûr~  c                  C   sü   t ƒ q tƒ \} }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}|d |d  |d  |d  |	d  ks;J ‚|d t|d  |d  |d  |	d  ƒksTJ ‚||ƒd |d ks`J ‚||ƒd |d kslJ ‚W d   ƒ d S 1 sww   Y  d S )Nr8   r6   )r'   ro  r   rv  r.   r.   r/   Útest_valued_tensor_powI  s   $ÿ.2"ùr  c            )      C   s´  t ƒ K tƒ \} }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}tdƒ\}}}|| |ƒ ||ƒ } | d || ks@J ‚| d d|	 | ksLJ ‚|| |ƒ || ƒ|  j}!|! ¡ | | | d| | |  d|	 | |  kswJ ‚| |ƒ||ƒ }"|"d |ks‡J ‚|"d |d ks‘J ‚|"d |d ks›J ‚|"d |	d ks¥J ‚| |ƒ||ƒ }#|#d |ksµJ ‚|#d |d ks¿J ‚|#d |d ksÉJ ‚|#d |	d ksÓJ ‚|"|| ƒ j| d|  d|	  d ksêJ ‚|| |ƒ |||ƒ  }$|$||ƒ d	 }%|%d| |||ƒ  }&|&d }'|'d |&ksJ ‚|'|| | ƒ }(|(j ¡ d
| | d| |  d| |  d
|	 |  d|  d|  ksGJ ‚W d   ƒ d S 1 sSw   Y  d S )Nzx1:4ru  )rS   rS   rS   r8   r   r6   é   r¹   é   é   é   éˆ   )r'   ro  r   re  r   ))r7   r9   rG  rR  r:   r1   r†   rä   rå   ræ   rS  rh  ri  rj  rW  rl  rm  rn  rX  r[  rc  rf  rg  rk  rˆ   r‰   rŠ   r‹   rŒ   Úx1Úx2Úx3Ú
rank2coeffÚ
coeff_exprÚadd_exprÚsub_exprrç   rè   ré   rê   Úexpr5r.   r.   r/   Útest_valued_tensor_expressionsT  s:   
$ÿ:.R$Ûr  c            !      C   sŽ  t ƒ º tƒ \} }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}| |ƒ| | ƒ |d |d  |d  |	d   }|jdksDJ ‚|d |d  |d  |	d  | |ƒ| | ƒ  }|jdksdJ ‚| |ƒ| | ƒ |d  |d  |d  |	d  }|jdks„J ‚||ƒ|| ƒ d|d   d|d   d|d   d|	d   | |ƒ| | ƒ  } | jdksµJ ‚W d   ƒ d S 1 sÀw   Y  d S )Nr8   r   r}  )!r7   r9   rG  rR  r:   r1   r†   rä   rå   ræ   rS  rh  ri  rj  rW  rl  rm  rn  rX  r[  rc  rf  rg  rk  rˆ   r‰   rŠ   r‹   rŒ   rç   rè   ré   rê   r.   r.   r/   Útest_valued_tensor_add_scalar}  s   $ÿ222T"îrŽ  c            '      C   sä  t ƒ å tƒ \} }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}tdƒ}ddg|_td|ƒ\}}}tddd\}}} }!td|gd ƒ}"||g| |!fg|"_td	|gd ƒ}#|| g||!gg|#_|"||ƒ|#| | ƒ }$|$j|d |d  | d  |!d  ks‚J ‚|$j|d d| |   |!d  ks•J ‚|"||ƒ|"| | ƒ }%|%j|d ||   | |  |!d  ks¶J ‚|%j|d d| |   |!d  ksÉJ ‚||"|| ƒ j}&|& ¡ || ||!  ksàJ ‚W d   ƒ d S 1 sëw   Y  d S )
NÚ	Euclideanr6   zi1:4za b c dF)ÚcommutativeÚV1r8   ÚV2)r'   ro  r   re  r   r   r   r   )'r7   r9   rG  rR  r:   r1   r†   rä   rå   ræ   rS  rh  ri  rj  rW  rl  rm  rn  rX  r[  rc  rf  rg  rk  rˆ   r‰   rŠ   r‹   rŒ   Úeuclidr>   r?   rG   rH   r‘  r’  ÚvtpÚvtp2ÚVcr.   r.   r/   Útest_noncommuting_components’  s*   $ÿ
*&*&"çr—  c                  C   s®   t ƒ J tƒ \} }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}t|ƒ}||ƒ|| ƒ j||ƒ ¡ j| ||ƒ ¡  d ksEJ ‚W d   ƒ d S 1 sPw   Y  d S )N)r   r   )r'   ro  r   re  rx  r  )r7   r9   rG  rR  r:   r1   r†   rä   rå   ræ   rS  rh  ri  rj  rW  rl  rm  rn  rX  r[  rc  rf  rg  rk  rˆ   r‰   rŠ   r‹   rŒ   Úmmatrixr.   r.   r/   Útest_valued_non_diagonal_metric¯  s   $ÿ<"ûr™  c            $      C   sD  t ƒ “ tƒ \} }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}|d |d ||	g}t|ƒ| _tdƒD ]}| |ƒj| || ksGJ ‚q8tdƒ\}} }!t||| |!gƒ| | ƒ_tdƒD ](}| |ƒj| || |  |! g| ksuJ ‚| j| || |  |! g| ks‡J ‚q_dd„ tdƒD ƒ}"|"|| | ƒ_tdƒD ]n}tdƒD ]g}#|||ƒj||#f |"| |# |r·dnd |#r½dnd ksÃJ ‚|| |ƒj||#f |"| |# |#rÖdnd ksÜJ ‚||| ƒj||#f |"| |# |rïdnd ksõJ ‚|| | ƒj||#f |"| |# ks
J ‚q£q|"|| |ƒ_tdƒD ]w}tdƒD ]o}#|||ƒj||#f |"| |# |r2dnd ks9J ‚|| |ƒj||#f |"| |# ksMJ ‚||| ƒj||#f |"| |# |radnd |#rhdnd ksoJ ‚|| | ƒj||#f |"| |# |#r„dnd ks‹J ‚qqW d   ƒ d S 1 s›w   Y  d S )Nr6   rt   zqx qy qzc                    s"   g | ]‰ ‡ fd d„t dƒD ƒ‘qS )c                    s(   g | ]}|d  d |d   ˆ d  ‘qS )rS   r8   rK  r.   rq  rd  r.   r/   r6  Ë  s   ( z?test_valued_assign_numpy_ndarray.<locals>.<listcomp>.<listcomp>rt   r_  ra  r.   rd  r/   r6  Ë  s   " z4test_valued_assign_numpy_ndarray.<locals>.<listcomp>rV   )r'   ro  r   re  r`  r   )$r7   r9   rG  rR  r:   r1   r†   rä   rå   ræ   rS  rh  ri  rj  rW  rl  rm  rn  rX  r[  rc  rf  rg  rk  rˆ   r‰   rŠ   r‹   rŒ   Úarrro   ÚqxÚqyÚqzÚrandom_4x4_datarÓ   r.   r.   r/   Ú test_valued_assign_numpy_ndarray¸  s@   
$ÿ
(&<22,ü4(D<üÿ$ãrŸ  c            %      C   s   t ƒ  tƒ \} }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}g d¢g d¢g d¢g d¢g}||_t|ƒ}|j}| ¡ } tdƒ}!| ¡ }"tdƒD ]¯}#tdƒD ]¨}$|||ƒj|#|$f ||#|$f ksgJ ‚|| | ƒ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 ‚qSqMW d   ƒ d S 1 s	w   Y  d S )N)r8   r8   r8   r6   )r8   rS   r6   r   )r8   r6   r8   rS   )r6   r   rS   r8   rt   )	r'   ro  re  r   r¡   Úinvr   Úget_kronecker_deltar`  )%r7   r9   rG  rR  r:   r1   r†   rä   rå   ræ   rS  rh  ri  rj  rW  rl  rm  rn  rX  r[  rc  rf  rg  rk  rˆ   r‰   rŠ   r‹   rŒ   Úmdrà   r¡   ÚminvÚmeyeÚKDro   rÓ   r.   r.   r/   Útest_valued_metric_inverseÞ  s2   
$ÿ$(&&"&$$&öÿ$îr¦  c            $      C   s>  t ƒ ’ tƒ \} }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}| |ƒ| |ƒ }| ¡ }|| |ƒ| |ƒ ks<J ‚tdƒD ]}tdƒD ]} ||| f || |f ksVJ ‚qFq@||ƒ| |ƒ ||ƒ }!|! ¡ }"tdƒD ] }tdƒD ]} tdƒD ]}#|!|| |#f |"| ||#f ksŠJ ‚qxqrqlW d   ƒ d S 1 s˜w   Y  d S )Nrt   )r'   ro  r    r`  )$r7   r9   rG  rR  r:   r1   r†   rä   rå   ræ   rS  rh  ri  rj  rW  rl  rm  rn  rX  r[  rc  rf  rg  rk  rˆ   r‰   rŠ   r‹   rŒ   Úe1Úe2ro   rÓ   Úo1Úo2rÔ   r.   r.   r/   Útest_valued_canon_bp_swapaxesÿ  s*   $ÿÿ"ÿÿÿ"ôr«  c                     sp  t ƒ « tddd} td| ƒ\}}}}g d¢| _td| gd ƒ}td| gd t d¡ƒ‰td| gd t d¡ƒ‰ tg d	¢g d
¢g d¢gƒ‰ˆˆj ‰ˆˆj ‰ˆ|_ˆ|_ˆ|_dd„ ‰ˆˆ_t	t
‡‡‡fdd„ƒ t	t
‡‡‡fdd„ƒ ˆˆ _t	t
‡ ‡‡fdd„ƒ t	t
‡ ‡‡fdd„ƒ g d¢g d¢g d¢gˆ_g d¢g d¢g d¢gˆ _W d   ƒ d S 1 s±w   Y  d S )NÚITrS   rD  úi0:4©r6   r6   r6   r7   r8   rT   )r6   r8   rS   )rt   rJ  r  )rK  rL  rN  c                 S   s
   || _ d S r)   )re  )r7   Údatr.   r.   r/   Úassign#  s   
z:test_valued_components_with_wrong_symmetry.<locals>.assignc                      ó
   ˆˆ ˆƒS r)   r.   r.   )ÚA_symr°  Ú	mat_nosymr.   r/   r®   '  r¯   z<test_valued_components_with_wrong_symmetry.<locals>.<lambda>c                      r±  r)   r.   r.   )r²  r°  Úmat_antisymr.   r/   r®   (  r¯   c                      r±  r)   r.   r.   )Ú	A_antisymr°  Úmat_symr.   r/   r®   +  r¯   c                      r±  r)   r.   r.   )rµ  r°  r³  r.   r/   r®   ,  r¯   )r   r   r   )r'   r   r   re  r   r   r=   r   r  r%   r¶   )r¬  rˆ   r‰   rŠ   r‹   ÚA_nosymr.   )rµ  r²  r°  r´  r³  r¶  r/   Ú*test_valued_components_with_wrong_symmetry  s.   


"är¸  c            	      C   s.  t ƒ Š tddddd} ddg| _td| ƒ\}}}}td| gƒ}dd	g|_td
| gd t d¡ƒ}d	dgdd	gg|_|||ƒ|| ƒ |||ƒ || ƒ }|jtd	d	gd	dggƒks]J ‚|||ƒ|||ƒ || ƒ || ƒ }|j|jksyJ ‚|| jd|j ks…J ‚W d   ƒ d S 1 sw   Y  d S )Nr1   r6   ro   r8   ©rO   r4   r‡   rV   ú\mu, \nu, \alpha, \betaÚur   r\   rT   )r'   r   re  r   r   r   r=   r   )	r1   rg   rh   rd   re   r»  r\   Úmul_1Úmul_2r.   r.   r/   Útest_issue_10972_TensMul_data1  s$   
ÿ
ÿ(("ìr¾  c                  C   s8  t ƒ  tddddd} g d¢| _td| ƒ\}}}}td| gƒ}g d	¢|_td
| gd t d¡ƒ}tdƒ\}}}	}
}}d|||	g| d|| g| | d|
g|	 ||
 dgg|_|||ƒ|| ƒ }||ƒ||ƒ jtg d¢d|d || ||	 gd|| |d ||	 gd||	 ||	 |	d ggƒks–J ‚||ƒ||ƒ  	¡ j||ƒ||ƒ jks¬J ‚|||ƒ|||ƒ || ƒ || ƒ j||ƒ||ƒ j ksÍJ ‚|||ƒ|||ƒ || ƒ || ƒ j||ƒ||ƒ jksíJ ‚td| gd t d¡ƒ}| j|_||ƒ||ƒ |||ƒ }|| ƒ|||ƒ }|jtg d¢ƒks J ‚|| ƒ|||ƒ |||ƒ }|jt 
ddd¡ks<J ‚|||ƒ|||ƒ || | ƒ }|jdd d …f tg d¢ƒks_J ‚|jd d …df tg d¢ƒksqJ ‚|| ƒ|||ƒ }|jtg d¢ƒks‡J ‚|`W d   ƒ d S 1 s•w   Y  d S )Nr1   r6   r2   rt   r¹  rT  rº  r»  r@  r\   r8   rT   zE_x E_y E_z B_x B_y B_zr   )r   r   r   r   rž   )r'   r   re  r   r   r   r=   r   r   r    Úzeros)r1   rg   rh   rd   re   r»  r\   ÚExÚEyÚEzÚBxÚByÚBzr†   rž   Úperpr¼  r½  ÚFperpÚmul_3r.   r.   r/   Útest_TensMul_dataI  sX   

ÿ

üýÿ,(ÿ(ÿ"$$$ÈrÉ  c                  C   s¦  t ƒ Æ tddddd} ddg| _td| ƒ\}}}}td| ƒ\}}td	| gd t d¡ƒ}| j|_td
| gƒ}ddg|_|||ƒ|||ƒ || ƒ |||ƒ||ƒ  }	|	jt ddd¡ks`J ‚|||ƒ|||ƒ || ƒ |||ƒ||ƒ  }
|
jt ddd¡ks„J ‚||ƒ||ƒ |||ƒ }|| ƒ|||ƒ }|jtddgƒks¦J ‚|| ƒ|||ƒ |||ƒ }|jt ddd¡ksÁJ ‚W d   ƒ d S 1 sÌw   Y  d S )Nr1   r6   ro   r8   r¹  rV   rF   zi_0:2rž   r»  r   )	r'   r   re  r   r   r   r=   r   r¿  )r1   r>   r?   rG   rH   rˆ   r‰   rž   r»  Úadd_1Úadd_2rÆ  r¼  r½  r.   r.   r/   Útest_issue_11020_TensAdd_data„  s&   

00"årÌ  c                  C   s  t ddd} td| ƒ\}}}}}td| ƒ}td| ƒ}td| | gƒ}td| | gt d	¡ƒ}	|||ƒ}
||| ƒ}|||ƒ|	||ƒ }|||ƒ|	|| ƒ }|||ƒ|	| | ƒ }|
| }t|
jƒ|d
f|dfgkskJ ‚t|
jƒg kstJ ‚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s7J ‚t|jƒ|df|df| df| dfgksOJ ‚t|jƒ|df|df|df|dfgkseJ ‚t|jƒ|df| dfgksvJ ‚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 )Nr1   r2   r3   rE  r­   ÚL_1r7   r9   r8   )r6   r   ru  rV  )r   r6   r6   rU  r®  )r   r   r6   r   )r   r6   r6   r   )r   r   r6   r6   )r   r6   r6   r6   )r   r   r   r   r=   rq   Ú_iterate_free_indicesÚ_iterate_dummy_indicesÚ_iterate_indicesrµ   Úget_free_indices)r2   rˆ   r‰   rŠ   r‹   rŒ   ÚL0ÚL1r7   r9   r§  r¨  Úe3Úe4Úe5Úe6r.   r.   r/   Útest_index_iteration£  sP   


  ** .00,":rØ  c                  C   s8  t dƒ} td| ƒ\}}}td| ƒ}td| gƒ\}}}}tt||ƒ||ƒƒtƒs)J ‚tt||ƒ||ƒ ƒtƒs8J ‚||ƒ|| ƒ|| ƒ  }	|	j||ƒ|| ƒ|| ƒ fksYJ ‚|	||ƒ|| ƒ ||ƒ|| ƒ  ksoJ ‚|	 ¡ ||ƒ|| ƒ ||ƒ|| ƒ  ks‡J ‚t	|	ƒdksJ ‚||ƒ||ƒ ||ƒ||ƒ  }	t	|	ƒdks§J ‚|| ƒ||ƒ||ƒ ||ƒ||ƒ ||ƒ || ƒ   }	|	|| ƒ||ƒ ||ƒ || ƒ||ƒ ||ƒ ||ƒ || ƒ  ksìJ ‚|	 ¡ || ƒ||ƒ ||ƒ || ƒ||ƒ ||ƒ ||ƒ || ƒ  ksJ ‚t	|	ƒdksJ ‚t	|	 
¡ ƒdks*J ‚|| ƒd	||ƒ ||ƒ ||ƒ||ƒ   }	|	 ¡ d	|| ƒ ||ƒ ||ƒ || ƒ||ƒ ||ƒ  ksdJ ‚d	||ƒ || ƒ }	|	jd	kswJ ‚||ƒ||ƒ||ƒ ||ƒ||ƒ||ƒ    }	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 ‚||ƒ|| ƒ ||ƒ|| ƒ  }|| ƒ| }||ƒ| }| ¡ ||ƒ|| ƒ ||ƒ || ƒ ||ƒ|| ƒ ||ƒ || ƒ  ksJ ‚||ƒ|| ƒ|| ƒ||ƒ|| ƒ ||ƒ|| ƒ     }	|	 ¡ ||ƒ|| ƒ ||ƒ|| ƒ ||ƒ || ƒ  ||ƒ|| ƒ ||ƒ || ƒ  ks`J ‚|| ƒ||ƒ|| ƒ ||ƒ|| ƒ   }	|	 ¡ || ƒ||ƒ || ƒ || ƒ||ƒ || ƒ  ksšJ ‚d S )Nr2   zi j kr­   úA B C DzA(L_0)*(A(-L_0) + B(-L_0))zA(i)*A(j) + A(i)*B(j)z2A(-L_0)*(A(L_0)*A(j) + A(L_0)*B(j)*C(L_1)*C(-L_1))z8A(j)*A(L_0)*A(-L_0) + A(L_0)*A(-L_0)*B(j)*C(L_1)*C(-L_1)r8   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)rS   )r   r   r   r   r*   r   r   r   rÐ   r<   r    rð   r   rÑ   r   )r2   ro   rÓ   rÔ   r­   r7   r9   r:   r„   ÚexprÚtmÚp1Úp2Úp3r.   r.   r/   Útest_tensor_expandÖ  sJ   
&,0 <NT.F0$V@h.Jrß  c                     s”   t dƒ} td| ƒ\}}}}td| gƒ‰ tdƒ\‰‰ˆ |ƒˆ tdƒƒks%J ‚ˆ | ƒˆ tdƒ ƒks3J ‚tt‡ ‡‡fdd„ƒ tt‡ ‡fdd„ƒ d S )	Nr2   r­  r7   zx yrˆ   c                      s   ˆ ˆˆ ƒS r)   r.   r.   ©r7   rì   Úyr.   r/   r®     r±   z6test_tensor_alternative_construction.<locals>.<lambda>c                      s   ˆ dˆ ƒS rÃ   r.   r.   )r7   rì   r.   r/   r®     r±   )r   r   r   r   r   r%   Ú	TypeErrorr¶   )r2   rˆ   r‰   rŠ   r‹   r.   rà  r/   Ú$test_tensor_alternative_construction  s   rã  c               
      sF
  t dƒ} t ddd}td| ƒ\‰‰}}td| gƒ\}}}}td| | gƒ}td| gd	 ƒ}	|ˆˆƒ‰ |ˆˆ ƒd
dgdd	gg| td
dƒi‰ˆ  ˆ¡ˆˆgtd
dgddggƒfksYJ ‚ˆ  ˆ¡td
dgddggƒksjJ ‚ˆ  ˆˆˆ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smJ ‚ˆ  ˆ¡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 ‚|ˆƒ|ˆ ƒ ‰ |ˆƒd
dg| td
dƒi‰ˆ  ˆ¡g dfks~J ‚ˆ  ˆg ¡dks‰J ‚|	ˆˆˆ |ƒ|ˆ ƒ || ƒ ‰ |ˆƒd
dg|	ˆˆ||ƒtd
gd ƒ 	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
dgi‰t
t‡ ‡fdd„ƒ |ˆƒ‰ |ˆƒd
dgdd	ggi‰t
t‡ ‡fdd„ƒ ||ƒ|ˆˆƒ ||ƒ|ˆˆƒ  ‰ ||ƒ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sYJ ‚ˆ  ˆ|ˆˆg¡tdd	gddgggƒkspJ ‚ˆ  ˆ|ˆˆg¡tddgd	dgggƒks‡J ‚||ƒ|| ƒ d ‰ ||ƒddg| td
d
ƒi‰ˆ  ˆg ¡dksªJ ‚|ˆˆƒ|ˆˆƒ ‰ |ˆˆƒ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 ‚|ˆˆƒ|ˆˆƒ ‰ |ˆˆƒ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sBJ ‚|	ˆˆ|| ƒ‰ |	ˆˆ|| ƒd
dgdd	ggi‰ˆ  ˆ¡ˆˆgtd
dgdd	ggƒfkspJ ‚|ˆˆ ƒ‰ |ˆˆ ƒ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 ‚|ˆƒ|ˆƒ ‰ |ˆƒd
dgi‰t
t‡ ‡‡fd"d„ƒ |ˆƒ‰ |ˆƒd
dggi‰t
t‡ ‡‡fd#d„ƒ td$|ƒ\‰‰}
td%|gƒ}|ˆƒ|ˆ ƒ ‰ |ˆƒd
ggi‰t
t‡ ‡‡‡fd&d„ƒ d S )'Nr2   ÚL2r8   rD  zi j k lrÙ  ÚHÚKrt   r6   rS   rV   rT   r¹   ro   rÓ   rZ   é   c                      ó
   ˆ   ˆ¡S r)   ©Ú_extract_datar.   ©rÚ  Úreplr.   r/   r®   N  r¯   z)test_tensor_replacement.<locals>.<lambda>c                      rè  r)   ré  r.   rë  r.   r/   r®   R  r¯   c                      rè  r)   ré  r.   rë  r.   r/   r®   V  r¯   r  rL  éd   éq   rJ  r   é*   r@  rA  rB  rC  c                      ó   ˆ   ˆˆg¡S r)   ©Úreplace_with_arraysr.   )rÚ  rÓ   rì  r.   r/   r®   ƒ  rÅ   c                      rð  r)   rñ  r.   )rÚ  ro   rì  r.   r/   r®   ˆ  rÅ   zu1:4ÚUc                      s   ˆ   ˆˆˆ g¡S r)   rñ  r.   )rÚ  rì  Úu1Úu2r.   r/   r®     rr  )r   r   r   r   r(   rê  r   rò  r   Úreshaper%   r¶   )r2   rä  rÔ   rø   r7   r9   r:   r„   rå  ræ  Úu3ró  r.   )rÚ  ro   rÓ   rì  rô  rõ  r/   Útest_tensor_replacement  s´   
&*"(*2*,(,,.$
$,$*,,.*,,.
$,$>
$$80..,**** ,* þrø  c               	   C   s´  t ddd} td| gd ƒ}td| gƒ}tdƒ\}}}}tdƒ\}}|||||ƒ}	|	 t¡ttdƒ||||ƒks:J ‚||| ||ƒ}
|
 t¡tttdƒ||||ƒ|dd	fƒksYJ ‚|
||||| ƒ }| t¡tttdƒ||||ƒ|dd	fƒtttdƒ||||ƒ|dd	fƒ ksŠJ ‚|| ƒ|	 }| t¡tttdƒ|ƒttdƒ||||ƒ |dd	fƒks¯J ‚|| ƒ|
 }| t¡tttdƒ|ƒttdƒ||||ƒ |dd	f|dd	fƒksØJ ‚d S )
Nr2   rt   rD  r7   r9   r­  zL_0:2r   rS   )r   r   r   Úrewriter   r   r   )r2   r7   r9   rˆ   r‰   rŠ   r‹   r­   rÍ  ra   rb   rc   Úb1Úb2r.   r.   r/   Útest_rewrite_tensor_to_Indexed’  s&   ".ÿÿ<Hrü  c                   C   s:   t ƒ  tdgd ƒ W d   ƒ d S 1 sw   Y  d S r   )r'   r"   r.   r.   r.   r/   Útest_tensorsymmetry¬  s   "ÿrý  c                   C   s6   t ƒ  tdg ƒ W d   ƒ d S 1 sw   Y  d S )Nr7   )r'   r!   r.   r.   r.   r/   Útest_tensorhead°  s   "ÿrþ  c                  C   s\   t ƒ ! t d¡} tdƒ}t|gd | ƒ}t|tƒsJ ‚W d   ƒ d S 1 s'w   Y  d S )Nr8   r1   )r'   r   r=   r   r#   r*   )r¨   r1   ÚS2r.   r.   r/   Útest_TensorType´  s   
"ür   c                   C   s8   t ƒ  tddd W d   ƒ d S 1 sw   Y  d S )Nr1   r2   )Ú	dummy_fmt)r'   r   r.   r.   r.   r/   Útest_dummy_fmt»  s   "ÿr  N)qÚsympy.concrete.summationsr   Úsympy.core.functionr   Úsympy.core.numbersr   Úsympy.matrices.denser   r   Úsympy.tensor.indexedr   Úsympy.combinatoricsr   Ú
sympy.corer	   r
   r   r   r   Úsympy.core.containersr   Úsympy.core.symbolr   Ú(sympy.functions.elementary.miscellaneousr   Úsympy.tensor.arrayr   Úsympy.tensor.tensorr   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   Úsympy.testing.pytestr%   r&   r'   Úsympy.matricesr(   r0   rE   rI   rM   rR   rn   rr   r~   rƒ   r—   r   rª   r¸   r¾   rÈ   rÍ   rÝ   rß   râ   rë   rö   rú   rû   rü   rþ   r  r  r  r  r  r  r3  r?  ro  rt  rw  rz  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/   Ú<module>   s˜    T	M* 	(T%%	
,Cb+'&=9	)	&!;35{