o
    	¢ÄiT= ã                   @   sl  d dl mZ d dlmZ d dlmZ d dlmZmZ d dl	m
Z
 d dlmZ d dlmZmZmZmZmZmZmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 d dl6m7Z7m8Z8m9Z9 d dl:m;Z; d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(d)„ ZHd*d+„ ZId,d-„ ZJd.d/„ ZKd0d1„ ZLd2d3„ ZMd4d5„ ZNd6d7„ ZOd8d9„ ZPd:d;„ ZQd<d=„ ZRd>d?„ ZSd@dA„ ZTdBdC„ ZUe8dDdE„ ƒZVdFdG„ ZWdHdI„ ZXdJdK„ ZYdLdM„ ZZdNdO„ Z[dPdQ„ Z\dRdS„ Z]dTdU„ Z^dVdW„ Z_dXdY„ Z`dZd[„ Zad\d]„ Zbd^d_„ Zcd`da„ Zddbdc„ Zeddde„ Zfdfdg„ Zgdhdi„ Zhdjdk„ Zidldm„ Zjdndo„ Zkdpdq„ Zldrds„ Zmdtdu„ Zndvdw„ Zodxdy„ Zpdzd{„ Zqd|d}„ Zrd~d„ Zsd€d„ Ztd‚dƒ„ Zud„d…„ Zvd†d‡„ Zwdˆd‰„ ZxdŠd‹„ ZydŒd„ ZzdŽd„ Z{dd‘„ Z|d’d“„ Z}d”d•„ Z~d–d—„ Zd˜d™„ Z€dšd›„ Zdœd„ Z‚džS )Ÿé    )ÚSum)Úexpand)ÚInteger)ÚMatrixÚeye)ÚIndexed)ÚPermutation)ÚSÚRationalÚSymbolÚBasicÚAddÚWildÚFunction)ÚTuple)Úsymbols)Úsqrt)Ú	integrate)ÚArray)ÚTensorIndexTypeÚtensor_indicesÚTensorSymmetryÚget_symmetric_group_sgsÚTensorIndexÚ
tensor_mulÚTensAddÚriemann_cyclic_replaceÚriemann_cyclicÚTensMulÚtensor_headsÚTensorManagerÚTensExprÚ
TensorHeadÚcanon_bpÚ
tensorheadÚtensorsymmetryÚ
TensorTypeÚsubstitute_indicesÚWildTensorIndexÚWildTensorHeadÚ_WildTensExpr)ÚraisesÚXFAILÚwarns_deprecated_sympy)Údiagc                 C   s0   t | tƒr
|  |¡S t |tƒr| | ¡S | |kS ©N)Ú
isinstancer!   Úequals)Zarg1Zarg2© r2   úX/home/kim/smarthome/.venv/lib/python3.10/site-packages/sympy/tensor/tests/test_tensor.pyÚ	_is_equal   s
   



r4   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)r5   ÚaÚbÚd0Úd1r;   r=   ÚtÚtcÚt1r>   r2   r2   r3   Útest_canonicalize_no_slot_sym   sV   &&&rI   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 )Nr5   r6   r7   ú
a, b, c, dr;   r:   zA(a)*A(b)*A(c)z-A(a)*A(b)*A(c)r<   zA(a, c)*A(b, d)z-A(a, c)*A(b, d))r   r   r"   r   r?   r#   r@   rA   )r5   rB   rC   ÚcÚdr;   rF   rG   r2   r2   r3   Útest_canonicalize_no_dummiesl   s*   rM   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 )Nr5   r;   r<   )r   r"   r   r?   rA   )r6   ÚA1ÚA2ZA3r2   r2   r3   Ú-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 )Nr5   r6   r   ©r8   Ú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@   )r5   rD   rE   Úd2Úd3r;   rF   rG   r2   r2   r3   Ú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 )'Nr5   r6   r7   za,a0,a1,a2,a3,b,d0,d1,d2,d3r;   r:   zA(L_0)*A(-L_0)z,A(L_0)*A(-L_0)*A(L_1)*A(-L_1)*A(L_2)*A(-L_2)r   r<   z!A(a, L_0)*A(b, L_1)*A(-L_0, -L_1)r=   z!A(b, L_0)*A(-L_0, L_1)*B(a, -L_1)é   zA(a, L_0, L_1)*A(b, -L_0, -L_1)zCA(a0, L_0, L_1)*A(a1, -L_0, L_2)*A(a2, a3, L_3)*A(-L_1, -L_2, -L_3)éþÿÿÿz1A(L_0, L_1, L_2)*A(-L_0, -L_1, L_3)*B(-L_2, -L_3)ÚSpinorr	   éÿÿÿÿrQ   z2-A(S_0, S_1, S_2)*A(-S_0, -S_1, S_3)*B(-S_2, -S_3)ÚMatÚM)rR   r8   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@   rA   Údirect_product) r5   rB   Úa0Úa1Úa2Úa3rC   rD   rE   rS   rT   r;   rF   rG   r=   rX   rZ   ÚalphaÚbetaÚgammaÚmuÚnuÚrhor\   ZGamma2ZGamma3r^   rK   rL   ÚeÚffra   r2   r2   r3   Útest_canonicalize1µ   s    ÿ66""8**ÿ*ÿ*ÿ
ÿ
ÿ
ÿ".Nro   c                  C   s6   t dƒ} td| ƒ}t|ttfƒrJ ‚t|tƒsJ ‚d S )Nr;   Úi)r   r   r0   ÚtupleÚlistr   )r;   rp   r2   r2   r3   Ú"test_bug_correction_tensor_indices?  s   
rs   c                  C   sö   t ddd} td| ƒ\}}}}}}}}}	}
}}td| gd t ¡ ƒ}|||| | ƒ}| ¡ }t|ƒdks7J ‚|| || |ƒ||||| ƒ || | |	 |
 ƒ || | | | ƒ ||||| ƒ ||	|
||ƒ }| ¡ }t|ƒdksyJ ‚d S )	Nr5   r6   r7   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@   )r5   rD   rE   rS   rT   Úd4Úd5Úd6Zd7Zd8Zd9Zd10Zd11rt   rF   rG   r2   r2   r3   Útest_riemann_invariantsH  s    ÿ6	ÿÿÿrz   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 )Nr5   r6   r7   zd0:7za0:6úa,brt   ru   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   rv   r#   r@   rA   )r5   rD   rE   rS   rT   rw   rx   ry   rc   rd   re   rf   Úa4Za5rB   rC   rt   rF   rG   r|   r2   r2   r3   Ú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ÚEuclr:   ÚE)rR   Údimr8   zi0:15r;   rV   r]   r   )r   r   r   r"   r   rA   r#   )r   r€   Úi0Úi1Úi2Úi3Úi4Zi5Úi6Úi7Úi8Zi9Zi10Zi11Zi12Zi13Zi14r;   rF   rH   r2   r2   r3   Ú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   r8   úa0:5úchi,psir:   )r   r   r   r   r   r?   r#   )r   rX   rc   rd   re   rf   r}   ÚchiÚpsirF   rH   r2   r2   r3   Útest_canonicalize3  s   r‘   c                  C   sR   t ddd} td| ƒ}td| gƒ}t||ƒd||ƒ ƒ}| ¡ ||ƒ ks'J ‚d S )NÚ	CartesianrV   ©r‚   ÚpÚKrW   )r   r   r"   r   r#   )r’   r”   r•   Úexprr2   r2   r3   Útest_canonicalize4«  s
   
r—   c                  C   s†   t ddd} td| ƒ}td| gƒ}tdtd}tdƒ}t||ƒ|d	d
fƒ||ƒ }| ¡  ¡ t||ƒ|d	d
fƒ ¡ ||ƒ ksAJ ‚d S )NÚR3rV   r“   r”   r•   ra   )ÚclsÚxr   r:   )r   r   r"   r   r   r   Zas_dummyr#   )r˜   r”   r•   ra   rš   r–   r2   r2   r3   Útest_canonicalize5³  s   
4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   r5   Úgr:   r6   )Zmetric_namerR   r‚   r8   zm0:5r<   zg(Lorentz,Lorentz)ÚTSpacer7   zi0 i1r;   zA(TSpace_0, -TSpace_0))r   r   r   r   rA   r   Úmetricr@   Zeps_dimr‚   r"   r#   )r   r5   Úm0Úm1Úm2Úm3Zm4Úsym2Zsym2nrœ   r   rƒ   r„   r;   r2   r2   r3   Ú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 )Nr5   r6   r7   úa,b,c,dúA Br<   ÚL_0c                      s
   t dˆ ƒS )NrV   )r   r2   )r5   r2   r3   Ú<lambda>Ù  ó   
 ztest_indices.<locals>.<lambda>c                      s   ˆ ˆˆˆƒS r/   r2   r2   ©r;   rB   rC   rK   r2   r3   r¨   Ú  ó    r;   rB   rC   z-bF©Zis_up)r   r   Útensor_index_typer   r   rA   Úget_indicesr   r+   Ú
ValueErrorr"   )rL   r=   rF   Úindicesr§   r2   )r;   r5   rB   rC   rK   r3   Ú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   r:   r   ru   )
r   rA   r   rb   r?   ÚrankÚbaser   Ú
generatorsr   )Zsymr2   r2   r3   Ú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 )Nr5   r6   r7   r¥   r¦   r<   c                      s   ˆˆˆƒˆˆ ˆƒ S r/   r2   r2   )rB   rC   rK   rL   rœ   r2   r3   r¨   ü  ó    ztest_TensExpr.<locals>.<lambda>c                      s   t jˆˆ ˆƒ S r/   ©r	   ÚOner2   )rB   rC   rœ   r2   r3   r¨   ý  s    c                      s   ˆ ˆˆƒˆˆˆƒ ˆˆˆƒ S r/   r2   r2   ©r;   rB   rC   rK   rL   rœ   r2   r3   r¨   þ  s    c                      s   t jˆ ˆˆƒˆˆˆƒ  S r/   r¸   r2   )r;   rK   rL   rœ   r2   r3   r¨   ÿ  s    c                      s   ˆ ˆˆƒˆ ˆˆƒ S r/   r2   r2   rª   r2   r3   r¨      r·   c                      s   ˆ ˆˆƒd S ©Nr<   r2   r2   ©r;   rB   rC   r2   r3   r¨     ó    c                      s   dˆ ˆˆƒ S r»   r2   r2   r¼   r2   r3   r¨     r½   c                      s   t ˆ ˆˆƒƒS r/   )Úabsr2   r¼   r2   r3   r¨     r½   )
r   r   rž   r   r   rA   r+   r¯   r-   ÚNotImplementedError)r5   r=   r2   rº   r3   Ú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 )Nr5   r6   r7   r;   r<   r   )	r   r"   ÚnameÚindex_typesr³   Zsymmetryr   r?   Úcomm)r5   r;   r2   r2   r3   Ú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 )Nr2   r   r5   r6   r7   úa,b,d0,d1,i,j,kr9   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)ru   rV   r:   )r   ÚargsÚdoitr   r   r   r   rA   r1   r@   r   r#   r	   r¹   r³   r   Ú	from_data)r5   rB   rC   rD   rE   rp   ÚjÚkr;   r=   rH   Zt2aÚt2Zt2br”   ÚqÚrrF   Út3Ztz1r2   r2   r3   Ú	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 )
Nr5   r6   r7   rÅ   r9   r<   rÆ   r   rV   )r   r   r   r   rA   r4   r	   ZZero)r5   rB   rC   rD   rE   rp   rÊ   rË   r;   r=   r”   rÍ   rÎ   rF   r2   r2   r3   Útest_special_eq_neq  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 )Nr5   r6   r7   zm,n,p,qrt   ru   r;   rV   r]   r<   r   r:   )r   r   r"   r   rv   rA   r#   r
   )
r5   ÚmÚnr”   rÍ   rt   r;   rH   rÌ   rF   r2   r2   r3   Ú	test_add2Œ  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 )
Nr5   r6   r7   zi0:2ú
E px py pzr;   r=   r<   rW   )r   r   r   r"   rÇ   )r5   rƒ   r„   r   ÚpxÚpyÚpzr;   r=   Úexpr1Úexpr2Úexpr3Úexpr4r2   r2   r3   Ú	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   )rš   r5   r6   r7   r¥   Ú1r¦   r<   r:   z(x + 1)*A(a, b)zA(a, b)r>   c                      s   ˆ ˆˆƒˆ ˆˆƒ S r/   r2   r2   rª   r2   r3   r¨   Ô  r·   ztest_mul.<locals>.<lambda>)Z	sympy.abcrš   r   r   r   rÉ   r	   r¹   r@   r   r   rA   rÂ   r³   ZdumÚcoeffÚsortedÚfreeÚ
componentsr   Úsplitr"   r+   r¯   )rš   r5   rL   rF   r=   ÚtsrH   r>   r2   rª   r3   Ú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 )Nr5   r6   r7   úi,j,k,l,m,n,p,qr9   r<   r”   )r   r   r   r   rA   r"   r'   )r5   rp   rÊ   rË   ÚlrÒ   rÓ   r”   rÍ   r;   r=   rF   rH   Út1ar2   r2   r3   Ú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 )Nr5   r6   r7   zm:4rt   ru   rY   rV   r:   r<   )r   r   r"   r   rv   r   r
   )	r5   rŸ   r    r¡   r¢   rt   rF   rH   rè   r2   r2   r3   Ú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 )Nr5   r6   r7   ræ   rt   ru   r   r<   rY   rV   r:   )r   r   r"   r   rv   r   r
   )r5   rp   rÊ   rË   rç   rÒ   rÓ   r”   rÍ   rt   rF   rÌ   rÏ   rH   r2   r2   r3   Ú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 )Nr5   r6   r7   zm0:4rt   ru   z(1/4)*R(m0, L_0, -L_0, m3))	r   r   r"   r   rv   r	   r@   r#   Z_is_canon_bp)r5   rŸ   r    r¡   r¢   rt   rF   rH   r2   r2   r3   Ú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   r5   r6   ©r‚   r8   ú	a,b,c,d,er”   r9   r<   r7   r{   )r   r   r   rž   r"   Úcontract_metricr   r   rA   r4   rá   r‚   )r   r5   rB   rC   rK   rL   rm   rœ   r”   rF   rH   r;   r=   rÌ   r2   r2   r3   Ú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   r5   r6   rí   za,b,c,d,e,L_0zp,qrV   r<   r]   é   r:   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'   r1   r"   r   rA   r@   )r   r5   rB   rC   rK   rL   rm   r§   rœ   r”   rÍ   rH   rÌ   rF   r[   r;   r2   r2   r3   Útest_contract_metric2S  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Ž   r:   r=   r<   )r   r   r   rž   r   r   r?   r"   rï   r1   r#   r4   )r   rX   rc   rd   re   rf   r}   r>   r   r   r=   rF   rH   r2   r2   r3   Ú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 )Nr˜   rV   r“   úp q rr•   r   )r   r   ÚdeltaÚepsilonr"   rï   )r˜   r”   rÍ   rÎ   rõ   Úepsr•   r–   r2   r2   r3   Útest_contract_metric4ø  s   .rø   c            	      C   st   t ddd} td| ƒ\}}}| j}td| gƒ}tdƒ}tdƒ}d||ƒ || ƒ || ƒ }| |¡|ks8J ‚d S )	Nr˜   rV   r“   rô   r•   r_   rš   r<   )r   r   rõ   r"   r   r   rï   )	r˜   r”   rÍ   rÎ   rõ   r•   r_   rš   r–   r2   r2   r3   Útest_contract_metric5  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 )	Nr5   ru   r6   rí   rî   zp,q,r,sr   rW   )r   r   rö   r   r#   r   r0   r"   )r5   rB   rC   rK   rL   rm   rö   r”   rÍ   rÎ   ÚsrF   rH   r2   r2   r3   Ú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¬   ©rB   rC   rL   rK   ©rõ   r2   r3   ÚidnD  ó   z!test_contract_delta1.<locals>.idnc                    s4   | j r|j sJ ‚|j s|j rJ ‚ˆ | |ƒˆ ||ƒ S r/   r¬   rý   rþ   r2   r3   ÚTI  r   ztest_contract_delta1.<locals>.Tc                    s$   ˆ| |||ƒdˆ ˆ | |||ƒ  S ©Nr:   r2   ©rB   rC   rK   rL   )r  rÿ   rÓ   r2   r3   ÚP1N  s   $z test_contract_delta1.<locals>.P1c                    s   dˆ ˆ | |||ƒ S r  r2   r  )r  rÓ   r2   r3   ÚP2Q  s   z test_contract_delta1.<locals>.P2r   r<   r:   )r   r   r   rõ   Úcontract_deltar#   r1   )rü   rB   rC   rK   rL   rm   ra   r  r  rF   rH   r2   )r  rõ   rÿ   rÓ   r3   Útest_contract_delta1=  s(   $
"$
$

r  c                  C   sv   t ddd} td| ƒ\}}| j}td| gƒ}d||ƒ||ƒ || | ƒ  }| |¡d||ƒ|| ƒ  ks9J ‚d S )Nr˜   rV   r“   úp qr•   r:   )r   r   rõ   r"   r  )r˜   r”   rÍ   rõ   r•   r–   r2   r2   r3   Útest_contract_delta2d  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   r5   r6   rí   rî   r  r   ÚdgrV   r:   r<   )r-   r   r   r   rž   r   r#   r'   r"   r   rb   r	   ZHalfrï   )r   r5   rB   rC   rK   rL   rm   rœ   r”   rÍ   rF   rH   r
  ri   r2   r2   r3   Útest_funn  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 )Nr5   r6   r7   ÚLorentzHZLHzi,jzih,jhr  zph qhÚGsymbolÚGHsymbolr   ÚGr:   ÚGHr<   c                      s   t  ˆ dd¡S ©Nr:   r<   )r    Úset_commr2   ©r  r2   r3   r¨   ¦  r½   z$test_TensorManager.<locals>.<lambda>)r   r:   r<   )r   r:   )r   r   r   r   r    r  r"   r   r?   Z_comm_i2symbolrÃ   r#   r4   Zcomm_symbols2iZcomm_i2symbolZ_comm_symbols2ir+   r¯   Z	set_commsZget_commÚclear)r5   r  rp   rÊ   ZihZjhr”   rÍ   ÚphZqhr  r  r  ZpsZpshrF   rH   ÚqsZqshrÓ   Znhr2   r  r3   Útest_TensorManager‹  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   r5   r6   rí   rî   r  r:   c                 S   s   t dd„ | jD ƒƒS )Nc                 s   s    | ]}t |tƒV  qd S r/   )r0   r   )Ú.0Ú_r2   r2   r3   Ú	<genexpr>×  s   € z/test_hash.<locals>.check_all.<locals>.<genexpr>)ÚallrÇ   )Úobjr2   r2   r3   Ú	check_allÖ  s   ztest_hash.<locals>.check_allrW   rV   )
r   r   r   rž   r   rÇ   ÚhashÚfuncr   rb   )r   r5   rB   rC   rK   rL   rm   rœ   r”   rÍ   Zp_typerH   rÌ   rÏ   Zt4r  Z	tsymmetryr2   r2   r3   Ú	test_hash±  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)©r:   r   r   r   ©r   rY   r   r   ©r   r   rY   r   ©r   r   r   rY   r5   ru   r“   úi0:5rÕ   r;   r=   r:   ZGcommÚABr<   )©r:   r<   rV   ru   ©é   rñ   é   é   ©é	   r   rY   rW   ©r]   r²   éûÿÿÿéúÿÿÿÚBAÚLorentzD©rY   r:   r:   r:   zmu0:3r>   )©r:   r:   r   )r:   r   r:   ©r   r:   r   Úndmzn0:3ÚNAé
   é   ÚNBc                    ó$   g | ]‰ ‡ fd d„t ddƒD ƒ‘qS )c                    s   g | ]}ˆ | ‘qS r2   r2   )r  rÊ   ©rp   r2   r3   Ú
<listcomp>  r·   ú>_get_valued_base_test_variables.<locals>.<listcomp>.<listcomp>r8  r9  ©Úrange©r  r2   r<  r3   r=    ó   $ z3_get_valued_base_test_variables.<locals>.<listcomp>ÚNCrV   c                    r;  )c                    s&   g | ]‰ ‡‡ fd d„t ddƒD ƒ‘qS )c                    s   g | ]}ˆ ˆ | ‘qS r2   r2   )r  rË   )rp   rÊ   r2   r3   r=  !  s    zI_get_valued_base_test_variables.<locals>.<listcomp>.<listcomp>.<listcomp>ru   r*  r?  rA  r<  ©rÊ   r3   r=  !  s   & r>  r:   ru   r?  rA  r2   r<  r3   r=  !  rB  r)  )	r   r   Údatar   r   r"   r   r?   r@  )Ú	minkowskir5   rƒ   r„   r…   r†   r‡   r   rÖ   r×   rØ   r;   r=   r&  Ú	ba_matrixr1  r2  Úmu0Úmu1Úmu2r>   Ú
ndm_matrixr6  Ún0Ún1Ún2r7  r:  rC  r2   r2   r3   Ú_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 )Nr'  r(  r,  r.  )r:   r<   rV   ru   r)  rñ   r*  r+  r-  r   rY   rW   r]   r²   r/  r0  rV   c                 S   ó   g | ]}d | ‘qS )rV   r2   ©r  rp   r2   r2   r3   r=  5  r·   z+test_valued_tensor_iter.<locals>.<listcomp>r/  c                 S   rP  )r/  r2   rQ  r2   r2   r3   r=  6  r·   r<   r   c                 S   s   g | ]}| ‘qS r2   r2   rQ  r2   r2   r3   r=  <  ó    )r-   rO  r   rr   )r;   r=   r&  r1  r>   r5   r   rÖ   r×   rØ   r2  rH  rI  rJ  r6  rL  rM  rN  r7  r:  rC  rF  rG  rK  rƒ   r„   r…   r†   r‡   Zlist_BAr2   r2   r3   Útest_valued_tensor_iter'  s    $ÿ,$$40"ìrS  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   r:   ©r:   r:   rY   )r-   rO  ©r;   r=   r&  r1  r>   r5   r   rÖ   r×   rØ   r2  rH  rI  rJ  r6  rL  rM  rN  r7  r:  rC  rF  rG  rK  rƒ   r„   r…   r†   r‡   r2   r2   r3   Ú3test_valued_tensor_covariant_contravariant_elements?  s   $ÿ "örV  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!  r"  r#  r$  ru   )r-   rO  Ú
get_matrixr   r   )r;   r=   r&  r1  r>   r5   r   rÖ   r×   rØ   r2  rH  rI  rJ  r6  rL  rM  rN  r7  r:  rC  rF  rG  rK  rƒ   r„   r…   r†   r‡   Zmatabr2   r2   r3   Útest_valued_tensor_get_matrixM  s   $ÿü *"ïrX  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   ru   )r   rY   rW   r]   r:   )r-   rO  rE  r@  r³   ) r;   r=   r&  r1  r>   r5   r   rÖ   r×   rØ   r2  rH  rI  rJ  r6  rL  rM  rN  r7  r:  rC  rF  rG  rK  rƒ   r„   r…   r†   r‡   rp   rÊ   Zcontrexpr2   r2   r3   Útest_valued_tensor_contractiona  s*   
$ÿ8 $.<ÿ:ÿ$ìrY  c                  C   s˜   t ƒ ? tƒ \} }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}||| ƒjdks/J ‚||| ƒjdks:J ‚W d   ƒ d S 1 sEw   Y  d S )Nru   r<   ©r-   rO  rE  rU  r2   r2   r3   Ú#test_valued_tensor_self_contractiony  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<   r:   )r-   rO  r   rU  r2   r2   r3   Útest_valued_tensor_pow‚  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:4rT  )rV   rV   rV   r<   r   r:   é   r²   é   é   é   éˆ   )r-   rO  r   rE  r   ))r;   r=   r&  r1  r>   r5   r   rÖ   r×   rØ   r2  rH  rI  rJ  r6  rL  rM  rN  r7  r:  rC  rF  rG  rK  rƒ   r„   r…   r†   r‡   Úx1Zx2Zx3Z
rank2coeffZ
coeff_exprZadd_exprZsub_exprrÙ   rÚ   rÛ   rÜ   Zexpr5r2   r2   r3   Útest_valued_tensor_expressions  s:   
$ÿ:.R$Ûrc  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   rZ  )!r;   r=   r&  r1  r>   r5   r   rÖ   r×   rØ   r2  rH  rI  rJ  r6  rL  rM  rN  r7  r:  rC  rF  rG  rK  rƒ   r„   r…   r†   r‡   rÙ   rÚ   rÛ   rÜ   r2   r2   r3   Útest_valued_tensor_add_scalar¶  s   $ÿ222T"îrd  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 )
NZ	Euclideanr:   zi1:4za b c dF)ZcommutativeÚV1r<   ÚV2)r-   rO  r   rE  r   r   r"   r   )'r;   r=   r&  r1  r>   r5   r   rÖ   r×   rØ   r2  rH  rI  rJ  r6  rL  rM  rN  r7  r:  rC  rF  rG  rK  rƒ   r„   r…   r†   r‡   ZeuclidrB   rC   rK   rL   re  rf  ZvtpZvtp2ZVcr2   r2   r3   Útest_noncommuting_componentsË  s*   $ÿ
*&*&"çrg  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  rW  r  )r;   r=   r&  r1  r>   r5   r   rÖ   r×   rØ   r2  rH  rI  rJ  r6  rL  rM  rN  r7  r:  rC  rF  rG  rK  rƒ   r„   r…   r†   r‡   Zmmatrixr2   r2   r3   Útest_valued_non_diagonal_metricè  s   $ÿ<"ûrh  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 )Nr:   ru   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<   r*  r2   rQ  rD  r2   r3   r=    s   ( z?test_valued_assign_numpy_ndarray.<locals>.<listcomp>.<listcomp>ru   r?  rA  r2   rD  r3   r=    s   " z4test_valued_assign_numpy_ndarray.<locals>.<listcomp>rY   )r-   rO  r   rE  r@  r   )$r;   r=   r&  r1  r>   r5   r   rÖ   r×   rØ   r2  rH  rI  rJ  r6  rL  rM  rN  r7  r:  rC  rF  rG  rK  rƒ   r„   r…   r†   r‡   Zarrrp   ZqxZqyZqzZrandom_4x4_datarÊ   r2   r2   r3   Ú test_valued_assign_numpy_ndarrayñ  s@   
$ÿ
(&<22,ü4(D<üÿ$ãri  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<   r:   )r<   rV   r:   r   )r<   r:   r<   rV   )r:   r   rV   r<   ru   )	r-   rO  rE  r   rž   Úinvr   Zget_kronecker_deltar@  )%r;   r=   r&  r1  r>   r5   r   rÖ   r×   rØ   r2  rH  rI  rJ  r6  rL  rM  rN  r7  r:  rC  rF  rG  rK  rƒ   r„   r…   r†   r‡   ÚmdrÒ   rž   ZminvZmeyeÚKDrp   rÊ   r2   r2   r3   Útest_valued_metric_inverse  s2   
$ÿ$(&&"&$$&öÿ$îrm  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 )Nru   )r-   rO  r#   r@  )$r;   r=   r&  r1  r>   r5   r   rÖ   r×   rØ   r2  rH  rI  rJ  r6  rL  rM  rN  r7  r:  rC  rF  rG  rK  rƒ   r„   r…   r†   r‡   Úe1Úe2rp   rÊ   Zo1Úo2rË   r2   r2   r3   Útest_valued_canon_bp_swapaxes8  s*   $ÿÿ"ÿÿÿ"ôrq  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©r:   r:   r:   r;   r<   rW   )r:   r<   rV   )ru   r)  rñ   )r*  r+  r-  c                 S   s
   || _ d S r/   )rE  )r;   Zdatr2   r2   r3   Úassign\  s   
z:test_valued_components_with_wrong_symmetry.<locals>.assignc                      ó
   ˆˆ ˆƒS r/   r2   r2   )ÚA_symru  Ú	mat_nosymr2   r3   r¨   `  r©   z<test_valued_components_with_wrong_symmetry.<locals>.<lambda>c                      rv  r/   r2   r2   )rw  ru  Úmat_antisymr2   r3   r¨   a  r©   c                      rv  r/   r2   r2   )Ú	A_antisymru  Úmat_symr2   r3   r¨   d  r©   c                      rv  r/   r2   r2   )rz  ru  rx  r2   r3   r¨   e  r©   )r   r   r   )r-   r   r   rE  r"   r   rA   r   r  r+   r¯   )rr  rƒ   r„   r…   r†   ZA_nosymr2   )rz  rw  ru  ry  rx  r{  r3   Ú*test_valued_components_with_wrong_symmetryK  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 )Nr5   r:   rp   r<   ©rR   r8   r‚   rY   ú\mu, \nu, \alpha, \betaÚur   r_   rW   )r-   r   rE  r   r"   r   rA   r   )	r5   rj   rk   rg   rh   r  r_   Úmul_1Úmul_2r2   r2   r3   Útest_issue_10972_TensMul_dataj  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 )Nr5   r:   r6   ru   r}  r3  r~  r  r!  r_   r<   rW   zE_x E_y E_z B_x B_y B_zr   )r   r   r   r   rœ   )r-   r   rE  r   r"   r   rA   r   r   r#   Úzeros)r5   rj   rk   rg   rh   r  r_   ZExZEyZEzZBxZByZBzr   rœ   Úperpr€  r  ZFperpZmul_3r2   r2   r3   Útest_TensMul_data‚  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 )Nr5   r:   rp   r<   r}  rY   rJ   zi_0:2rœ   r  r   )	r-   r   rE  r   r"   r   rA   r   rƒ  )r5   rB   rC   rK   rL   rƒ   r„   rœ   r  Zadd_1Zadd_2r„  r€  r  r2   r2   r3   Ú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 )Nr5   r6   r7   r%  r§   ÚL_1r;   r=   r<   )r:   r   rT  r5  )r   r:   r:   r4  rt  )r   r   r:   r   )r   r:   r:   r   )r   r   r:   r:   )r   r:   r:   r:   )r   r   r"   r   rA   rr   Z_iterate_free_indicesZ_iterate_dummy_indicesZ_iterate_indicesr®   Zget_free_indices)r6   rƒ   r„   r…   r†   r‡   ZL0ZL1r;   r=   rn  ro  Ze3Ze4Ze5Ze6r2   r2   r3   Útest_index_iterationÜ  sP   


  ** .00,":rˆ  c                  C   s   t dƒ} td| ƒ\}}}td| ƒ}td| gƒ\}}}}tdƒ}	tdƒ}
tt||ƒ||ƒƒtƒs1J ‚tt	||ƒ||ƒ ƒtƒs@J ‚||ƒ|| ƒ|| ƒ  }|j
||ƒ|| ƒ|| ƒ fksaJ ‚|||ƒ|| ƒ ||ƒ|| ƒ  kswJ ‚| 	¡ ||ƒ|| ƒ ||ƒ|| ƒ  ksJ ‚t|ƒdks—J ‚||ƒ||ƒ ||ƒ||ƒ  }t|ƒdks¯J ‚|| ƒ||ƒ||ƒ ||ƒ||ƒ ||ƒ || ƒ   }||| ƒ||ƒ ||ƒ || ƒ||ƒ ||ƒ ||ƒ || ƒ  ksôJ ‚| 	¡ || ƒ||ƒ ||ƒ || ƒ||ƒ ||ƒ ||ƒ || ƒ  ksJ ‚t|ƒd	ks'J ‚t| ¡ ƒd
ks2J ‚|| ƒd||ƒ ||ƒ ||ƒ||ƒ   }| 	¡ d|| ƒ ||ƒ ||ƒ || ƒ||ƒ ||ƒ  kslJ ‚d||ƒ || ƒ }|jdksJ ‚||ƒ||ƒ||ƒ ||ƒ||ƒ||ƒ    }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shJ ‚|| ƒ||ƒ|| ƒ ||ƒ|| ƒ   }| 	¡ || ƒ||ƒ || ƒ || ƒ||ƒ || ƒ  ks¢J ‚	 d|	|
ƒ ||ƒ }| 	¡ }t|tƒs¹J ‚|j
d||ƒ |	|
ƒ||ƒ fksÍJ ‚d|	|
ƒ ||ƒ ||ƒ }| 	¡ }t|tƒsçJ ‚|j
d||ƒ |	|
ƒ||ƒ ||ƒfksþJ ‚d S )Nr6   zi j kr§   úA B C Dr_   rš   zA(L_0)*(A(-L_0) + B(-L_0))zA(i)*A(j) + A(i)*B(j)z2A(-L_0)*(A(L_0)*A(j) + A(L_0)*B(j)*C(L_1)*C(-L_1))z8A(j)*A(L_0)*A(-L_0) + A(L_0)*A(-L_0)*B(j)*C(L_1)*C(-L_1)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   r0   r   r   r   rÇ   r@   r#   rß   r   rÈ   r   )r6   rp   rÊ   rË   r§   r;   r=   r>   r   r_   rš   r–   ÚtmÚp1Zp2Zp3Zexpr_expandr2   r2   r3   Útest_tensor_expand  s`   
&,0 <NT.F0$V@h.F(2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 )	Nr6   rs  r;   zx yrƒ   c                      s   ˆ ˆˆ ƒS r/   r2   r2   ©r;   rš   Úyr2   r3   r¨   ^  r«   z6test_tensor_alternative_construction.<locals>.<lambda>c                      s   ˆ dˆ ƒS r»   r2   r2   )r;   rš   r2   r3   r¨   _  r«   )r   r   r"   r   r   r+   Ú	TypeErrorr¯   )r6   rƒ   r„   r…   r†   r2   r  r3   Ú$test_tensor_alternative_constructionV  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 )'Nr6   ÚL2r<   r“   zi j k lr‰  ÚHr•   ru   r:   rV   rY   rW   r²   rp   rÊ   r]   é   c                      ó
   ˆ   ˆ¡S r/   ©Ú_extract_datar2   ©r–   Úreplr2   r3   r¨   ™  r©   z)test_tensor_replacement.<locals>.<lambda>c                      r”  r/   r•  r2   r—  r2   r3   r¨     r©   c                      r”  r/   r•  r2   r—  r2   r3   r¨   ¡  r©   rñ   r+  éd   éq   r)  r   é*   r!  r"  r#  r$  c                      ó   ˆ   ˆˆg¡S r/   ©Úreplace_with_arraysr2   )r–   rÊ   r˜  r2   r3   r¨   Î  r½   c                      rœ  r/   r  r2   )r–   rp   r˜  r2   r3   r¨   Ó  r½   zu1:4ÚUc                      s   ˆ   ˆˆˆ g¡S r/   r  r2   )r–   r˜  Úu1Úu2r2   r3   r¨   Ú  rR  )r   r   r   r"   r.   r–  r   rž  r   Zreshaper+   r¯   )r6   r‘  rË   rç   r;   r=   r>   r   r’  r•   Úu3rŸ  r2   )r–   rp   rÊ   r˜  r   r¡  r3   Útest_tensor_replacementb  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 )
Nr6   ru   r“   r;   r=   rs  zL_0:2r   rV   )r   r"   r   Zrewriter   r   r   )r6   r;   r=   rƒ   r„   r…   r†   r§   r‡  rd   re   rf   Úb1Úb2r2   r2   r3   Ú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©r™   r­   Úignore_updownrœ   r•   r|   r;   ÚW©Zunordered_indicesrŸ  Nr:   )r   r   r   r(   rõ   rö   r"   r)   ÚmatchesÚreplaceÚheadr*   )r˜   r”   rÍ   rÎ   rB   rC   rK   rœ   rõ   r÷   r•   r|   r;   r©  rŸ  r2   r2   r3   Ú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dd	}||ƒ||ƒ ||ƒ||ƒ   ||ƒ||ƒ ||ƒ||ƒ  ¡i ksDJ ‚||ƒ||ƒ ||ƒ||ƒ   ||ƒ||ƒ ||ƒ||ƒ  ||ƒ||ƒ  ||ƒ||ƒ  ¡d
u syJ ‚||ƒ||ƒ ||ƒ||ƒ  ||ƒ||ƒ  ||ƒ||ƒ   |||ƒ||ƒ||ƒ  ||ƒ||ƒ  |||ƒd||ƒ ||ƒ  ¡ ¡ ||ƒ||ƒ d||ƒ ||ƒ  ksÓJ ‚d
S )zA
    Test match and replace with the pattern being a TensAdd
    r˜   rV   r“   r  r•   r|   r©  Trª  Nru   )r   r   r"   r)   r«  r¬  rÈ   )r˜   r”   rÍ   r•   r|   r©  r2   r2   r3   Útest_TensAdd_matching  s   Jj@(þ&ýr¯  c                  C   sì  t ddd} td| ƒ\}}}}}tdƒ}tdt| dd\}}}	}
}}| j}| j}td	| gƒ}td
| gƒ}tddd}tdƒ}t	d	ƒ}|||ƒ  
||ƒ¡|diksSJ ‚|||||ƒ  
||||ƒ¡|dikshJ ‚||ƒ|| ƒ  ||ƒ|| ƒ d¡dks€J ‚||ƒ||ƒ || ƒ  |||ƒ|| ƒ d¡dksJ ‚||ƒ|| ƒ  || ƒ||ƒ d¡dksµJ ‚||ƒ||ƒ || ƒ  ||ƒ||ƒ || ƒ d¡dksÕJ ‚||ƒ||ƒ  |ƒ ||ƒ ||ƒ |ƒ ||ƒ ||ƒ ¡ ¡ ||ƒ||ƒ ksÿJ ‚||||ƒ|| | | ƒ  ||||ƒ|| |	|
ƒ |||	ƒ|||
ƒ |||
ƒ|||	ƒ  ¡ ¡  ¡ ||| ƒ||| ƒ ||| ƒ||| ƒ  ksNJ ‚||||ƒ|| | | ƒ  ||	||ƒ||	 |
|ƒ |||
ƒ|||ƒ |||ƒ|||
ƒ  ¡ |¡ ¡ dksˆJ ‚|| ƒ||ƒ || ƒ  ||ƒ  ||ƒ || ƒ ||ƒ  ¡ ¡ || ƒks³J ‚|d ||ƒ || ƒ  ||ƒ  ||ƒ || ƒ ||ƒ  |d  ¡ ¡ |d ksàJ ‚||ƒ||ƒ  ||ƒ||ƒ ||ƒ||ƒ ¡||ƒ||ƒ ksJ ‚||ƒ||ƒ ||ƒ  |||ƒ||ƒ |||ƒ|||ƒ || ƒ ¡||ƒ||ƒ ||ƒ ||ƒ || ƒ ks?J ‚td| ƒ\}}}}|| | ƒ||ƒ ||ƒ || ƒ }|ƒ ||ƒ || ƒ  
|¡}|| ¡ vstJ ‚dS )zA
    Test match and replace with the pattern being a TensMul
    r˜   rV   r“   z	p q r s tÚwiza b c d e fTr§  r•   r|   r©  rª  rŸ  r:   rY   rñ   ru   r<   zR_0 R_1 R_2 R_3N)r   r   r   r   r(   rõ   rö   r"   r)   r   r«  r¬  rÈ   r#   r  Úvalues)r˜   r”   rÍ   rÎ   rú   rF   r°  rB   rC   rK   rL   rm   ra   rõ   r÷   r•   r|   r©  rŸ  rË   ZD0ZD1ZD2ZD3r–   rÒ   r2   r2   r3   Útest_TensMul_matching+  s\   "*0:0@>ÿ&þ.
ü&þ

üVZ.
ÿF(
ÿ(r²  c            	      C   s  t ddd} td| ƒ\}}}td| gƒ}td| gƒ}td| | gƒ}t| jd | d	ƒ}td
| d	d}||ƒ||ƒ || ƒ  ||ƒ||ƒ|| ƒ i¡||ƒ||ƒ || ƒ || ƒ ks`J ‚||ƒ||ƒ || ƒ  ||ƒ||ƒ|| ƒ i¡||ƒ||ƒ || ƒ || ƒ ksJ ‚||ƒ||ƒ  ||||ƒ||ƒ|| ƒ i¡||ƒ||ƒ || ƒ ks¶J ‚||ƒ||| ƒ || ƒ  ¡ ||ƒ||| ƒ || ƒ 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;   Z_0TrB   )r¨  N)
r   r   r"   r   r8   r(   ÚsubsÚxreplacerÈ   r¬  )	r˜   r”   rÍ   rÎ   r•   r|   r;   ZC0rB   r2   r2   r3   Útest_TensMul_subsf  s   ^^NDbrµ  c                   C   s:   t ƒ  tdgd ƒ W d   ƒ d S 1 sw   Y  d S r  )r-   r%   r2   r2   r2   r3   Útest_tensorsymmetryy  s   "ÿr¶  c                   C   s6   t ƒ  tdg ƒ W d   ƒ d S 1 sw   Y  d S )Nr;   )r-   r$   r2   r2   r2   r3   Ú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<   r5   )r-   r   rA   r   r&   r0   )r£   r5   ZS2r2   r2   r3   Útest_TensorType  s   
"ür¸  c                   C   s8   t ƒ  tddd W d   ƒ d S 1 sw   Y  d S )Nr5   r6   )Z	dummy_fmt)r-   r   r2   r2   r2   r3   Ú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“   rp   r•   zx y zr<   N)
r   r   r"   r   r0   r´  r   r   r³  r¬  )r˜   rp   r•   rš   rŽ  Úzr2   r2   r3   Útest_postprocessorŒ  s   
 * *,r»  c                  C   s^   t ddd} td| ƒ\}}td| gƒ}td| gƒ}td||ƒ||ƒƒ}|j|j |ks-J ‚dS )	zQ
    Ensure that for any TensMul instance, self.coeff * self.nocoeff == self
    r˜   rV   r“   zi jr•   ÚPr<   N)r   r   r"   r   rß   Znocoeff)r˜   rp   rÊ   r•   r¼  r–   r2   r2   r3   Útest_TensMul_nocoeffŸ  s   r½  N)ƒZsympy.concrete.summationsr   Zsympy.core.functionr   Zsympy.core.numbersr   Zsympy.matrices.denser   r   Zsympy.tensor.indexedr   Zsympy.combinatoricsr   Z
sympy.corer	   r
   r   r   r   r   r   Zsympy.core.containersr   Zsympy.core.symbolr   Z(sympy.functions.elementary.miscellaneousr   Zsympy.integralsr   Zsympy.tensor.arrayr   Zsympy.tensor.tensorr   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   Zsympy.testing.pytestr+   r,   r-   Zsympy.matricesr.   r4   rI   rM   rP   rU   ro   rs   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	  r  r  r   rO  rS  rV  rX  rY  r[  r\  rc  rd  rg  rh  ri  rm  rq  r|  r‚  r…  r†  rˆ  rŒ  r  r£  r¦  r®  r¯  r²  rµ  r¶  r·  r¸  r¹  r»  r½  r2   r2   r2   r3   Ú<module>   s°    $`	M* 	(
V%%	
,Cb+'
&=9	)	&!;3G{$;