o
    jgBœ  ã                   @   sØ  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l,m-Z-m.Z.m/Z/ d dl0m1Z1 d dl2m3Z3 d d	l4m5Z5 d d
l6m7Z7m8Z8 d dl9m: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&d' ZHe7d(d) ZId*d+ ZJd,d- ZKd.d/ ZLd0d1 ZMd2d3 ZNd4d5 ZOd6d7 ZPd8d9 ZQd:d; ZRd<d= ZSd>d? ZTd@dA ZUdBdC ZVdDdE ZWdFdG ZXdHdI ZYdJdK ZZdLdM Z[dNdO Z\dPdQ Z]dRdS Z^dTdU Z_dVdW Z`dXdY ZadZd[ Zbd\d] Zcd^d_ Zdd`da Zedbdc Zfddde Zgdfdg Zhdhdi Zidjdk Zjdldm Zkdndo Zldpdq Zmdrds Zndtdu Zodvdw Zpdxdy ZqdzS ){é    )!Ú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 d S )Núp,q,r,sÚfghizP(pq))r+   Úmapr$   r   Úget_permutedr   r1   )ÚpÚqÚrÚsÚfÚgÚhÚiÚPÚexprÚperms© rA   ú\/var/www/html/zoom/venv/lib/python3.10/site-packages/sympy/physics/tests/test_secondquant.pyÚtest_PermutationOperator   s$   2& ÿþý2ÿrC   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)   r4   r$   r   r   r    )ÚaÚbÚcÚdr6   r7   r8   r9   r:   r;   r>   r?   ÚexpectedÚresultrA   rA   rB   Ú$test_index_permutations_with_dummies+   s(   ÿÿrO   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 d S )Núi,j,n,mé   g      ð?é   éþÿÿÿg      @éÿÿÿÿr   é
   rI   )r+   r   r&   r(   ÚHalfr'   r   r   r   r   r*   )r=   ÚjÚnÚmrA   rA   rB   Útest_daggerG   s    (( ($rZ   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,jrQ   )r+   r   ÚstateÚis_symbolic)r=   rW   ÚorA   rA   rB   Útest_operatorZ   s   
r_   c                  C   sº   t d\} }}}t| }t|dksJ t|tsJ | | |¡}| t¡|hks+J td}| t	|g¡t
|d t	|d g ksFJ t|}| t	|g¡|t	|g ks[J d S )NrP   z{b^\dagger_{i}}r   rQ   )r+   r   r1   Ú
isinstancer   ÚsubsÚatomsr*   Úapply_operatorr   r,   ©r=   rW   rX   rY   r^   rA   rA   rB   Útest_created   s   .&re   c                  C   s¶   t d\} }}}t| }t|dksJ t|tsJ | | |¡}| t¡|hks+J td}| t	|g¡t
|t	|d g ksDJ t|}| t	|g¡|t	|g ksYJ d S )NrP   zb_{i}r   rQ   )r+   r   r1   r`   r   ra   rb   r*   rc   r   r,   rd   rA   rA   rB   Útest_annihilateq   s   *&rf   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 )	NrP   )r   rQ   rR   é   é   é   r   )rQ   rQ   rR   rg   rh   rh   )r   rQ   rR   rg   rg   rQ   )r+   r   ÚlenÚargsÚtupleÚrangeÚupÚdown)r=   rW   rX   rY   r9   rA   rA   rB   Útest_basic_state~   s   "rp   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 )NrX   r   rQ   )r+   r   r   r
   r,   r   )rX   ÚerA   rA   rB   Útest_basic_apply   s
   "*rr   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   rQ   rT   )r+   r   r   r
   r   r,   r%   )rX   rY   r^   rq   ÚanswerrA   rA   rB   Útest_complex_apply   s
    0ru   c                  C   sD   t d} tdtd }t|t| g }|| t| g ks J d S )NrX   r   )r+   r   r   r
   r   )rX   r^   rq   rA   rA   rB   Útest_number_operator   s   rv   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   rQ   )r+   r   r   r   r   r   )r=   rW   ÚkÚlÚs1Ús2r8   rA   rA   rB   Ú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 )Nrs   r   rQ   )r+   r   r   r   r
   r,   r   )rX   rY   rz   r{   r^   rq   rA   rA   rB   Ú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 )Nri   r   rh   rQ   )r   r   r	   rm   r,   r   )rJ   r^   rY   r=   rA   rA   rB   Ú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 )NrR   rQ   )rQ   rQ   rg   z9[FockState((2, 0)), FockState((1, 1)), FockState((0, 2))])r   r\   r!   Úindexrj   ÚstrÚreprr-   )rJ   r\   rA   rA   rB   Ú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 )	Nrs   r   ri   F)ÚdeeprR   é   )rQ   rR   rg   rg   rh   ri   rh   ri   r   é   ri   r   r   é   é	   r   r   r   r   rU   é   )r+   r   r   r(   rV   r#   Údoitr   r	   rm   rj   )rX   rY   Úh_nÚHr^   rJ   Údiagr=   rA   rA   rB   Ú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 )Nrs   T©Úabove_fermir   rQ   rT   rR   zX,Y,ZF)Úcommutativerw   ©Úbelow_fermiúa,b,c,dr2   rS   )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   r.   r
   r   r   r   r   r%   r   Úevalr1   r   r   )rX   rY   rK   rq   ÚCÚXÚYÚZr=   rW   rx   ry   rI   rJ   rL   r6   r7   r8   r9   ÚDÚc1rA   rA   rB   Ú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|  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 d S )NrP   rQ   rh   )Úfermi_levelrw   Tr   r   r   r2   zCreateFermion(p)zCreateFermion(Symbol('p'))z{a^\dagger_{p}})r+   r   r`   r   ra   rb   r*   rc   r   r   r   r   r   r-   r1   )r=   rW   rX   rY   r^   Úvacuumrx   ry   rI   rJ   rK   rL   r6   r7   r8   r9   rA   rA   rB   Útest_create_f  s*    ",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|  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 d S )NrP   rQ   rw   Tr   r   r   r2   rh   r   rg   zf(p)zAnnihilateFermion(p)zAnnihilateFermion(Symbol('p'))za_{p})r+   r   r`   r   ra   rb   r*   rc   r   r   r   r-   r1   )r=   rW   rX   rY   r^   rx   ry   rI   rJ   rK   rL   r6   r7   r8   r9   rA   rA   rB   Útest_annihilate_f,  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 )NrP   r   rQ   )
r+   r   r`   r   ra   rb   r*   rc   r   r,   rd   rA   rA   rB   Útest_create_bE  s   .&r    c                  C   sR   t d\} }}}t| }t|tsJ | | |¡}| t¡|hks#J td}d S )NrP   r   )r+   r   r`   r   ra   rb   r*   rd   rA   rA   rB   Útest_annihilate_bQ  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 )Nr2   Tr   rR   úi j k l©r   rG   rD   ©r   rG   rE   rF   )
r+   r   r   r   r   r   r   r   r%   r)   )r6   r7   r8   r9   r   ÚnstrÚfasitr=   rW   rx   ry   rI   rJ   rK   rL   r?   rA   rA   rB   Ú
test_wicksZ  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   rD   r   rE   rF   rQ   r   rg   rR   rT   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   rA   ©r6   r7   rA   rB   Ú<lambda>Ž  s    ztest_NO.<locals>.<lambda>)r+   r)   r   r   r   Ú_remove_bracketsra   r   ÚlistÚiter_q_creatorsÚiter_q_annihilatorsÚhas_q_creatorsÚhas_q_annihilatorsr   r   r1   r0   ÚNotImplementedError)r=   rW   rx   ry   rI   rJ   rK   rL   r8   r9   r?   ÚnoÚl1Úl2rA   r©   rB   Ú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   rQ   )r+   r   r   r   )r=   rW   rI   rJ   r6   r7   rA   rA   rB   Ú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 )
Nrw   Tr   r   r   r2   r   c                      s   t t tS rš   )r   r   r   rA   ©rI   rJ   rA   rB   rª   ì  s    z"test_contraction.<locals>.<lambda>)
r+   r   r   r   r   r   Úis_only_below_fermiÚis_only_above_fermir0   r"   )r=   rW   rx   ry   rK   rL   r6   r7   r8   r9   ÚrestrrA   r·   rB   Ú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   rQ   rR   )r+   r   r   )r=   rW   rx   r8   rA   rA   rB   Ú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 d S )Nr¢   Tr£   rD   r€   rE   Útr   rR   z{t^{ab}_{ij}}zt((_a, _b),(_i, _j)))	r+   r)   r   Úhasra   Úsymbolr*   r1   r   )r=   rW   rx   ry   rI   rJ   rK   rL   r6   r7   r8   r9   ÚATÚtabijrA   rA   rB   Útest_Tensors  s.   .,.24$.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   rD   r   rE   rF   r:   Úvrh   )Úkeep_only_fully_contractedÚsimplify_kronecker_deltas)r+   r)   r   r   r   r   r   )r=   rW   rx   ry   rI   rJ   rK   rL   r6   r7   r8   r9   ÚFockÚVÚFaiÚVabijrA   rA   rB   Útest_fully_contracted#  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[   rR   rQ   )r+   r    Úatt©r=   rW   rA   rA   rB   Ú'test_substitute_dummies_without_dummies7  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 jrF   r   )r+   r)   r    rË   r   r   r   rÌ   rA   rA   rB   Ú#test_substitute_dummies_NO_operator=  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Ì   rA   rA   rB   Ú#test_substitute_dummies_SQ_operatorC  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 qrF   r:   )Únew_indicesr   )r+   r)   r$   r    )r=   rW   rI   rJ   r6   r7   r:   rA   rA   rB   Ú#test_substitute_dummies_new_indicesI  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   ©Ú
variationsrh   )r+   r)   r$   Úsympy.utilities.iterablesr×   r    )r=   rW   rx   ry   r:   r×   ÚpermutrA   rA   rB   Ú*test_substitute_dummies_substitution_orderQ  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   rI   r   úk lr£   úc dr€   rÃ   rœ   rQ   r   ©r+   r)   r$   r   r    )ÚiiÚaarx   ry   rK   rL   rÃ   rœ   ÚdumsÚexprsrÙ   rA   rA   rB   Ú*test_dummy_order_inner_outer_lines_VT1T1T1Y  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œ   rQ   r   rÝ   ©rÞ   Újjrß   Úbbrx   ry   rK   rL   rÃ   rœ   rà   rá   rÙ   rA   rA   rB   Ú,test_dummy_order_inner_outer_lines_VT1T1T1T1r  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,rrQ   r   rR   )r+   r   r   Ú	get_subNO)r6   r7   r8   rA   rA   rB   Ú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£   rD   r€   rÃ   rœ   rQ   r   rÝ   ©r=   rW   rx   ry   rI   rJ   rK   rL   rÃ   rœ   rà   rá   rÙ   rA   rA   rB   Ú$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œ   rh   ©
r+   r)   rØ   r×   r$   r   ra   ÚzipÚnextr    ©r=   rW   rx   ry   rY   rX   rI   rJ   rK   rL   rq   r:   Úp1Úp2Úp3Úp4Úh1Úh2Úh3Úh4r×   rÃ   rœ   rà   ÚtemplateÚ
permutatorÚbaserÙ   Úsubslistr?   rA   rA   rB   Ú(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õ   rA   rA   rB   Ú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ë   rA   rA   rB   Ú"test_equivalent_internal_lines_VT2-  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ä   rA   rA   rB   Útest_internal_external_VT2T2^  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Û   rF   rÜ   rÃ   rœ   rQ   r   rÝ   rä   rA   rA   rB   Ú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Ó   rF   ÚAr   r   )r+   r)   r$   r   )rß   ræ   rx   ry   rY   rK   rL   r6   r7   r  r   r   rà   rA   rA   rB   Ú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Ó   rF   rð   zp5 p6 p7 p8rñ   zh5 h6 h7 h8r  r   r   rÖ   ri   )	r+   r)   r$   rØ   r×   ra   ró   rô   r    )'rß   ræ   r=   rW   rx   ry   rY   rI   rJ   rK   rL   rq   r6   r7   rö   r÷   rø   rù   Úp5Úp6Úp7Úp8rú   rû   rü   rý   Úh5Úh6Úh7Úh8r  r   r×   rþ   rÿ   r   rÙ   r  r?   rA   rA   rB   Útest_dummy_order_ambiguousÒ  sB   2
2
&
ýr  c                  G   s   t d| d d | dd  S )NrÃ   rR   )r   ©rk   rA   rA   rB   Ú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 )Nrh   rœ   rR   r   rQ   )rj   r   r  rA   rA   rB   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   rI   r   rÛ   r£   rÜ   r€   rQ   r   ©r+   r)   r  rË   r    )rÞ   rß   rx   ry   rK   rL   rá   rÙ   rA   rA   rB   Ú-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€   rQ   r   r  ©
rÞ   rå   rß   ræ   rx   ry   rK   rL   rá   rÙ   rA   rA   rB   Ú/test_dummy_order_inner_outer_lines_VT1T1T1T1_AT  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£   rD   r€   rQ   r   r  ©
r=   rW   rx   ry   rI   rJ   rK   rL   rá   rÙ   rA   rA   rB   Ú'test_equivalent_internal_lines_VT1T1_AT7  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Ö   rh   ©
r+   r)   rØ   r×   r  rË   ra   ró   rô   r    ©r=   rW   rx   ry   rY   rX   rI   rJ   rK   rL   rq   r:   rö   r÷   rø   rù   rú   rû   rü   rý   r×   rþ   rÿ   r   rÙ   r  r?   rA   rA   rB   Ú+test_equivalent_internal_lines_VT2conjT2_AT[  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  rA   rA   rB   Ú;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  rA   rA   rB   Ú%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  rA   rA   rB   Ú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Û   rF   rÜ   rQ   r   r  r  rA   rA   rB   Útest_internal_external_pqrs_ATà  s   ((((üÿr#  c                  C   s.   t d} ttt| d t| dksJ d S )NÚ0rR   z(- \left[b_{0},{b^\dagger_{0}}^{2}\right])r*   r1   r   r   r   )rI   rA   rA   rB   Ú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Ã   )rK   rL   Tr€   )rx   ry   r£   )r+   r)   r   )rÃ   rK   rL   rx   ry   rA   rA   rB   Ú+test_canonical_ordering_AntiSymmetricTensorö  s   
ÿ
ÿÿr&  N)rÚ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.simplifyr.   Úsympy.testing.pytestr/   r0   Úsympy.printing.latexr1   rC   rO   rZ   r_   re   rf   rp   rr   ru   rv   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&  rA   rA   rA   rB   Ú<module>   s    
	
-	3*&5,2!1'8+$*  