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{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)Úarg1Úarg2© r4   úR/home/ubuntu/.local/lib/python3.10/site-packages/sympy/tensor/tests/test_tensor.pyÚ	_is_equal   s
   



r6   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)r7   ÚaÚbÚd0Úd1r=   r?   ÚtÚtcÚt1r@   r4   r4   r5   Útest_canonicalize_no_slot_sym   sV   &&&rK   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 )Nr7   r8   r9   ú
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   rA   r#   rB   rC   )r7   rD   rE   ÚcÚdr=   rH   rI   r4   r4   r5   Útest_canonicalize_no_dummiesl   s*   rO   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 )Nr7   r=   r>   )r   r"   r   rA   rC   )r8   ÚA1ÚA2ÚA3r4   r4   r5   Ú-test_tensorhead_construction_without_symmetry   s   rS   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 )Nr7   r8   r   ©r:   Ú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   rA   r#   rB   )r7   rF   rG   Úd2Úd3r=   rH   rI   r4   r4   r5   Útest_no_metric_symmetry   s   00rX   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 )'Nr7   r8   r9   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	   éÿÿÿÿrT   z2-A(S_0, S_1, S_2)*A(-S_0, -S_1, S_3)*B(-S_2, -S_3)ÚMatÚM)rU   r:   z1A(M_0, M_1, M_2)*A(-M_0, -M_1, -M_3)*B(-M_2, M_3)zalpha,beta,gamma,mu,nu,rhoÚ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   rA   r#   rB   rC   Údirect_product) r7   rD   Úa0Úa1Úa2Úa3rE   rF   rG   rV   rW   r=   rH   rI   r?   r[   r]   ÚalphaÚbetaÚgammaÚmuÚnuÚrhor_   ÚGamma2ÚGamma3ra   rM   rN   ÚeÚffrd   r4   r4   r5   Útest_canonicalize1µ   s    ÿ66""8**ÿ*ÿ*ÿ
ÿ
ÿ
ÿ".Nrt   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=   ru   r4   r4   r5   Ú"test_bug_correction_tensor_indices?  s   
rx   c                  C   sö   t ddd} td| \}}}}}}}}}	}
}}td| gd t ¡ }|||| | }| ¡ }t|dks7J || || ||||||  || | |	 |
  || | | |  |||||  ||	|
|| }| ¡ }t|dksyJ d S )	Nr7   r8   r9   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#   rB   )r7   rF   rG   rV   rW   Úd4Úd5Úd6Úd7Úd8Úd9Úd10Úd11ry   rH   rI   r4   r4   r5   Útest_riemann_invariantsH  s    ÿ6	ÿÿÿr   c                  C   sš  t ddd} td| \}}}}}}}td| \}}	}
}}}td| \}}td| gd t ¡ }||||| }| ¡ }|d	ksAJ ||||| }| ¡ }t|d
ksUJ ||| || |||| | }| ¡ }t|dksrJ td| gd t d¡}|||| |||||| || |  || |  || |  }| ¡ }t|dks®J ||||
|||| |	| |||| |  }| ¡ }t|dksÒJ d S )Nr7   r8   r9   zd0:7za0:6úa,bry   rz   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   r{   r#   rB   rC   )r7   rF   rG   rV   rW   r|   r}   r~   rf   rg   rh   ri   Úa4Úa5rD   rE   ry   rH   rI   r   r4   r4   r5   Ú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)rU   Údimr:   zi0:15r=   rY   r`   r   )r   r   r   r"   r   rC   r#   )r   r   Úi0Úi1Úi2Úi3Úi4Úi5Úi6Úi7Úi8Úi9Úi10Úi11Úi12Úi13Úi14r=   rH   rJ   r4   r4   r5   Ú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   r[   r\   r	   ©r   rU   r:   úa0:5úchi,psir<   )r   r   r   r   r   rA   r#   )r   r[   rf   rg   rh   ri   r   ÚchiÚpsirH   rJ   r4   r4   r5   Útest_canonicalize3  s   r£   c                  C   sR   t ddd} td| }td| g}t||d|| }| ¡ || ks'J d S )NÚ	CartesianrY   ©r   ÚpÚKrZ   )r   r   r"   r   r#   )r€   rŠ   r§   Úexprr4   r4   r5   Ú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ÚR3rY   r¥   rŠ   r§   rd   )ÚclsÚxr   r<   )r   r   r"   r   r   r   Úas_dummyr#   )rª   rŠ   r§   rd   r¬   rš   r4   r4   r5   Ú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   r7   Úgr<   r8   )Úmetric_namerU   r   r:   zm0:5r>   zg(Lorentz,Lorentz)ÚTSpacer9   zi0 i1r=   zA(TSpace_0, -TSpace_0))r   r   r   r   rC   r   ÚmetricrB   Úeps_dimr   r"   r#   )r   r7   Úm0Úm1Úm2Úm3Úm4Úsym2Úsym2nr¯   r±   r   r   r=   r4   r4   r5   Ú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 )Nr7   r8   r9   úa,b,c,dúA Br>   ÚL_0c                      s
   t d S )NrY   )r   r4   )r7   r4   r5   Ú<lambda>Ù  ó   
 ztest_indices.<locals>.<lambda>c                      s    S r/   r4   r4   ©r=   rD   rE   rM   r4   r5   r¿   Ú  ó    r=   rD   rE   z-bF©Úis_up)r   r   Útensor_index_typer   r   rC   Úget_indicesr   r+   Ú
ValueErrorr"   )rN   r?   rH   ÚindicesrŸ   r4   )r=   r7   rD   rE   rM   r5   Ú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`   rY   Téüÿÿÿr\   r<   r   rz   )
r   rC   r   re   rA   ÚrankÚbaser   Ú
generatorsr   )Úsymr4   r4   r5   Ú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 )Nr7   r8   r9   rŒ   rœ   r>   c                      s     S r/   r4   r4   )rD   rE   rM   rN   r¯   r4   r5   r¿   ü  ó    ztest_TensExpr.<locals>.<lambda>c                      s   t j  S r/   ©r	   ÚOner4   )rD   rE   r¯   r4   r5   r¿   ý  s    c                      s      S r/   r4   r4   ©r=   rD   rE   rM   rN   r¯   r4   r5   r¿   þ  s    c                      s   t j   S r/   rÑ   r4   )r=   rM   rN   r¯   r4   r5   r¿   ÿ  s    c                      s      S r/   r4   r4   rÁ   r4   r5   r¿      rÐ   c                      s    d S ©Nr>   r4   r4   ©r=   rD   rE   r4   r5   r¿     ó    c                      s   d  S rÔ   r4   r4   rÕ   r4   r5   r¿     rÖ   c                      s   t  S r/   )Úabsr4   rÕ   r4   r5   r¿     rÖ   )
r   r   r²   r   r   rC   r+   rÇ   r-   ÚNotImplementedError)r7   r?   r4   rÓ   r5   Ú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 )Nr7   r8   r9   r=   r>   r   )	r   r"   ÚnameÚindex_typesrË   Úsymmetryr   rA   Úcomm)r7   r=   r4   r4   r5   Ú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 )Nr4   r   r7   r8   r9   úa,b,d0,d1,i,j,kr;   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)rz   rY   r<   )r   ÚargsÚdoitr   r   r   r   rC   r1   rB   r   r#   r	   rÒ   rË   r   Ú	from_data)r7   rD   rE   rF   rG   ru   ÚjÚkr=   r?   rJ   Út2aÚt2Út2brŠ   ÚqÚrrH   Út3Útz1r4   r4   r5   Ú	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 )
Nr7   r8   r9   rß   r;   r>   rà   r   rY   )r   r   r   r   rC   r6   r	   ÚZero)r7   rD   rE   rF   rG   ru   rä   rå   r=   r?   rŠ   ré   rê   rH   r4   r4   r5   Ú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 )Nr7   r8   r9   zm,n,p,qry   rz   r=   rY   r`   r>   r   r<   )r   r   r"   r   r{   rC   r#   r
   )
r7   ÚmÚnrŠ   ré   ry   r=   rJ   rç   rH   r4   r4   r5   Ú	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 )
Nr7   r8   r9   zi0:2ú
E px py pzr=   r?   r>   rZ   )r   r   r   r"   rá   )r7   r   r   r   ÚpxÚpyÚpzr=   r?   Úexpr1Úexpr2Úexpr3Úexpr4r4   r4   r5   Ú	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¬   r7   r8   r9   rŒ   Ú1rœ   r>   r<   z(x + 1)*A(a, b)zA(a, b)r@   c                      s      S r/   r4   r4   rÁ   r4   r5   r¿   Ô  rÐ   ztest_mul.<locals>.<lambda>)Ú	sympy.abcr¬   r   r   r   rã   r	   rÒ   rB   r   r   rC   rÛ   rË   ÚdumÚcoeffÚsortedÚfreeÚ
componentsr   Úsplitr"   r+   rÇ   )r¬   r7   rN   rH   r?   ÚtsrJ   r@   r4   rÁ   r5   Ú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 )Nr7   r8   r9   úi,j,k,l,m,n,p,qr;   r>   rŠ   )r   r   r   r   rC   r"   r'   )r7   ru   rä   rå   Úlrð   rñ   rŠ   ré   r=   r?   rH   rJ   Út1ar4   r4   r5   Ú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 )Nr7   r8   r9   zm:4ry   rz   r\   rY   r<   r>   )r   r   r"   r   r{   r   r
   )	r7   rŽ   rµ   r¶   r·   ry   rH   rJ   r  r4   r4   r5   Ú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 )Nr7   r8   r9   r  ry   rz   r   r>   r\   rY   r<   )r   r   r"   r   r{   r   r
   )r7   ru   rä   rå   r  rð   rñ   rŠ   ré   ry   rH   rç   rë   rJ   r4   r4   r5   Ú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 )Nr7   r8   r9   zm0:4ry   rz   z(1/4)*R(m0, L_0, -L_0, m3))	r   r   r"   r   r{   r	   rB   r#   Ú_is_canon_bp)r7   rŽ   rµ   r¶   r·   ry   rH   rJ   r4   r4   r5   Ú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   r7   r8   ©r   r:   ú	a,b,c,d,erŠ   r;   r>   r9   r   )r   r   r   r²   r"   Úcontract_metricr   r   rC   r6   r  r   )r   r7   rD   rE   rM   rN   rr   r¯   rŠ   rH   rJ   r=   r?   rç   r4   r4   r5   Ú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   r7   r8   r  za,b,c,d,e,L_0zp,qrY   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   rC   rB   )r   r7   rD   rE   rM   rN   rr   rŸ   r¯   rŠ   ré   rJ   rç   rH   r^   r=   r4   r4   r5   Ú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   r[   r\   r	   r   r   r    r<   r?   r>   )r   r   r   r²   r   r   rA   r"   r  r1   r#   r6   )r   r[   rf   rg   rh   ri   r   r@   r¡   r¢   r?   rH   rJ   r4   r4   r5   Ú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ª   rY   r¥   úp q rr§   r   )r   r   ÚdeltaÚepsilonr"   r  )rª   rŠ   ré   rê   r  Úepsr§   rš   r4   r4   r5   Ú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ª   rY   r¥   r  r§   rb   r¬   r>   )r   r   r  r"   r   r   r  )	rª   rŠ   ré   rê   r  r§   rb   r¬   rš   r4   r4   r5   Ú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 )	Nr7   rz   r8   r  r  zp,q,r,sr   rZ   )r   r   r  r   r#   r   r0   r"   )r7   rD   rE   rM   rN   rr   r  rŠ   ré   rê   ÚsrH   rJ   r4   r4   r5   Ú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  rc   c                    s4   | j r|j sJ |j s|j rJ  | | || S r/   rÃ   ©rD   rE   rN   rM   ©r  r4   r5   ÚidnD  ó   z!test_contract_delta1.<locals>.idnc                    s4   | j r|j sJ |j s|j rJ  | | || S r/   rÃ   r  r  r4   r5   ÚTI  r!  ztest_contract_delta1.<locals>.Tc                    s$   | |||d  | |||  S ©Nr<   r4   ©rD   rE   rM   rN   )r"  r   rñ   r4   r5   ÚP1N  s   $z test_contract_delta1.<locals>.P1c                    s   d  | ||| S r#  r4   r$  )r"  rñ   r4   r5   ÚP2Q  s   z test_contract_delta1.<locals>.P2r   r>   r<   )r   r   r   r  Úcontract_deltar#   r1   )r  rD   rE   rM   rN   rr   rd   r%  r&  rH   rJ   r4   )r"  r  r   rñ   r5   Ú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ª   rY   r¥   úp qr§   r<   )r   r   r  r"   r'  )rª   rŠ   ré   r  r§   rš   r4   r4   r5   Ú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   r7   r8   r  r  r)  r   ÚdgrY   r<   r>   )r-   r   r   r   r²   r   r#   r'   r"   r   re   r	   ÚHalfr  )r   r7   rD   rE   rM   rN   rr   r¯   rŠ   ré   rH   rJ   r+  rl   r4   r4   r5   Ú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 )Nr7   r8   r9   ÚLorentzHÚLHzi,jzih,jhr)  zph qhÚGsymbolÚGHsymbolr   ÚGr<   ÚGHr>   c                      s   t   dd¡S ©Nr<   r>   )r    Úset_commr4   ©r1  r4   r5   r¿   Š  rÖ   z$test_TensorManager.<locals>.<lambda>)r   r<   r>   )r   r<   )r   r   r   r   r    r5  r"   r   rA   Ú_comm_i2symbolrÝ   r#   r6   Úcomm_symbols2iÚcomm_i2symbolÚ_comm_symbols2ir+   rÇ   Ú	set_commsÚget_commÚclear)r7   r.  ru   rä   ÚihÚjhrŠ   ré   ÚphÚqhr0  r2  r3  ÚpsÚpshrH   rJ   ÚqsÚqshrñ   Únhr4   r6  r5   Útest_TensorManager  sB   ,
,,
rG  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   r7   r8   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Ú_r4   r4   r5   Ú	<genexpr>×  s    z/test_hash.<locals>.check_all.<locals>.<genexpr>)Úallrá   )Úobjr4   r4   r5   Ú	check_allÖ  s   ztest_hash.<locals>.check_allrZ   rY   )
r   r   r   r²   r   rá   ÚhashÚfuncr   re   )r   r7   rD   rE   rM   rN   rr   r¯   rŠ   ré   Úp_typerJ   rç   rë   Út4rM  Ú	tsymmetryr4   r4   r5   Ú	test_hash±  s^   
 *rS  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   r\   r   r   ©r   r   r\   r   ©r   r   r   r\   r7   rz   r¥   úi0:5ró   r=   r?   r<   ÚGcommÚABr>   )©r<   r>   rY   rz   ©é   r  é   é   ©é	   r   r\   rZ   ©r`   rÊ   éûÿÿÿéúÿÿÿÚBAÚLorentzD©r\   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 r4   r4   )rH  rä   ©ru   r4   r5   Ú
<listcomp>  rÐ   ú>_get_valued_base_test_variables.<locals>.<listcomp>.<listcomp>rl  rm  ©Úrange©rH  r4   rp  r5   rq    ó   $ z3_get_valued_base_test_variables.<locals>.<listcomp>ÚNCrY   c                    ro  )c                    s&   g | ]  fd dt ddD qS )c                    s   g | ]}  | qS r4   r4   )rH  rå   )ru   rä   r4   r5   rq  !  s    zI_get_valued_base_test_variables.<locals>.<listcomp>.<listcomp>.<listcomp>rz   r^  rs  ru  rp  ©rä   r5   rq  !  s   & rr  r<   rz   rs  ru  r4   rp  r5   rq  !  rv  r]  )	r   r   Údatar   r   r"   r   rA   rt  )Ú	minkowskir7   r   r   r   r   r   r   rô   rõ   rö   r=   r?   rZ  Ú	ba_matrixre  rf  Úmu0Úmu1Úmu2r@   Ú
ndm_matrixrj  Ún0Ún1Ún2rk  rn  rw  r4   r4   r5   Ú_get_valued_base_test_variablesî  s@   

"ÿr  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`  rb  )r<   r>   rY   rz   r]  r  r^  r_  ra  r   r\   rZ   r`   rÊ   rc  rd  rY   c                 S   ó   g | ]}d | qS )rY   r4   ©rH  ru   r4   r4   r5   rq  5  rÐ   z+test_valued_tensor_iter.<locals>.<listcomp>rc  c                 S   r  )rc  r4   r  r4   r4   r5   rq  6  rÐ   r>   r   c                 S   s   g | ]}| qS r4   r4   r  r4   r4   r5   rq  <  ó    )r-   r  r   rw   )r=   r?   rZ  re  r@   r7   r   rô   rõ   rö   rf  r|  r}  r~  rj  r  r  r  rk  rn  rw  rz  r{  r  r   r   r   r   r   Úlist_BAr4   r4   r5   Útest_valued_tensor_iter'  s    $ÿ,$$40"ìr  c                  C   s
  t  x t \} }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}| | d | |d ks3J | | d | |d  ksCJ |||d dksNJ ||| d dksZJ || | d dksgJ || |d dkssJ W d    d S 1 s~w   Y  d S )Nr   r<   ©r<   r<   r\   )r-   r  ©r=   r?   rZ  re  r@   r7   r   rô   rõ   rö   rf  r|  r}  r~  rj  r  r  r  rk  rn  rw  rz  r{  r  r   r   r   r   r   r4   r4   r5   Ú3test_valued_tensor_covariant_contravariant_elements?  s   $ÿ "ör  c                  C   s  t  v t \} }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}||| ¡ }|tg d¢g d¢g d¢g d¢gks?J |||  ¡ tdksMJ | | ¡ t||||	gks]J | |  ¡ t|| | |	 gksqJ W d    d S 1 s|w   Y  d S )NrT  rU  rV  rW  rz   )r-   r  Ú
get_matrixr   r   )r=   r?   rZ  re  r@   r7   r   rô   rõ   rö   rf  r|  r}  r~  rj  r  r  r  rk  rn  rw  rz  r{  r  r   r   r   r   r   Úmatabr4   r4   r5   Útest_valued_tensor_get_matrixM  s   $ÿü *"ïr  c                   C   s  t    t \} }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}| || |  j|d |d  |d  |	d  ksAJ | || |  j| d ksQJ | || |  j| |d kscJ | |||  j| d|  d|	  kszJ tdD ]&}tdD ]}| |||  ||f ||||	g| g d¢|  ks£J qq~||||  j|d  |d  |d  |	d  ksÂJ | ||||  }| |jdksÕJ ||| jdksàJ |jdksçJ tdD ]}|| ||||	g| ksûJ qëW d    d S 1 sw   Y  d S )Nr>   rY   rz   )r   r\   rZ   r`   r<   )r-   r  ry  rt  rË   ) r=   r?   rZ  re  r@   r7   r   rô   rõ   rö   rf  r|  r}  r~  rj  r  r  r  rk  rn  rw  rz  r{  r  r   r   r   r   r   ru   rä   Úcontrexpr4   r4   r5   Ú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 )Nrz   r>   ©r-   r  ry  r  r4   r4   r5   Ú#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-   r  r   r  r4   r4   r5   Ú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:4r  )rY   rY   rY   r>   r   r<   é   rÊ   é   é   é   é   )r-   r  r   ry  r   ))r=   r?   rZ  re  r@   r7   r   rô   rõ   rö   rf  r|  r}  r~  rj  r  r  r  rk  rn  rw  rz  r{  r  r   r   r   r   r   Úx1Úx2Úx3Ú
rank2coeffÚ
coeff_exprÚadd_exprÚsub_exprr÷   rø   rù   rú   Úexpr5r4   r4   r5   Útest_valued_tensor_expressions  s:   
$ÿ:.R$Ûr¡  c            !      C   s  t  º t \} }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}| || |  |d |d  |d  |	d   }|jdksDJ |d |d  |d  |	d  | || |   }|jdksdJ | || |  |d  |d  |d  |	d  }|jdksJ ||||  d|d   d|d   d|d   d|	d   | || |   } | jdksµJ W d    d S 1 sÀw   Y  d S )Nr>   r   r  )!r=   r?   rZ  re  r@   r7   r   rô   rõ   rö   rf  r|  r}  r~  rj  r  r  r  rk  rn  rw  rz  r{  r  r   r   r   r   r   r÷   rø   rù   rú   r4   r4   r5   Útest_valued_tensor_add_scalar¶  s   $ÿ222T"îr¢  c            '      C   sä  t  å t \} }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}td}ddg|_td|\}}}tddd\}}} }!td|gd }"||g| |!fg|"_td	|gd }#|| g||!gg|#_|"|||#| |  }$|$j|d |d  | d  |!d  ksJ |$j|d d| |   |!d  ksJ |"|||"| |  }%|%j|d ||   | |  |!d  ks¶J |%j|d d| |   |!d  ksÉJ ||"||  j}&|& ¡ || ||!  ksàJ W d    d S 1 sëw   Y  d S )
NÚ	Euclideanr<   zi1:4za b c dF)ÚcommutativeÚV1r>   ÚV2)r-   r  r   ry  r   r   r"   r   )'r=   r?   rZ  re  r@   r7   r   rô   rõ   rö   rf  r|  r}  r~  rj  r  r  r  rk  rn  rw  rz  r{  r  r   r   r   r   r   ÚeuclidrD   rE   rM   rN   r¥  rŠ  ÚvtpÚvtp2ÚVcr4   r4   r5   Útest_noncommuting_componentsË  s*   $ÿ
*&*&"çr«  c                  C   s®   t  J t \} }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}t|}||||  j|| ¡ j| || ¡  d ksEJ W d    d S 1 sPw   Y  d S )N)r   r   )r-   r  r   ry  r  r"  )r=   r?   rZ  re  r@   r7   r   rô   rõ   rö   rf  r|  r}  r~  rj  r  r  r  rk  rn  rw  rz  r{  r  r   r   r   r   r   Úmmatrixr4   r4   r5   Útest_valued_non_diagonal_metricè  s   $ÿ<"ûr­  c            $      C   sD  t   t \} }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}|d |d ||	g}t|| _tdD ]}| |j| || ksGJ q8td\}} }!t||| |!g| | _tdD ](}| |j| || |  |! g| ksuJ | j| || |  |! g| ksJ q_dd tdD }"|"|| | _tdD ]n}tdD ]g}#|||j||#f |"| |# |r·dnd |#rœdnd ksÃJ || |j||#f |"| |# |#rÖdnd ksÜJ ||| j||#f |"| |# |rïdnd ksõJ || | j||#f |"| |# ks
J q£q|"|| |_tdD ]w}tdD ]o}#|||j||#f |"| |# |r2dnd ks9J || |j||#f |"| |# ksMJ ||| j||#f |"| |# |radnd |#rhdnd ksoJ || | j||#f |"| |# |#rdnd ksJ qqW d    d S 1 sw   Y  d S )Nr<   rz   zqx qy qzc                    s"   g | ]  fd dt dD qS )c                    s(   g | ]}|d  d |d    d  qS )rY   r>   r^  r4   r  rx  r4   r5   rq    s   ( z?test_valued_assign_numpy_ndarray.<locals>.<listcomp>.<listcomp>rz   rs  ru  r4   rx  r5   rq    s   " z4test_valued_assign_numpy_ndarray.<locals>.<listcomp>r\   )r-   r  r   ry  rt  r   )$r=   r?   rZ  re  r@   r7   r   rô   rõ   rö   rf  r|  r}  r~  rj  r  r  r  rk  rn  rw  rz  r{  r  r   r   r   r   r   Úarrru   ÚqxÚqyÚqzÚrandom_4x4_datarä   r4   r4   r5   Ú test_valued_assign_numpy_ndarrayñ  s@   
$ÿ
(&<22,ü4(D<üÿ$ãr³  c            %      C   s   t   t \} }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}g d¢g d¢g d¢g d¢g}||_t|}|j}| ¡ } td}!| ¡ }"tdD ]¯}#tdD ]š}$|||j|#|$f ||#|$f ksgJ || | j|#|$f | |#|$f ks{J ||| j|#|$f |!|#|$f ksJ || |j|#|$f |!|#|$f ks¡J ||||#|$f ||#|$f ks²J || | |#|$f | |#|$f ksÅJ ||| |#|$f |!|#|$f ks×J || ||#|$f |!|#|$f kséJ |"|| |#|$f |!|#|$f ksûJ qSqMW d    d S 1 s	w   Y  d S )N)r>   r>   r>   r<   )r>   rY   r<   r   )r>   r<   r>   rY   )r<   r   rY   r>   rz   )	r-   r  ry  r   r²   Úinvr   Úget_kronecker_deltart  )%r=   r?   rZ  re  r@   r7   r   rô   rõ   rö   rf  r|  r}  r~  rj  r  r  r  rk  rn  rw  rz  r{  r  r   r   r   r   r   Úmdrð   r²   ÚminvÚmeyeÚKDru   rä   r4   r4   r5   Útest_valued_metric_inverse  s2   
$ÿ$(&&"&$$&öÿ$îrº  c            $      C   s>  t   t \} }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}| || | }| ¡ }|| || | ks<J tdD ]}tdD ]} ||| f || |f ksVJ qFq@||| | || }!|! ¡ }"tdD ] }tdD ]} tdD ]}#|!|| |#f |"| ||#f ksJ qxqrqlW d    d S 1 sw   Y  d S )Nrz   )r-   r  r#   rt  )$r=   r?   rZ  re  r@   r7   r   rô   rõ   rö   rf  r|  r}  r~  rj  r  r  r  rk  rn  rw  rz  r{  r  r   r   r   r   r   Úe1Úe2ru   rä   Úo1Úo2rå   r4   r4   r5   Útest_valued_canon_bp_swapaxes8  s*   $ÿÿ"ÿÿÿ"ôr¿  c                     sp  t  « tddd} td| \}}}}g d¢| _td| gd }td| gd t d¡td| gd t d¡ tg d	¢g d
¢g d¢gj j |_|_|_dd _t	t
fdd t	t
fdd  _t	t
 fdd t	t
 fdd g d¢g d¢g d¢g_g d¢g d¢g d¢g _W d    d S 1 s±w   Y  d S )NÚITrY   r¥   úi0:4©r<   r<   r<   r=   r>   rZ   )r<   r>   rY   )rz   r]  r  )r^  r_  ra  c                 S   s
   || _ d S r/   )ry  )r=   Údatr4   r4   r5   Úassign\  s   
z:test_valued_components_with_wrong_symmetry.<locals>.assignc                      ó
    S r/   r4   r4   )ÚA_symrÄ  Ú	mat_nosymr4   r5   r¿   `  rÀ   z<test_valued_components_with_wrong_symmetry.<locals>.<lambda>c                      rÅ  r/   r4   r4   )rÆ  rÄ  Úmat_antisymr4   r5   r¿   a  rÀ   c                      rÅ  r/   r4   r4   )Ú	A_antisymrÄ  Úmat_symr4   r5   r¿   d  rÀ   c                      rÅ  r/   r4   r4   )rÉ  rÄ  rÇ  r4   r5   r¿   e  rÀ   )r   r   r   )r-   r   r   ry  r"   r   rC   r   r"  r+   rÇ   )rÀ  r   r   r   r   ÚA_nosymr4   )rÉ  rÆ  rÄ  rÈ  rÇ  rÊ  r5   Ú*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 )Nr7   r<   ru   r>   ©rU   r:   r   r\   ú\mu, \nu, \alpha, \betaÚur   rb   rZ   )r-   r   ry  r   r"   r   rC   r   )	r7   rm   rn   rj   rk   rÏ  rb   Úmul_1Úmul_2r4   r4   r5   Ú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 )Nr7   r<   r8   rz   rÍ  rg  rÎ  rÏ  rT  rb   r>   rZ   zE_x E_y E_z B_x B_y B_zr   )r   r   r   r   r¯   )r-   r   ry  r   r"   r   rC   r   r   r#   Úzeros)r7   rm   rn   rj   rk   rÏ  rb   ÚExÚEyÚEzÚBxÚByÚBzr   r¯   ÚperprÐ  rÑ  ÚFperpÚmul_3r4   r4   r5   Ú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 )Nr7   r<   ru   r>   rÍ  r\   rL   zi_0:2r¯   rÏ  r   )	r-   r   ry  r   r"   r   rC   r   rÓ  )r7   rD   rE   rM   rN   r   r   r¯   rÏ  Úadd_1Úadd_2rÚ  rÐ  rÑ  r4   r4   r5   Ú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 )Nr7   r8   r9   rX  rŸ   ÚL_1r=   r?   r>   )r<   r   r  ri  )r   r<   r<   rh  rÂ  )r   r   r<   r   )r   r<   r<   r   )r   r   r<   r<   )r   r<   r<   r<   )r   r   r"   r   rC   rw   Ú_iterate_free_indicesÚ_iterate_dummy_indicesÚ_iterate_indicesrÆ   Úget_free_indices)r8   r   r   r   r   r   ÚL0ÚL1r=   r?   r»  rŒ  Úe3Úe4Úe5Úe6r4   r4   r5   Ú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 )Nr8   zi j krŸ   úA B C Drb   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)rY   )r   r   r   r   r   r   r0   r   r   r   rá   rB   r#   rÿ   r   râ   r   )r8   ru   rä   rå   rŸ   r=   r?   r@   r   rb   r¬   rš   ÚtmÚp1Úp2Úp3Úexpr_expandr4   r4   r5   Ú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 )	Nr8   rÁ  r=   zx yr   c                      s     S r/   r4   r4   ©r=   r¬   Úyr4   r5   r¿   ^  rÂ   z6test_tensor_alternative_construction.<locals>.<lambda>c                      s    d S rÔ   r4   r4   )r=   r¬   r4   r5   r¿   _  rÂ   )r   r   r"   r   r   r+   Ú	TypeErrorrÇ   )r8   r   r   r   r   r4   rô  r5   Ú$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 )'Nr8   ÚL2r>   r¥   zi j k lrí  ÚHr§   rz   r<   rY   r\   rZ   rÊ   ru   rä   r`   é   c                      ó
      ¡S r/   ©Ú_extract_datar4   ©rš   Úreplr4   r5   r¿     rÀ   z)test_tensor_replacement.<locals>.<lambda>c                      rû  r/   rü  r4   rþ  r4   r5   r¿     rÀ   c                      rû  r/   rü  r4   rþ  r4   r5   r¿   ¡  rÀ   r  r_  éd   éq   r]  r   é*   rT  rU  rV  rW  c                      ó      g¡S r/   ©Úreplace_with_arraysr4   )rš   rä   rÿ  r4   r5   r¿   Î  rÖ   c                      r  r/   r  r4   )rš   ru   rÿ  r4   r5   r¿   Ó  rÖ   zu1:4ÚUc                      s       g¡S r/   r  r4   )rš   rÿ  Úu1Úu2r4   r5   r¿   Ú  r  )r   r   r   r"   r.   rý  r   r  r   Úreshaper+   rÇ   )r8   rø  rå   r  r=   r?   r@   r   rù  r§   Úu3r  r4   )rš   ru   rä   rÿ  r  r  r5   Ú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 )
Nr8   rz   r¥   r=   r?   rÁ  zL_0:2r   rY   )r   r"   r   Úrewriter   r   r   )r8   r=   r?   r   r   r   r   rŸ   rá  rg   rh   ri   Úb1Úb2r4   r4   r5   Ú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ª   rY   r¥   r  za b cT©r«   rÅ   Úignore_updownr¯   r§   r   r=   ÚW©Úunordered_indicesr  Nr<   )r   r   r   r(   r  r  r"   r)   ÚmatchesÚreplaceÚheadr*   )rª   rŠ   ré   rê   rD   rE   rM   r¯   r  r  r§   r   r=   r  r  r4   r4   r5   Ú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ª   rY   r¥   r)  r§   r   r  Tr  Nrz   )r   r   r"   r)   r  r  râ   )rª   rŠ   ré   r§   r   r  r4   r4   r5   Ú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ª   rY   r¥   z	p q r s tÚwiza b c d e fTr  r§   r   r  r  r  r<   r\   r  rz   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  rH   r  rD   rE   rM   rN   rr   rd   r  r  r§   r   r  r  rå   ÚD0ÚD1ÚD2ÚD3rš   rð   r4   r4   r5   Ú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ª   rY   r¥   r  r§   r   r=   Ú_0TrD   )r  N)
r   r   r"   r   r:   r(   ÚsubsÚxreplacerâ   r  )	rª   rŠ   ré   rê   r§   r   r=   ÚC0rD   r4   r4   r5   Ú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 r4  )r-   r%   r4   r4   r4   r5   Útest_tensorsymmetryy  s   "ÿr&  c                   C   s6   t   tdg  W d    d S 1 sw   Y  d S )Nr=   )r-   r$   r4   r4   r4   r5   Ú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>   r7   )r-   r   rC   r   r&   r0   )r¹   r7   ÚS2r4   r4   r5   Útest_TensorType  s   
"ür)  c                   C   s8   t   tddd W d    d S 1 sw   Y  d S )Nr7   r8   )Ú	dummy_fmt)r-   r   r4   r4   r4   r5   Ú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ª   rY   r¥   ru   r§   zx y zr>   N)
r   r   r"   r   r0   r#  r   r   r"  r  )rª   ru   r§   r¬   rõ  Úzr4   r4   r5   Ú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ª   rY   r¥   zi jr§   ÚPr>   N)r   r   r"   r   rÿ   Únocoeff)rª   ru   rä   r§   r.  rš   r4   r4   r5   Útest_TensMul_nocoeff  s   r0  N)Úsympy.concrete.summationsr   Úsympy.core.functionr   Úsympy.core.numbersr   Úsympy.matrices.denser   r   Úsympy.tensor.indexedr   Úsympy.combinatoricsr   Ú
sympy.corer	   r
   r   r   r   r   r   Úsympy.core.containersr   Úsympy.core.symbolr   Ú(sympy.functions.elementary.miscellaneousr   Úsympy.integralsr   Úsympy.tensor.arrayr   Úsympy.tensor.tensorr   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   Úsympy.testing.pytestr+   r,   r-   Úsympy.matricesr.   r6   rK   rO   rS   rX   rt   rx   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-  rG  rS  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)  r+  r-  r0  r4   r4   r4   r5   Ú<module>   s°    $`	M* 	(
V%%	
,Cb+'
&=9	)	&!;3G{$;