U
    «Ì0eBœ  ã                   @   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sXt|| | || |¡|||  ks~t|| | || ¡|| kst|| || || || ||||  || ||  || || || ||  ||||  || ||  }	|| ||||g}
t|	|
|| |||| ||  || || || ksvtt|| |dkstd S )Núp,q,r,sZfghizP(pq))r+   Úmapr$   r   Zget_permutedÚAssertionErrorr   r1   )ÚpÚqÚrÚsÚfÚgÚhÚiÚPÚexprZperms© r?   úH/tmp/pip-unpacked-wheel-_6tpq7m6/sympy/physics/tests/test_secondquant.pyÚtest_PermutationOperator   s$    2& ÿþý2ÿ
rA   c                  C   sZ  t d\} }}}t dtd\}}}}ttd\}}	t}
|| |||||| || }t||
| |g|
| ||| ||| kst|
| |t|| ||| }|| |||||| || }t||
| |g}|t|ksÚt|| |||||| || }t||
| |g}|t|kst|| ||||	|| || }t||
| |g}||ksVtd S )Núa b c dúp q r s©ÚclsZfg)r+   r)   r3   r$   r   r   r4   r    )ÚaÚbÚcÚdr5   r6   r7   r8   r9   r:   r=   r>   ÚexpectedÚresultr?   r?   r@   Ú$test_index_permutations_with_dummies+   s*     
ÿÿrL   c                  C   sÀ  t d\} }}}tddks ttddks0ttdt dt ksHtttjt d ttdd d kspttt|gt|gksttt	dt
dks€ttt
dt	dksŒttt	|t
|ksÔttt
|t	|ksìttt	dt	d t
dt
d kstt|| t|t| ks8ttt	|t	| t
|t
| ksbttt	|d	 tt	|d	 ksttd
ttd
ks¢tttd
td
ksŒtd S )Núi,j,n,mé   g      ð?é   éþÿÿÿg      @éÿÿÿÿr   é
   rF   )r+   r   r4   r&   r(   ÚHalfr'   r   r   r   r   r*   )r<   ÚjÚnÚmr?   r?   r@   Útest_daggerG   s     (*"*&rW   c                  C   sP   t d\} }t| }|j| ks"t|js,ttd}|jdksBt|jrLtd S )Núi,jrN   )r+   r   Ústater4   Zis_symbolic)r<   rT   Úor?   r?   r@   Útest_operatorZ   s    
r[   c                  C   sº   t d\} }}}t| }t|dks(tt|ts6t| | |¡}| t¡|hksVttd}| 	t
|g¡t|d t
|d g kstt|}| 	t
|g¡|t
|g ks¶td S )NrM   z{b^\dagger_{i}}r   rN   )r+   r   r1   r4   Ú
isinstancer   ÚsubsÚatomsr*   Úapply_operatorr   r,   ©r<   rT   rU   rV   rZ   r?   r?   r@   Útest_created   s    .ra   c                  C   s¶   t d\} }}}t| }t|dks(tt|ts6t| | |¡}| t¡|hksVttd}| 	t
|g¡t|t
|d g kstt|}| 	t
|g¡|t
|g ks²td S )NrM   zb_{i}r   rN   )r+   r   r1   r4   r\   r   r]   r^   r*   r_   r   r,   r`   r?   r?   r@   Útest_annihilateq   s    *rb   c                  C   s2  t d\} }}}tdddddg}t|dks2t|jd ttdksLt| d¡tdddddgkslt| d¡tdddddgksttdD ]} | | ¡ | ¡|kstq| d¡dksÄttdD ]} ||  | ksÌtqÌt||g}| d¡t|d |gkst| d¡t|d |gks.td S )NrM   r   rN   rO   é   é   é   )	r+   r   Úlenr4   ÚargsÚtupleÚrangeZupZdown)r<   rT   rU   rV   r8   r?   r?   r@   Útest_basic_state~   s       rj   c                  C   sx   t d} tdt| g }t|t| t| d g ks<ttdt| g }t|t| d t| d g ksttd S )NrU   r   rN   )r+   r   r   r
   r,   r4   r   )rU   Úer?   r?   r@   Útest_basic_apply   s
    "rl   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std S )Nún,mr   rN   rQ   )r+   r   r   r
   r   r,   r%   r4   )rU   rV   rZ   rk   Zanswerr?   r?   r@   Útest_complex_apply   s
     0rn   c                  C   sD   t d} tdtd }t|t| g }|| t| g ks@td S )NrU   r   )r+   r   r   r
   r   r4   )rU   rZ   rk   r?   r?   r@   Útest_number_operator   s    ro   c                  C   s   t d\} }}}tdg}tdg}t|t|dks:tt||dksLtt| |g}t||g}t||}|t| |t|| kstd S )Núi,j,k,lr   rN   )r+   r   r   r   r   r4   r   )r<   rT   ÚkÚlÚs1Ús2r7   r?   r?   r@   Útest_inner_productŠ   s    


ru   c                  C   sZ   t d\} }t| g}t|g}td}t|| | }|t|t| |d  ksVtd S )Nrm   r   rN   )r+   r   r   r   r
   r,   r   r4   )rU   rV   rs   rt   rZ   rk   r?   r?   r@   Útest_symbolic_matrix_elements²   s    

rv   c                  C   s   t d} td}t|| }tdD ]$}|||d f t|d ks"tq"td}t|| }tdD ]$}||d |f t|d ksbtqbd S )Nre   r   rd   rN   )r   r   r	   ri   r,   r4   r   )rG   rZ   rV   r<   r?   r?   r@   Útest_matrix_elements»   s    
"
rw   c                  C   s   t dd} |  d¡}|tdks$t|  |¡dks6t|  d¡| d ksLtt| dks\tt| dksltt| dks|tt| dkstd S )NrO   rN   )rN   rN   rc   z9[FockState((2, 0)), FockState((1, 1)), FockState((0, 2))])	r   rY   r!   r4   Úindexrf   ÚstrÚreprr-   )rG   rY   r?   r?   r@   Ú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||}ddd	d	d
dd
ddddddddddddddg}t	t
|D ]}|| |||f kstqd S )Nrm   r   re   F)ÚdeeprO   é   rN   rc   rd   é   é   é	   rR   é   )r+   r   r   r(   rS   r#   Údoitr   r	   ri   rf   r4   )rU   rV   Zh_nÚHrZ   rG   Zdiagr<   r?   r?   r@   Útest_shoÔ   s    

.r   c                  C   s:  t ddd\} }ttdtd}|dks.tttdtd}|dksLttt| td}|t| dksptttdtd}|dkstttdtd}tt|t| g }|t| gksÈtttdtd}tt|t| |g }|dksþttt	|t
|}|ddtt
|t	|   ks6ttt
|t	|}| ¡ ddtt
|t	|   ksrtt}t dd	d
\}}}|||||dks¢t|||||dksŒt|||||dksÖtt ddd\}}	}
}t ddd\}}}}t d\}}}}t}|t
|t	|dtt	|t
|  ksBt|t
|	tt
|t	| jdd||	| t
| kst|t
|t	| t
|t	|	 jdddks¶ttt	|t
|}t ||¡dksÞttt
|t	| t
|t	|	 }t|dkstt|dks$tt|dks6td S )Nrm   T©Úabove_fermir   rN   rQ   rO   zX,Y,ZF)Zcommutativerp   ©Úbelow_fermiúa,b,c,dr2   rP   )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   r4   r   r.   r
   r   r   r   r   r%   r   Úevalr1   rz   ry   )rU   rV   rH   rk   ÚCÚXÚYÚZr<   rT   rq   rr   rF   rG   rI   r5   r6   r7   r8   ÚDZc1r?   r?   r@   Útest_commutationã   sJ    &*0@4"r   c                  C   sÖ  t d\} }}}t| }t|ts&t| | |¡}| t¡|hksFttd}| t	|g¡t	d|gksnt| t	|g¡t	|dg kstt|}| t	g ¡t	|gksŽtt	g dd}|t	g ddksÔtt ddd\} }}}t ddd	\}}	}
}t d
\}}}}t|  t	| ||gd¡t	||gdks:tt| t	| |	|gd¡t	|| |	|gdksltt
t| |¡|t| ksttt|dksŠttt|dksŒttt|dksÒtd S )NrM   rN   rd   )Zfermi_levelrp   Tr   r   r   r2   zCreateFermion(p)zCreateFermion(Symbol('p'))z{a^\dagger_{p}})r+   r   r\   r   r4   r]   r^   r*   r_   r   r   r   r   rz   r-   r1   )r<   rT   rU   rV   rZ   Zvacuumrq   rr   rF   rG   rH   rI   r5   r6   r7   r8   r?   r?   r@   Útest_create_f  s*     ".2$r   c                  C   sæ  t d\} }}}t| }t|ts&t| | |¡}| t¡|hksFttd}| t	d|g¡t	|gksnt| t	|dg¡t	|g kstt|}| t	|g¡t	g ksŽtt ddd\} }}}t ddd\}}}	}
t d\}}}}t|  t	| ||gd	¡d
kstt| t	| ||gd	¡d
ks4tt| t	| ||gd¡d
ksXtt| t	| ||gd	¡t	|| ||gd	kstt
t|dks ttt|dks¶ttt|dksÌttt|dksâtd S )NrM   rN   rp   Tr   r   r   r2   rd   r   rc   zf(p)zAnnihilateFermion(p)zAnnihilateFermion(Symbol('p'))za_{p})r+   r   r\   r   r4   r]   r^   r*   r_   r   ry   rz   r-   r1   )r<   rT   rU   rV   rZ   rq   rr   rF   rG   rH   rI   r5   r6   r7   r8   r?   r?   r@   Útest_annihilate_f,  s*     "$$$2r   c                  C   sª   t d\} }}}t| }t|ts&t| | |¡}| t¡|hksFttd}| t	|g¡t
|d t	|d g ks|tt|}| t	|g¡|t	|g ksŠtd S )NrM   r   rN   )r+   r   r\   r   r4   r]   r^   r*   r_   r   r,   r`   r?   r?   r@   Útest_create_bE  s    .r   c                  C   sR   t d\} }}}t| }t|ts&t| | |¡}| t¡|hksFttd}d S )NrM   r   )r+   r   r\   r   r4   r]   r^   r*   r`   r?   r?   r@   Útest_annihilate_bQ  s    r   c                  C   sV  t ddd\} }}}t| t| }t|tt| t| t| | ksNtt| t| }t|tt| t| ks~tt| t| t| t| }t|}tt| |t|| t| |t| t|  t||t|  t|  t| |t| t|  t| t| t| t|  }||ks:t| | |  	¡ t| | | ks`t||  | d  	¡ t||  | d kst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>ttt|tt|t| t|	  t| tt|t| t| t|	 t| t||tt|t| t|	   ksÆ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|	 t|
  ks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| t|  ksRtd S )Nr2   Tr   rO   úi j k l©r   rE   rB   ©r   rE   rC   rD   )r+   r   r   r   r   r   r4   r   r   r%   r)   )r5   r6   r7   r8   ry   ZnstrZfasitr<   rT   rq   rr   rF   rG   rH   rI   r>   r?   r?   r@   Ú
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sttt| tt|t|  tt| t| t| ksÌttddksÜtt| | ksìttt|t| t|t|  tt|t| t| tt|t| t|  ksNttt|t|  ¡ t|t| ks|ttt|t|   ¡ t|t|  ksªttt t  t t|t|  ¡tt|t tt| t  ksttt t  tt|t|  ¡tt t| tt t|   ks^ttt t  ¡ }
t|
t|
ksttt|t| tt|t|  ksŒttt|t|  t| t| }t	| 
¡ }|d	dgksþtt	| ¡ }|d
dgksttt|t|  }|jdks@t|jdksPtt|dksbtt|dksttt|dksttt fdd d S )Nr   Tr   rB   r   rC   rD   rN   r   rc   rO   rQ   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   r?   ©r5   r6   r?   r@   Ú<lambda>Ž  ó    ztest_NO.<locals>.<lambda>)r+   r)   r   r   r   r4   Z_remove_bracketsr]   r   ÚlistZiter_q_creatorsZiter_q_annihilatorsZhas_q_creatorsZhas_q_annihilatorsry   rz   r1   r0   ÚNotImplementedError)r<   rT   rq   rr   rF   rG   rH   rI   r7   r8   r>   ÚnoÚl1Úl2r?   r   r@   Útest_NO  sN    "&ÿÿ"ÿÿ
..*&ÿ
*&ÿ
0$r¢   c                  C   sx  t ddd\} }t ddd\}}t d\}}tt|t|gt|t|gdfksXttt|t|gt|t|gdfksttt|t| gt|t| gdfks°ttt| t|gt|t| gdfksÜttt|t| gt|t| gdfks
ttt| t|gt|t| gdfks8ttt|t| gt| t|gdfksfttt| t|gt| t|gdfksttt|t| gt| t|gdfksÂttt| t|gt| t|gdfksðttt|t|gt|t|gdfksttt|t|gt|t|gdfksLttt|t|gt|t|gdfkszttt|t|gt|t|gdfksšttt|t|gt|t|gdfksÖttt|t|gt|t|gdfksttt|t|gt|t|gdfks2ttt|t|gt|t|gdfks`ttt| t|gt| t|gdfksttt|t| gt| t|gdfksŒttt|t| gt|t| gdfksêttt| t|gt|t| gdfksttt|t| gt| t|gdfksFttt| t|gt| t|gdfksttd S )	NrX   Tr   za,br   zp,qr   rN   )r+   r   r   r   r4   )r<   rT   rF   rG   r5   r6   r?   r?   r@   Útest_sorting·  s6    ,,,,...................r£   c                     s^  t ddd\} }}}t ddd\ }}t d\}}}}	tt| t|t| |ksXttt tt ksxttt t| dksttt t| dks¬ttt| t dksÆttt| t dksàttt| t|t| |kstttt|t|}
|
js$tttt|t|}
|
jsFtt	t
 fdd	 d S )
Nrp   Tr   r   r   r2   r   c                      s   t t tS r   )r   r   r   r?   ©rF   rG   r?   r@   r   ì  r   z"test_contraction.<locals>.<lambda>)r+   r   r   r   r   r4   r   Zis_only_below_fermiZis_only_above_fermir0   r"   )r<   rT   rq   rr   rH   rI   r5   r6   r7   r8   Úrestrr?   r€   r@   Útest_contractionÝ  s      "rŠ   c                  C   s,  t d\} }}t| |t|| }t|t| |ks8tt| dt|| }t|t| dt|| kslttd|t|| }t|td|kstt|dt|| }t|td|ksÀtt| dt| | t|d }t|dksîttd| td| td| td| }t|dks(td S )Nzi,j,kr   rN   rO   )r+   r   r   r4   )r<   rT   rq   r7   r?   r?   r@   Ú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snt|d||f| |f|d||f|| fkst|d||f| |f|d||f|| f ksÈt|d||f| |fdksät|d||f| | fdkst|d|||f| |f|d|||f| |f ks6t|d|||f| ||f|d|||f| ||fkslt|d||f| |f}| |¡st| |¡s t| | ¡s°t| |¡sÀt| ||¡|d||f| |fksætd	|  | |¡d	|d||f||f kst|jtdks(tt|d
ks:tt	|dksLt|d||f| |f ||¡|d||f| |fkst|d|| f||f ||¡|d|| f||fksžtd S )Nr   Tr   rB   r   rC   Útr   rO   z{t^{ab}_{ij}}zt((_a, _b),(_i, _j)))
r+   r)   r   r4   Zhasr]   Úsymbolr*   r1   ry   )r<   rT   rq   rr   rF   rG   rH   rI   r5   r6   r7   r8   ÚATZtabijr?   r?   r@   Útest_Tensors  s.    .,.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sÖtttt| t| t| t| | ddd}|td	||f| |fks&td S )Nr   Tr   rB   r   rC   rD   r9   Úvrd   )Zkeep_only_fully_contractedZsimplify_kronecker_deltas)r+   r)   r   r   r   r   r   r4   )r<   rT   rq   rr   rF   rG   rH   rI   r5   r6   r7   r8   ZFockÚVZFaiZVabijr?   r?   r@   Útest_fully_contracted#  s*    ÿ"ÿÿþ(þr®   c                  C   sX   t d\} }tt| |d t| |d ks0ttt| |d t| |d ksTtd S )NrX   rO   rN   )r+   r    Úattr4   ©r<   rT   r?   r?   r@   Ú'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sXtd S ©Núi jrD   r   )r+   r)   r    r¯   r   r   r   r4   r°   r?   r?   r@   Ú#test_substitute_dummies_NO_operator=  s    ÿÿrŽ   c                  C   sT   t dtd\} }tt| |t|  t| t|| t| t|   dksPtd S r²   )r+   r)   r    r¯   r   r   r4   r°   r?   r?   r@   Ú#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sdtd S )Nr³   Tr   úa br   úp qrD   r9   )Znew_indicesr   )r+   r)   r$   r    r4   )r<   rT   rF   rG   r5   r6   r9   r?   r?   r@   Ú#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s<tq<d S )Nr   Tr   r9   r   ©Ú
variationsrd   )r+   r)   r$   Úsympy.utilities.iterablesrº   r    r4   )r<   rT   rq   rr   r9   rº   Úpermutr?   r?   r@   Ú*test_substitute_dummies_substitution_orderQ  s
    rœ   c                  C   sH  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&tt|	d t|
kstqd S )Nr<   Tr   rF   r   úk lr   úc dr   r¬   rš   rN   r   ©r+   r)   r$   r   r4   r    )ÚiiÚaarq   rr   rH   rI   r¬   rš   ÚdumsÚexprsrŒ   r?   r?   r@   Ú*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sVtt|d t|ks8tq8||||||	||  |	|| |	|| |	|| ||||||	||  |	|| |	|| |	|| ||||||	||  |	|| |	|| |	|| ||||||	||  |	|| |	|| |	|| g}|dd  D ]:}|
|d |
|ksrtt|d t|ksTtqT||||||	||  |	|| |	|| |	|| ||||||	|| |	||  |	|| |	|| ||||||	||  |	|| |	|| |	|| ||||||	|| |	||  |	|| |	|| g}|dd  D ]:}|
|d |
|kstt|d t|ksptqpd S ©Nr³   Tr   r¶   r   rŸ   r   r¿   r   r¬   rš   rN   r   rÀ   ©rÁ   ÚjjrÂ   Úbbrq   rr   rH   rI   r¬   rš   rÃ   rÄ   rŒ   r?   r?   r@   Ú,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sHttt| t| t|  d¡tt|t| ksttt| t| t|  d¡tt| t| ksŒtd S )Nzp,q,rrN   r   rO   )r+   r   r   Z	get_subNOr4   )r5   r6   r7   r?   r?   r@   Ú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 ]4}|
|d	 |
|ksÌtt|d	 t|ks°tq°|| ||||	||  |	|| ||| |||	||  |	|| g}|dd  D ]:}|
|d	 |
|ksTtt|d	 t|ks6tq6|| ||||	||  |	|| || ||||	||  |	|| g}|dd  D ]:}|
|d	 |
|ksàtt|d	 t|ksÂtqÂ|| ||||	||  |	|| ||| |||	|| |	||  || ||||	||  |	|| ||| |||	|| |	||  g}|dd  D ]:}|
|d	 |
|ks¬tt|d	 t|kstqd S ©
Nr   Tr   rB   r   r¬   rš   rN   r   rÀ   ©r<   rT   rq   rr   rF   rG   rH   rI   r¬   rš   rÃ   rÄ   rŒ   r?   r?   r@   Ú$test_equivalent_internal_lines_VT1T1®  s@       ý  þ  þ    ürÎ   c                  C   s0  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 ]J}t||||g|}| |¡}||||kst	t
|t
|ksÜt	qÜ||||||||||  ||| || }|||||	gd}| t||||gt|¡}|D ]N}t||||g|}| |¡}||||ksºt	t
|t
|kst	q||||||||| | ||| || }|||||	gd}| t||||gt|¡}|D ]N}t||||g|}| |¡}||||ksft	t
|t
|ks0t	q0||||||||||  || ||| }|||||	gd}| t||||gt|¡}|D ]N}t||||g|}| |¡}||||kst	t
|t
|ksÜt	qÜd 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š   rd   ©r+   r)   r»   rº   r$   r   r]   ÚzipÚnextr4   r    ©r<   rT   rq   rr   rV   rU   rF   rG   rH   rI   rk   r9   Úp1Úp2Úp3Úp4Úh1Úh2Úh3Úh4rº   r¬   rš   rÃ   ÚtemplateÚ
permutatorÚbaserŒ   Úsubslistr>   r?   r?   r@   Ú(test_equivalent_internal_lines_VT2conjT2Ú  sP    *
*
*
*
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 ]J}t||||g|}| |¡}||||kst	t
|t
|ksÜt	qÜ||||||||||  |||| | }|||||	gd}| t||||gt|¡}|D ]N}t||||g|}| |¡}||||ksºt	t
|t
|kst	qd S rÏ   rÔ   r×   r?   r?   r@   Ú8test_equivalent_internal_lines_VT2conjT2_ambiguous_order  s0    *
*
rå   c               	   C   sZ  t ddtd\} }}}t ddtd\}}}}td}td}	t}
|| ||||	||| | ||| |||	||| | || ||||	||| | ||| |||	||| | g}|dd  D ]4}|
|d	 |
|ksÔtt|d	 t|ksžtqž|| ||||	||| | || ||||	||| | || ||||	||||  || ||||	||||  g}|dd  D ]:}|
|d	 |
|kstt|d	 t|ksftqf|| ||||	||| | ||| |||	||||  || ||||	||| | ||| |||	||||  g}|dd  D ]:}|
|d	 |
|ks8tt|d	 t|kstqd S rÌ   rÀ   rÍ   r?   r?   r@   Ú"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&tt|d t|kstq||||||	||| | |	|||| ||||||	||| | |	|||| ||||||	||| | |	|||| ||||||	||| | |	|||| g}|dd  D ]:}|
|d |
|kstt|d t|ksôtqô||||||	||| | |	|||| ||||||	||| | |	|||| ||||||	||| | |	|||| ||||||	||| | |	|||| g}|dd  D ]:}|
|d |
|ksþtt|d t|ksàtqàd S rÆ   rÀ   rÇ   r?   r?   r@   Útest_internal_external_VT2T2^  s>    ((((ü((((ü((((ürç   c               	   C   s8  t d\} }t d\}}t dtd\}}t dtd\}}td}td}	t}
||||||	||| | |	|||| ||||||	||| | |	|||| ||||||	||| | |	|||| ||||||	||| | |	|||| g}|dd  D ]6}|
|d	 |
|kstt|d	 t|ksütqüd S )
Nr³   r¶   rŸ   rD   r¿   r¬   rš   rN   r   rÀ   rÇ   r?   r?   r@   Útest_internal_external_pqrs  s    ((((ürè   c                  C   sV  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st||	|||
|| ||gksªt||	|||
|| ||gksÎt||	|||
|| ||gksòt||	|||
|| ||| |||gks$t||	|||
|| ||| |||gksVt||	|||
|| ||| |||gkst||	|||
|| ||| |||gksºt||	|||
|| ||| |||gksìt||	|||
|| ||| |||gkst||	|||
|| ||| |||gksPt||	|||
|| ||| |||gkst||	|| ||	||| |	||| |||gksºt||	|| ||	||| |	||| |||gksòt||	|| ||	||| |	||| |||gks*t||	|| ||	||| |	||| |||gksbt||	|| ||	||| |	||| |||gkst||	|| ||	||| |	||| |||gksÒt||	|| ||	||| |	||| |||gks
t||	|| ||	||| |	||| |||gksBt||	||||
||| |||gksnt||	||||
||| |||gkst||	||||
||| |||gksÆt||	||||
||| |||gksòt||	||||
||| |||gkst||	||||
||| |||gksJt||
||||	||| |||gksvt||
||||	||| |||gks¢t||
||||	||| |||gksÎt||
||||	||| |||gksút||
||||	||| |||gks&t||
||||	||| |||gksRtd S )Nr¶   Tr   zk l mr   r¿   r   r·   rD   ÚAr   r   )r+   r)   r$   r   r4   )rÂ   rÉ   rq   rr   rV   rH   rI   r5   r6   ré   r   r   rÃ   r?   r?   r@   Útest_dummy_order_well_defined  sP    $$$$2222222288888888,,,,,,,,,,,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,t	q,|||||| ||| ||| ||| }!| |||	|
|gd}"|! t|||||gt|"¡}#|"D ]:}$t|||||g|$}%|! |%¡}&t|&t|#ksÐt	qÐ|||||||||| ||| }!| |||	|
|gd}"|! t|||||gt|"¡}#|"D ]:}$t|||||g|$}%|! |%¡}&t|&t|#ksht	qhd S )Nr¶   Tr   z	i j k l mr   z	a b c d er   r·   rD   rÒ   zp5 p6 p7 p8rÓ   zh5 h6 h7 h8ré   r   r   r¹   re   )
r+   r)   r$   r»   rº   r]   rÕ   rÖ   r    r4   )'rÂ   rÉ   r<   rT   rq   rr   rV   rF   rG   rH   rI   rk   r5   r6   rØ   rÙ   rÚ   rÛ   Zp5Zp6Zp7Zp8rÜ   rÝ   rÞ   rß   Úh5Úh6Zh7Zh8ré   r   rº   rà   rá   râ   rŒ   rã   r>   r?   r?   r@   Útest_dummy_order_ambiguousÒ  s@    2
2
&
rí   c                  G   s   t d| d d | dd  S )Nr¬   rO   )r   ©rg   r?   r?   r@   Úatvý  s    rï   c                  G   sP   t | dkr(td| d d | dd  S t | dkrLtd| d f| d fS d S )Nrd   rš   rO   r   rN   )rf   r   rî   r?   r?   r@   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ôtqôd S )Nr<   Tr   rF   r   rŸ   r   r¿   r   rN   r   ©r+   r)   rï   r¯   r    r4   )rÁ   rÂ   rq   rr   rH   rI   rÄ   rŒ   r?   r?   r@   Ú-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ðtqðt||||t||  t|| t|| t|| t||||t|| t||  t|| t|| g}|d
d  D ] }	t|d t|	kstqd S ©Nr³   Tr   r¶   r   rŸ   r   r¿   r   rN   r   rð   ©
rÁ   rÈ   rÂ   rÉ   rq   rr   rH   rI   rÄ   rŒ   r?   r?   r@   Ú/test_dummy_order_inner_outer_lines_VT1T1T1T1_AT  s    444ü44ýrô   c            
      C   sT  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tqt| |||t||  t|| t|| ||t||  t|| g}|dd  D ] }	t|d t|	ks
tq
t| |||t||  t|| t| |||t||  t|| g}|dd  D ] }	t|d t|	ks|tq|t| |||t||  t|| t|| ||t|| t||  t| |||t||  t|| t|| ||t|| t||  g}|dd  D ] }	t|d t|	ks.tq.d S ©Nr   Tr   rB   r   rN   r   rð   ©
r<   rT   rq   rr   rF   rG   rH   rI   rÄ   rŒ   r?   r?   r@   Ú'test_equivalent_internal_lines_VT1T1_AT7  s2       ý  þ  þ    ü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 ]4}t||||g|}| |¡}t	|t	|ksÈt
qÈt||||t||||  t|| || }|||||	gd
}| t||||gt|¡}|D ]8}t||||g|}| |¡}t	|t	|ksZt
qZt||||t||| | t|| || }|||||	gd
}| t||||gt|¡}|D ]8}t||||g|}| |¡}t	|t	|ksðt
qðt||||t||||  t| ||| }|||||	gd
}| t||||gt|¡}|D ]8}t||||g|}| |¡}t	|t	|kst
qd S ©NrÐ   Tr   rÑ   r   rÒ   rÓ   r   r¹   rd   ©r+   r)   r»   rº   rï   r¯   r]   rÕ   rÖ   r    r4   ©r<   rT   rq   rr   rV   rU   rF   rG   rH   rI   rk   r9   rØ   rÙ   rÚ   rÛ   rÜ   rÝ   rÞ   rß   rº   rà   rá   râ   rŒ   rã   r>   r?   r?   r@   Ú+test_equivalent_internal_lines_VT2conjT2_AT[  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||||t||| | t||| | }|||||	gd
}| t||||gt|¡}|D ]4}t||||g|}| |¡}t	|t	|ksÈt
qÈt||||t||||  t||| | }|||||	gd
}| t||||gt|¡}|D ]8}t||||g|}| |¡}t	|t	|ksZt
qZd S rø   rù   rú   r?   r?   r@   Ú;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stqt| |||t||| | t| |||t||| | t| |||t||||  g}|dd  D ] }	t|d t|	kstqt| |||t||| | t|| ||t||||  t| |||t||| | t|| ||t||||  g}|dd  D ] }	t|d t|	ks tq d S rõ   rð   rö   r?   r?   r@   Ú%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ôtqôt||||t||| | t|||| t||||t||| | t|||| t||||t||| | t|||| t||||t||| | t|||| g}|d
d  D ] }	t|d t|	ksÂtqÂt||||t||| | t|||| t||||t||| | t|||| t||||t||| | t|||| t||||t||| | t|||| g}|d
d  D ] }	t|d t|	kstqd S rò   rð   ró   r?   r?   r@   Útest_internal_external_VT2T2_ATÀ  s2    ((((ü((((ü((((ü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ètqèd S )Nr³   r¶   rŸ   rD   r¿   rN   r   rð   ró   r?   r?   r@   Útest_internal_external_pqrs_ATà  s    ((((ürÿ   c                  C   s.   t d} ttt| d t| dks*td S )NÚ0rO   z(- \left[b_{0},{b^\dagger_{0}}^{2}\right])r*   r1   r   r   r   r4   )rF   r?   r?   r@   Ú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sZtd S )Nr¬   )rH   rI   Tr   )rq   rr   r   )r+   r)   r   r4   )r¬   rH   rI   rq   rr   r?   r?   r@   Ú+test_canonical_ordering_AntiSymmetricTensorö  s    ÿ
ÿ
ÿr  N)rZ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"   Zsympy.concrete.summationsr#   Zsympy.core.functionr$   r%   Zsympy.core.numbersr&   r'   Zsympy.core.singletonr(   Zsympy.core.symbolr)   r*   r+   Z(sympy.functions.elementary.miscellaneousr,   Zsympy.printing.reprr-   Zsympy.simplify.simplifyr.   Zsympy.testing.pytestr/   r0   Zsympy.printing.latexr1   rA   rL   rW   r[   ra   rb   rj   rl   rn   ro   ru   rv   rw   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?   r@   Ú<module>   s   
	
-	3*&5,2!1'8+$*  