o
    æðh‘( ã                   @   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.m/Z/m0Z0m1Z1 d dl2m3Z3m4Z4m5Z5 d dl6m7Z7 d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)d*„ ZEd+d,„ ZFd-d.„ ZGd/d0„ ZHd1d2„ ZId3d4„ ZJd5d6„ ZKd7d8„ ZLd9d:„ ZMd;d<„ ZNd=d>„ ZOe4d?d@„ ƒZPdAdB„ ZQdCdD„ ZRdEdF„ ZSdGdH„ ZTdIdJ„ ZUdKdL„ ZVdMdN„ ZWdOdP„ ZXdQdR„ ZYdSdT„ ZZdUdV„ Z[dWdX„ Z\dYdZ„ Z]d[d\„ Z^d]d^„ Z_d_d`„ Z`dadb„ Zadcdd„ Zbdedf„ Zcdgdh„ Zddidj„ Zedkdl„ Zfdmdn„ Zgdodp„ Zhdqdr„ Zidsdt„ Zjdudv„ Zkdwdx„ Zldydz„ Zmd{d|„ Znd}d~„ Zodd€„ Zpdd‚„ Zqdƒd„„ Zrd…d†„ Zsd‡dˆ„ Ztd‰dŠ„ Zud‹dŒ„ ZvddŽ„ ZwdS )é    )ÚSum)Úexpand)ÚInteger)ÚMatrixÚeye)ÚIndexed)ÚPermutation)ÚSÚRationalÚSymbolÚBasicÚAdd)ÚTuple)Úsymbols)Úsqrt)ÚArray)ÚTensorIndexTypeÚtensor_indicesÚTensorSymmetryÚget_symmetric_group_sgsÚTensorIndexÚ
tensor_mulÚTensAddÚriemann_cyclic_replaceÚriemann_cyclicÚTensMulÚtensor_headsÚTensorManagerÚTensExprÚ
TensorHeadÚcanon_bpÚ
tensorheadÚtensorsymmetryÚ
TensorTypeÚsubstitute_indicesÚWildTensorIndexÚWildTensorHeadÚ_WildTensExpr)ÚraisesÚXFAILÚwarns_deprecated_sympy)Údiagc                 C   s0   t | tƒr
|  |¡S t |tƒr| | ¡S | |kS ©N)Ú
isinstancer   Úequals)Úarg1Úarg2© r1   úR/var/www/vscode/kcb/lib/python3.10/site-packages/sympy/tensor/tests/test_tensor.pyÚ	_is_equal   s
   



r3   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)r4   ÚaÚbÚd0Úd1r:   r<   ÚtÚtcÚt1r=   r1   r1   r2   Útest_canonicalize_no_slot_sym   sV   &&&rH   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 )Nr4   r5   r6   ú
a, b, c, dr:   r9   zA(a)*A(b)*A(c)z-A(a)*A(b)*A(c)r;   zA(a, c)*A(b, d)z-A(a, c)*A(b, d))r   r   r   r   r>   r    r?   r@   )r4   rA   rB   ÚcÚdr:   rE   rF   r1   r1   r2   Útest_canonicalize_no_dummiesk   s*   rL   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 )Nr4   r:   r;   )r   r   r   r>   r@   )r5   ÚA1ÚA2ÚA3r1   r1   r2   Ú-test_tensorhead_construction_without_symmetry•   s   rP   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 )Nr4   r5   r   ©r7   Úmetric_symmetryzd:4r:   r;   zA(L_0, -L_1)*A(L_1, -L_0)z3A(L_0, -L_1)*A(L_1, -L_0)*A(L_2, -L_3)*A(L_3, -L_2)z3A(L_0, -L_1)*A(L_1, -L_2)*A(L_2, -L_3)*A(L_3, -L_0))r   r   r   r   r>   r    r?   )r4   rC   rD   Úd2Úd3r:   rE   rF   r1   r1   r2   Útest_no_metric_symmetry   s   00rU   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 )'Nr4   r5   r6   za,a0,a1,a2,a3,b,d0,d1,d2,d3r:   r9   zA(L_0)*A(-L_0)z,A(L_0)*A(-L_0)*A(L_1)*A(-L_1)*A(L_2)*A(-L_2)r   r;   z!A(a, L_0)*A(b, L_1)*A(-L_0, -L_1)r<   z!A(b, L_0)*A(-L_0, L_1)*B(a, -L_1)é   zA(a, L_0, L_1)*A(b, -L_0, -L_1)zCA(a0, L_0, L_1)*A(a1, -L_0, L_2)*A(a2, a3, L_3)*A(-L_1, -L_2, -L_3)éþÿÿÿz1A(L_0, L_1, L_2)*A(-L_0, -L_1, L_3)*B(-L_2, -L_3)ÚSpinorr	   éÿÿÿÿrQ   z2-A(S_0, S_1, S_2)*A(-S_0, -S_1, S_3)*B(-S_2, -S_3)ÚMatÚM)rR   r7   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) r4   rA   Úa0Úa1Úa2Úa3rB   rC   rD   rS   rT   r:   rE   rF   r<   rX   rZ   ÚalphaÚbetaÚgammaÚmuÚnuÚrhor\   ÚGamma2ÚGamma3r^   rJ   rK   ÚeÚffra   r1   r1   r2   Útest_canonicalize1´   s    ÿ66""8**ÿ*ÿ*ÿ
ÿ
ÿ
ÿ".Nrq   c                  C   s6   t dƒ} td| ƒ}t|ttfƒrJ ‚t|tƒsJ ‚d S )Nr:   Úi)r   r   r-   ÚtupleÚlistr   )r:   rr   r1   r1   r2   Ú"test_bug_correction_tensor_indices>  s   
ru   c                  C   sö   t ddd} td| ƒ\}}}}}}}}}	}
}}td| gd t ¡ ƒ}|||| | ƒ}| ¡ }t|ƒdks7J ‚|| || |ƒ||||| ƒ || | |	 |
 ƒ || | | | ƒ ||||| ƒ ||	|
||ƒ }| ¡ }t|ƒdksyJ ‚d S )	Nr4   r5   r6   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?   )r4   rC   rD   rS   rT   Úd4Úd5Úd6Úd7Úd8Úd9Úd10Úd11rv   rE   rF   r1   r1   r2   Útest_riemann_invariantsG  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 )Nr4   r5   r6   zd0:7za0:6úa,brv   rw   r   z-R(a, L_0, b, -L_0)z+-R(a, L_0, L_1, L_2)*R(b, -L_0, -L_1, -L_2)ÚVr;   zW-R(L_0, L_1, L_2, L_3)*R(-L_0, L_4, L_5, L_6)*V(-L_1, -L_4)*V(-L_2, -L_5)*V(-L_3, -L_6)z>R(a0, L_0, a2, L_1)*R(a1, a3, -L_0, L_2)*R(a4, a5, -L_1, -L_2))r   r   r   r   rx   r    r?   r@   )r4   rC   rD   rS   rT   ry   rz   r{   rc   rd   re   rf   Úa4Úa5rA   rB   rv   rE   rF   rƒ   r1   r1   r2   Ú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ÚEuclr9   ÚE)rR   Údimr7   zi0:15r:   rV   r]   r   )r   r   r   r   r   r@   r    )r‡   rˆ   Úi0Úi1Úi2Úi3Úi4Úi5Úi6Úi7Úi8Úi9Úi10Úi11Úi12Úi13Úi14r:   rE   rG   r1   r1   r2   Ú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‡   rX   rY   r	   ©rŠ   rR   r7   úa0:5úchi,psir9   )r   r   r   r   r   r>   r    )r‡   rX   rc   rd   re   rf   r„   ÚchiÚpsirE   rG   r1   r1   r2   Ú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‡   r4   Úgr9   r5   )Úmetric_namerR   rŠ   r7   zm0:5r;   zg(Lorentz,Lorentz)ÚTSpacer6   zi0 i1r:   zA(TSpace_0, -TSpace_0))r   r   r   r   r@   r   Úmetricr?   Úeps_dimrŠ   r   r    )r‡   r4   Úm0Úm1Úm2Úm3Úm4Úsym2Úsym2nr¡   r£   r‹   rŒ   r:   r1   r1   r2   Ú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 )Nr4   r5   r6   úa,b,c,dúA Br;   ÚL_0c                      s
   t dˆ ƒS )NrV   )r   r1   )r4   r1   r2   Ú<lambda>Ç  ó   
 ztest_indices.<locals>.<lambda>c                      s   ˆ ˆˆˆƒS r,   r1   r1   ©r:   rA   rB   rJ   r1   r2   r±   È  ó    r:   rA   rB   z-bF©Úis_up)r   r   Útensor_index_typer   r   r@   Úget_indicesr   r(   Ú
ValueErrorr   )rK   r<   rE   Úindicesr°   r1   )r:   r4   rA   rB   rJ   r2   Ú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 )
Nr;   r]   rV   TéüÿÿÿrY   r9   r   rw   )
r   r@   r   rb   r>   ÚrankÚbaser   Ú
generatorsr   )Úsymr1   r1   r2   Ú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 )Nr4   r5   r6   r®   r¯   r;   c                      s   ˆˆˆƒˆˆ ˆƒ S r,   r1   r1   )rA   rB   rJ   rK   r¡   r1   r2   r±   ê  ó    ztest_TensExpr.<locals>.<lambda>c                      s   t jˆˆ ˆƒ S r,   ©r	   ÚOner1   )rA   rB   r¡   r1   r2   r±   ë  s    c                      s   ˆ ˆˆƒˆˆˆƒ ˆˆˆƒ S r,   r1   r1   ©r:   rA   rB   rJ   rK   r¡   r1   r2   r±   ì  s    c                      s   t jˆ ˆˆƒˆˆˆƒ  S r,   rÃ   r1   )r:   rJ   rK   r¡   r1   r2   r±   í  s    c                      s   ˆ ˆˆƒˆ ˆˆƒ S r,   r1   r1   r³   r1   r2   r±   î  rÂ   c                      s   ˆ ˆˆƒd S ©Nr;   r1   r1   ©r:   rA   rB   r1   r2   r±   ú  ó    c                      s   dˆ ˆˆƒ S rÆ   r1   r1   rÇ   r1   r2   r±   û  rÈ   c                      s   t ˆ ˆˆƒƒS r,   )Úabsr1   rÇ   r1   r2   r±   ü  rÈ   )
r   r   r¤   r   r   r@   r(   r¹   r*   ÚNotImplementedError)r4   r<   r1   rÅ   r2   Ú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 )Nr4   r5   r6   r:   r;   r   )	r   r   ÚnameÚindex_typesr½   Úsymmetryr   r>   Úcomm)r4   r:   r1   r1   r2   Útest_TensorHeadþ  s   rÐ   c                  C   s  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 ‚t ||ƒtd||ƒƒƒ ¡ ||ƒksFJ ‚d S )Nr1   r   r4   r5   r6   úa,b,d0,d1,i,j,kr8   r;   z"A(b, -L_0)*(A(L_0, a) + B(L_0, a))z+A(b, -L_0)*A(L_0, a) + A(b, -L_0)*B(L_0, a)z+A(a, L_0)*A(b, -L_0) + A(b, L_0)*B(a, -L_0)zBA(a, L_0)*A(b, -L_0) + A(b, -L_0)*B(L_0, a) + A(b, L_0)*B(a, -L_0)z-A(a, L_0)*A(b, -L_0) + 2*A(b, L_0)*B(a, -L_0)úp,q,rz2*q(d0)z2*q(d0) + p(d0)z2*q(-d0) + p(-d0)zp(L_0)*(2*q(-L_0) + p(-L_0))z!p(L_0)*p(-L_0) + 2*p(L_0)*q(-L_0)z!p(-L_0)*p(L_0) + 2*q(-L_0)*p(L_0)z4p(L_0)*p(-L_0) + 4*p(L_0)*q(-L_0) + 4*q(L_0)*q(-L_0)z-2*q(d0) + p(d0)rw   rV   r9   )r   ÚargsÚdoitr   r   r   r   r@   r.   r?   r   r    r	   rÄ   r½   r   Ú	from_data)r4   rA   rB   rC   rD   rr   ÚjÚkr:   r<   rG   Út2aÚt2Út2bÚpÚqÚrrE   Út3Útz1r1   r1   r2   Ú	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 )
Nr4   r5   r6   rÑ   r8   r;   rÒ   r   rV   )r   r   r   r   r@   r3   r	   ÚZero)r4   rA   rB   rC   rD   rr   rÖ   r×   r:   r<   rÛ   rÜ   rÝ   rE   r1   r1   r2   Ú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 )Nr4   r5   r6   zm,n,p,qrv   rw   r:   rV   r]   r;   r   r9   )r   r   r   r   rx   r@   r    r
   )
r4   ÚmÚnrÛ   rÜ   rv   r:   rG   rÙ   rE   r1   r1   r2   Ú	test_add2z  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 )
Nr4   r5   r6   zi0:2ú
E px py pzr:   r<   r;   rW   )r   r   r   r   rÓ   )r4   r‹   rŒ   r‰   ÚpxÚpyÚpzr:   r<   Úexpr1Úexpr2Úexpr3Úexpr4r1   r1   r2   Ú	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   )Úxr4   r5   r6   r®   Ú1r¯   r;   r9   z(x + 1)*A(a, b)zA(a, b)r=   c                      s   ˆ ˆˆƒˆ ˆˆƒ S r,   r1   r1   r³   r1   r2   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ï   r4   rK   rE   r<   ÚtsrG   r=   r1   r³   r2   Ú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 )Nr4   r5   r6   úi,j,k,l,m,n,p,qr8   r;   rÛ   )r   r   r   r   r@   r   r$   )r4   rr   rÖ   r×   Úlrã   rä   rÛ   rÜ   r:   r<   rE   rG   Út1ar1   r1   r2   Ú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 )Nr4   r5   r6   zm:4rv   rw   rY   rV   r9   r;   )r   r   r   r   rx   r   r
   )	r4   r¦   r§   r¨   r©   rv   rE   rG   rü   r1   r1   r2   Ú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 )Nr4   r5   r6   rú   rv   rw   r   r;   rY   rV   r9   )r   r   r   r   rx   r   r
   )r4   rr   rÖ   r×   rû   rã   rä   rÛ   rÜ   rv   rE   rÙ   rÞ   rG   r1   r1   r2   Ú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 )Nr4   r5   r6   zm0:4rv   rw   z(1/4)*R(m0, L_0, -L_0, m3))	r   r   r   r   rx   r	   r?   r    Ú_is_canon_bp)r4   r¦   r§   r¨   r©   rv   rE   rG   r1   r1   r2   Ú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‡   r4   r5   ©rŠ   r7   ú	a,b,c,d,erÛ   r8   r;   r6   r‚   )r   r   r   r¤   r   Úcontract_metricr   r   r@   r3   rõ   rŠ   )r‡   r4   rA   rB   rJ   rK   ro   r¡   rÛ   rE   rG   r:   r<   rÙ   r1   r1   r2   Ú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‡   r4   r5   r  za,b,c,d,e,L_0zp,qrV   r;   r]   é   r9   r   r[   r:   zA(L_1, -L_1)*p(L_0)zA(-L_1, L_1)*p(L_0))r   r   r   r¤   r   r  r    r$   r.   r   r   r@   r?   )r‡   r4   rA   rB   rJ   rK   ro   r°   r¡   rÛ   rÜ   rG   rÙ   rE   r[   r:   r1   r1   r2   Útest_contract_metric2A  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‡   rX   rY   r	   r›   rœ   r   r9   r<   r;   )r   r   r   r¤   r   r   r>   r   r  r.   r    r3   )r‡   rX   rc   rd   re   rf   r„   r=   rž   rŸ   r<   rE   rG   r1   r1   r2   Útest_metric_contract3„  s’   














 


 

  
""
&r  c                  C   sx   t ddd} td| ƒ\}}}| j}| j}td| gƒ}||||ƒ|| ƒ|| ƒ || | ƒ  }| |¡dks:J ‚d S )NÚR3rV   ©rŠ   úp q rÚKr   )r   r   ÚdeltaÚepsilonr   r  )r	  rÛ   rÜ   rÝ   r  Úepsr  Úexprr1   r1   r2   Útest_contract_metric4æ  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 )	Nr4   rw   r5   r  r  zp,q,r,sr   rW   )r   r   r  r   r    r   r-   r   )r4   rA   rB   rJ   rK   ro   r  rÛ   rÜ   rÝ   ÚsrE   rG   r1   r1   r2   Ú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µ   ©rA   rB   rK   rJ   ©r  r1   r2   Úidn$  ó   z!test_contract_delta1.<locals>.idnc                    s4   | j r|j sJ ‚|j s|j rJ ‚ˆ | |ƒˆ ||ƒ S r,   rµ   r  r  r1   r2   ÚT)  r  ztest_contract_delta1.<locals>.Tc                    s$   ˆ| |||ƒdˆ ˆ | |||ƒ  S ©Nr9   r1   ©rA   rB   rJ   rK   )r  r  rä   r1   r2   ÚP1.  s   $z test_contract_delta1.<locals>.P1c                    s   dˆ ˆ | |||ƒ S r  r1   r  )r  rä   r1   r2   ÚP21  s   z test_contract_delta1.<locals>.P2r   r;   r9   )r   r   r   r  Úcontract_deltar    r.   )r  rA   rB   rJ   rK   ro   ra   r  r  rE   rG   r1   )r  r  r  rä   r2   Ú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‡   r4   r5   r  r  úp qr   ÚdgrV   r9   r;   )r*   r   r   r   r¤   r   r    r$   r   r   rb   r	   ÚHalfr  )r‡   r4   rA   rB   rJ   rK   ro   r¡   rÛ   rÜ   rE   rG   r!  ri   r1   r1   r2   Útest_funD  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 )Nr4   r5   r6   ÚLorentzHÚLHzi,jzih,jhr   zph qhÚGsymbolÚGHsymbolr   ÚGr9   ÚGHr;   c                      s   t  ˆ dd¡S ©Nr9   r;   )r   Úset_commr1   ©r'  r1   r2   r±   |  rÈ   z$test_TensorManager.<locals>.<lambda>)r   r9   r;   )r   r9   )r   r   r   r   r   r+  r   r   r>   Ú_comm_i2symbolrÏ   r    r3   Úcomm_symbols2iÚcomm_i2symbolÚ_comm_symbols2ir(   r¹   Ú	set_commsÚget_commÚclear)r4   r$  rr   rÖ   ÚihÚjhrÛ   rÜ   ÚphÚqhr&  r(  r)  ÚpsÚpshrE   rG   ÚqsÚqshrä   Únhr1   r,  r2   Útest_TensorManagera  sB   ,
,,
r=  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‡   r4   r5   r  r  r   r9   c                 S   s   t dd„ | jD ƒƒS )Nc                 s   s    | ]}t |tƒV  qd S r,   )r-   r   )Ú.0Ú_r1   r1   r2   Ú	<genexpr>­  s   € z/test_hash.<locals>.check_all.<locals>.<genexpr>)ÚallrÓ   )Úobjr1   r1   r2   Ú	check_all¬  s   ztest_hash.<locals>.check_allrW   rV   )
r   r   r   r¤   r   rÓ   ÚhashÚfuncr   rb   )r‡   r4   rA   rB   rJ   rK   ro   r¡   rÛ   rÜ   Úp_typerG   rÙ   rÞ   Út4rC  Ú	tsymmetryr1   r1   r2   Ú	test_hash‡  s^   
 *rI  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)©r9   r   r   r   ©r   rY   r   r   ©r   r   rY   r   ©r   r   r   rY   r4   rw   r
  úi0:5ræ   r:   r<   r9   ÚGcommÚABr;   )©r9   r;   rV   rw   ©é   r  é   é   ©é	   r   rY   rW   ©r]   r¼   éûÿÿÿéúÿÿÿÚBAÚLorentzD©rY   r9   r9   r9   zmu0:3r=   )©r9   r9   r   )r9   r   r9   ©r   r9   r   Úndmzn0:3ÚNAé
   é   ÚNBc                    ó$   g | ]‰ ‡ fd d„t ddƒD ƒ‘qS )c                    s   g | ]}ˆ | ‘qS r1   r1   )r>  rÖ   ©rr   r1   r2   Ú
<listcomp>õ  rÂ   ú>_get_valued_base_test_variables.<locals>.<listcomp>.<listcomp>rb  rc  ©Úrange©r>  r1   rf  r2   rg  õ  ó   $ z3_get_valued_base_test_variables.<locals>.<listcomp>ÚNCrV   c                    re  )c                    s&   g | ]‰ ‡‡ fd d„t ddƒD ƒ‘qS )c                    s   g | ]}ˆ ˆ | ‘qS r1   r1   )r>  r×   )rr   rÖ   r1   r2   rg  ÷  s    zI_get_valued_base_test_variables.<locals>.<listcomp>.<listcomp>.<listcomp>rw   rT  ri  rk  rf  ©rÖ   r2   rg  ÷  s   & rh  r9   rw   ri  rk  r1   rf  r2   rg  ÷  rl  rS  )	r   r   Údatar   r   r   r   r>   rj  )Ú	minkowskir4   r‹   rŒ   r   rŽ   r   r‰   rç   rè   ré   r:   r<   rP  Ú	ba_matrixr[  r\  Úmu0Úmu1Úmu2r=   Ú
ndm_matrixr`  Ún0Ún1Ún2ra  rd  rm  r1   r1   r2   Ú_get_valued_base_test_variablesÄ  s@   

"ÿry  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 )NrQ  rR  rV  rX  )r9   r;   rV   rw   rS  r  rT  rU  rW  r   rY   rW   r]   r¼   rY  rZ  rV   c                 S   ó   g | ]}d | ‘qS )rV   r1   ©r>  rr   r1   r1   r2   rg    rÂ   z+test_valued_tensor_iter.<locals>.<listcomp>rY  c                 S   rz  )rY  r1   r{  r1   r1   r2   rg    rÂ   r;   r   c                 S   s   g | ]}| ‘qS r1   r1   r{  r1   r1   r2   rg    ó    )r*   ry  r   rt   )r:   r<   rP  r[  r=   r4   r‰   rç   rè   ré   r\  rr  rs  rt  r`  rv  rw  rx  ra  rd  rm  rp  rq  ru  r‹   rŒ   r   rŽ   r   Úlist_BAr1   r1   r2   Útest_valued_tensor_iterý  s    $ÿ,$$40"ìr~  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   r9   ©r9   r9   rY   )r*   ry  ©r:   r<   rP  r[  r=   r4   r‰   rç   rè   ré   r\  rr  rs  rt  r`  rv  rw  rx  ra  rd  rm  rp  rq  ru  r‹   rŒ   r   rŽ   r   r1   r1   r2   Ú3test_valued_tensor_covariant_contravariant_elements  s   $ÿ "ör  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 )NrJ  rK  rL  rM  rw   )r*   ry  Ú
get_matrixr   r   )r:   r<   rP  r[  r=   r4   r‰   rç   rè   ré   r\  rr  rs  rt  r`  rv  rw  rx  ra  rd  rm  rp  rq  ru  r‹   rŒ   r   rŽ   r   Úmatabr1   r1   r2   Útest_valued_tensor_get_matrix#  s   $ÿü *"ïr„  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 )Nr;   rV   rw   )r   rY   rW   r]   r9   )r*   ry  ro  rj  r½   ) r:   r<   rP  r[  r=   r4   r‰   rç   rè   ré   r\  rr  rs  rt  r`  rv  rw  rx  ra  rd  rm  rp  rq  ru  r‹   rŒ   r   rŽ   r   rr   rÖ   Úcontrexpr1   r1   r2   Útest_valued_tensor_contraction7  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 )Nrw   r;   ©r*   ry  ro  r€  r1   r1   r2   Ú#test_valued_tensor_self_contractionO  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 )Nr;   r9   )r*   ry  r   r€  r1   r1   r2   Útest_valued_tensor_powX  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:4r  )rV   rV   rV   r;   r   r9   é   r¼   é   é   é   éˆ   )r*   ry  r   ro  r   ))r:   r<   rP  r[  r=   r4   r‰   rç   rè   ré   r\  rr  rs  rt  r`  rv  rw  rx  ra  rd  rm  rp  rq  ru  r‹   rŒ   r   rŽ   r   Úx1Úx2Úx3Ú
rank2coeffÚ
coeff_exprÚadd_exprÚsub_exprrê   rë   rì   rí   Úexpr5r1   r1   r2   Útest_valued_tensor_expressionsc  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 )Nr;   r   r‡  )!r:   r<   rP  r[  r=   r4   r‰   rç   rè   ré   r\  rr  rs  rt  r`  rv  rw  rx  ra  rd  rm  rp  rq  ru  r‹   rŒ   r   rŽ   r   rê   rë   rì   rí   r1   r1   r2   Ú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Ú	Euclideanr9   zi1:4za b c dF)ÚcommutativeÚV1r;   ÚV2)r*   ry  r   ro  r   r   r   r   )'r:   r<   rP  r[  r=   r4   r‰   rç   rè   ré   r\  rr  rs  rt  r`  rv  rw  rx  ra  rd  rm  rp  rq  ru  r‹   rŒ   r   rŽ   r   ÚeuclidrA   rB   rJ   rK   r›  rœ  ÚvtpÚvtp2ÚVcr1   r1   r2   Ú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*   ry  r   ro  r‚  r  )r:   r<   rP  r[  r=   r4   r‰   rç   rè   ré   r\  rr  rs  rt  r`  rv  rw  rx  ra  rd  rm  rp  rq  ru  r‹   rŒ   r   rŽ   r   Úmmatrixr1   r1   r2   Ú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 )Nr9   rw   zqx qy qzc                    s"   g | ]‰ ‡ fd d„t dƒD ƒ‘qS )c                    s(   g | ]}|d  d |d   ˆ d  ‘qS )rV   r;   rT  r1   r{  rn  r1   r2   rg  Ú  s   ( z?test_valued_assign_numpy_ndarray.<locals>.<listcomp>.<listcomp>rw   ri  rk  r1   rn  r2   rg  Ú  s   " z4test_valued_assign_numpy_ndarray.<locals>.<listcomp>rY   )r*   ry  r   ro  rj  r   )$r:   r<   rP  r[  r=   r4   r‰   rç   rè   ré   r\  rr  rs  rt  r`  rv  rw  rx  ra  rd  rm  rp  rq  ru  r‹   rŒ   r   rŽ   r   Úarrrr   ÚqxÚqyÚqzÚrandom_4x4_datarÖ   r1   r1   r2   Ú 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)r;   r;   r;   r9   )r;   rV   r9   r   )r;   r9   r;   rV   )r9   r   rV   r;   rw   )	r*   ry  ro  r   r¤   Úinvr   Úget_kronecker_deltarj  )%r:   r<   rP  r[  r=   r4   r‰   rç   rè   ré   r\  rr  rs  rt  r`  rv  rw  rx  ra  rd  rm  rp  rq  ru  r‹   rŒ   r   rŽ   r   Úmdrã   r¤   ÚminvÚmeyeÚKDrr   rÖ   r1   r1   r2   Ú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 )Nrw   )r*   ry  r    rj  )$r:   r<   rP  r[  r=   r4   r‰   rç   rè   ré   r\  rr  rs  rt  r`  rv  rw  rx  ra  rd  rm  rp  rq  ru  r‹   rŒ   r   rŽ   r   Úe1Úe2rr   rÖ   Úo1Úo2r×   r1   r1   r2   Ú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ÚITrV   r
  úi0:4©r9   r9   r9   r:   r;   rW   )r9   r;   rV   )rw   rS  r  )rT  rU  rW  c                 S   s
   || _ d S r,   )ro  )r:   Údatr1   r1   r2   Úassign2  s   
z:test_valued_components_with_wrong_symmetry.<locals>.assignc                      ó
   ˆˆ ˆƒS r,   r1   r1   )ÚA_symrº  Ú	mat_nosymr1   r2   r±   6  r²   z<test_valued_components_with_wrong_symmetry.<locals>.<lambda>c                      r»  r,   r1   r1   )r¼  rº  Úmat_antisymr1   r2   r±   7  r²   c                      r»  r,   r1   r1   )Ú	A_antisymrº  Úmat_symr1   r2   r±   :  r²   c                      r»  r,   r1   r1   )r¿  rº  r½  r1   r2   r±   ;  r²   )r   r   r   )r*   r   r   ro  r   r   r@   r   r  r(   r¹   )r¶  r‹   rŒ   r   rŽ   ÚA_nosymr1   )r¿  r¼  rº  r¾  r½  rÀ  r2   Ú*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 )Nr4   r9   rr   r;   ©rR   r7   rŠ   rY   ú\mu, \nu, \alpha, \betaÚur   r_   rW   )r*   r   ro  r   r   r   r@   r   )	r4   rj   rk   rg   rh   rÅ  r_   Úmul_1Úmul_2r1   r1   r2   Útest_issue_10972_TensMul_data@  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 )Nr4   r9   r5   rw   rÃ  r]  rÄ  rÅ  rJ  r_   r;   rW   zE_x E_y E_z B_x B_y B_zr   )r   r   r   r   r¡   )r*   r   ro  r   r   r   r@   r   r   r    Úzeros)r4   rj   rk   rg   rh   rÅ  r_   ÚExÚEyÚEzÚBxÚByÚBzr‰   r¡   ÚperprÆ  rÇ  ÚFperpÚmul_3r1   r1   r2   Útest_TensMul_dataX  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 )Nr4   r9   rr   r;   rÃ  rY   rI   zi_0:2r¡   rÅ  r   )	r*   r   ro  r   r   r   r@   r   rÉ  )r4   rA   rB   rJ   rK   r‹   rŒ   r¡   rÅ  Úadd_1Úadd_2rÐ  rÆ  rÇ  r1   r1   r2   Ú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 )Nr4   r5   r6   rN  r°   ÚL_1r:   r<   r;   )r9   r   r  r_  )r   r9   r9   r^  r¸  )r   r   r9   r   )r   r9   r9   r   )r   r   r9   r9   )r   r9   r9   r9   )r   r   r   r   r@   rt   Ú_iterate_free_indicesÚ_iterate_dummy_indicesÚ_iterate_indicesr¸   Úget_free_indices)r5   r‹   rŒ   r   rŽ   r   ÚL0ÚL1r:   r<   r±  r²  Úe3Úe4Úe5Úe6r1   r1   r2   Ú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 )Nr5   zi j kr°   úA B C DzA(L_0)*(A(-L_0) + B(-L_0))zA(i)*A(j) + A(i)*B(j)z2A(-L_0)*(A(L_0)*A(j) + A(L_0)*B(j)*C(L_1)*C(-L_1))z8A(j)*A(L_0)*A(-L_0) + A(L_0)*A(-L_0)*B(j)*C(L_1)*C(-L_1)r;   z%A(i)*(B(j)*C(k) + C(j)*(A(k) + D(k)))z0A(i)*B(j)*C(k) + A(i)*C(j)*A(k) + A(i)*C(j)*D(k)rV   )r   r   r   r   r-   r   r   r   rÓ   r?   r    ró   r   rÔ   r   )r5   rr   rÖ   r×   r°   r:   r<   r=   r‡   r  ÚtmÚp1Úp2Úp3r1   r1   r2   Ú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 )	Nr5   r·  r:   zx yr‹   c                      s   ˆ ˆˆ ƒS r,   r1   r1   ©r:   rï   Úyr1   r2   r±   "  r´   z6test_tensor_alternative_construction.<locals>.<lambda>c                      s   ˆ dˆ ƒS rÆ   r1   r1   )r:   rï   r1   r2   r±   #  r´   )r   r   r   r   r   r(   Ú	TypeErrorr¹   )r5   r‹   rŒ   r   rŽ   r1   ré  r2   Ú$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 )'Nr5   ÚL2r;   r
  zi j k lrã  ÚHr  rw   r9   rV   rY   rW   r¼   rr   rÖ   r]   é   c                      ó
   ˆ   ˆ¡S r,   ©Ú_extract_datar1   ©r  Úreplr1   r2   r±   ]  r²   z)test_tensor_replacement.<locals>.<lambda>c                      rð  r,   rñ  r1   ró  r1   r2   r±   a  r²   c                      rð  r,   rñ  r1   ró  r1   r2   r±   e  r²   r  rU  éd   éq   rS  r   é*   rJ  rK  rL  rM  c                      ó   ˆ   ˆˆg¡S r,   ©Úreplace_with_arraysr1   )r  rÖ   rô  r1   r2   r±   ’  rÈ   c                      rø  r,   rù  r1   )r  rr   rô  r1   r2   r±   —  rÈ   zu1:4ÚUc                      s   ˆ   ˆˆˆ g¡S r,   rù  r1   )r  rô  Úu1Úu2r1   r2   r±   ž  r|  )r   r   r   r   r+   rò  r   rú  r   Úreshaper(   r¹   )r5   rí  r×   rû   r:   r<   r=   r‡   rî  r  Úu3rû  r1   )r  rr   rÖ   rô  rü  rý  r2   Ú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 )
Nr5   rw   r
  r:   r<   r·  zL_0:2r   rV   )r   r   r   Úrewriter   r   r   )r5   r:   r<   r‹   rŒ   r   rŽ   r°   r×  rd   re   rf   Úb1Úb2r1   r1   r2   Útest_rewrite_tensor_to_Indexed¡  s&   ".ÿÿ<Hr  c                  C   s&  t ddd} td| ƒ\}}}tdt| dd\}}}td| ƒ}| j}| j}	td	| gƒ}
td
| gƒ}td| | gƒ}tddd}tdƒ}| |¡||iksLJ ‚| | ¡|| iksYJ ‚| | ¡dkscJ ‚| |¡||iksnJ ‚|	|| |ƒ |	|||ƒ¡dks€J ‚|	|| |ƒ |	|||ƒ¡||| |iks—J ‚|	|| |ƒ 	|	|||ƒd¡dksªJ ‚|ƒ  |
|ƒ||ƒ ¡|ƒ |
|ƒ||ƒ iksÃJ ‚||ƒ |
|ƒ¡||||ƒj
t|
|ƒƒiksÛJ ‚|||ƒ |
|ƒ||ƒ ¡|||||ƒj
t|
|ƒ||ƒ ƒiksýJ ‚|||ƒ |
|ƒ||ƒ ¡|||ƒj
t|
|ƒ||ƒ ƒiksJ ‚|||ƒ |||ƒ¡|||ƒj
t|||ƒƒiks9J ‚|||ƒ |||ƒ¡dksIJ ‚|
|ƒ|
|ƒ  	|||ƒd¡dks]J ‚|||ƒ |||ƒ¡i ksmJ ‚|	|||ƒ |	|||ƒ¡du sJ ‚|	|||ƒ |	|||ƒ¡i ks‘J ‚dS )zY
    Test match and replace with the pattern being a WildTensor or a WildTensorIndex
    r	  rV   r
  r  za b cT)Úclsr·   Úignore_updownr¡   r  rƒ   r:   ÚW)Úunordered_indicesrû  Nr9   )r   r   r   r%   r  r  r   r&   ÚmatchesÚreplaceÚheadr'   )r	  rÛ   rÜ   rÝ   rA   rB   rJ   r¡   r  r  r  rƒ   r:   r  rû  r1   r1   r2   Útest_tensor_matchingº  s8   
$.&20DB6 ( $(r  c                  C   s¦  t ddd} td| ƒ\}}}td| gƒ}td| gƒ}td| | gƒ}t| jd | d	ƒ}||ƒ||ƒ || ƒ  ||ƒ||ƒ|| ƒ i¡||ƒ||ƒ || ƒ || ƒ ksYJ ‚||ƒ||ƒ || ƒ  ||ƒ||ƒ|| ƒ i¡||ƒ||ƒ || ƒ || ƒ ksˆJ ‚||ƒ||ƒ  ||||ƒ||ƒ|| ƒ i¡||ƒ||ƒ || ƒ ks¯J ‚||ƒ||| ƒ || ƒ  ¡ ||ƒ||| ƒ || ƒ ksÑJ ‚d
S )z;
    Test subs and xreplace in TensMul. See bug #24337
    r	  rV   r
  r  r  rƒ   r:   Ú_0TN)r   r   r   r   r7   ÚsubsÚxreplacerÔ   )r	  rÛ   rÜ   rÝ   r  rƒ   r:   ÚC0r1   r1   r2   Útest_TensMul_subsÞ  s   ^^NHr  c                   C   s:   t ƒ  tdgd ƒ W d   ƒ d S 1 sw   Y  d S r*  )r*   r"   r1   r1   r1   r2   Útest_tensorsymmetryï  s   "ÿr  c                   C   s6   t ƒ  tdg ƒ W d   ƒ d S 1 sw   Y  d S )Nr:   )r*   r!   r1   r1   r1   r2   Ú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 )Nr;   r4   )r*   r   r@   r   r#   r-   )r«   r4   ÚS2r1   r1   r2   Útest_TensorType÷  s   
"ür  c                   C   s8   t ƒ  tddd W d   ƒ d S 1 sw   Y  d S )Nr4   r5   )Ú	dummy_fmt)r*   r   r1   r1   r1   r2   Útest_dummy_fmtþ  s   "ÿr  c                  C   s  t ddd} td| ƒ}td| gƒ}tdƒ\}}}t|d  |||ƒi¡tƒs(J ‚t|d  |||ƒ|| ƒ i¡tƒs=J ‚t|d  |||ƒi¡tƒsMJ ‚t|d  |||ƒ|| ƒ i¡tƒsbJ ‚t|d  	|||ƒ¡tƒsqJ ‚t|d  	|||ƒ|| ƒ ¡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	  rV   r
  rr   r  zx y zr;   N)
r   r   r   r   r-   r  r   r   r  r
  )r	  rr   r  rï   rê  Úzr1   r1   r2   Útest_postprocessor  s   
 * *,r  N)xÚsympy.concrete.summationsr   Úsympy.core.functionr   Úsympy.core.numbersr   Úsympy.matrices.denser   r   Úsympy.tensor.indexedr   Úsympy.combinatoricsr   Ú
sympy.corer	   r
   r   r   r   Úsympy.core.containersr   Úsympy.core.symbolr   Ú(sympy.functions.elementary.miscellaneousr   Úsympy.tensor.arrayr   Úsympy.tensor.tensorr   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   Úsympy.testing.pytestr(   r)   r*   Úsympy.matricesr+   r3   rH   rL   rP   rU   rq   ru   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=  rI  ry  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  r1   r1   r1   r2   Ú<module>   s     `	M* 	(V%%	
,Cb+'&=9	)	&!;35{$