o
    GZhT= ã                   @   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{dd Z|dd Z}dd Z~dd Zdd Zdd Zd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   úM/var/www/auris/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sJ |||||| ||  ||| |  }| Ą }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   )Ú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sJ 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sJ | Ą }| 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sJ ||| || }	|	 Ą}
|
 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sJ |j|j |ksJ |
j|
j |
ksJ ||j||j ||ksĨJ |j|j |ksŊJ |j|j |ksđJ |j|j |ksÃJ |j|j |ksÍJ t|j|j t|ksÛJ t|j|j t|kséJ t|j|j t|ksũJ t|j|j t|ksJ t|
j|
j t|
ksJ t||j||j t||ks*J t|j|j t|k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 ||
sJ |||sJ ||sJ ||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Î   Ú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>r:  r;  ĐÚ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,  rA  rC  r>  ĐrË   r3   r?  !  s   & r@  r:   ru   rA  rC  r2   r>  r3   r?  !  rD  r+  )	r   r   Údatar   r   r"   r   r?   rB  )Ú	minkowskir5   r   r   r   r   r   r   rŨ   rØ   rŲ   r;   r=   r(  Ú	ba_matrixr3  r4  Úmu0Úmu1Úmu2r>   Ú
ndm_matrixr8  Ún0Ún1Ún2r9  r<  rE  r2   r2   r3   Ú_get_valued_base_test_variablesî  s@   

"ĸrQ  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.  r0  )r:   r<   rV   ru   r+  rō   r,  r-  r/  r   rY   rW   r]   rē   r1  r2  rV   c                 S   ó   g | ]}d | qS )rV   r2   Đr  rp   r2   r2   r3   r?  5  rļ   z+test_valued_tensor_iter.<locals>.<listcomp>r1  c                 S   rR  )r1  r2   rS  r2   r2   r3   r?  6  rļ   r<   r   c                 S   s   g | ]}| qS r2   r2   rS  r2   r2   r3   r?  <  ó    )r-   rQ  r   rr   )r;   r=   r(  r3  r>   r5   r   rŨ   rØ   rŲ   r4  rJ  rK  rL  r8  rN  rO  rP  r9  r<  rE  rH  rI  rM  r   r   r   r   r   Zlist_BAr2   r2   r3   Útest_valued_tensor_iter'  s    $ĸ,$$40"ėrU  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-   rQ  Đr;   r=   r(  r3  r>   r5   r   rŨ   rØ   rŲ   r4  rJ  rK  rL  r8  rN  rO  rP  r9  r<  rE  rH  rI  rM  r   r   r   r   r   r2   r2   r3   Ú3test_valued_tensor_covariant_contravariant_elements?  s   $ĸ "örX  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-   rQ  Ú
get_matrixr   r   )r;   r=   r(  r3  r>   r5   r   rŨ   rØ   rŲ   r4  rJ  rK  rL  r8  rN  rO  rP  r9  r<  rE  rH  rI  rM  r   r   r   r   r   Zmatabr2   r2   r3   Útest_valued_tensor_get_matrixM  s   $ĸü *"ïrZ  c                   C   s  t    t \} }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}| || |  j|d |d  |d  |	d  ksAJ | || |  j| d ksQJ | || |  j| |d kscJ | |||  j| d|  d|	  kszJ tdD ]&}tdD ]}| |||  ||f ||||	g| g dĒ|  ksĢJ qq~||||  j|d  |d  |d  |	d  ksÂJ | ||||  }| |jdksÕJ ||| jdksāJ |jdksįJ tdD ]}|| ||||	g| ksûJ qëW d    d S 1 sw   Y  d S )Nr<   rV   ru   )r   rY   rW   r]   r:   )r-   rQ  rG  rB  rģ   ) r;   r=   r(  r3  r>   r5   r   rŨ   rØ   rŲ   r4  rJ  rK  rL  r8  rN  rO  rP  r9  r<  rE  rH  rI  rM  r   r   r   r   r   rp   rË   Zcontrexpr2   r2   r3   Útest_valued_tensor_contractiona  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 )Nru   r<   Đr-   rQ  rG  rW  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-   rQ  r   rW  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:4rV  )rV   rV   rV   r<   r   r:   é   rē   é   é   é   é   )r-   rQ  r   rG  r   ))r;   r=   r(  r3  r>   r5   r   rŨ   rØ   rŲ   r4  rJ  rK  rL  r8  rN  rO  rP  r9  r<  rE  rH  rI  rM  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$Ûre  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=   r(  r3  r>   r5   r   rŨ   rØ   rŲ   r4  rJ  rK  rL  r8  rN  rO  rP  r9  r<  rE  rH  rI  rM  r   r   r   r   r   rÚ   rÛ   rÜ   rÝ   r2   r2   r3   Útest_valued_tensor_add_scalarķ  s   $ĸ222T"îrf  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-   rQ  r   rG  r   r   r"   r   )'r;   r=   r(  r3  r>   r5   r   rŨ   rØ   rŲ   r4  rJ  rK  rL  r8  rN  rO  rP  r9  r<  rE  rH  rI  rM  r   r   r   r   r   ZeuclidrB   rC   rK   rL   rg  rh  ZvtpZvtp2ZVcr2   r2   r3   Útest_noncommuting_componentsË  s*   $ĸ
*&*&"įri  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-   rQ  r   rG  rY  r  )r;   r=   r(  r3  r>   r5   r   rŨ   rØ   rŲ   r4  rJ  rK  rL  r8  rN  rO  rP  r9  r<  rE  rH  rI  rM  r   r   r   r   r   Zmmatrixr2   r2   r3   Útest_valued_non_diagonal_metricč  s   $ĸ<"ûrj  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   rS  rF  r2   r3   r?    s   ( z?test_valued_assign_numpy_ndarray.<locals>.<listcomp>.<listcomp>ru   rA  rC  r2   rF  r3   r?    s   " z4test_valued_assign_numpy_ndarray.<locals>.<listcomp>rY   )r-   rQ  r   rG  rB  r   )$r;   r=   r(  r3  r>   r5   r   rŨ   rØ   rŲ   r4  rJ  rK  rL  r8  rN  rO  rP  r9  r<  rE  rH  rI  rM  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<üĸ$ãrk  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-   rQ  rG  r   r   Úinvr   Zget_kronecker_deltarB  )%r;   r=   r(  r3  r>   r5   r   rŨ   rØ   rŲ   r4  rJ  rK  rL  r8  rN  rO  rP  r9  r<  rE  rH  rI  rM  r   r   r   r   r   ÚmdrÓ   r   ZminvZmeyeÚKDrp   rË   r2   r2   r3   Útest_valued_metric_inverse  s2   
$ĸ$(&&"&$$&öĸ$îro  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-   rQ  r#   rB  )$r;   r=   r(  r3  r>   r5   r   rŨ   rØ   rŲ   r4  rJ  rK  rL  r8  rN  rO  rP  r9  r<  rE  rH  rI  rM  r   r   r   r   r   Úe1Úe2rp   rË   Zo1Úo2rĖ   r2   r2   r3   Útest_valued_canon_bp_swapaxes8  s*   $ĸĸ"ĸĸĸ"ôrs  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/   )rG  )r;   Zdatr2   r2   r3   Úassign\  s   
z:test_valued_components_with_wrong_symmetry.<locals>.assignc                      ó
    S r/   r2   r2   )ÚA_symrw  Ú	mat_nosymr2   r3   rĻ   `  rĐ   z<test_valued_components_with_wrong_symmetry.<locals>.<lambda>c                      rx  r/   r2   r2   )ry  rw  Úmat_antisymr2   r3   rĻ   a  rĐ   c                      rx  r/   r2   r2   )Ú	A_antisymrw  Úmat_symr2   r3   rĻ   d  rĐ   c                      rx  r/   r2   r2   )r|  rw  rz  r2   r3   rĻ   e  rĐ   )r   r   r   )r-   r   r   rG  r"   r   rA   r   r  r+   rŊ   )rt  r   r   r   r   ZA_nosymr2   )r|  ry  rw  r{  rz  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 sw   Y  d S )Nr5   r:   rp   r<   ĐrR   r8   r   rY   ú\mu, \nu, \alpha, \betaÚur   r_   rW   )r-   r   rG  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  r5  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   rG  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   rG  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   rV  r7  )r   r:   r:   r6  rv  )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=   rp  rq  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sJ 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Úp1Ú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   ru  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Ļ   Ú  rT  )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=   ru  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sJ ||||   || || 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sJ ||||  ||||||||  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"  rQ  rU  rX  rZ  r[  r]  r^  re  rf  ri  rj  rk  ro  rs  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{$;