o
    ª3IhùÀ  ã                   @   sð  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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% d dl&m'Z' d dl(m)Z)m*Z* d dl+m,Z,m-Z- d dl.m/Z/ d dl0m1Z1m2Z2m3Z3 d d	l4m5Z5 d d
l6m7Z7 d dl8m9Z9 d dl:m;Z;m<Z< d dl=m>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' ZKd(d) ZLe;d*d+ ZMd,d- ZNd.d/ ZOd0d1 ZPd2d3 ZQd4d5 ZRd6d7 ZSd8d9 ZTd:d; ZUd<d= ZVd>d? ZWd@dA ZXdBdC ZYdDdE ZZdFdG Z[dHdI Z\dJdK Z]dLdM Z^dNdO Z_dPdQ Z`dRdS ZadTdU ZbdVdW ZcdXdY ZddZd[ Zed\d] Zfd^d_ Zgd`da Zhdbdc Ziddde Zjdfdg Zkdhdi Zldjdk Zmdldm Zndndo Zodpdq Zpdrds Zqdtdu Zrdvdw Zsdxdy Ztdzd{ Zud|S )}é    )Ú	conjugate)Úexp)!ÚDaggerÚBdÚVarBosonicBasisÚBBraÚBÚBKetÚFixedBosonicBasisÚ
matrix_repÚapply_operatorsÚInnerProductÚ
CommutatorÚKroneckerDeltaÚAnnihilateBosonÚCreateBosonÚBosonicOperatorÚFÚFdÚFKetÚ
BosonStateÚCreateFermionÚAnnihilateFermionÚevaluate_deltasÚAntiSymmetricTensorÚcontractionÚNOÚwicksÚPermutationOperatorÚsimplify_index_permutationsÚ_sort_anticommuting_fermionsÚ_get_ordered_dummiesÚsubstitute_dummiesÚFockStateBosonKetÚ ContractionAppliesOnlyToFermions)ÚSum)ÚFunctionÚexpand)ÚIÚRational)ÚS)ÚDummyÚSymbolÚsymbols)Úsqrt)Úsrepr)Úsimplify)ÚslowÚraises)Úlatexc                  C   s°  t d\} }}}ttd\}}}}t}|| | || || ¡|| ||  ks,J || | || |¡|||  ks?J || | || ¡|| ksOJ || || || || ||||  || ||  || || || ||  ||||  || ||  }	|| ||||g}
t|	|
|| |||| ||  || || || ksºJ t|| |dksÅJ t d\}}t|||dksÖJ d S )Núp,q,r,sÚfghizP(pq)zp1,p2zP(p_{1}p_{2}))r-   Úmapr&   r   Úget_permutedr   r3   )ÚpÚqÚrÚsÚfÚgÚhÚiÚPÚexprÚpermsÚp1Úp2© rE   úd/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/sympy/physics/tests/test_secondquant.pyÚtest_PermutationOperator   s(   2& ÿþý2ÿrG   c                  C   sV  t d\} }}}t dtd\}}}}ttd\}}	t}
|| |||||| || }t||
| |g|
| ||| ||| ks@J |
| |t|| ||| }|| |||||| || }t||
| |g}|t|ksmJ || |||||| || }t||
| |g}|t|ksJ || ||||	|| || }t||
| |g}||ks©J d S )Núa b c dúp q r s©ÚclsÚfg)r-   r+   r6   r&   r   r   r"   )ÚaÚbÚcÚdr8   r9   r:   r;   r<   r=   r@   rA   ÚexpectedÚresultrE   rE   rF   Ú$test_index_permutations_with_dummies/   s(   ÿÿrS   c                  C   sè  t d\} }}}tddksJ tddksJ tdt dt ks$J ttjt d ttdd d ks8J tt|gt|gksFJ ttdt	dksRJ tt	dtdks^J tt|t	|ksjJ tt	|t|ksvJ ttdtd t	dt	d ksJ t|| t|t| ksJ tt|t| t	|t	| ks®J tt|d	 tt|d	 ksÀJ td
tt
d
ksÌJ ttd
t
d
ksØJ ttdt tdt ksèJ t| t| ksòJ d S )Núi,j,n,mé   g      ð?é   éþÿÿÿg      @éÿÿÿÿr   é
   rM   )r-   r   r(   r*   ÚHalfr)   r	   r   r   r   r,   r   r   )r?   ÚjÚnÚmrE   rE   rF   Útest_daggerK   s$   (( ($ r^   c                  C   sP   t d\} }t| }|j| ksJ |jsJ td}|jdks!J |jr&J d S )Núi,jrU   )r-   r   ÚstateÚis_symbolic)r?   r[   ÚorE   rE   rF   Útest_operator`   s   
rc   c                  C   sÐ   t d\} }}}}t| }t|dksJ tt|dksJ t|ts&J | | |¡}| t¡|hks6J td}| t	|g¡t
|d t	|d g ksQJ t|}| t	|g¡|t	|g ksfJ d S )Nú
i,j,n,m,p1z{b^\dagger_{i}}z{b^\dagger_{p_{1}}}r   rU   )r-   r   r3   Ú
isinstancer   ÚsubsÚatomsr,   Úapply_operatorr	   r.   ©r?   r[   r\   r]   rC   rb   rE   rE   rF   Útest_createj   s   .&rj   c                  C   sÌ   t d\} }}}}t| }t|dksJ tt|dksJ t|ts&J | | |¡}| t¡|hks6J td}| t	|g¡t
|t	|d g ksOJ t|}| t	|g¡|t	|g ksdJ d S )Nrd   zb_{i}z	b_{p_{1}}r   rU   )r-   r   r3   re   r   rf   rg   r,   rh   r	   r.   ri   rE   rE   rF   Útest_annihilatex   s   *&rk   c                  C   s  t d\} }}}tg d¢}t|dksJ |jd ttdks#J | d¡tg d¢ks0J | d¡tg d¢ks=J tdD ]} | | ¡ | ¡|ksOJ qA| d¡dksYJ tdD ]
} ||  | ksgJ q]t||g}| d¡t|d |gks}J | d¡t|d |gksJ d S )	NrT   )r   rU   rV   é   é   é   r   )rU   rU   rV   rl   rm   rm   )r   rU   rV   rl   rl   rU   )r-   r   ÚlenÚargsÚtupleÚrangeÚupÚdown)r?   r[   r\   r]   r;   rE   rE   rF   Útest_basic_state   s   "ru   c                  C   sx   t d} tdt| g }t|t| t| d g ksJ tdt| g }t|t| d t| d g ks:J d S )Nr\   r   rU   )r-   r   r	   r   r.   r   )r\   ÚerE   rE   rF   Útest_basic_apply   s
   "*rw   c                  C   s   t d\} }tdtd td td }t|t| |g }t| t|d  d|   td|  d| g }t|t|ksBJ d S )Nún,mr   rU   rX   )r-   r   r   r   r	   r.   r'   )r\   r]   rb   rv   ÚanswerrE   rE   rF   Útest_complex_apply   s
    0rz   c                  C   sD   t d} tdtd }t|t| g }|| t| g ks J d S )Nr\   r   )r-   r   r   r   r	   )r\   rb   rv   rE   rE   rF   Útest_number_operator§   s   r{   c                  C   s   t d\} }}}tdg}tdg}t|t|dksJ t||dks&J t| |g}t||g}t||}|t| |t|| ksEJ d S )Núi,j,k,lr   rU   )r-   r   r	   r   r   r   )r?   r[   ÚkÚlÚs1Ús2r:   rE   rE   rF   Útest_inner_product®   s   


 r   c                  C   sZ   t d\} }t| g}t|g}td}t|| | }|t|t| |d  ks+J d S )Nrx   r   rU   )r-   r   r	   r   r   r.   r   )r\   r]   r   r   rb   rv   rE   rE   rF   Útest_symbolic_matrix_elementsº   s   

"r   c                  C   s   t d} td}t|| }tdD ]}|||d f t|d ks#J qtd}t|| }tdD ]}||d |f t|d ksCJ q1d S )Nrn   r   rm   rU   )r   r   r   rr   r.   r   )rN   rb   r]   r?   rE   rE   rF   Útest_matrix_elementsÃ   s   
"
"ÿr   c                  C   s   t dd} |  d¡}|tdksJ |  |¡dksJ |  d¡| d ks&J t| dks.J t| dks6J t| dks>J t| dksFJ d S )NrV   rU   )rU   rU   rl   z9[FockState((2, 0)), FockState((1, 1)), FockState((0, 2))])r
   r`   r#   Úindexro   ÚstrÚreprr/   )rN   r`   rE   rE   rF   Útest_fixed_bosonic_basisÏ   s   

r   c                  C   s   t d\} }t| t|  | tj  }t|| ddf}|jdd}tdd}t||}g d¢}t	t
|D ]}|| |||f ksCJ q5d S )	Nrx   r   rn   F)ÚdeeprV   é   )rU   rV   rl   rl   rm   rn   rm   rn   r   é   rn   r   r   é   é	   r   r   r   r   rY   é   )r-   r   r   r*   rZ   r%   Údoitr
   r   rr   ro   )r\   r]   Úh_nÚHrb   rN   Údiagr?   rE   rE   rF   Útest_shoÜ   s   

ÿr   c                  C   s0  t ddd\} }ttdtd}|dksJ ttdtd}|dks&J tt| td}|t| dks8J ttdtd}|dksGJ ttdtd}tt|t| g }|t| gksdJ ttdtd}tt|t| |g }|dksJ tt|t	|}|ddt
t	|t|   ksJ tt	|t|}| ¡ ddt
t	|t|   ks·J t}t dd	d
\}}}|||||dksÎJ |||||dksÚJ |||||dksæJ t ddd\}}	}
}t ddd\}}}}t d\}}}}t}|t	|t|dt
t|t	|  ksJ |t	|	t
t	|t| jdd||	| t	| ks<J |t	|t| t	|t|	 jdddksVJ tt|t	|}t ||¡dksjJ tt	|t| t	|t|	 }t|dksJ t|dksJ t|dksJ d S )Nrx   T©Úabove_fermir   rU   rX   rV   zX,Y,ZF)Úcommutativer|   ©Úbelow_fermiúa,b,c,dr4   rW   )r   z8\left[{a^\dagger_{a}} a_{i},{a^\dagger_{b}} a_{j}\right]zWCommutator(CreateFermion(a)*AnnihilateFermion(i),CreateFermion(b)*AnnihilateFermion(j))zM[CreateFermion(a)*AnnihilateFermion(i),CreateFermion(b)*AnnihilateFermion(j)])r-   r   r   r   r   r0   r   r	   r   r   r   r'   r   Úevalr3   r   r   )r\   r]   rO   rv   ÚCÚXÚYÚZr?   r[   r}   r~   rM   rN   rP   r8   r9   r:   r;   ÚDÚc1rE   rE   rF   Útest_commutationë   sJ   $(0@4"r    c                  C   s   t d\} }}}t| }t|tsJ | | |¡}| t¡|hks#J td}| t|g¡td|gks7J | t|g¡t|dg ksHJ t|}| tg ¡t|gksZJ tg dd}|tg ddksjJ t ddd\} }}}t ddd	\}}	}
}t d
\}}}}t d}t|  t| ||gd¡t||gdks J t| t| |	|gd¡t|| |	|gdksžJ t	t
| |¡|t| ksÉJ tt|dksÓJ tt|dksÝJ tt|dksçJ tt|dksñJ tt|| gddksþJ tt|| |	|gddksJ d S )NrT   rU   rm   )Úfermi_levelr|   Tr   r   r   r4   rC   zCreateFermion(p)zCreateFermion(Symbol('p'))z{a^\dagger_{p}}z{a^\dagger_{p_{1}}}z(\left|\left( a, \  i\right)\right\ranglerV   z4\left|\left( a, \  b, \  i, \  j\right)\right\rangle)r-   r   re   r   rf   rg   r,   rh   r   r   r   r   r   r/   r3   )r?   r[   r\   r]   rb   Úvacuumr}   r~   rM   rN   rO   rP   r8   r9   r:   r;   rC   rE   rE   rF   Útest_create_f  s2    ",0"$r£   c                  C   sò  t d\} }}}t| }t|tsJ | | |¡}| t¡|hks#J td}| td|g¡t|gks7J | t|dg¡t|g ksHJ t|}| t|g¡tg ksZJ t ddd\} }}}t ddd\}}}	}
t d\}}}}t d	}t|  t| ||gd
¡dksJ t| t| ||gd
¡dksJ t| t| ||gd¡dks­J t| t| ||gd
¡t|| ||gd
ksÅJ t	t|dksÏJ t
t|dksÙJ tt|dksãJ tt|dksíJ tt|dks÷J d S )NrT   rU   r|   Tr   r   r   r4   rC   rm   r   rl   zf(p)zAnnihilateFermion(p)zAnnihilateFermion(Symbol('p'))za_{p}z	a_{p_{1}})r-   r   re   r   rf   rg   r,   rh   r   r   r   r/   r3   )r?   r[   r\   r]   rb   r}   r~   rM   rN   rO   rP   r8   r9   r:   r;   rC   rE   rE   rF   Útest_annihilate_f8  s.    """"0r€   c                  C   sª   t d\} }}}t| }t|tsJ | | |¡}| t¡|hks#J td}| t|g¡t	|d t|d g ks>J t|}| t|g¡|t|g ksSJ d S )NrT   r   rU   )
r-   r   re   r   rf   rg   r,   rh   r	   r.   ©r?   r[   r\   r]   rb   rE   rE   rF   Útest_create_bT  s   .&rŠ   c                  C   sR   t d\} }}}t| }t|tsJ | | |¡}| t¡|hks#J td}d S )NrT   r   )r-   r   re   r   rf   rg   r,   r¥   rE   rE   rF   Útest_annihilate_b`  s   r§   c                  C   sP  t ddd\} }}}t| t| }t|tt| t| t| | ks'J t| t| }t|tt| t| ks?J t| t| t| t| }t|}tt| |t|| t| |t| t|  t||t|  t|  t| |t| t|  t| t| t| t|  }||ksJ | | |  ¡ t| | | ks®J ||  | d  ¡ t||  | d ksÄJ t ddt	d\}}}	}
t ddt	d\}}}}t d	t	d
\} }}}tt|tt|t|  t| tt|t| t| t| t||tt|t|   ksJ tt|tt|t| t|	  t| tt|t| t| t|	 t| t||tt|t| t|	   ks`J tt|tt|t|	  t|
 }|t||	 tt|t|
  t||
tt|t|	   t||	t||
  t||
tt|t|	   tt|t| t|	 t|
  ksÃJ tt|tt|t|  t| }|t|| tt|t|  t||tt|t|   t||t||  t||tt|t|   tt|t| t| t|  ks&J d S )Nr4   Tr   rV   úi j k l©r   rK   rH   ©r   rK   rI   rJ   )
r-   r   r   r   r   r   r   r   r'   r+   )r8   r9   r:   r;   r   ÚnstrÚfasitr?   r[   r}   r~   rM   rN   rO   rP   rA   rE   rE   rF   Ú
test_wicksi  st   *  ÿþýüÿ$,&"ÿ
ÿ.*$ÿ
ÿ(ÿþý"ü
ÿ(ÿþý"üÿr­   c                     s  t ddd\} }}}t ddd\}}}}t dtd\ }}	tt t t|t|  tt t tt|t|  ksFJ tt| tt|t|  tt| t| t| ksfJ tddksnJ t| | ksvJ tt|t| t|t|  tt|t| t| tt|t| t|  ksŠJ tt|t|  ¡ t|t| ksŒJ tt|t|   ¡ t|t|  ksÒJ tt t  t t|t|  ¡tt|t tt| t  ksþJ tt t  tt|t|  ¡tt t| tt t|   ks+J tt t  ¡ }
t|
t|
ksBJ tt|t| tt|t|  ksZJ tt|t|  t| t| }t| 	¡ }|d	dgks{J t| 
¡ }|d
dgksJ tt|t|  }|jdksJ |jdks€J t|dks­J t|dks¶J t|dks¿J tt fdd d S )Nrš   Tr   rH   r   rI   rJ   rU   r   rl   rV   rX   z#:CreateFermion(a)*CreateFermion(i):z%NO(CreateFermion(a)*CreateFermion(i))z.\left\{{a^\dagger_{a}} {a^\dagger_{i}}\right\}c                      s   t t t S ©N)r   r   r   rE   ©r8   r9   rE   rF   Ú<lambda>Ã  s    ztest_NO.<locals>.<lambda>)r-   r+   r   r   r   Ú_remove_bracketsrf   r   ÚlistÚiter_q_creatorsÚiter_q_annihilatorsÚhas_q_creatorsÚhas_q_annihilatorsr   r   r3   r2   ÚNotImplementedError)r?   r[   r}   r~   rM   rN   rO   rP   r:   r;   rA   ÚnoÚl1Úl2rE   r¯   rF   Útest_NO  sN   "&ÿÿ"ÿÿ,,*&ÿ*&
ÿ0$r»   c                  C   sl  t ddd\} }t ddd\}}t d\}}tt|t|gt|t|gdfks,J tt|t|gt|t|gdfksBJ tt|t| gt|t| gdfksXJ tt| t|gt|t| gdfksnJ tt|t| gt|t| gdfksJ tt| t|gt|t| gdfksJ tt|t| gt| t|gdfks°J tt| t|gt| t|gdfksÆJ tt|t| gt| t|gdfksÜJ tt| t|gt| t|gdfksòJ tt|t|gt|t|gdfks	J tt|t|gt|t|gdfks J tt|t|gt|t|gdfks7J tt|t|gt|t|gdfksNJ tt|t|gt|t|gdfkseJ tt|t|gt|t|gdfks|J tt|t|gt|t|gdfksJ tt|t|gt|t|gdfksªJ tt| t|gt| t|gdfksÁJ tt|t| gt| t|gdfksØJ tt|t| gt|t| gdfksïJ tt| t|gt|t| gdfksJ tt|t| gt| t|gdfksJ tt| t|gt| t|gdfks4J d S )	Nr_   Tr   za,br   zp,qr   rU   )r-   r    r   r   )r?   r[   rM   rN   r8   r9   rE   rE   rF   Útest_sortingÆ  s6   ,,,,,,,,,,.............2rŒ   c                     sX  t ddd\} }}}t ddd\ }}t d\}}}}	tt| t|t| |ks,J tt tt ks<J tt t| dksIJ tt t| dksVJ tt| t dkscJ tt| t dkspJ tt| t|t| |ksJ ttt|t|}
|
jsJ ttt|t|}
|
js J tt	 fdd	 d S )
Nr|   Tr   r   r   r4   r   c                      s   t t tS r®   )r   r   r   rE   ©rM   rN   rE   rF   r°   û  s    z"test_contraction.<locals>.<lambda>)
r-   r   r   r   r   r   Úis_only_below_fermiÚis_only_above_fermir2   r$   )r?   r[   r}   r~   rO   rP   r8   r9   r:   r;   ÚrestrrE   rœ   rF   Útest_contractionì  s      

rÁ   c                  C   s*  t d\} }}t| |t|| }t|t| |ksJ t| dt|| }t|t| dt|| ks6J td|t|| }t|td|ksKJ t|dt|| }t|td|ks`J t| dt| | t|d }t|dkswJ td| td| td| td| }t|dksJ d S )Nzi,j,kr   rU   rV   )r-   r   r   )r?   r[   r}   r:   rE   rE   rF   Útest_evaluate_deltasþ  s"    ÿÿrÂ   c                  C   sô  t ddtd\} }}}t ddtd\}}}}t d\}}	}
}t}|d||f| |f|d||f| |f ks7J |d||f| |f|d||f|| fksMJ |d||f| |f|d||f|| f ksdJ |d||f| |fdksrJ |d||f| | fdksJ |d|||f| |f|d|||f| |f ksJ |d|||f| ||f|d|||f| ||fks³J |d||f| |f}| |¡sÄJ | |¡sËJ | | ¡sÒJ | |¡sÙJ | ||¡|d||f| |fksëJ d	|  | |¡d	|d||f||f ksJ |jtdksJ t|d
ksJ t|dksJ |d||f| |f ||¡|d||f| |fks9J |d|| f||f ||¡|d|| f||fksTJ t d\}}}}td||f||f}t|dksoJ t|dksxJ d S )Nrš   Tr©   rH   rª   rI   Útr   rV   z{t^{ab}_{ij}}zt((_a, _b),(_i, _j))zalpha1:5Úuz1{u^{\alpha_{1}\alpha_{2}}_{\alpha_{3}\alpha_{4}}}z$u((alpha1, alpha2),(alpha3, alpha4)))	r-   r+   r   Úhasrf   Úsymbolr,   r3   r   )r?   r[   r}   r~   rM   rN   rO   rP   r8   r9   r:   r;   ÚATÚtabijÚa1Úa2Úa3Úa4Úu_alpha1234rE   rE   rF   Útest_Tensors  s6   .,.24$.66rÎ   c                  C   s(  t ddd\} }}}t ddd\}}}}t dtd\}}	}
}td|f|	ftt|t|	  }td	||	f|
|ftt|t|	 t| t|
  d
 }ttt| t| | ddd}|td|f| fkskJ ttt| t| t| t| | ddd}|td	||f| |fksJ d S )Nrš   Tr   rH   r   rI   rJ   r<   Úvrm   )Úkeep_only_fully_contractedÚsimplify_kronecker_deltas)r-   r+   r   r   r   r   r   )r?   r[   r}   r~   rM   rN   rO   rP   r8   r9   r:   r;   ÚFockÚVÚFaiÚVabijrE   rE   rF   Útest_fully_contracted8  s*   ÿ"ÿÿþ(þ rÖ   c                  C   sX   t d\} }tt| |d t| |d ksJ tt| |d t| |d ks*J d S )Nr_   rV   rU   )r-   r"   Úatt©r?   r[   rE   rE   rF   Ú'test_substitute_dummies_without_dummiesL  s   $(rÙ   c                  C   s\   t dtd\} }tt| |tt| t|  t|| tt|t|    dks,J d S ©Núi jrJ   r   )r-   r+   r"   r×   r   r   r   rØ   rE   rE   rF   Ú#test_substitute_dummies_NO_operatorR  s   ÿÿrÜ   c                  C   sT   t dtd\} }tt| |t|  t| t|| t| t|   dks(J d S rÚ   )r-   r+   r"   r×   r   r   rØ   rE   rE   rF   Ú#test_substitute_dummies_SQ_operatorX  s   ÿÿrÝ   c                  C   sh   t ddtd\} }t ddtd\}}t dtd\}}td}t|| |||||| dd	d
ks2J d S )NrÛ   Tr©   úa brª   úp qrJ   r<   )Únew_indicesr   )r-   r+   r&   r"   )r?   r[   rM   rN   r8   r9   r<   rE   rE   rF   Ú#test_substitute_dummies_new_indices^  s
   ,rá   c                  C   sh   t ddtd\} }}}td}ddlm} || |||gdD ]}t|| || ||| dks1J qd S )Nrš   Tr©   r<   r   ©Ú
variationsrm   )r-   r+   r&   Úsympy.utilities.iterablesrã   r"   )r?   r[   r}   r~   r<   rã   ÚpermutrE   rE   rF   Ú*test_substitute_dummies_substitution_orderf  s   $ÿræ   c                  C   sB  t ddd} t ddd}t ddtd\}}t ddtd	\}}td
}td}t}||||||||  ||| ||| ||||||||  ||| ||| ||||||||  ||| ||| ||||||||  ||| ||| g}	|	dd  D ]}
||	d ||
ksJ t|	d t|
ksJ qd S )Nr?   Tr   rM   r   úk lr©   úc drª   rÏ   rÃ   rU   r   ©r-   r+   r&   r!   r"   )ÚiiÚaar}   r~   rO   rP   rÏ   rÃ   ÚdumsÚexprsrå   rE   rE   rF   Ú*test_dummy_order_inner_outer_lines_VT1T1T1n  s    ****úþrî   c                  C   sª  t ddd\} }t ddd\}}t ddtd\}}t ddtd	\}}td
}td}	t}
||||||	||  |	|| |	|| |	|| ||||||	|| |	||  |	|| |	|| ||||||	||  |	|| |	|| |	|| ||||||	|| |	||  |	|| |	|| g}|dd  D ]}|
|d |
|ksªJ t|d t|ks¶J q||||||	||  |	|| |	|| |	|| ||||||	||  |	|| |	|| |	|| ||||||	||  |	|| |	|| |	|| ||||||	||  |	|| |	|| |	|| g}|dd  D ]}|
|d |
|ks6J t|d t|ksCJ q'||||||	||  |	|| |	|| |	|| ||||||	|| |	||  |	|| |	|| ||||||	||  |	|| |	|| |	|| ||||||	|| |	||  |	|| |	|| g}|dd  D ]}|
|d |
|ksÄJ t|d t|ksÑJ qµd S ©NrÛ   Tr   rÞ   r   rç   r©   rè   rª   rÏ   rÃ   rU   r   ré   ©rê   Újjrë   Úbbr}   r~   rO   rP   rÏ   rÃ   rì   rí   rå   rE   rE   rF   Ú,test_dummy_order_inner_outer_lines_VT1T1T1T1  s@   4444ú4
444ô4444ù	þró   c                  C   sÀ   t d\} }}tt| t| t|  d¡tt| t| ks$J tt| t| t|  d¡tt|t| ksAJ tt| t| t|  d¡tt| t| ks^J d S )Nzp,q,rrU   r   rV   )r-   r   r   Ú	get_subNO)r8   r9   r:   rE   rE   rF   Útest_get_subNOŒ  s   ::>rõ   c                  C   sÂ  t ddtd\} }}}t ddtd\}}}}td}td}	t}
|| ||||	||  |	|| ||| |||	||  |	|| || ||||	||  |	|| g}|dd  D ]}|
|d	 |
|ksfJ t|d	 t|ksrJ qX|| ||||	||  |	|| ||| |||	||  |	|| g}|dd  D ]}|
|d	 |
|ks©J t|d	 t|ksµJ q|| ||||	||  |	|| || ||||	||  |	|| g}|dd  D ]}|
|d	 |
|ksìJ t|d	 t|ksøJ qÞ|| ||||	||  |	|| ||| |||	|| |	||  || ||||	||  |	|| ||| |||	|| |	||  g}|dd  D ]}|
|d	 |
|ksPJ t|d	 t|ks]J qAd S ©
Nrš   Tr©   rH   rª   rÏ   rÃ   rU   r   ré   ©r?   r[   r}   r~   rM   rN   rO   rP   rÏ   rÃ   rì   rí   rå   rE   rE   rF   Ú$test_equivalent_internal_lines_VT1T1Ã  sB      ý  þ  þ    üþrø   c                  C   s(  t ddtd\} }}}}}t ddtd\}}}}	}
}t ddtd\}}}}t ddtd\}}}}dd	lm} td
}td}t}||||||||| | || ||| }|||||	gd}| t||||gt|¡}|D ]$}t||||g|}| |¡}||||ksJ t	|t	|ksJ qn||||||||||  ||| || }|||||	gd}| t||||gt|¡}|D ]$}t||||g|}| |¡}||||ksÛJ t	|t	|ksåJ qÁ||||||||| | ||| || }|||||	gd}| t||||gt|¡}|D ]'}t||||g|}| |¡}||||ks/J t	|t	|ks:J q||||||||||  || ||| }|||||	gd}| t||||gt|¡}|D ]'}t||||g|}| |¡}||||ksJ t	|t	|ksJ qjd S ©Núi j k l m nTr©   úa b c d e frª   úp1 p2 p3 p4úh1 h2 h3 h4r   râ   rÏ   rÃ   rm   ©
r-   r+   rä   rã   r&   r!   rf   ÚzipÚnextr"   ©r?   r[   r}   r~   r]   r\   rM   rN   rO   rP   rv   r<   rC   rD   Úp3Úp4Úh1Úh2Úh3Úh4rã   rÏ   rÃ   rì   ÚtemplateÚ
permutatorÚbaserå   ÚsubslistrA   rE   rE   rF   Ú(test_equivalent_internal_lines_VT2conjT2ï  sR   *
*
*
*
ür  c                  C   sÐ  t ddtd\} }}}}}t ddtd\}}}}	}
}t ddtd\}}}}t ddtd\}}}}dd	lm} td
}td}t}||||||||| | |||| | }|||||	gd}| t||||gt|¡}|D ]$}t||||g|}| |¡}||||ksJ t	|t	|ksJ qn||||||||||  |||| | }|||||	gd}| t||||gt|¡}|D ]$}t||||g|}| |¡}||||ksÛJ t	|t	|ksåJ qÁd S rù   rþ   r  rE   rE   rF   Ú8test_equivalent_internal_lines_VT2conjT2_ambiguous_order!  s2   *
*
ür  c               	   C   sT  t ddtd\} }}}t ddtd\}}}}td}td}	t}
|| ||||	||| | ||| |||	||| | || ||||	||| | ||| |||	||| | g}|dd  D ]}|
|d	 |
|ksjJ t|d	 t|ksvJ q\|| ||||	||| | || ||||	||| | || ||||	||||  || ||||	||||  g}|dd  D ]}|
|d	 |
|ksÁJ t|d	 t|ksÍJ q³|| ||||	||| | ||| |||	||||  || ||||	||| | ||| |||	||||  g}|dd  D ]}|
|d	 |
|ksJ t|d	 t|ks&J q
d S rö   ré   r÷   rE   rE   rF   Ú"test_equivalent_internal_lines_VT2B  s<   òûüþr  c               	   C   s  t ddd\} }t ddd\}}t ddtd\}}t ddtd	\}}td
}td}	t}
||||||	||| | |	|||| ||||||	||| | |	|||| ||||||	||| | |	|||| ||||||	||| | |	|||| g}|dd  D ]}|
|d |
|ksJ t|d t|ksJ q||||||	||| | |	|||| ||||||	||| | |	|||| ||||||	||| | |	|||| ||||||	||| | |	|||| g}|dd  D ]}|
|d |
|ksJ t|d t|ksJ q÷||||||	||| | |	|||| ||||||	||| | |	|||| ||||||	||| | |	|||| ||||||	||| | |	|||| g}|dd  D ]}|
|d |
|ks{J t|d t|ksJ qld S rï   ré   rð   rE   rE   rF   Útest_internal_external_VT2T2s  s@   ((((ü((((ü((((üþr  c               	   C   s6  t d\} }t d\}}t dtd\}}t dtd\}}td}td}	t}
||||||	||| | |	|||| ||||||	||| | |	|||| ||||||	||| | |	|||| ||||||	||| | |	|||| g}|dd  D ]}|
|d	 |
|ksJ t|d	 t|ksJ q~d S )
NrÛ   rÞ   rç   rJ   rè   rÏ   rÃ   rU   r   ré   rð   rE   rE   rF   Útest_internal_external_pqrs  s    ((((üþr  c                  C   sL  t ddd\} }t ddtd\}}}t ddtd\}}t dtd	\}}td
}	td}
td}t}||	|||
|| ||gksCJ ||	|||
|| ||gksUJ ||	|||
|| ||gksgJ ||	|||
|| ||gksyJ ||	|||
|| ||| |||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sXJ ||	|| ||	||| |	||| |||gkstJ ||	|| ||	||| |	||| |||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s2J ||	||||
||| |||gksHJ ||	||||
||| |||gks^J ||	||||
||| |||gkstJ ||	||||
||| |||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 )NrÞ   Tr   zk l mr©   rè   rª   rß   rJ   ÚAr   r   )r-   r+   r&   r!   )rë   rò   r}   r~   r]   rO   rP   r8   r9   r  r   r   rì   rE   rE   rF   Útest_dummy_order_well_defined¯  sP   $$$$0000022288888888,,,,,,,,,,,0r  c            '      C   s¢  t ddd\} }t ddtd\}}}}}t ddtd\}}}	}
}t dtd	\}}t d
dtd\}}}}t ddtd\}}}}t ddtd\}}}}t ddtd\}}}}td}td}ddlm}  |||||| ||| ||| ||| }!| |||	|
|gd}"|! t|||||gt|"¡}#|"D ]}$t|||||g|$}%|! |%¡}&t|&t|#ks±J q|||||| ||| ||| ||| }!| |||	|
|gd}"|! t|||||gt|"¡}#|"D ]}$t|||||g|$}%|! |%¡}&t|&t|#ksJ qæ|||||||||| ||| }!| |||	|
|gd}"|! t|||||gt|"¡}#|"D ]}$t|||||g|$}%|! |%¡}&t|&t|#ksMJ q1d S )NrÞ   Tr   z	i j k l mr©   z	a b c d erª   rß   rJ   rü   zp5 p6 p7 p8rý   zh5 h6 h7 h8r  r   r   râ   rn   )	r-   r+   r&   rä   rã   rf   rÿ   r   r"   )'rë   rò   r?   r[   r}   r~   r]   rM   rN   rO   rP   rv   r8   r9   rC   rD   r  r  Úp5Úp6Úp7Úp8r  r  r  r  Úh5Úh6Úh7Úh8r  r   rã   r  r	  r
  rå   r  rA   rE   rE   rF   Útest_dummy_order_ambiguousç  sB   2
2
&
ýr  c                  G   s   t d| d d | dd  S )NrÏ   rV   )r   ©rp   rE   rE   rF   Úatv  s   r  c                  G   sP   t | dkrtd| d d | dd  S t | dkr&td| d f| d fS d S )Nrm   rÃ   rV   r   rU   )ro   r   r  rE   rE   rF   r×     s
   ÿr×   c                  C   s  t ddd} t ddd}t ddtd\}}t ddtd	\}}t||||t||  t|| t|| t||||t||  t|| t|| t||||t||  t|| t|| t||||t||  t|| t|| g}|d
d  D ]}t|d t|ksJ qzd S )Nr?   Tr   rM   r   rç   r©   rè   rª   rU   r   ©r-   r+   r  r×   r"   )rê   rë   r}   r~   rO   rP   rí   rå   rE   rE   rF   Ú-test_dummy_order_inner_outer_lines_VT1T1T1_AT  s   ****úÿr  c            
      C   sª  t ddd\} }t ddd\}}t ddtd\}}t ddtd	\}}t||||t||  t|| t|| t|| t||||t|| t||  t|| t|| t||||t||  t|| t|| t|| g}|d
d  D ]}	t|d t|	 ksJ qxt||||t||  t|| t|| t|| t||||t|| t||  t|| t|| g}|d
d  D ]}	t|d t|	ksÒJ qÄd S ©NrÛ   Tr   rÞ   r   rç   r©   rè   rª   rU   r   r  ©
rê   rñ   rë   rò   r}   r~   rO   rP   rí   rå   rE   rE   rF   Ú/test_dummy_order_inner_outer_lines_VT1T1T1T1_AT1  s    444ü44ýÿr"  c            
      C   sL  t ddtd\} }}}t ddtd\}}}}t| |||t||  t|| t|| ||t||  t|| t| |||t||  t|| g}|dd  D ]}	t|d t|	ks\J qNt| |||t||  t|| t|| ||t||  t|| g}|dd  D ]}	t|d t|	ksJ qt| |||t||  t|| t| |||t||  t|| g}|dd  D ]}	t|d t|	ksÊJ qŒt| |||t||  t|| t|| ||t|| t||  t| |||t||  t|| t|| ||t|| t||  g}|dd  D ]}	t|d t|	ks"J qd S ©Nrš   Tr©   rH   rª   rU   r   r  ©
r?   r[   r}   r~   rM   rN   rO   rP   rí   rå   rE   rE   rF   Ú'test_equivalent_internal_lines_VT1T1_ATL  s4      ý  þ  þ    üÿr%  c                  C   sŸ  t ddtd\} }}}}}t ddtd\}}}}	}
}t ddtd\}}}}t ddtd\}}}}dd	lm} t||||t||| | t| ||| }|||||	gd
}| t||||gt|¡}|D ]}t||||g|}| |¡}t	|t	|ks~J qdt||||t||||  t|| || }|||||	gd
}| t||||gt|¡}|D ]}t||||g|}| |¡}t	|t	|ksÇJ q­t||||t||| | t|| || }|||||	gd
}| t||||gt|¡}|D ]}t||||g|}| |¡}t	|t	|ksJ qöt||||t||||  t| ||| }|||||	gd
}| t||||gt|¡}|D ]}t||||g|}| |¡}t	|t	|ks[J q@d S ©Nrú   Tr©   rû   rª   rü   rý   r   râ   rm   ©
r-   r+   rä   rã   r  r×   rf   rÿ   r   r"   ©r?   r[   r}   r~   r]   r\   rM   rN   rO   rP   rv   r<   rC   rD   r  r  r  r  r  r  rã   r  r	  r
  rå   r  rA   rE   rE   rF   Ú+test_equivalent_internal_lines_VT2conjT2_ATp  sD   *
*
*
*
ýr)  c                  C   s  t ddtd\} }}}}}t ddtd\}}}}	}
}t ddtd\}}}}t ddtd\}}}}dd	lm} t||||t||| | t||| | }|||||	gd
}| t||||gt|¡}|D ]}t||||g|}| |¡}t	|t	|ks~J qdt||||t||||  t||| | }|||||	gd
}| t||||gt|¡}|D ]}t||||g|}| |¡}t	|t	|ksÇJ q­d S r&  r'  r(  rE   rE   rF   Ú;test_equivalent_internal_lines_VT2conjT2_ambiguous_order_AT  s(   *
*
ýr*  c            
   	   C   sŸ  t ddtd\} }}}t ddtd\}}}}t| |||t||| | t|| ||t||| | t| |||t||| | g}|dd  D ]}	t|d t|	ksSJ qEt| |||t||| | t| |||t||| | t| |||t||||  g}|dd  D ]}	t|d t|	ksJ qt| |||t||| | t|| ||t||||  t| |||t||| | t|| ||t||||  g}|dd  D ]}	t|d t|	ksÜJ qÎd S r#  r  r$  rE   rE   rF   Ú%test_equivalent_internal_lines_VT2_ATµ  s,   üüüÿr+  c            
   	   C   s¶  t ddd\} }t ddd\}}t ddtd\}}t ddtd	\}}t||||t||| | t|||| t||||t||| | t|||| t||||t||| | t|||| t||||t||| | t|||| g}|d
d  D ]}	t|d t|	ksJ qzt||||t||| | t|||| t||||t||| | t|||| t||||t||| | t|||| t||||t||| | t|||| g}|d
d  D ]}	t|d t|	ksïJ qát||||t||| | t|||| t||||t||| | t|||| t||||t||| | t|||| t||||t||| | t|||| g}|d
d  D ]}	t|d t|	ksWJ qHd S r   r  r!  rE   rE   rF   Útest_internal_external_VT2T2_ATÕ  s4   ((((ü((((ü((((üÿr,  c            
   	   C   s
  t d\} }t d\}}t dtd\}}t dtd\}}t||||t||| | t|||| t||||t||| | t|||| t||||t||| | t|||| t||||t||| | t|||| g}|dd  D ]}	t|d t|	ksJ qtd S )NrÛ   rÞ   rç   rJ   rè   rU   r   r  r!  rE   rE   rF   Útest_internal_external_pqrs_ATõ  s   ((((üÿr-  c                  C   s.   t d} ttt| d t| dksJ d S )NÚ0rV   z(- \left[b_{0},{b^\dagger_{0}}^{2}\right])r,   r3   r   r   r   )rM   rE   rE   rF   Útest_issue_19661  s   ÿr/  c                  C   s^   t d} t ddtd\}}t ddtd\}}t| ||f||ft| ||f||f ks-J d S )NrÏ   )rO   rP   Trª   )r}   r~   r©   )r-   r+   r   )rÏ   rO   rP   r}   r~   rE   rE   rF   Ú+test_canonical_ordering_AntiSymmetricTensor  s   
ÿ
ÿÿr0  N)vÚ$sympy.functions.elementary.complexesr   Ú&sympy.functions.elementary.exponentialr   Úsympy.physics.secondquantr   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$   Úsympy.concrete.summationsr%   Úsympy.core.functionr&   r'   Úsympy.core.numbersr(   r)   Úsympy.core.singletonr*   Úsympy.core.symbolr+   r,   r-   Ú(sympy.functions.elementary.miscellaneousr.   Úsympy.printing.reprr/   Úsympy.simplify.simplifyr0   Úsympy.testing.pytestr1   r2   Úsympy.printing.latexr3   rG   rS   r^   rc   rj   rk   ru   rw   rz   r{   r   r   r   r   r   r    r£   r€   rŠ   r§   r­   r»   rŒ   rÁ   rÂ   rÎ   rÖ   rÙ   rÜ   rÝ   rá   ræ   rî   ró   rõ   rø   r  r  r  r  r  r  r  r  r×   r  r"  r%  r)  r*  r+  r,  r-  r/  r0  rE   rE   rE   rF   Ú<module>   s    
	
- 	3*&#5,2!1'8+$*  