U
    L?h( ã                   @   s   d dl mZ d dlmZ d dlmZ d dlmZmZ d dl	m
Z
 d dlmZ d dlmZmZmZmZmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1 d dl2m3Z3m4Z4m5Z5 d dl6m7Z7 dd Z8dd Z9dd Z:dd Z;dd Z<dd Z=dd Z>dd Z?dd  Z@d!d" ZAd#d$ ZBd%d& ZCd'd( ZDd)d* ZEd+d, ZFd-d. ZGd/d0 ZHd1d2 ZId3d4 ZJd5d6 ZKd7d8 ZLd9d: ZMd;d< ZNd=d> ZOe4d?d@ ZPdAdB ZQdCdD ZRdEdF ZSdGdH ZTdIdJ ZUdKdL ZVdMdN ZWdOdP ZXdQdR ZYdSdT ZZdUdV Z[dWdX Z\dYdZ Z]d[d\ Z^d]d^ Z_d_d` Z`dadb Zadcdd Zbdedf Zcdgdh Zddidj Zedkdl Zfdmdn Zgdodp Zhdqdr Zidsdt Zjdudv Zkdwdx Zldydz Zmd{d| Znd}d~ Zodd Zpdd Zqdd Zrdd Zsdd Ztdd Zudd Zvdd ZwdS )é    )ÚSum)Úexpand)ÚInteger)ÚMatrixÚeye)ÚIndexed)ÚPermutation)ÚSÚRationalÚSymbolÚBasicÚAdd)ÚTuple)Úsymbols)Úsqrt)ÚArray)ÚTensorIndexTypeÚtensor_indicesÚTensorSymmetryÚget_symmetric_group_sgsÚTensorIndexÚ
tensor_mulÚTensAddÚriemann_cyclic_replaceÚriemann_cyclicÚTensMulÚtensor_headsÚTensorManagerÚTensExprÚ
TensorHeadÚcanon_bpÚ
tensorheadÚtensorsymmetryÚ
TensorTypeÚsubstitute_indicesÚ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Đ r/   úP/var/www/html/venv/lib/python3.8/site-packages/sympy/tensor/tests/test_tensor.pyÚ	_is_equal   s
    



r1   c                  C   s  t ddd} td| \}}}}td| gt dĄ\}}|| || }| Ą }t|dks`t|||| }| Ą }||kst|||| }	|	 Ą }t|dksŽttd	| gd
 t 	d
Ą}||| ||| }| Ą }t|dksōttd| gt dĄ\}}
||| || |
|  }| Ą }t|dksBttd	| gd
 t d
Ą}||| || |
|  }| Ą }t|dksttd| gd
 t d
Ą}||| || | }| Ą }t|dksÜt|| ||| | }| Ą }t|dksttd| gd
 t d
Ą}
||||| |  |
| |  }| Ą }t|dksfttd	| gd
 t 	d
Ą}||||| |  |
| |  }| Ą }t|dksūttd| gd
 t 	d
Ą}
||||| |  |
| |  }| Ą }t|dkst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    ÚstrÚAssertionErrorr   Úfully_symmetric)r2   ÚaÚbÚd0Úd1r8   r:   ÚtÚtcÚt1r;   r/   r/   r0   Útest_canonicalize_no_slot_sym   sV    &&&rG   c                  C   sf  t ddd} td| \}}}}td| gt dĄ}|||| || }| Ą }t|dksbttd| gt dĄd}|||| || }| Ą }t|dksĻttd| gd	 t d	Ą}|||||| }| Ą }t|d
ksėttd| gd	 t d	Ąd}|||||| }| Ą }t|dks4t|||||| }| Ą }t|d
ksbtd S )Nr2   r3   r4   ú
a, b, c, dr8   r7   zA(a)*A(b)*A(c)z-A(a)*A(b)*A(c)r9   zA(a, c)*A(b, d)z-A(a, c)*A(b, d))	r   r   r   r   r<   r    r=   r>   r?   )r2   r@   rA   ÚcÚdr8   rD   rE   r/   r/   r0   Útest_canonicalize_no_dummiesk   s*    rK   c                  C   s^   t d} td| | g}td| | gt dĄ}||ks8ttd| | gt dĄ}||ksZtd S )Nr2   r8   r9   )r   r   r   r<   r>   r?   )r3   ÚA1ÚA2ZA3r/   r/   r0   Ú-test_tensorhead_construction_without_symmetry   s    rN   c                  C   sü   t dddd} td| \}}}}td| gd t dĄ}||| |||  }| Ą }t|dksht||| |||  |||  |||  }| Ą }t|d	ks°t||| |||  |||  |||  }| Ą }t|d
ksøtd S )Nr2   r3   r   Đr5   Úmetric_symmetryzd:4r8   r9   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=   r>   )r2   rB   rC   Úd2Úd3r8   rD   rE   r/   r/   r0   Útest_no_metric_symmetry   s    00rS   c                
   C   s:  t ddd} td| \
}}}}}}}}}	}
td| gt dĄ}|| || }| Ą }t|dksht|| ||  ||	  ||	 || || }| Ą }t|dksķttd| gt dĄd}|| ||  ||	  ||	 || || }| Ą }|d	ksttd| gd
 t d
Ą}||||||  |||  }| Ą }t|dkslttd| gd
 t d
Ą}||||||  |||  }| Ą }t|dksĀttd| gd t dĄ}||||||| |  }| Ą }t|dkst||
||	||| |	  |||
 | ||||  }| Ą }t|dks`ttd| gd t dĄ}td| gd
 t dĄ}||||	||	 |
 |  || |
 }| Ą }|d	ksÐttd| gd t dĄd}td| gd
 t dĄ}||||	||	 |
 |  || |
 }| Ą }t|dksFtt dddd}td|\
}}}}}}}}}	}
td|gd t dĄd}td|gd
 t dĄ}||||	||	 |
 |  || |
 }| Ą }t|dksčtt dd	dd}td|\
}}}}}}}}}	}
td|gd t dĄd}td|gd
 t dĄ}||||	||	 |
 |  || |
 }| Ą }t|dkst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&t|||||| ||  ||| |  }| Ą }t|d ksntt d!d"d}td#|\}}}}}}td$| \}}td%|gd t 	ddĄ}td| |gt d
Ą}||| | || | |  || | || | ||| ||| }| Ą }t|d&ks6td S )'Nr2   r3   r4   za,a0,a1,a2,a3,b,d0,d1,d2,d3r8   r7   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   r9   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	   éĸĸĸĸrO   z2-A(S_0, S_1, S_2)*A(-S_0, -S_1, S_3)*B(-S_2, -S_3)ÚMatÚM)rP   r5   z1A(M_0, M_1, M_2)*A(-M_0, -M_1, -M_3)*B(-M_2, M_3)zalpha,beta,gamma,mu,nu,rhoÚGammaéýĸĸĸz4-Gamma(L_0, L_1)*Gamma(rho)*Gamma(alpha, -L_0, -L_1)zGGamma(L_0, L_1)*Gamma(beta, gamma)*Gamma(-rho)*Gamma(alpha, -L_0, -L_1)ÚFlavorÚFúa,b,c,d,e,fzmu,nuÚfzY-f(F_0, F_1, F_2)*f(-F_0, F_3, F_4)*A(L_0, -F_1)*A(-L_0, -F_3)*A(L_1, -F_2)*A(-L_1, -F_4))
r   r   r   r   r<   r    r=   r>   r?   Údirect_product) r2   r@   Úa0Úa1Úa2Úa3rA   rB   rC   rQ   rR   r8   rD   rE   r:   rV   rX   ÚalphaÚbetaÚgammaÚmuÚnuÚrhorZ   ZGamma2ZGamma3r\   rI   rJ   ÚeÚffr_   r/   r/   r0   Útest_canonicalize1ī   sĶ    ĸ66""8**ĸ*ĸ*ĸ ĸ ĸ ĸ".Nrm   c                  C   s6   t d} td| }t|ttfr$tt|ts2td S )Nr8   Úi)r   r   r-   ÚtupleÚlistr>   r   )r8   rn   r/   r/   r0   Ú"test_bug_correction_tensor_indices>  s    
rq   c                  C   sö   t ddd} td| \}}}}}}}}}	}
}}td| gd t Ą }|||| | }| Ą }t|dksnt|| || ||||||  || | |	 |
  || | | |  |||||  ||	|
|| }| Ą }t|dksōtd S )	Nr2   r3   r4   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=   r>   )r2   rB   rC   rQ   rR   Úd4Úd5Úd6Zd7Zd8Zd9Zd10Zd11rr   rD   rE   r/   r/   r0   Útest_riemann_invariantsG  s     ĸ	6ĸĸĸrx   c                  C   sŽ  t ddd} td| \}}}}}}}td| \}}	}
}}}td| \}}td| gd t Ą }||||| }| Ą }|d	kst||||| }| Ą }t|d
ksŠt||| || |||| | }| Ą }t|dksättd| gd t dĄ}|||| |||||| || |  || |  || |  }| Ą }t|dks^t||||
|||| |	| |||| |  }| Ą }t|dksĻtd S )Nr2   r3   r4   zd0:7za0:6úa,brr   rs   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)ÚVr9   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   rt   r    r>   r=   r?   )r2   rB   rC   rQ   rR   ru   rv   rw   ra   rb   rc   rd   Úa4Za5r@   rA   rr   rD   rE   rz   r/   r/   r0   Útest_riemann_products^  s*    "H0r|   c                  C   sR  t d} tdd| dd}td|\}}}}}}}}	}
}}}}}}td|gd t d	Ą}|||||| || || |	| || | | || | |
 }| Ą }|d
ksīt|||||| || || || || |	|
 || |	 | ||
 || || | | || | | || | | }| Ą }|d
ksNtd S )NÚDÚEuclr7   ÚE)rP   Údimr5   zi0:15r8   rT   r[   r   )r   r   r   r   r   r?   r    r>   )r}   r~   Úi0Úi1Úi2Úi3Úi4Zi5Úi6Úi7Úi8Zi9Zi10Zi11Zi12Zi13Zi14r8   rD   rF   r/   r/   r0   Ú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sjt|||| }	|	 Ą }
|
|| || kstd S )	Nr}   rV   rW   r	   Đr   rP   r5   úa0:5úchi,psir7   )r   r   r   r   r   r<   r    r>   )r}   rV   ra   rb   rc   rd   r{   ÚchiÚpsirD   rF   r/   r/   r0   Útest_canonicalize3  s    r   c                  C   sČ   t d} tddd| dd}td|\}}}}}t dĄ}ttd }||ksPt|j}	t|	d	ksft|j	|j
ksvttd
d
d}
td|
\}}|
j}	td|
gd |}t|||  Ą dksÄtd S )Nr}   r2   Úgr7   r3   )Zmetric_namerP   r   r5   zm0:5r9   zg(Lorentz,Lorentz)ÚTSpacer4   zi0 i1r8   zA(TSpace_0, -TSpace_0))r   r   r   r   r?   r   r>   Úmetricr=   Zeps_dimr   r   r    )r}   r2   Úm0Úm1Úm2Úm3Zm4Úsym2Zsym2nr   r   r   r   r8   r/   r/   r0   Útest_TensorIndexTypeŦ  s"     ĸ
r   c                     sJ  t dddtd\} jks,t ks:ttdgd t dĄ\ } |  }| Ą }td}||| gkstt	t
fdd	 t	t
 fd
d	 tdg  dd tdtdksðt dd tdtdddkst dtd tdtdksFtd S )Nr2   r3   r4   úa,b,c,dúA Br9   ÚL_0c                      s
   t d S )NrT   )r   r/   )r2   r/   r0   Ú<lambda>Į  ó    ztest_indices.<locals>.<lambda>c                      s    S r,   r/   r/   Đr8   r@   rA   rI   r/   r0   r   Č  r   r8   r@   rA   z-bF)Úis_up)r   r   Útensor_index_typer>   r   r   r?   Úget_indicesr   r(   Ú
ValueErrorr   )rJ   r:   rD   Úindicesr   r/   )r8   r2   r@   rA   rI   r0   Útest_indices―  s*    
ĸ
ĸĸrĪ   c                  C   sú   t  dĄt tdkstt  dĄt tddks6tt  dĄt  dĄksNtt  dĄt  dĄksftt  dddĄt  dĄkstt tdt td kstt  dĄ} | jdksķt| jtddksĘt| j	tt
dddd	t
dddd	ksötd S )
Nr9   r[   rT   TéüĸĸĸrW   r7   r   rs   )r   r?   r   r>   r`   r<   ÚrankÚbaser   Ú
generatorsr   )Úsymr/   r/   r0   Útest_TensorSymmetryŌ  s,    
ĸĸĸĸĸ

ĸ
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 5 Q R X tt	 fdd tt	 fdd d S )Nr2   r3   r4   r   r   r9   c                      s     S r,   r/   r/   )r@   rA   rI   rJ   r   r/   r0   r   ę  r   ztest_TensExpr.<locals>.<lambda>c                      s   t j  S r,   Đr	   ÚOner/   )r@   rA   r   r/   r0   r   ë  r   c                      s      S r,   r/   r/   Đr8   r@   rA   rI   rJ   r   r/   r0   r   ė  r   c                      s   t j   S r,   rŦ   r/   )r8   rI   rJ   r   r/   r0   r   í  r   c                      s      S r,   r/   r/   r   r/   r0   r   î  r   c                      s    d S ĐNr9   r/   r/   Đr8   r@   rA   r/   r0   r   ú  r   c                      s   d  S rŪ   r/   r/   rŊ   r/   r0   r   û  r   c                      s   t  S r,   )Úabsr/   rŊ   r/   r0   r   ü  r   )
r   r   r   r   r   r?   r(   rĒ   r*   ÚNotImplementedError)r2   r:   r/   r­   r0   Útest_TensExprå  s    
 rē   c                  C   sp   t ddd} td| gd }|jdks*t|j| | gks<t|jdksJt|jt dĄks^t|j	dksltd S )Nr2   r3   r4   r8   r9   r   )
r   r   Únamer>   Úindex_typesrĶ   Zsymmetryr   r<   Úcomm)r2   r8   r/   r/   r0   Útest_TensorHeadþ  s    rķ   c                  C   s   t  jdkstt   Ą dks"ttddd} td| \}}}}}}}td| gd t dĄ\}}	||| |	|| }
t |
 	|
Ąst|	||||| }||| | }t
|d	ksūt| Ą }t
|d
ksÖt| Ą }t
|dksît||
 }t
|dkst| Ą }t
|dks"ttd| g\}}}||d }t
|dksRtd|| }t
|dkspt||d||  }
t
|
dkst|| d||   }t
|dksĀt||}
|
| }t
|dksât| Ą }t
|dksüt||
 }| Ą }t
|dkst| Ą }t
|dks8t||d||  }
|
| }| Ą }t
|dksnt||d||  }
t
|
dkst|| d||   }|
| }| Ą }|||||  d|| ||   ksît|||| ||||  ||||||  ||d||    }| Ą }|d|| || || d|| || ||  |||| ||  d|| || ||  ksļt|||| d||  ||||  }
|||| d||  ||||  }|
| }| Ą }|d|| || d|| ||  d|| ||  d|| ||  d|| ||  d|| ||  ksĒt|||| d }d| |||| ksÔt|||| d }d| |||| ksttj||||   }| Ą }||| ||  }|dksJt| Ą }| 	dĄsbttj||||   }||| ||   Ą  	dĄs t||||	|| }|jdksÄt|||| |	|| }
|
dksętd||| |	||   }d||| |	||   }
||
  Ą  	dĄs:td|||  }|
|ksXt|t dg g g Ąksrtt ||td|| Ą ||kstd S )Nr/   r   r2   r3   r4   úa,b,d0,d1,i,j,kr6   r9   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)rs   rT   r7   )r   Úargsr>   Údoitr   r   r   r   r?   r.   r=   r   r    r	   rŽ   rĶ   r   Ú	from_data)r2   r@   rA   rB   rC   rn   ÚjÚkr8   r:   rF   Zt2aÚt2Zt2bÚpÚqÚrrD   Út3Ztz1r/   r/   r0   Ú	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sntt|tjs~t|
||||kst||| |||ksŪtd||||	||  dksÎtd||||	||  tjksðtd	||||||  tjkst|
||| |||ks4t|
||| ||||	|| ks^t|
||
| dksxt|
||
| tjkstt||||||s°td S )
Nr2   r3   r4   r·   r6   r9   rļ   r   rT   )	r   r   r   r   r?   r1   r>   r	   ZZero)r2   r@   rA   rB   rC   rn   rž   r―   r8   r:   rŋ   rĀ   rÁ   rD   r/   r/   r0   Útest_special_eq_ne_  s"     "$ *rÄ   c            
      C   sN  t ddd} td| \}}}}td| gd t Ą }td| gd t d	Ą}d
||||| ||||| ||||| }||| | |  }| Ą }|dksĪttd
d||||| tdd|||||  tdd|||||  }||| | |  }| Ą }|dkst||| |||||  }	|	 Ą }	|	dksJtd S )Nr2   r3   r4   zm,n,p,qrr   rs   r8   rT   r[   r9   r   r7   )	r   r   r   r   rt   r?   r    r>   r
   )
r2   ÚmÚnrŋ   rĀ   rr   r8   rF   rū   rD   r/   r/   r0   Ú	test_add2z  s    .HrĮ   c               	   C   s<  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sŽt|d |d  |d  |d  ||||   }
|
j|d |d  |d  |d  || ||  fkst||||  |d  |d  |d  |d  }|j|d  |d |d |d ||||  fkst||||  d|d   d|d   d|d   d|d   ||||   }|jd|d  d	|d  d	|d  d	|d  ||||  || ||  fks8td S )
Nr2   r3   r4   zi0:2ú
E px py pzr8   r:   r9   rU   )r   r   r   r   rđ   r>   )r2   r   r   r   ÚpxÚpyÚpzr8   r:   Úexpr1Úexpr2Úexpr3Úexpr4r/   r/   r0   Ú	test_add3  s    282@2:TrÐ   c                     sR  ddl m}  tddd}td|\}t tjg g g Ą}t|dksLt	t
d|gd	 t d	Ą\ }d
|    }t|dkst	|j||gkst	|jd	ksŠt	|jg ksļt	|jd
|  ksĘt	t|jdfd
fgksčt	|j gksøt	 }t|dkst	|j||gks(t	|jd	ks8t	|jg ksHt	|jd
ksXt	t|jdfd
fgksxt	|j gkst	  |    | }t| Ą  }||ksČt	tg  t tjg g g Ąksčt	t d
g g g Ą}tdg }t| dkst	t|dks(t	|d
ks6t	tt fdd d S )Nr   )Úxr2   r3   r4   r   Ú1r   r9   r7   z(x + 1)*A(a, b)zA(a, b)r;   c                      s      S r,   r/   r/   r   r/   r0   r   Â  r   ztest_mul.<locals>.<lambda>)Z	sympy.abcrŅ   r   r   r   rŧ   r	   rŽ   r=   r>   r   r   r?   rī   rĶ   ZdumÚcoeffÚsortedÚfreeÚ
componentsr   Úsplitr   r(   rĒ   )rŅ   r2   rJ   rD   r:   ÚtsrF   r;   r/   r   r0   Útest_mul  s@    
 $ 
rŲ   c                  C   s6  t ddd} td| \}}}}}}}}td| gd t dĄ\}	}
td| g}||}| ||fĄ}||kspt| ||fĄ}|||kst| || fĄ}||| ks°t| | |fĄ}||| ksŌt| | | fĄ}|||ksôt|	||}| ||f|| fĄ}||	|| ks*tt|||f|| f}||	|| ksVt|	|||
| |  }| ||f||fĄ}|	|||
| |  }||ksĻtt|||f||f}||ksĘt|	|||
|| }| || fĄ}|	|| |
||  }||kstt||| f}||ks2td S )Nr2   r3   r4   úi,j,k,l,m,n,p,qr6   r9   rŋ   )r   r   r   r   r?   r   r$   r>   )r2   rn   rž   r―   ÚlrÅ   rÆ   rŋ   rĀ   r8   r:   rD   rF   Út1ar/   r/   r0   Ú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std S )Nr2   r3   r4   zm:4rr   rs   rW   rT   r7   r9   )r   r   r   r   rt   r   r
   r>   )	r2   r   r   r   r   rr   rD   rF   rÜ   r/   r/   r0   Ú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ūt|	|||||	| | | | d|	| | | |    }
t|
}|dkst|	||||}
t|
}|td	d
|	|||| tdd
|	||||  tdd
|	||||  kszt|	|||||	| | || |	| | | | d|	| | | |    }
t|
}|dksātd S )Nr2   r3   r4   rÚ   rr   rs   r   r9   rW   rT   r7   )r   r   r   r   rt   r   r>   r
   )r2   rn   rž   r―   rÛ   rÅ   rÆ   rŋ   rĀ   rr   rD   rū   rÂ   rF   r/   r/   r0   Útest_riemann_cyclicō  s,    (ĸĸĸ>RPrß   c                  C   s   t ddd} td| \}}}}td| gd t Ą }|||| |}|td }t|dks`t| Ą }|j	rrt|d }|j	st|d }|j	std S )Nr2   r3   r4   zm0:4rr   rs   z(1/4)*R(m0, L_0, -L_0, m3))
r   r   r   r   rt   r	   r=   r>   r    Z_is_canon_bp)r2   r   r   r   r   rr   rD   rF   r/   r/   r0   Útest_div  s    

rā   c                  C   s  t d} td| dd}td|\}}}}}|j}td|g}|||||  }	|	 |Ą}
|
||ksjttd|gd t 	dĄ\}}||||| | ||| }
|
 |Ą}|
|ksžt||||| | || | }
|
 |Ą}|| ||| || | kst||||| |  ||| }
|
 |Ą}|||||| | ksXt||||| |  |||  }
|
 |Ą}t
|||||| |  sŠt||||| |  ||| || |  }
|
 |Ą}t
|||||| |  st||||| |  }
|
 |Ą}t
|||| sBt|jrNttddd	}td
|\}}|j}t
|||  |Ą|jstd S )Nr}   r2   r3   Đr   r5   ú	a,b,c,d,erŋ   r6   r9   r4   ry   )r   r   r   r   r   Úcontract_metricr>   r   r   r?   r1   rÕ   r   )r}   r2   r@   rA   rI   rJ   rk   r   rŋ   rD   rF   r8   r:   rū   r/   r/   r0   Útest_contract_metric1  s@    
 
"
$"
 $
$0
$
rä   c                  C   s  t d} td| dd}td|\}}}}}}|j}td|g\}	}
||||	| |	|  }d|| |  |
| |
|  }|| }| |Ą}|d|  |	| |	|  |
| |
|  ksČt||||	| |	|  }d|
|  |
|  }|| }| |Ą}| Ą }|d|	| |	|  |
| |
|  ksHtd||| |	| |	|  }d	|| |  |
| |
|  }|| }| |Ą}d
||| || |  |	| |	|  |
| |
|  }| |Ą}d||| |	| |	|  }|
| |
|  d|| |  |
| |
|   }|| }| |Ą}|dd
|   |	| |	|  |
| |
|  kst|	||	| |	||
|  d||| |	| |	|   }|
| |
|  || | |
| |
|   }|| }| |Ą}dd|   |	| |	|  |
| |
|  |	||
|  |	| |
|   }t|| dks|t|||||| || |  }| |Ą}||||ksžt|||||| ||||||  ||||||  }| || f|| f|| f|| fĄ}|| }| |Ą}| 	d| d  d
|   ĄsRtd|	| |||  }| |Ą}| 	d|  |	| Ąstd|	| |||  }| |Ą}|d|	| ksČtt d}|	||	| ||||d   || |  | |d   }| |Ą}||	||	|  ks2tt
d|gd t dĄ}||||	| || |  }| |Ą}t|dkst|dkstd S )Nr}   r2   r3   rá   za,b,c,d,e,L_0zp,qrT   r9   r[   é   r7   r   rY   r8   zA(L_1, -L_1)*p(L_0)zA(-L_1, L_1)*p(L_0))r   r   r   r   r   rã   r>   r    r$   r.   r   r   r?   r=   )r}   r2   r@   rA   rI   rJ   rk   r   r   rŋ   rĀ   rF   rū   rD   rY   r8   r/   r/   r0   Útest_contract_metric2A  sn    $
4
2 $
@
 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
Ą}
||| }| |Ą}| 	|  Ąst
|| |}| |Ą}| 	| ĄsŪt
||||| |  }| |Ą}| 	| ĄsÞt
||||| |  }| |Ą}| 	|  Ąst
|| ||||  }| |Ą}| 	|  ĄsFt
||| |||  }| |Ą}| 	| Ąsxt
||||
| |  }| |Ą}| Ą }t||
|| sšt
||||
| |  }| |Ą}t||
||  söt
||| |
||  }| |Ą}t||
||  s2t
|| ||
| | }| |Ą}t||
||  snt
|| | |
|| }| |Ą}t||
|| sĻt
|| ||
||  }| |Ą}t||
|| sât
||||	|  }| |Ą}t||	|st
||||	|  }| |Ą}t||	| sHt
|||||  |	|  }| |Ą}t||| |	|  st
|||||  |	|  }| |Ą}t||||	|  sÖt
|| |||  |	| }| |Ą}t||| |	| st
||| ||  |	| }| |Ą}t|||  |	| sdt
|| | || |	| }| |Ą}t||| |	| sŠt
|| | || |	| }| |Ą}t|||  |	| sōt
|| | |
|| |	| }| |Ą}t||
| | |	| s>t
||||
| |  |	|  }| |Ą}t||
| ||	|  st
d S )Nr}   rV   rW   r	   r   r   r   r7   r:   r9   )r   r   r   r   r   r   r<   r   rã   r.   r>   r    r1   )r}   rV   ra   rb   rc   rd   r{   r;   r   r   r:   rD   rF   r/   r/   r0   Útest_metric_contract3  s    














 


 

  
""
rį   c                  C   sx   t ddd} td| \}}}| j}| j}td| g}|||||| ||  || |   }| |Ądksttd S )NÚR3rT   Đr   úp q rÚKr   )r   r   ÚdeltaÚepsilonr   rã   r>   )rč   rŋ   rĀ   rÁ   rė   Úepsrë   Úexprr/   r/   r0   Útest_contract_metric4æ  s    .rð   c                  C   sĻ  t dddd} td| \}}}}}| j}td| g\}}}	}
|||||}| Ą }|||||| ksjt|||||}| Ą }||||||kst|||||}| Ą }|||||| ksÄt|||||||  ||  }| Ą }||||||||  ||  kst|||||||  ||  }| Ą }||||||||  ||  kspt|||||||  ||  }| Ą }|||||| ||  ||  ksČt|||||||  ||  }| Ą }|dks t|||||||  ||  |||||||  ||   }| Ą }|d||||| ||  ||  ks|tt dtddd} | j}t|tsĪtd S )	Nr2   rs   r3   rá   râ   zp,q,r,sr   rU   )	r   r   rí   r   r    r>   r   r-   r   )r2   r@   rA   rI   rJ   rk   rí   rŋ   rĀ   rÁ   ÚsrD   rF   r/   r/   r0   Útest_epsilonō  s>    ",","."D0rō   c                     sv  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ļt||| || ||| ||  }	|	 Ą}
|
||| || kst||| || ||| ||  }	|	 Ą}
|
dks>t||| || }	|	 Ą}
|
 d d Ąsrtd S )NrÆ   ÚColorr;   rá   r^   c                    s4   | j r|j st|j s|j r t | | || S r,   Đr   r>   Đr@   rA   rJ   rI   Đrė   r/   r0   Úidn$  s    z!test_contract_delta1.<locals>.idnc                    s4   | j r|j st|j s|j r t | | || S r,   rô   rõ   rö   r/   r0   ÚT)  s    ztest_contract_delta1.<locals>.Tc                    s$   | |||d  | |||  S ĐNr7   r/   Đr@   rA   rI   rJ   )rø   rũ   rÆ   r/   r0   ÚP1.  s    z test_contract_delta1.<locals>.P1c                    s   d  | ||| S rų   r/   rú   )rø   rÆ   r/   r0   ÚP21  s    z test_contract_delta1.<locals>.P2r   r9   r7   )r   r   r   rė   Zcontract_deltar    r>   r.   )ró   r@   rA   rI   rJ   rk   r_   rû   rü   rD   rF   r/   )rø   rė   rũ   rÆ   r0   Útest_contract_delta1  s(    $
"$
$

rý   c               	   C   s  t   td} td| dd}td|\}}}}}|j}td|g\}}	|	||| |	| |||||| |	|   }
|
||||
kstt|
|
||| |	||| |	|  |	||| |	|  dksāt|
||||	||| |	| |||||| |	|   ks(t|
 ||f||fĄ}t||	||| |	|  |||||| |	|   dkstt	d|gd	 t
 d
dĄ}tj||| || | | || | |  || | |   }|| | | || | ||| |   || | ||| |   }
|
 |Ą}
|
dksJt|	||| |	| }
|
||||	||| |	| kstW 5 Q R X d S )Nr}   r2   r3   rá   râ   úp qr   ÚdgrT   r7   r9   )r*   r   r   r   r   r   r>   r    r$   r   r   r`   r	   ZHalfrã   )r}   r2   r@   rA   rI   rJ   rk   r   rŋ   rĀ   rD   rF   rĸ   rg   r/   r/   r0   Útest_funD  s&    
6LHHFN
r   c                     sd  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sttd|gt dĄ }||||  }||||  }|| }|| }t|||  d| |  ||  dkst||||  }|||	|  }t|| || sPtt|| || rhtt |
Ą}t |Ą|
kst tjksttt fdd t |
 df|
ddfĄ t |dĄt d|Ą  krčdksîn tt Ą  tj
ddddddd ddd dgks"t tjks2tt  Ą}t |Ą ksPt tjks`td S )Nr2   r3   r4   ÚLorentzHZLHzi,jzih,jhrþ   zph qhÚGsymbolÚGHsymbolr   ÚGr7   ÚGHr9   c                      s   t   ddĄS ĐNr7   r9   )r   Úset_commr/   Đr  r/   r0   r   |  r   z$test_TensorManager.<locals>.<lambda>)r   r7   r9   )r   r7   )r   r   r   r   r   r  r   r   r<   Z_comm_i2symbolrĩ   r>   r    r1   Zcomm_symbols2iZcomm_i2symbolZ_comm_symbols2ir(   rĒ   Z	set_commsZget_commÚclear)r2   r  rn   rž   ZihZjhrŋ   rĀ   ÚphZqhr  r  r  ZpsZpshrD   rF   ÚqsZqshrÆ   Znhr/   r  r0   Útest_TensorManagera  sB    .
.,
r  c                  C   sÎ  t d} td| dd}td|\}}}}}|j}td|g\}}	|jd }
|||	| }|||| }t|t|ks~t|||| ||| }|||| ||| }t|t|ksÆt|j|j |ksÚt|j|j |ksît|j|j |kst|j|j |kst|
j|
j |
ks0t||j||j ||ksRt|j|j |ksht|j|j |ks~t|j|j |kst|j|j |ksŠtt|j|j t|ksČtt|j|j t|ksætt|j|j t|kstt|j|j t|ks"tt|
j|
j t|
ks@tt||j||j t||ksjtt|j|j t|kstt|j|j t|ksĶtt|j|j t|ksÄtt|j|j t|ksâtdd	 }||søt||st||st||s"t||
s0t|||sBt||sPt||s^t||slt||sztt	 
d
ddĄ}|j|j |kstt|j|j t|ksžt||sĘtd S )Nr}   r2   r3   rá   râ   rþ   r7   c                 S   s   t dd | jD S )Nc                 s   s   | ]}t |tV  qd S r,   )r-   r   )Ú.0Ú_r/   r/   r0   Ú	<genexpr>­  s     z/test_hash.<locals>.check_all.<locals>.<genexpr>)Úallrđ   )Úobjr/   r/   r0   Ú	check_allŽ  s    ztest_hash.<locals>.check_allrU   rT   )r   r   r   r   r   rđ   Úhashr>   Úfuncr   r`   )r}   r2   r@   rA   rI   rJ   rk   r   rŋ   rĀ   Zp_typerF   rū   rÂ   Zt4r  Z	tsymmetryr/   r/   r0   Ú	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}dd	d	d	g|_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))r7   r   r   r   )r   rW   r   r   )r   r   rW   r   )r   r   r   rW   r2   rs   ré   úi0:5rČ   r8   r:   r7   ZGcommÚABr9   ))r7   r9   rT   rs   )é   rå   é   é   )é	   r   rW   rU   )r[   rĨ   éûĸĸĸéúĸĸĸÚBAÚLorentzDrW   zmu0:3r;   )Đr7   r7   r   )r7   r   r7   Đr   r7   r   Úndmzn0:3ÚNAé
   é   ÚNBc                    s$   g | ]  fd dt ddD qS )c                    s   g | ]} | qS r/   r/   )r  rž   Đrn   r/   r0   Ú
<listcomp>õ  s     ú>_get_valued_base_test_variables.<locals>.<listcomp>.<listcomp>r$  r%  ĐÚrangeĐr  r/   r'  r0   r(  õ  s     z3_get_valued_base_test_variables.<locals>.<listcomp>ÚNCrT   c                    s$   g | ]  fd dt ddD qS )c                    s&   g | ]  fd dt ddD qS )c                    s   g | ]}  | qS r/   r/   )r  r―   )rn   rž   r/   r0   r(  ũ  s     zI_get_valued_base_test_variables.<locals>.<listcomp>.<listcomp>.<listcomp>rs   r  r*  r,  r'  Đrž   r0   r(  ũ  s     r)  r7   rs   r*  r,  r/   r'  r0   r(  ũ  s     r  )	r   r   Údatar   r   r   r   r<   r+  )Ú	minkowskir2   r   r   r   r   r   r   rÉ   rĘ   rË   r8   r:   r  Ú	ba_matrixr  r  Úmu0Úmu1Úmu2r;   Ú
ndm_matrixr"  Ún0Ún1Ún2r#  r&  r-  r/   r/   r0   Ú_get_valued_base_test_variablesÄ  sV    
"           ĸr9  c                  C   sð  t  Þ t \} }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}tddddgtddddgtd	d
ddgtddddgg}t| ||||	gkstt|ddddddddd	d
ddddddgksÎtt||ksÞtt| |||||	gksútt||||ksttd||| dd |D ks8ttd||| dd |D ks^tt| || | d| d| d| d|	 gkst|||||| d
ksētt|||d|||  dd |D ksâtW 5 Q R X d S )Nr7   r9   rT   rs   r  rå   r  r  r  r   rW   rU   r[   rĨ   r  r  c                 S   s   g | ]}d | qS )rT   r/   Đr  rn   r/   r/   r0   r(    s     z+test_valued_tensor_iter.<locals>.<listcomp>c                 S   s   g | ]}d | qS )r  r/   r:  r/   r/   r0   r(    s     c                 S   s   g | ]
}| qS r/   r/   r:  r/   r/   r0   r(    s     )r*   r9  r   rp   r>   )r8   r:   r  r  r;   r2   r   rÉ   rĘ   rË   r  r2  r3  r4  r"  r6  r7  r8  r#  r&  r-  r0  r1  r5  r   r   r   r   r   Zlist_BAr/   r/   r0   Útest_valued_tensor_iterý  s4    
ĸ$           <0&&6r;  c                  C   sô   t  ä t \} }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}| | d | |d ksft| | d | |d  kst|||d dkst||| d dksīt|| | d dksÎt|| |d dksætW 5 Q R X d S )Nr   r7   Đr7   r7   rW   )r*   r9  r>   Đr8   r:   r  r  r;   r2   r   rÉ   rĘ   rË   r  r2  r3  r4  r"  r6  r7  r8  r#  r&  r-  r0  r1  r5  r   r   r   r   r   r/   r/   r0   Ú3test_valued_tensor_covariant_contravariant_elements  s*    ĸ$            r>  c                  C   s   t  ð t \} }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}||| Ą }|tddddgddddgddddgddddggkst|||  Ą tdksŠt| | Ą t||||	gksĘt| |  Ą t|| | |	 gksōtW 5 Q R X d S )Nr7   r   rW   rs   )r*   r9  Ú
get_matrixr   r>   r   )r8   r:   r  r  r;   r2   r   rÉ   rĘ   rË   r  r2  r3  r4  r"  r6  r7  r8  r#  r&  r-  r0  r1  r5  r   r   r   r   r   Zmatabr/   r/   r0   Útest_valued_tensor_get_matrix#  s2    ĸ$           



ü r@  c                   C   s  t   t \} }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}| || |  j|d |d  |d  |	d  kst| || |  j| d ksĒt| || |  j| |d ksÆt| |||  j| d|  d|	  ksôttdD ]T}tdD ]F}| |||  ||f ||||	g| ddddg|  kstqqü||||  j|d  |d  |d  |	d  kst| ||||  }| |jdksķt||| jdksÎt|jdksÞttdD ]$}|| ||||	g| ksætqæW 5 Q R X d S )	Nr9   rT   rs   r   rW   rU   r[   r7   )r*   r9  r/  r>   r+  rĶ   ) r8   r:   r  r  r;   r2   r   rÉ   rĘ   rË   r  r2  r3  r4  r"  r6  r7  r8  r#  r&  r-  r0  r1  r5  r   r   r   r   r   rn   rž   Zcontrexpr/   r/   r0   Útest_valued_tensor_contraction7  s:    
ĸ$           8 $.F<rA  c                  C   s   t  r t \} }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}||| jdks^t||| jdksttW 5 Q R X d S )Nrs   r9   Đr*   r9  r/  r>   r=  r/   r/   r0   Ú#test_valued_tensor_self_contractionO  s"    ĸ$           rC  c                  C   sæ   t  Ö t \} }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}|d |d  |d  |d  |	d  ksvt|d t|d  |d  |d  |	d  ksĻt||d |d ksĀt||d |d ksØtW 5 Q R X d S )Nr9   r7   )r*   r9  r>   r   r=  r/   r/   r0   Útest_valued_tensor_powX  s&    ĸ$           .2rD  c            )      C   sŪ  t   t \} }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}td\}}}|| | || } | d || kst| d d|	 | kst|| | || |  j}!|! Ą | | | d| | |  d|	 | |  ksît| ||| }"|"d |kst|"d |d ks&t|"d |d ks<t|"d |	d ksRt| ||| }#|#d |kstt|#d |d kst|#d |d ks t|#d |	d ksķt|"||  j| d|  d|	  d ksæt|| | |||  }$|$|| d	 }%|%d| |||  }&|&d }'|'d |&ks>t|'|| |  }(|(j Ą d
| | d| |  d| |  d
|	 |  d|  d|  ks tW 5 Q R X d S )Nzx1:4r<  )rT   rT   rT   r9   r   r7   é   rĨ   é   é   é   é   )r*   r9  r   r>   r/  r   ))r8   r:   r  r  r;   r2   r   rÉ   rĘ   rË   r  r2  r3  r4  r"  r6  r7  r8  r#  r&  r-  r0  r1  r5  r   r   r   r   r   Úx1Zx2Zx3Z
rank2coeffZ
coeff_exprZadd_exprZsub_exprrĖ   rÍ   rÎ   rÏ   Zexpr5r/   r/   r0   Útest_valued_tensor_expressionsc  sN    
ĸ$           :0rK  c            !      C   s~  t  l t \} }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}| || |  |d |d  |d  |	d   }|jdkst|d |d  |d  |	d  | || |   }|jdksĘt| || |  |d  |d  |d  |	d  }|jdkst||||  d|d   d|d   d|d   d|	d   | || |   } | jdksptW 5 Q R X d S )Nr9   r   rB  )!r8   r:   r  r  r;   r2   r   rÉ   rĘ   rË   r  r2  r3  r4  r"  r6  r7  r8  r#  r&  r-  r0  r1  r5  r   r   r   r   r   rĖ   rÍ   rÎ   rÏ   r/   r/   r0   Útest_valued_tensor_add_scalar  s.    
ĸ$           222TrL  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t|$j|d d| |   |!d  ks0t|"|||"| |  }%|%j|d ||   | |  |!d  kstt|%j|d d| |   |!d  kst||"||  j}&|& Ą || ||!  ksĖtW 5 Q R X d S )
NZ	Euclideanr7   zi1:4za b c dF)ZcommutativeÚV1r9   ÚV2)	r*   r9  r   r/  r   r   r   r>   r   )'r8   r:   r  r  r;   r2   r   rÉ   rĘ   rË   r  r2  r3  r4  r"  r6  r7  r8  r#  r&  r-  r0  r1  r5  r   r   r   r   r   Zeuclidr@   rA   rI   rJ   rM  rN  ZvtpZvtp2ZVcr/   r/   r0   Útest_noncommuting_componentsĄ  s>    
ĸ$           
,(,(rO  c                  C   s   t   t \} }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}t|}||||  j|| Ą j| || Ą  d kstW 5 Q R X d S )N)r   r   )r*   r9  r   r/  r?  rø   r>   )r8   r:   r  r  r;   r2   r   rÉ   rĘ   rË   r  r2  r3  r4  r"  r6  r7  r8  r#  r&  r-  r0  r1  r5  r   r   r   r   r   Zmmatrixr/   r/   r0   Útest_valued_non_diagonal_metricū  s"    ĸ$           rP  c            $      C   s>  t  , t \} }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}|d |d ||	g}t|| _tdD ]}| |j| || ksptqptd\}} }!t||| |!g| | _tdD ]P}| |j| || |  |! g| ksęt| j| || |  |! g| ksūtqūdd tdD }"|"|| | _tdD ]î}tdD ]Þ}#|||j||#f |"| |# |rpdnd |#r~dnd kst|| |j||#f |"| |# |#rīdnd ksÂt||| j||#f |"| |# |rędnd ksøt|| | j||#f |"| |# ksFtqFq:|"|| |_tdD ]î}tdD ]Þ}#|||j||#f |"| |# |rvdnd kst|| |j||#f |"| |# ksŽt||| j||#f |"| |# |rÔdnd |#râdnd ksðt|| | j||#f |"| |# |#rdnd ksLtqLq@W 5 Q R X d S )Nr7   rs   zqx qy qzc                    s"   g | ]  fd dt dD qS )c                    s(   g | ] }|d  d |d    d  qS )rT   r9   r  r/   r:  r.  r/   r0   r(  Ú  s     z?test_valued_assign_numpy_ndarray.<locals>.<listcomp>.<listcomp>rs   r*  r,  r/   r.  r0   r(  Ú  s     z4test_valued_assign_numpy_ndarray.<locals>.<listcomp>rW   )r*   r9  r   r/  r+  r>   r   )$r8   r:   r  r  r;   r2   r   rÉ   rĘ   rË   r  r2  r3  r4  r"  r6  r7  r8  r#  r&  r-  r0  r1  r5  r   r   r   r   r   Zarrrn   ZqxZqyZqzZrandom_4x4_datarž   r/   r/   r0   Ú test_valued_assign_numpy_ndarrayĮ  sN    
ĸ$           
(&B6624(DrQ  c            %      C   s*  t   t \} }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}ddddgddddgddddgddddgg}||_t|}|j}| Ą } td}!| Ą }"tdD ]n}#tdD ]^}$|||j|#|$f ||#|$f ksât	|| | j|#|$f | |#|$f kst	||| j|#|$f |!|#|$f ks4t	|| |j|#|$f |!|#|$f ks\t	||||#|$f ||#|$f kst	|| | |#|$f | |#|$f ksĻt	||| |#|$f |!|#|$f ksÎt	|| ||#|$f |!|#|$f ksôt	|"|| |#|$f |!|#|$f ksļt	qļqŠW 5 Q R X d S )Nr9   r7   rT   r   rs   )
r*   r9  r/  r   r   Úinvr   Zget_kronecker_deltar+  r>   )%r8   r:   r  r  r;   r2   r   rÉ   rĘ   rË   r  r2  r3  r4  r"  r6  r7  r8  r#  r&  r-  r0  r1  r5  r   r   r   r   r   ÚmdrÅ   r   ZminvZmeyeÚKDrn   rž   r/   r/   r0   Útest_valued_metric_inverseí  sB    
ĸ$           ,$*(($(&&rU  c            $      C   s*  t   t \} }}}}}}}}}	}
}}}}}}}}}}}}}}}}}}| || | }| Ą }|| || | kszttdD ].}tdD ] } ||| f || |f kstqq||| | || }!|! Ą }"tdD ]@}tdD ]2} tdD ]$}#|!|| |#f |"| ||#f ksōtqōqæqÚW 5 Q R X d S )Nrs   )r*   r9  r    r>   r+  )$r8   r:   r  r  r;   r2   r   rÉ   rĘ   rË   r  r2  r3  r4  r"  r6  r7  r8  r#  r&  r-  r0  r1  r5  r   r   r   r   r   Úe1Úe2rn   rž   Zo1Úo2r―   r/   r/   r0   Útest_valued_canon_bp_swapaxes  s6    
ĸ$            rY  c               	      sp  t  ^ tddd} td| \}}}}dddg| _td| gd }td| gd t dĄtd| gd t dĄ tdddgd	d
dgdddg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 dddgdddgdddgg_dddgdddgdddgg _W 5 Q R X d S )NÚITrT   ré   úi0:4r7   r8   r9   rU   rs   r  rå   r  r  r  c                 S   s
   || _ d S r,   )r/  )r8   Zdatr/   r/   r0   Úassign2  s    z:test_valued_components_with_wrong_symmetry.<locals>.assignc                      s
    S r,   r/   r/   )ÚA_symr\  Ú	mat_nosymr/   r0   r   6  r   z<test_valued_components_with_wrong_symmetry.<locals>.<lambda>c                      s
    S r,   r/   r/   )r]  r\  Úmat_antisymr/   r0   r   7  r   c                      s
    S r,   r/   r/   )Ú	A_antisymr\  Úmat_symr/   r0   r   :  r   c                      s
    S r,   r/   r/   )r`  r\  r^  r/   r0   r   ;  r   r   )r*   r   r   r/  r   r   r?   r   rø   r(   rĒ   )rZ  r   r   r   r   ZA_nosymr/   )r`  r]  r\  r_  r^  ra  r0   Ú*test_valued_components_with_wrong_symmetry!  s,    
 

rb  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žt|||||| ||  ||  }|j|jksôt|| jd|j kstW 5 Q R X d S )Nr2   r7   rn   r9   ĐrP   r5   r   rW   ú\mu, \nu, \alpha, \betaÚur   r]   rU   )	r*   r   r/  r   r   r   r?   r   r>   )	r2   rh   ri   re   rf   re  r]   Úmul_1Úmul_2r/   r/   r0   Útest_issue_10972_TensMul_data@  s"    

ĸ
ĸ((rh  c                  C   sD  t  2 tddddd} ddddg| _td| \}}}}td| g}dd	d	d	g|_td
| gd t dĄ}td\}}}	}
}}d	|||	g| d	|| g| | d	|
g|	 ||
 d	gg|_|||||  }|||| jtd	d	d	d	gd	|d || ||	 gd	|| |d ||	 gd	||	 ||	 |	d ggks:t	||||  
Ą j|||| jksht	|||||| ||  ||  j|||| j ksŽt	|||||| ||  ||  j|||| jksît	td| gd t dĄ}| j|_|||| ||| }|| ||| }|jtd	d	d	d	gksXt	|| ||| ||| }|jt dddĄkst	|||||| || |  }|jd	d d f td	d	d	d	gksÚt	|jd d d	f td	d	d	d	gkst	|| ||| }|jtd	d	d	d	gks2t	|`W 5 Q R X d S )Nr2   r7   r3   rs   rc  rW   rd  re  r   r]   r9   rU   zE_x E_y E_z B_x B_y B_zr   )r*   r   r/  r   r   r   r?   r   r   r>   r    Úzeros)r2   rh   ri   re   rf   re  r]   ZExZEyZEzZBxZByZBzr   r   Úperprf  rg  ZFperpZmul_3r/   r/   r0   Útest_TensMul_dataX  sV    
ĸ
üýĸ
.(ĸ
(ĸ
"((rk  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Ât	|||||| ||  |||||  }
|
jt dddĄkst	|||| ||| }|| ||| }|jtddgksRt	|| ||| ||| }|jt dddĄkst	W 5 Q R X d S )Nr2   r7   rn   r9   rc  rW   rH   zi_0:2r   re  r   )
r*   r   r/  r   r   r   r?   r   ri  r>   )r2   r@   rA   rI   rJ   r   r   r   re  Zadd_1Zadd_2rj  rf  rg  r/   r/   r0   Útest_issue_11020_TensAdd_data  s$    


00rl  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sÖtt|
jg ksčtt|
j	|d
f|dfgkstt|jg kstt|j|d
f| dfgks>tt|j	|d
f| dfgks`tt|j|df|df|df|dfgkstt|jg ks tt|j	|df|df|df|dfgksĖtt|j|df|dfgksėtt|j|df| dfgkstt|j	|df|df|df| dfgks<tt|jg ksPtt|j|df|df| df| dfgkstt|j	|df|df| df| dfgks°tt|j|df|df|df|dfgksÜtt|j|df| dfgksþtt|j	|df|df|df| df|df|dfgks8t|
 
Ą ||gksNt|
 Ą ||gksdt| 
Ą || gks|t| Ą g kst| 
Ą ||||gksĻt| Ą ||||gksÂt| 
Ą |||| gksÞt| Ą ||gksôt| 
Ą ||| | gkst| Ą g ks$td S )Nr2   r3   r4   r  r   ÚL_1r8   r:   r9   )r7   r   r<  r!  )r   r7   r7   r   )r7   r7   r7   )r   r   r7   r   )r   r7   r7   r   )r   r   r7   r7   )r   r7   r7   r7   )r   r   r   r   r?   rp   Z_iterate_free_indicesr>   Z_iterate_dummy_indicesZ_iterate_indicesrĄ   Zget_free_indices)r3   r   r   r   r   r   ZL0ZL1r8   r:   rV  rW  Ze3Ze4Ze5Ze6r/   r/   r0   Útest_index_iterationē  sP    


 "",, ".00,":rn  c                  C   s@  t d} td| \}}}td| }td| g\}}}}tt||||tsRttt|||| tspt|||| ||   }	|	j	|||| ||  fksēt|	||||  ||||   ksÞt|	 Ą ||||  ||||   kstt
|	dks"t|||| ||||  }	t
|	dksTt|| |||| |||| || ||    }	|	|| || || || || || || ||   ksāt|	 Ą || || || || || || || ||   ks4tt
|	dksFtt
|	 Ą dks\t|| d	|| || ||||   }	|	 Ą d	||  || || || || ||  ksÐtd	|| ||  }	|	jd	ksöt|||||| ||||||    }	t
|	d
ks8tt
|	 Ą dksNtttdtsbttd Ą }
|
dks|tt|
tst||||  ||||   }|| | }||| }| Ą ||||  || ||  ||||  || ||   ks t|||| || ||||  ||||      }	|	 Ą ||||  ||||  || ||   ||||  || ||   ksČt|| ||||  ||||    }	|	 Ą || || ||  || || ||   ks<td S )Nr3   zi j kr   úA B C DzA(L_0)*(A(-L_0) + B(-L_0))zA(i)*A(j) + A(i)*B(j)z2A(-L_0)*(A(L_0)*A(j) + A(L_0)*B(j)*C(L_1)*C(-L_1))z8A(j)*A(L_0)*A(-L_0) + A(L_0)*A(-L_0)*B(j)*C(L_1)*C(-L_1)r9   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)rT   )r   r   r   r   r-   r   r   r>   r   rđ   r=   r    rÓ   r   rš   r   )r3   rn   rž   r―   r   r8   r:   r;   r}   rï   ÚtmÚp1Zp2Zp3r/   r/   r0   Útest_tensor_expandå  sJ    
&,2 <PT.F0$V@h.rr  c                     s   t d} td| \}}}}td| g td\ | tdksJt |  td ksfttt fdd tt fdd d S )	Nr3   r[  r8   zx yr   c                      s     S r,   r/   r/   Đr8   rŅ   Úyr/   r0   r   "  r   z6test_tensor_alternative_construction.<locals>.<lambda>c                      s    d S rŪ   r/   r/   )r8   rŅ   r/   r0   r   #  r   )	r   r   r   r   r   r>   r(   Ú	TypeErrorrĒ   )r3   r   r   r   r   r/   rs  r0   Ú$test_tensor_alternative_construction  s    rv  c                     sp
  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sēt  Ątd
dgddggksÔt  gĄtd
dgddggksüt   gĄtd
dgdd	ggks(t  t	dt	d gĄtd
dgdd	ggks\t   gĄtd
dgdd	ggkst    gĄtd
dgddggksķt  gĄtd
dgddggksāt   gĄtd
dgdd	ggkst   gĄtd
dgdd	ggks8t    gĄtd
dgddggksft  Ątd
dgddggkst| |d
dgdd	gg| td
di  Ągtd
dgdd	ggfksät  Ątd
dgdd	ggkst  gĄtd
dgdd	ggks2t   gĄtd
dgddggks^t   gĄtd
dgddggkst    gĄtd
dgdd	ggksļt  gĄtd
dgdd	ggksât   gĄtd
dgddggkst   gĄtd
dgddggks:t    gĄtd
dgdd	ggksht|| |d
dgdd	gg| td
di  Ą|gtd
dgdd	ggfksÂt||   |d
dg| td
di  Ąg dfkst  g Ądkst|	 ||  ||   |d
dg|	||td
gd  
ddddĄ| td
di  Ąst|| |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sžt  |gĄtdd	gddgggksęt  |gĄtddgd	dgggkst||||  d  ||ddg| td
d
i  g Ądks^t||  |d
dgdd	ggi  Ągtddgddggfksļt  gĄtddgddggksât  gĄtddgddggkst||  |d
dgdd	ggi  gĄtddgd
dggksdt  gĄtdd
gddggkst|	||  |	|| d
dgdd	ggi  Ągtd
dgdd	ggfksęt|  | di  Ąg dfk	st|  |  td
dddgddddgddddgddddgg| td
dddgddddgddddgddddggi  Ąg d	fk	s°t||  |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 )#Nr3   ÚL2r9   ré   zi j k lro  ÚHrë   rs   r7   rT   rW   rU   rĨ   rn   rž   r[   é   c                      s
      ĄS r,   ĐÚ_extract_datar/   Đrï   Úreplr/   r0   r   ]  r   z)test_tensor_replacement.<locals>.<lambda>c                      s
      ĄS r,   rz  r/   r|  r/   r0   r   a  r   c                      s
      ĄS r,   rz  r/   r|  r/   r0   r   e  r   rå   r  éd   éq   r  r   é*   c                      s      gĄS r,   ĐÚreplace_with_arraysr/   )rï   rž   r}  r/   r0   r     r   c                      s      gĄS r,   r  r/   )rï   rn   r}  r/   r0   r     r   zu1:4ÚUc                      s       gĄS r,   r  r/   )rï   r}  Úu1Úu2r/   r0   r     r   )r   r   r   r   r+   r{  r   r>   r  r   Zreshaper(   rĒ   )r3   rw  r―   rÛ   r8   r:   r;   r}   rx  rë   Úu3r  r/   )rï   rn   rž   r}  r  r  r0   Útest_tensor_replacement&  sļ    
&*"(,4,.*,,.$
$,$*,,.*,,.
$,$>
$$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stt||| ||}
|
 tĄtttd|||||dd	fksēt|
|||||  }| tĄtttd|||||dd	ftttd|||||dd	f kst|| |	 }| tĄtttd|ttd|||| |dd	fksbt|| |
 }| tĄtttd|ttd|||| |dd	f|dd	fksķtd S )
Nr3   rs   ré   r8   r:   r[  zL_0:2r   rT   )r   r   r   Zrewriter   r   r>   r   )r3   r8   r:   r   r   r   r   r   rm  rb   rc   rd   Úb1Úb2r/   r/   r0   Útest_rewrite_tensor_to_IndexedĄ  s&    ".ĸĸ
>r  c                  C   s2  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st	| | Ą|| iksēt	| | ĄdksÆt	| |Ą||iksÜt	|	|| | |	|||Ądkst	|	|| | |	|||Ą||| |iks2t	|	|| | 
|	|||dĄdksZt	|  |
||| Ą| |
||| ikst	|| |
|Ą||||jt|
|iksĀt	||| |
||| Ą|||||jt|
||| ikst	||| |
||| Ą|||jt|
||| iksHt	||| |||Ą|||jt|||iks~t	||| |||Ądkst	|
||
|  
|||dĄdksÆt	||| |||Ąi ksæt	|	||| |	|||Ądks
t	|	||| |	|||Ąi ks.t	dS )zY
    Test match and replace with the pattern being a WildTensor or a WildTensorIndex
    rč   rT   ré   rę   za b cT)Úclsr    Zignore_updownr   rë   rz   r8   ÚW)Zunordered_indicesr  Nr7   )r   r   r   r%   rė   rí   r   r&   Úmatchesr>   ÚreplaceÚheadr'   )rč   rŋ   rĀ   rÁ   r@   rA   rI   r   rė   rî   rë   rz   r8   r  r  r/   r/   r0   Útest_tensor_matchingš  s8    
&0(42FB6 ( $r  c                  C   sŽ  t ddd} td| \}}}td| g}td| g}td| | g}t| jd | d	}|||| ||   ||||||  iĄ|||| ||  ||  ksēt|||| ||   ||||||  iĄ|||| ||  ||  kst||||  ||||||||  iĄ|||| ||  ksbt|||||  ||   Ą |||||  ||  ksĻtd
S )z;
    Test subs and xreplace in TensMul. See bug #24337
    rč   rT   ré   rę   rë   rz   r8   Z_0TN)	r   r   r   r   r5   Úsubsr>   Úxreplacerš   )rč   rŋ   rĀ   rÁ   rë   rz   r8   ZC0r/   r/   r0   Útest_TensMul_subsÞ  s    ^`Pr  c                	   C   s$   t   tdgd  W 5 Q R X d S r  )r*   r"   r/   r/   r/   r0   Útest_tensorsymmetryï  s    r  c                	   C   s    t   tdg  W 5 Q R X d S )Nr8   )r*   r!   r/   r/   r/   r0   Útest_tensorheadó  s    r  c               	   C   sF   t  6 t dĄ} td}t|gd | }t|ts8tW 5 Q R X d S )Nr9   r2   )r*   r   r?   r   r#   r-   r>   )r   r2   ZS2r/   r/   r0   Útest_TensorTypeũ  s
    
r  c                	   C   s"   t   tddd W 5 Q R X d S )Nr2   r3   )Z	dummy_fmt)r*   r   r/   r/   r/   r0   Útest_dummy_fmtþ  s    r  c                  C   s  t ddd} td| }td| g}td\}}}t|d  |||iĄtsPtt|d  |||||  iĄtsztt|d  	|||iĄtstt|d  	|||||  iĄtsÄtt|d  
|||Ątsâtt|d  
|||||  Ątst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č   rT   ré   rn   rë   zx y zr9   N)r   r   r   r   r-   r  r   r>   r   r  r  )rč   rn   rë   rŅ   rt  Úzr/   r/   r0   Útest_postprocessor  s    
 * *r  N)xZ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   Zsympy.core.containersr   Zsympy.core.symbolr   Z(sympy.functions.elementary.miscellaneousr   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+   r1   rG   rK   rN   rS   rm   rq   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  r9  r;  r>  r@  rA  rC  rD  rK  rL  rO  rP  rQ  rU  rY  rb  rh  rk  rl  rn  rr  rv  r  r  r  r  r  r  r  r  r  r/   r/   r/   r0   Ú<module>   s   `	M* 	(V%%	
,Cb+'&=9	)	&!;35{$