
    \h                        S SK Jr  S SKJr  S SKJrJrJrJrJ	r	J
r
JrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJ r J!r!J"r"J#r#J$r$J%r%  S SK&J'r'  S SK(J)r)J*r*  S SK+J,r,J-r-  S SK.J/r/  S SK0J1r1J2r2J3r3  S S	K4J5r5  S S
K6J7r7  S SK8J9r9  S SK:J;r;J<r<  S SK=J>r>  S r?S r@S rAS rBS rCS rDS rES rFS rGS rHS rIS rJS rKS rL\;S 5       rMS rNS rOS rPS  rQS! rRS" rSS# rTS$ rUS% rVS& rWS' rXS( rYS) rZS* r[S+ r\S, r]S- r^S. r_S/ r`S0 raS1 rbS2 rcS3 rdS4 reS5 rfS6 rgS7 rhS8 riS9 rjS: rkS; rlS< rmS= rnS> roS? rpS@ rqSA rrSB rsSC rtSD rugE)F    )	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                     [        S5      u  pp#[        [        S5      u  pEpg[        nU" X5      R	                  U" U 5      U" U5      -  5      U" U5      * U" U 5      -  :X  d   eU" X5      R	                  U" X5      5      U" X5      * :X  d   eU" X5      R	                  U" U 5      5      U" U 5      :X  d   eU" U 5      U" U5      -  U" U5      -  U" U5      -  U" U5      U" U 5      -  U" U5      -  U" U5      -  -
  U" U 5      U" U5      -  U" U5      -  U" U5      -  -
  U" U5      U" U 5      -  U" U5      -  U" U5      -  -   n	U" X5      U" X#5      /n
[        X5      U" X5      U" X#5      -  U" U 5      -  U" U5      -  U" U5      -  U" U5      -  :X  d   e[        U" X5      5      S:X  d   e[        S5      u  p[        U" X5      S:H  5      (       d   eg )Np,q,r,sfghizP(pq)zp1,p2zP(p_{1}p_{2}))r.   mapr'   r   get_permutedr    r4   )pqrsfghiPexprpermsp1p2s                \/var/www/auris/envauris/lib/python3.13/site-packages/sympy/physics/tests/test_secondquant.pytest_PermutationOperatorrH      s   #JA!Xv&JA!AQ7!QqT	*qteAaDj888Q7!(QqWH444Q7!%1---aD1IadN1Q4
A$qt)AaD.1

A$qt)AaD.1
 A$qt)AaD.1
D qWagE'4	!!!QqT!!A$&qt+, - ,1>W$$$WFB2_,----    c            	      N   [        S5      u  pp#[        S[        S9u  pEpg[        [        S5      u  p[        n
U" XXE5      U" XXE5      -
  n[        X" X5      /5      U
" X5      U" XXE5      -  :X  d   eU
" X5      [        U" XXE5      5      -  nU" XXE5      U" XXT5      -
  n[        X" X5      /5      nU[        U5      :X  d   eU" XXT5      U" XXE5      -
  n[        X" X5      /5      nU[        U5      :X  d   eU" XXT5      U	" XXE5      -
  n[        X" X5      /5      nX:X  d   eg )Na b c dp q r sclsfg)r.   r,   r8   r'   r   r    r#   )abcdr:   r;   r<   r=   r>   r?   rB   rC   expectedresults                 rG   $test_index_permutations_with_dummiesrV   /   sG   #JA!.JA!xDAA Q1=1Q1=(D&qwiaGAaAM12 2 2 w)!A!-88HQ1=1Q1=(D(!y9F)&1111Q1=1Q1=(D(!y9F)&1111 Q1=1Q1=(D(!y9F>>rI   c                  @   [        S5      u  pp#[        S5      S:X  d   e[        S5      S:X  d   e[        S[        -  5      S[        -  :X  d   e[        [        R                  [        -  S-  5      [        [        SS5      -  S-  :X  d   e[        [        U/5      5      [        U/5      :X  d   e[        [        S5      5      [        S5      :X  d   e[        [        S5      5      [        S5      :X  d   e[        [        U5      5      [        U5      :X  d   e[        [        U5      5      [        U5      :X  d   e[        [        S5      [        S5      -   5      [        S5      [        S5      -   :X  d   e[        X#-  5      [        U5      [        U5      -  :X  d   e[        [        U5      [        U5      -  5      [        U5      [        U5      -  :X  d   e[        [        U5      S	-  5      [        [        U5      5      S	-  :X  d   e[        S
5      [        [        S
5      5      :X  d   e[        [        S
5      5      [        S
5      :X  d   e[        [        S[        -  5      5      [        S[        -  5      :X  d   e[        U 5      [        U 5      :X  d   eg )Ni,j,n,m   g      ?   g      @r   
   rP   )r.   r   r)   r+   Halfr*   r
   r   r	   r   r-   r   r   )rA   jnms       rG   test_daggerrb   K   s   #JA!!9>>#;#!A#;"Q$!&&(3,1Xb!_#4S#8888$s)aS	)))!A$<2a5   "Q%=AaD   !A$<2a5   "Q%=AaD   !A$1+"Q%"Q%-///!#;&)F1I----!A$qt)1be+++!A$(vad|R////#;&----&+&+---#a!e*R!V,,,!9	!$$$rI   c                      [        S5      u  p[        U 5      nUR                  U :X  d   eUR                  (       d   e[        S5      nUR                  S:X  d   eUR                  (       a   eg )Ni,jrY   )r.   r   stateis_symbolic)rA   r_   os      rG   test_operatorrh   `   s\    5>DAA77a<<===A77a<<}}}rI   c                     [        S5      u  pp#n[        U 5      n[        U5      S:X  d   e[        [        U5      5      S:X  d   e[        U[        5      (       d   eUR                  X5      nUR                  [        5      U1:X  d   e[        S5      nUR                  [        U/5      5      [        US-   5      [        US-   /5      -  :X  d   e[        U5      nUR                  [        U/5      5      U[        U/5      -  :X  d   eg )N
i,j,n,m,p1z{b^\dagger_{i}}z{b^\dagger_{p_{1}}}r   rY   )r.   r   r4   
isinstancer   subsatomsr-   apply_operatorr
   r/   rA   r_   r`   ra   rE   rg   s         rG   test_createrp   j   s    \*NA!
1A8))))B=2222a%%%%	qA776?qc!!!
1AD!I&$q1u+dAE7m*CCCC
1AD!I&!D!I+555rI   c                     [        S5      u  pp#n[        U 5      n[        U5      S:X  d   e[        [        U5      5      S:X  d   e[        U[        5      (       d   eUR                  X5      nUR                  [        5      U1:X  d   e[        S5      nUR                  [        U/5      5      [        U5      [        US-
  /5      -  :X  d   e[        U5      nUR                  [        U/5      5      U[        U/5      -  :X  d   eg )Nrj   zb_{i}z	b_{p_{1}}r   rY   )r.   r	   r4   rk   r   rl   rm   r-   rn   r
   r/   ro   s         rG   test_annihilaterr   x   s    \*NA!	!A8w2<;&&&a))))	qA776?qc!!!	!AD!I&$q'$Aw-*????	!AD!I&!D!I+555rI   c                     [        S5      u  pp#[        / SQ5      n[        U5      S:X  d   eUR                  S   [	        [        S5      5      :X  d   eUR                  S5      [        / SQ5      :X  d   eUR                  S5      [        / SQ5      :X  d   e[        S5       H)  n UR                  U 5      R                  U 5      U:X  a  M)   e   UR                  S5      S:X  d   e[        S5       H  n X@   U :X  a  M   e   [        X#/5      nUR                  S5      [        US-
  U/5      :X  d   eUR                  S5      [        US-   U/5      :X  d   eg )	NrX   )r   rY   rZ            r   )rY   rY   rZ   rt   ru   ru   )r   rY   rZ   rt   rt   rY   )r.   r   lenargstuplerangeupdown)rA   r_   r`   ra   r=   s        rG   test_basic_stater}      s,   #JA!?#Aq6Q;;66!9eAh'''447j111166!9
?33331XttAw||A!### 66!9>>1Xtqyy A6A66!9
AE1:....447j!a%,,,,rI   c                  (   [        S5      n [        S5      [        U /5      -  n[        U5      [	        U 5      [        U S-
  /5      -  :X  d   e[        S5      [        U /5      -  n[        U5      [	        U S-   5      [        U S-   /5      -  :X  d   eg )Nr`   r   rY   )r.   r	   r
   r   r/   r   )r`   es     rG   test_basic_applyr      s    A	!T1#YA1aq1ug!6666
1dA3iA1a!eT1q5']!::::rI   c                  H   [        S5      u  p[        S5      [        S5      -  [        S5      -  [        S5      -  n[        U[	        X/5      -  5      n[        U 5      [        US-   5      -  SU -   -  [	        SU -   SU-   /5      -  n[        U5      [        U5      :X  d   eg )Nn,mr   rY   r\   )r.   r   r	   r   r
   r/   r(   )r`   ra   rg   r   answers        rG   test_complex_applyr      s    5>DA
1ad
2a51A$v,'A!WT!a%[ "q&)$QA*??F!9v&&&rI   c                      [        S5      n [        S5      [        S5      -  n[        U[	        U /5      -  5      nX [	        U /5      -  :X  d   eg )Nr`   r   )r.   r   r	   r   r
   )r`   rg   r   s      rG   test_number_operatorr      sF    A
1ad
A$s)$A$s)rI   c                  (   [        S5      u  pp#[        S/5      n[        S/5      n[        U[	        U5      5      S:X  d   e[        XE5      S:X  d   e[        X/5      n[        X#/5      n[        XE5      nU[        X5      [        X5      -  :X  d   eg )Ni,j,k,lr   rY   )r.   r   r
   r   r   r   )rA   r_   kls1s2r<   s          rG   test_inner_productr      s    #JA!	qcB	qcBF2J'1,,,1$$$	qfB	qfBRAq$^A%99999rI   c                      [        S5      u  p[        U /5      n[        U/5      n[        S5      n[	        X$-  U-  5      nU[        U5      [        XS-
  5      -  :X  d   eg )Nr   r   rY   )r.   r   r
   r	   r   r/   r   )r`   ra   r   r   rg   r   s         rG   test_symbolic_matrix_elementsr      s\    5>DA	qcB	qcB	!AR AQqa%00000rI   c                  &   [        S5      n [        S5      n[        X5      n[        S5       H  nX#US-   4   [	        US-   5      :X  a  M   e   [        S5      n[        X5      n[        S5       H  nX#S-   U4   [	        US-   5      :X  a  M   e   g )Nrv   r   ru   rY   )r   r	   r   rz   r/   r   )rQ   rg   ra   rA   s       rG   test_matrix_elementsr      s    A	!A1A1XAE{d1q5k))) 
1A1A1XQ{d1q5k))) rI   c                  J   [        SS5      n U R                  S5      nU[        S5      :X  d   eU R                  U5      S:X  d   eU R                  S5      U S   :X  d   e[	        U 5      S:X  d   e[        U 5      S:X  d   e[        U 5      S:X  d   e[        U 5      S:X  d   eg )NrZ   rY   )rY   rY   rt   z9[FockState((2, 0)), FockState((1, 1)), FockState((0, 2))])r   re   r$   indexrw   strreprr0   )rQ   re   s     rG   test_fixed_bosonic_basisr      s    !QAGGAJE%f----775>Q771:1q6Q;;q6PPPP7QQQQ8RRRRrI   c                  6   [        S5      u  p[        U 5      [        U 5      -  U [        R                  -   -  n[        X SS45      nUR                  SS9n[        SS5      n[        XE5      n/ SQn[        [        U5      5       H  nXg   XU4   :X  a  M   e   g )	Nr   r   rv   F)deeprZ      )rY   rZ   rt   rt   ru   rv   ru   rv   r      rv   r   r      	   r   r   r   r   r]      )r.   r   r	   r+   r^   r&   doitr   r   rz   rw   )r`   ra   h_nHrg   rQ   diagrA   s           rG   test_shor      s    5>DA
Q%!*a!&&j
!CCQA	EA!QA1A MD3t9w!qD'!!! rI   c            	         [        SSS9u  p[        [        S5      [        S5      5      nUS:X  d   e[        [        S5      [        S5      5      nUS:X  d   e[        [        U 5      [        S5      5      nU[	        U S5      :X  d   e[        [        S5      [        S5      5      nUS:X  d   e[        [        S5      [        S5      5      n[        [        U[        U /5      -  5      5      nU[        U /5      :X  d   e[        [        S5      [        S5      5      n[        [        U[        X/5      -  5      5      nUS:X  d   e[        [        U5      [        U5      5      nUSS[        [        U5      [        U5      -  5      -  -
  :X  d   e[        [        U5      [        U5      5      nUR                  5       SS[        [        U5      [        U5      -  5      -  -   :X  d   e[        n[        SS	S
9u  pVnU" U" XV5      U5      S:w  d   eU" U" XW5      U5      S:w  d   eU" Xd" XW5      5      S:w  d   e[        SSS9u  pp[        SSS9u  pp.[        S5      u  nnnn[        nU" [        U5      [        U5      5      S[        [        U5      [        U5      -  5      -  :X  d   eU" [        U	5      [        [        U5      [        U5      -  5      5      R                  SS9U" X5      * [        U5      -  :X  d   eU" [        U5      [        U5      -  [        U5      [        U	5      -  5      R                  SS9S:X  d   e[        [        U5      [        U5      5      n[        R                  " UU5      S:X  d   e[        [        U5      [        U5      -  [        U5      [        U	5      -  5      n[        U5      S:X  d   e[        U5      S:X  d   e[!        U5      S:X  d   eg )Nr   Tabove_fermir   rY   r\   rZ   zX,Y,ZF)commutativer   below_fermia,b,c,dr6   r[   )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   r1   r   r
   r   r   r   r(   r   evalr4   r   r   )r`   ra   rR   r   CXYZrA   r_   r   r   rP   rQ   rS   r:   r;   r<   r=   Dc1s                        rG   test_commutationr      sZ   5d+DA1Q4AA6M62a5!A$A7N71Q4AAq!$$$$1Q41A6M61Q4AA49-.AaS	>>1Q41A4<01A6M61Q4AAQr"Q%!*~%%%%%2a5!A$A88:a2a51:.....Ag51GA!QqWa=AQqWa=AQ!=A5JA!5JA!#JAq!QARUAaD>R1Q41:....RUBr!uQqTzN#((t(41AFFFRU1Q4ZAqt$)))5:::	AaD"Q%	 B??2r"a'''2a51:beAaDj)A8RRRR7ooooq6ddddrI   c                     [        S5      u  pp#[        U 5      n[        U[        5      (       d   eUR	                  X5      nUR                  [        5      U1:X  d   e[        S5      nUR                  [        U/5      5      [        SU/5      :X  d   eUR                  [        U/5      5      [        US/5      * :X  d   e[        U5      nUR                  [        / 5      5      [        U/5      :X  d   e[        / SS9nU[        / SS9:X  d   e[        SSS9u  ppg[        SSS	9u  pp[        S
5      u  pp[        S5      n[        U 5      R                  [        XU/S5      5      [        X/S5      :X  d   e[        U5      R                  [        X	U/S5      5      [        XX/S5      :X  d   e[        [        U5      5      R                  U5      U[        U5      -  :X  d   e[        [        U5      5      S:X  d   e[        [        U5      5      S:X  d   e[        [        U5      5      S:X  d   e[        [        U5      5      S:X  d   e[        [        X/S5      5      S:X  d   e[        [        XX/S5      5      S:X  d   eg )NrX   rY   ru   )fermi_levelr   Tr   r   r   r6   rE   zCreateFermion(p)zCreateFermion(Symbol('p'))z{a^\dagger_{p}}z{a^\dagger_{p_{1}}}z(\left|\left( a, \  i\right)\right\ranglerZ   z4\left|\left( a, \  b, \  i, \  j\right)\right\rangle)r.   r   rk   r   rl   rm   r-   rn   r   r   r	   r   r   r0   r4   )rA   r_   r`   ra   rg   vacuumr   r   rP   rQ   rR   rS   r:   r;   r<   r=   rE   s                    rG   test_create_fr     sR   #JA!
1Aa''''	qA776?qc!!!
1AD!I&$1v,666D!I&4A<-777
1ADH%qc222"!$FT"!,,,,5JA!5JA!#JA!	Ba5aAY 23tQFAFFFa5aAY 23tQ1L!7LLLL!A$<&&q)Q{1~-====1;,,,,A<7777A<----B=2222qeQ $OOOOq1i#$(____rI   c                     [        S5      u  pp#[        U 5      n[        U[        5      (       d   eUR	                  X5      nUR                  [        5      U1:X  d   e[        S5      nUR                  [        SU/5      5      [        U/5      :X  d   eUR                  [        US/5      5      [        U/5      * :X  d   e[        U5      nUR                  [        U/5      5      [        / 5      :X  d   e[        SSS9u  ppV[        SSS9u  pxp[        S5      u  pp[        S	5      n[        U 5      R                  [        XU/S
5      5      S:X  d   e[        U5      R                  [        XU/S
5      5      S:X  d   e[        U5      R                  [        XU/S5      5      S:X  d   e[        U5      R                  [        XU/S
5      5      [        X`X/S
5      :X  d   e[        [        U5      5      S:X  d   e[        [        U5      5      S:X  d   e[        [        U5      5      S:X  d   e[        [        U5      5      S:X  d   e[        [        U5      5      S:X  d   eg )NrX   rY   r   Tr   r   r   r6   rE   ru   r   rt   zf(p)zAnnihilateFermion(p)zAnnihilateFermion(Symbol('p'))za_{p}z	a_{p_{1}})r.   r   rk   r   rl   rm   r-   rn   r   r   r   r0   r4   )rA   r_   r`   ra   rg   r   r   rP   rQ   rR   rS   r:   r;   r<   r=   rE   s                   rG   test_annihilate_fr   8  s)   #JA!	!Aa*++++	qA776?qc!!!	!AD!QL)T1#Y666D!QL)dA3iZ777	!AD!I&$r(2225JA!5JA!#JA!	BQ4tQ1Iq12a777Q4tQ1Iq12a777Q4tQ1Iq12a777Q4tQ1Iq12dA!<6KKKKqt9!:////1;::::1;'!!!2<;&&&rI   c                     [        S5      u  pp#[        U 5      n[        U[        5      (       d   eUR	                  X5      nUR                  [        5      U1:X  d   e[        S5      nUR                  [        U/5      5      [        US-   5      [        US-   /5      -  :X  d   e[        U5      nUR                  [        U/5      5      U[        U/5      -  :X  d   eg )NrX   r   rY   )
r.   r   rk   r   rl   rm   r-   rn   r
   r/   rA   r_   r`   ra   rg   s        rG   test_create_br   T  s    #JA!
1Aa%%%%	qA776?qc!!!
1AD!I&$q1u+dAE7m*CCCC
1AD!I&!D!I+555rI   c                      [        S5      u  pp#[        U 5      n[        U[        5      (       d   eUR	                  X5      nUR                  [        5      U1:X  d   e[        S5      ng )NrX   r   )r.   r	   rk   r   rl   rm   r-   r   s        rG   test_annihilate_br   `  sZ    #JA!	!Aa))))	qA776?qc!!!	!ArI   c            	         [        SSS9u  pp#[        U 5      [        U5      -  n[        U5      [	        [        U 5      [        U5      -  5      [        X5      -   :X  d   e[        U 5      [        U5      -  n[        U5      [	        [        U 5      [        U5      -  5      :X  d   e[        U 5      [        U5      -  [        U5      -  [        U5      -  n[        U5      n[	        [        X5      [        X#5      -  [        X5      [        U5      -  [        U5      -  -   [        X#5      [        U 5      -  [        U5      -  -   [        X5      [        U5      -  [        U5      -  -
  [        U 5      [        U5      -  [        U5      -  [        U5      -  -
  5      nXV:X  d   eX-  U-  R                  5       [        X-  U-  5      :X  d   eXP-  U-  S-  R                  5       [        X@-  U-  S-  5      :X  d   e[        SS[        S9u  pxp[        SS[        S9u  pp[        S	[        S
9u  pp#[        [        U5      [	        [        U5      [        U5      -  5      -  [        U5      -  5      [	        [        U5      [        U5      -  [        U5      -  [        U5      -  5      [        X5      [	        [        U5      [        U5      -  5      -  -   :X  d   e[        [        U5      [	        [        U5      [        U5      -  [        U	5      -  5      -  [        U5      -  5      [	        [        U5      [        U5      -  [        U5      -  [        U	5      -  [        U5      -  5      [        X5      [	        [        U5      [        U5      -  [        U	5      -  5      -  -
  :X  d   e[        [        U5      [	        [        U5      [        U	5      -  5      -  [        U
5      -  5      nU[        Xy5      * [	        [        U5      [        U
5      -  5      -  [        X5      [	        [        U5      [        U	5      -  5      -  -
  [        Xy5      [        X5      -  -
  [        Xz5      [	        [        U5      [        U	5      -  5      -  -   [	        [        U5      [        U5      -  [        U	5      -  [        U
5      -  5      -   :X  d   e[        [        U5      [	        [        U5      [        U5      -  5      -  [        U5      -  5      nU[        X5      * [	        [        U5      [        U5      -  5      -  [        X5      [	        [        U5      [        U5      -  5      -  -
  [        X5      [        X5      -  -
  [        X5      [	        [        U5      [        U5      -  5      -  -   [	        [        U5      [        U5      -  [        U5      -  [        U5      -  5      -   :X  d   eg )Nr6   Tr   rZ   i j k lr   rN   rK   r   rN   rL   rM   )
r.   r   r   r   r   r   r   r   r(   r,   )r:   r;   r<   r=   r   nstrfasitrA   r_   r   r   rP   rQ   rR   rS   rC   s                   rG   
test_wicksr   i  s   5JA! A$r!u*C:AaDAJ.*>>>>>
Q%!*C:BqE!A$J'''
A$r!u*QqT/"Q%
C:Dq^A11

03
3M!4D
D	E

03
3M!4D
D	E 
03
3M!4D
D	E A
03
3M!4D
D]STEU
U		VWE ==CH%C.000F1HQJ E#%'!)$4444 %@JA!%@JA!.JA!!A$r!A$qt)}$RU*+qtAaDy1~be#$1 AaD1I.// 0 / !A$r!A$qt)AaD.))"Q%/0qtAaDy1~ad"2a5()1 AaD1IadN!3344 5 4 Ar"Q%!*~%ad*+D1  BqE!A$J/1 BqE!A$J/01 !556 1 BqE!A$J/0 r!uRU{1Q4!$%	&& ' & 1b1ben$RU*+D1  AaDAJ/1 AaDAJ/01 !556 1 AaDAJ/0 qtAaDyAr!u$%	&& ' &rI   c            	      0
  ^^ [        SSS9u  pp#[        SSS9u  pEpg[        S[        S9u  mmp[        [        T5      [	        T5      -  [        U5      [	        U5      -  -   5      [        [        T5      [	        T5      -  5      [        [        U5      [	        U5      -  5      -   :X  d   e[        [        U 5      [        [	        U5      [        U5      -  5      -  5      [        [        U 5      [	        U5      -  [        U5      -  5      :X  d   e[        S5      S:X  d   e[        U 5      U :X  d   e[        [        U5      [        U5      -  [	        U5      [	        U5      -   -  5      [        [        U5      [        U5      -  [	        U5      -  5      [        [        U5      [        U5      -  [	        U5      -  5      -   :X  d   e[        [        U5      [	        U5      -  5      R                  5       [        U5      [	        U5      -  :X  d   e[        [	        U5      [        U 5      -  5      R                  5       [	        U5      [        U 5      -  :X  d   e[        [        T5      [	        T5      -  5      R                  [        T5      [        U5      [        U 5      -   5      [        [        U5      [	        T5      -  5      [        [        U 5      [	        T5      -  5      -   :X  d   e[        [        T5      [	        T5      -  5      R                  [	        T5      [	        U5      [	        U 5      -   5      [        [        T5      [	        U5      -  5      [        [        T5      [	        U 5      -  5      -   :X  d   e[        [        T5      [	        T5      -  5      R                  5       n
[        U
5      [        U
5      :X  d   e[        [        U5      [	        U5      -  5      [        [	        U5      [        U5      -  5      * :X  d   e[        [        U5      [	        U 5      -  [	        U5      -  [        U5      -  5      n[        UR                  5       5      nUS	S/:X  d   e[        UR                  5       5      nUS
S/:X  d   e[        [        U5      [        U 5      -  5      nUR                  S:X  d   eUR                  S:X  d   e[        U5      S:X  d   e[        U5      S:X  d   e[        U5      S:X  d   e[!        ["        UU4S j5        g )Nr   Tr   rK   r   rL   rM   rY   r   rt   rZ   r\   z#:CreateFermion(a)*CreateFermion(i):z%NO(CreateFermion(a)*CreateFermion(i))z.\left\{{a^\dagger_{a}} {a^\dagger_{i}}\right\}c                  D   > [        [        T 5      [        T5      -  5      $ N)r   r   r   )r:   r;   s   rG   <lambda>test_NO.<locals>.<lambda>  s    BqE!A$JrI   )r.   r,   r   r   r   _remove_bracketsrl   r   listiter_q_creatorsiter_q_annihilatorshas_q_creatorshas_q_annihilatorsr   r   r4   r3   NotImplementedError)rA   r_   r   r   rP   rQ   rR   rS   r<   r=   rC   nol1l2r:   r;   s                 @@rG   test_NOr     s   5JA!5JA!.JAq!r!uQqTzBqE!A$J&'	"Q%!*~2a51:&' ( 'r!uR!RU
^#$	"Q%!*RU
  a5A::a5A::r!uRU{AaD1Q4K()r!uRU{1Q4 r!uRU{1Q4 !! " ! beAaDj>**,1ad
:::ad2a5j>**,!RU
:::r!uQqTzN1r!ur!u}5r!uQqTzNR1ad
^+, - ,r!uQqTzN!adQqTk2r!uQqTzNR1ad
^+, - , beAaDj>**,D;"T("""beAaDj>r!A$r!u*~----	BqE!A$JqtOBqE!	"B	b  "	#B!Q<<	b$$&	'B!Q<<	BqE"Q%KB!!!  B&&&r7;;;;8>>>>9IIII
 78rI   c                  ^   [        SSS9u  p[        SSS9u  p#[        S5      u  pE[        [        U5      [        U5      /5      [        U5      [        U5      /S4:X  d   e[        [        U5      [        U5      /5      [        U5      [        U5      /S4:X  d   e[        [        U5      [        U 5      /5      [        U5      [        U 5      /S4:X  d   e[        [        U 5      [        U5      /5      [        U5      [        U 5      /S4:X  d   e[        [        U5      [        U 5      /5      [        U5      [        U 5      /S4:X  d   e[        [        U 5      [        U5      /5      [        U5      [        U 5      /S4:X  d   e[        [        U5      [        U 5      /5      [        U 5      [        U5      /S4:X  d   e[        [        U 5      [        U5      /5      [        U 5      [        U5      /S4:X  d   e[        [        U5      [        U 5      /5      [        U 5      [        U5      /S4:X  d   e[        [        U 5      [        U5      /5      [        U 5      [        U5      /S4:X  d   e[        [        U5      [        U5      /5      [        U5      [        U5      /S4:X  d   e[        [        U5      [        U5      /5      [        U5      [        U5      /S4:X  d   e[        [        U5      [        U5      /5      [        U5      [        U5      /S4:X  d   e[        [        U5      [        U5      /5      [        U5      [        U5      /S4:X  d   e[        [        U5      [        U5      /5      [        U5      [        U5      /S4:X  d   e[        [        U5      [        U5      /5      [        U5      [        U5      /S4:X  d   e[        [        U5      [        U5      /5      [        U5      [        U5      /S4:X  d   e[        [        U5      [        U5      /5      [        U5      [        U5      /S4:X  d   e[        [        U 5      [        U5      /5      [        U 5      [        U5      /S4:X  d   e[        [        U5      [        U 5      /5      [        U 5      [        U5      /S4:X  d   e[        [        U5      [        U 5      /5      [        U5      [        U 5      /S4:X  d   e[        [        U 5      [        U5      /5      [        U5      [        U 5      /S4:X  d   e[        [        U5      [        U 5      /5      [        U 5      [        U5      /S4:X  d   e[        [        U 5      [        U5      /5      [        U 5      [        U5      /S4:X  d   eg )	Nrd   Tr   za,br   zp,qr   rY   )r.   r!   r   r   )rA   r_   rP   rQ   r:   r;   s         rG   test_sortingr     s   5d+DA5d+DA5>DA (A!6BqE1Q4=!:LLLL'1r!u6BqE1Q4=!:LLLL (1r!u6AaD"Q%=!:LLLL'A!6AaD"Q%=!:LLLL'A17RUBqENA;NNNN'A17RUBqENA;NNNN'1qt51Q41,9JJJJ'1qt51Q41,9JJJJ'A!6AaD"Q%=!:LLLL'1r!u6AaD"Q%=!:LLLL (1r!u6BqE1Q4=!:LLLL'A!6BqE1Q4=!:LLLL'A17RUBqENA;NNNN'A17RUBqENA;NNNN'1qt51Q41,9JJJJ'1qt51Q41,9JJJJ'A!6BqE1Q4=!:LLLL'1r!u6BqE1Q4=!:LLLL (1r!u6AaD"Q%=!:LLLL'A!6AaD"Q%=!:LLLL'A17RUBqENA;NNNN'A17RUBqENA;NNNN'1qt51Q41,9JJJJ'1qt51Q41,9JJJJrI   c                    ^^ [        SSS9u  pp#[        SSS9u  mmpE[        S5      u  pgp[        [        U 5      [        U5      5      [	        X5      :X  d   e[        [        T5      [        T5      5      [	        TT5      :X  d   e[        [        T5      [        U 5      5      S:X  d   e[        [        T5      [        U 5      5      S:X  d   e[        [        U 5      [        T5      5      S:X  d   e[        [        U 5      [        T5      5      S:X  d   e[        [        U 5      [        U5      5      [	        X5      :X  d   e[        [        [        U5      [        U5      5      5      n
U
R                  (       d   e[        [        [        U5      [        U5      5      5      n
U
R                  (       d   e[        [        UU4S j5        g )	Nr   Tr   r   r   r6   r   c                  @   > [        [        T 5      [        T5      5      $ r   )r   r	   r   )rP   rQ   s   rG   r   "test_contraction.<locals>.<lambda>  s    [1r!u5MrI   )
r.   r   r   r   r   r   is_only_below_fermiis_only_above_fermir3   r%   )rA   r_   r   r   rR   rS   r:   r;   r<   r=   restrrP   rQ   s              @@rG   test_contractionr     sk   5JA!5JAq!#JA!r!uad#~a';;;;qtRU#~a';;;;qtRU#q(((r!uad#q(((qtRU#q(((r!uad#q(((r!uad#~a';;;;K1qt45E$$$$K!be45E$$$$
+-MNrI   c                     [        S5      u  pn[        X5      [        X5      -  n[        U5      [        X5      :X  d   e[        U S5      [        X5      -  n[        U5      [        U S5      [        X5      -  :X  d   e[        SU5      [        X5      -  n[        U5      [        SU5      :X  d   e[        US5      [        X!5      -  n[        U5      [        SU5      :X  d   e[        U S5      [        X5      -  [        US5      -  n[        U5      S:X  d   e[        SU 5      [        SU5      -  [        SU5      -  [        SU5      -  n[        U5      S:X  d   eg )Nzi,j,kr   rY   rZ   )r.   r   r   )rA   r_   r   r<   s       rG   test_evaluate_deltasr     sT   gGA!q~a33A1!5555q!~a33A11!5q8L!LLLLq!~a33A11!5555q!~a33A11!5555q!~a33nQ6JJA1"""	1	q! 4	4!Q
 "0A"6
7A1"""rI   c                     [        SS[        S9u  pp#[        SS[        S9u  pEpg[        S5      u  pp[        nU" SXE4X45      U" SXT4X45      * :X  d   eU" SXE4X45      U" SXT4X45      :X  d   eU" SXE4X45      U" SXE4X45      * :X  d   eU" SXD4X45      S:X  d   eU" SXE4X 45      S:X  d   eU" SXEU4X45      U" SXTU4X45      * :X  d   eU" SXEU4XU45      U" SXTU4XU45      :X  d   eU" SXE4X45      nUR                  U5      (       d   eUR                  U5      (       d   eUR                  U 5      (       d   eUR                  U5      (       d   eUR	                  XV5      U" SXF4X45      :X  d   eS	U-  R	                  X5      S	U" SXE4Xa45      -  :X  d   eUR
                  [        S5      :X  d   e[        U5      S
:X  d   e[        U5      S:X  d   eU" SXD4X45      R	                  XE5      U" SXU4X45      :X  d   eU" SX@4XA45      R	                  XE5      U" SXP4XQ45      :X  d   e[        S5      u  pnn[        SX4UU45      n[        U5      S:X  d   e[        U5      S:X  d   eg )Nr   Tr   rK   r   rL   tr   rZ   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   hasrl   symbolr-   r4   r   )rA   r_   r   r   rP   rQ   rR   rS   r:   r;   r<   r=   ATtabija1a2a3a4u_alpha1234s                      rG   test_Tensorsr     s   %@JA!%@JA!#JA!	BcA6A6"r#vv'>&>>>>cA6A6"bqfqf&====cA6A6"r#vv'>&>>>>cA6A6"a'''cA6A6"a'''cA!9qf%"S1)aV*D)DDDDcA!9qQi(BsQ1Iay,IIIIsQFQF#E99Q<<<99Q<<<99Q<<<99Q<<<::ar#vv6666eG>>!1RaVaV%<#<<<<<<6#;&&&<?***u:////cA6A6"''-C!!1HHHHcA6A6"''-C!!1HHHHZ(NBB%cB8b"X>K!UUUU{EEEErI   c                     [        SSS9u  pp#[        SSS9u  pEpg[        S[        S9u  pp[        SU4U	45      [        [	        U5      [        U	5      -  5      -  n[        S	X4X45      [        [	        U5      [	        U	5      -  [        U5      -  [        U
5      -  5      -  S
-  n[        [        [	        U 5      [        U5      -  5      U-  SSS9nU[        SU4U 45      :X  d   e[        [        [	        U 5      [	        U5      -  [        U5      -  [        U5      -  5      U-  SSS9nU[        S	XE4X45      :X  d   eg )Nr   Tr   rK   r   rL   rM   r>   vru   )keep_only_fully_contractedsimplify_kronecker_deltas)r.   r,   r   r   r   r   r   )rA   r_   r   r   rP   rQ   rR   rS   r:   r;   r<   r=   FockVFaiVabijs                   rG   test_fully_contractedr   8  s@   5JA!5JA!.JA!aTA40r!uQqTzND	S1&1&	1	BqE"Q%K!QqT!	"
#$%	&A 2a51:t#'+&*,C %cA4!6666"RU2a5[1%ad*+A-'+&*,E 'aVaV<<<<rI   c                      [        S5      u  p[        [        X5      S-   5      [        X5      S-   :X  d   e[        [        X5      S-   5      [        X5      S-   :X  d   eg )Nrd   rZ   rY   )r.   r#   attrA   r_   s     rG   'test_substitute_dummies_without_dummiesr   L  sS    5>DAc!i!m,A	A===c!i!m,A	A===rI   c            
          [        S[        S9u  p[        [        X5      [	        [        U 5      [        U5      -  5      -  [        X5      [	        [        U5      [        U 5      -  5      -  -
  5      S:X  d   eg Ni jrM   r   )r.   r,   r#   r   r   r   r   r   s     rG   #test_substitute_dummies_NO_operatorr   R  sf    5e$DAc!i2a51:6a)Br!uQqTzN*+ ,/01 1 1rI   c                      [        S[        S9u  p[        [        X5      [	        U 5      -  [        U5      -  [        X5      [	        U5      -  [        U 5      -  -
  5      S:X  d   eg r   )r.   r,   r#   r   r   r   r   s     rG   #test_substitute_dummies_SQ_operatorr   X  s^    5e$DAc!i1oad2a)BqE/!A$&' (+,- - -rI   c                      [        SS[        S9u  p[        SS[        S9u  p#[        S[        S9u  pE[        S5      n[        U" XU5      U" XU5      -
  SS	9S
:X  d   eg )Nr   Tr   a br   p qrM   r>   )new_indicesr   )r.   r,   r'   r#   )rA   r_   rP   rQ   r:   r;   r>   s          rG   #test_substitute_dummies_new_indicesr  ^  s_    5d6DA5d6DA5e$DAAaaj1Q1:54HAMMMrI   c            
          [        SS[        S9u  pp#[        S5      nSSKJn  U" XX#/S5       H!  n[        U" U6 U" XX#5      -
  5      S:X  a  M!   e   g )Nr   Tr   r>   r   
variationsru   )r.   r,   r'   sympy.utilities.iterablesr  r#   )rA   r_   r   r   r>   r  permuts          rG   *test_substitute_dummies_substitution_orderr	  f  sW    %@JA!A4aA\1-!!V*qq}"<=BBB .rI   c            	      D   [        SSS9n [        SSS9n[        SS[        S9u  p#[        SS[        S	9u  pE[        S
5      n[        S5      n[        nU" X#XE5      U" X@5      -  U" XS5      -  U" X5      -  U" X2XE5      U" X@5      -  U" XR5      -  U" X5      -  U" X#XT5      U" XP5      -  U" XC5      -  U" X5      -  U" X2XT5      U" XP5      -  U" XB5      -  U" X5      -  /n	U	SS   H7  n
U" U	S   5      U" U
5      :w  d   e[	        U	S   5      [	        U
5      :X  a  M7   e   g )NrA   Tr   rP   r   k lr   c dr   r   r   rY   r   r.   r,   r'   r"   r#   )iiaar   r   rR   rS   r   r   dumsexprsr  s              rG   *test_dummy_order_inner_outer_lines_VT1T1T1r  n  s3   	$	'B	$	'B5d6DA5d6DAAAD 	
!ahqw&qx/	!ahqw&qx/	!ahqw&qx/	!ahqw&qx/E )E!H~f---!%(+/A&/IIII rI   c            	      \   [        SSS9u  p[        SSS9u  p#[        SS[        S9u  pE[        SS[        S	9u  pg[        S
5      n[        S5      n	[        n
U" XEXg5      U	" X`5      -  U	" Xq5      -  U	" X$5      -  U	" X55      -  U" XEXg5      U	" Xa5      -  U	" Xp5      -  U	" X$5      -  U	" X55      -  U" XEXg5      U	" X`5      -  U	" Xq5      -  U	" X45      -  U	" X%5      -  U" XEXg5      U	" Xa5      -  U	" Xp5      -  U	" X45      -  U	" X%5      -  /nUSS   H7  nU
" US   5      U
" U5      :w  d   e[	        US   5      [	        U5      :w  a  M7   e   U" XEXg5      U	" X`5      -  U	" Xq5      -  U	" X$5      -  U	" X55      -  U" XTXg5      U	" X`5      -  U	" Xq5      -  U	" X$5      -  U	" X55      -  U" XEXv5      U	" X`5      -  U	" Xq5      -  U	" X$5      -  U	" X55      -  U" XTXv5      U	" X`5      -  U	" Xq5      -  U	" X$5      -  U	" X55      -  /nUSS   H7  nU
" US   5      U
" U5      :X  d   e[	        US   5      [	        U5      :w  a  M7   e   U" XEXg5      U	" X`5      -  U	" Xq5      -  U	" X$5      -  U	" X55      -  U" XEXv5      U	" Xa5      -  U	" Xp5      -  U	" X$5      -  U	" X55      -  U" XTXg5      U	" X`5      -  U	" Xq5      -  U	" X45      -  U	" X%5      -  U" XTXv5      U	" Xa5      -  U	" Xp5      -  U	" X45      -  U	" X%5      -  /nUSS   H7  nU
" US   5      U
" U5      :w  d   e[	        US   5      [	        U5      :X  a  M7   e   g Nr   Tr   r   r   r  r   r  r   r   r   rY   r   r  r  jjr  bbr   r   rR   rS   r   r   r  r  r  s                rG   ,test_dummy_order_inner_outer_lines_VT1T1T1T1r    sg   U-FBU-FB5d6DA5d6DAAAD 	
!ahqx'"029	!ahqx'"029	!ahqx'"029	!ahqx'"029E )E!H~f---!%(+/A&/IIII  	
!ahqx'"029	!ahqx'"029	!ahqx'"029	!ahqx'"029E )E!H~f---!%(+/A&/IIII  	
!ahqx'"029	!ahqx'"029	!ahqx'"029	!ahqx'"029E )E!H~f---!%(+/A&/IIII rI   c                  Z   [        S5      u  pn[        [        U 5      [        U5      -  [        U5      -  5      R                  S5      [        [        U 5      [        U5      -  5      :X  d   e[        [        U 5      [        U5      -  [        U5      -  5      R                  S5      [        [        U5      [        U5      -  5      :X  d   e[        [        U 5      [        U5      -  [        U5      -  5      R                  S5      [        [        U 5      [        U5      -  5      :X  d   eg )Nzp,q,rrY   r   rZ   )r.   r   r   	get_subNO)r:   r;   r<   s      rG   test_get_subNOr    s    gGA!ad1Q4i!n''*b1adm;;;ad1Q4i!n''*b1adm;;;ad1Q4i!n''*b1adm;;;rI   c            	         [        SS[        S9u  pp#[        SS[        S9u  pEpg[        S5      n[        S5      n	[        n
U" XXE5      U	" X@5      -  U	" XQ5      -  U" XXE5      U	" X@5      -  U	" XQ5      -  U" XXT5      U	" X@5      -  U	" XQ5      -  /nUSS   H7  nU
" US	   5      U
" U5      :w  d   e[	        US	   5      [	        U5      :w  a  M7   e   U" XXE5      U	" X@5      -  U	" XQ5      -  U" XXT5      U	" X@5      -  U	" XQ5      -  /nUSS   H7  nU
" US	   5      U
" U5      :w  d   e[	        US	   5      [	        U5      :X  a  M7   e   U" XXE5      U	" X@5      -  U	" XQ5      -  U" XXE5      U	" XP5      -  U	" XA5      -  /nUSS   H7  nU
" US	   5      U
" U5      :X  d   e[	        US	   5      [	        U5      :w  a  M7   e   U" XXE5      U	" X@5      -  U	" XQ5      -  U" XXE5      U	" XA5      -  U	" XP5      -  U" XXT5      U	" XP5      -  U	" XA5      -  U" XXT5      U	" XQ5      -  U	" X@5      -  /nUSS   H7  nU
" US	   5      U
" U5      :w  d   e[	        US	   5      [	        U5      :X  a  M7   e   g 
Nr   Tr   rK   r   r   r   rY   r   r  rA   r_   r   r   rP   rQ   rR   rS   r   r   r  r  r  s                rG   $test_equivalent_internal_lines_VT1T1r    s   %@JA!%@JA!AAD 	
!agag%	!agag%	!agag%E
 )E!H~f---!%(+/A&/IIII 
 	
!agag%	!agag%E )E!H~f---!%(+/A&/IIII 
 	
!agag%	!agag%E )E!H~f---!%(+/A&/IIII 
 	
!agag%	!agag%	!agag%	!agag%	E )E!H~f---!%(+/A&/IIII rI   c                      [        SS[        S9u  pp#pE[        SS[        S9u  pgpp[        SS[        S9u  pp[        SS[        S9u  nnnnSS	KJn  [	        S
5      n[	        S5      n[
        nU" XX5      U" XX5      -  U" XX5      -  nU" XgX/S5      nUR                  [        XX/[        U5      5      5      nU HP  n[        XX/U5      nUR                  U5      nU" U5      U" U5      :w  d   e[        U5      [        U5      :X  a  MP   e   U" XX5      U" XX5      -  U" XX5      -  nU" XgX/S5      nUR                  [        XX/[        U5      5      5      nU HP  n[        XX/U5      nUR                  U5      nU" U5      U" U5      :w  d   e[        U5      [        U5      :X  a  MP   e   U" XX5      U" XX5      -  U" XX5      -  nU" XgX/S5      nUR                  [        XX/[        U5      5      5      nU HP  n[        XX/U5      nUR                  U5      nU" U5      U" U5      :w  d   e[        U5      [        U5      :X  a  MP   e   U" XX5      U" XX5      -  U" XX5      -  nU" XgX/S5      nUR                  [        XX/[        U5      5      5      nU HP  n[        XX/U5      nUR                  U5      nU" U5      U" U5      :w  d   e[        U5      [        U5      :X  a  MP   e   g Ni j k l m nTr   a b c d e fr   p1 p2 p3 p4h1 h2 h3 h4r   r  r   r   ru   
r.   r,   r  r  r'   r"   rl   zipnextr#   rA   r_   r   r   ra   r`   rP   rQ   rR   rS   r   r>   rE   rF   p3p4h1h2h3h4r  r   r   r  template
permutatorbaser  subslistrC   s                                 rG   (test_equivalent_internal_lines_VT2conjT2r4    s   }$EJA!}$EJA!]%HNBB]%HNBB4AAD  2101@HQ1L!,J==bb-tJ/?@AD'0}}X&DzT$Z'''!$'+=d+CCCC	 
  2101@HQ1L!,J==bb-tJ/?@AD'0}}X&DzT$Z'''!$'+=d+CCCC	   2101@HQ1L!,J==bb-tJ/?@AD'0}}X&DzT$Z'''!$'+=d+CCCC	 
  2101@HQ1L!,J==bb-tJ/?@AD'0}}X&DzT$Z'''!$'+=d+CCCC	 rI   c                  p   [        SS[        S9u  pp#pE[        SS[        S9u  pgpp[        SS[        S9u  pp[        SS[        S9u  nnnnSS	KJn  [	        S
5      n[	        S5      n[
        nU" XX5      U" XX5      -  U" XX5      -  nU" XgX/S5      nUR                  [        XX/[        U5      5      5      nU HP  n[        XX/U5      nUR                  U5      nU" U5      U" U5      :w  d   e[        U5      [        U5      :X  a  MP   e   U" XX5      U" XX5      -  U" XX5      -  nU" XgX/S5      nUR                  [        XX/[        U5      5      5      nU HP  n[        XX/U5      nUR                  U5      nU" U5      U" U5      :w  d   e[        U5      [        U5      :X  a  MP   e   g r!  r&  r)  s                                 rG   8test_equivalent_internal_lines_VT2conjT2_ambiguous_orderr6  !  s    }$EJA!}$EJA!]%HNBB]%HNBB4AAD  21021@HQ1L!,J==bb-tJ/?@AD'0}}X&DzT$Z'''!$'+=d+CCCC	 
  21021@HQ1L!,J==bb-tJ/?@AD'0}}X&DzT$Z'''!$'+=d+CCCC	 rI   c            
         [        SS[        S9u  pp#[        SS[        S9u  pEpg[        S5      n[        S5      n	[        n
U" XXE5      U	" XEX5      -  U" XXE5      U	" XEX5      -  U" XXT5      U	" XEX5      -  U" XXT5      U	" XEX5      -  /nUSS   H7  nU
" US	   5      U
" U5      :X  d   e[	        US	   5      [	        U5      :w  a  M7   e   U" XXE5      U	" XEX5      -  U" XXE5      U	" XTX5      -  U" XXE5      U	" XEX5      -  U" XXE5      U	" XTX5      -  /nUSS   H7  nU
" US	   5      U
" U5      :w  d   e[	        US	   5      [	        U5      :w  a  M7   e   U" XXE5      U	" XEX5      -  U" XXE5      U	" XEX5      -  U" XXT5      U	" XTX5      -  U" XXT5      U	" XTX5      -  /nUSS   H7  nU
" US	   5      U
" U5      :w  d   e[	        US	   5      [	        U5      :X  a  M7   e   g r  r  r  s                rG   "test_equivalent_internal_lines_VT2r8  B  s#   %@JA!%@JA!AAD 	
!aam#	!aam#	!aam#	!aam#E  )E!H~f---!%(+/A&/IIII  	
!aam#	!aam#	!aam#	!aam#E )E!H~f---!%(+/A&/IIII 
 	
!aam#	!aam#	!aam#	!aam#	E )E!H~f---!%(+/A&/IIII rI   c            
         [        SSS9u  p[        SSS9u  p#[        SS[        S9u  pE[        SS[        S	9u  pg[        S
5      n[        S5      n	[        n
U" XEXg5      U	" X&X5      -  U	" X7X5      -  U" XTXg5      U	" X&X5      -  U	" X7X5      -  U" XEXv5      U	" X'X5      -  U	" X6X5      -  U" XTXv5      U	" X'X5      -  U	" X6X5      -  /nUSS   H7  nU
" US   5      U
" U5      :w  d   e[	        US   5      [	        U5      :X  a  M7   e   U" XEXg5      U	" X&X5      -  U	" XsX5      -  U" XTXg5      U	" X&X5      -  U	" XsX5      -  U" XEXv5      U	" X'X5      -  U	" XcX5      -  U" XTXv5      U	" X'X5      -  U	" XcX5      -  /nUSS   H7  nU
" US   5      U
" U5      :w  d   e[	        US   5      [	        U5      :X  a  M7   e   U" XEXg5      U	" XbX5      -  U	" X7X5      -  U" XTXg5      U	" XbX5      -  U	" X7X5      -  U" XEXv5      U	" XrX5      -  U	" X6X5      -  U" XTXv5      U	" XrX5      -  U	" X6X5      -  /nUSS   H7  nU
" US   5      U
" U5      :w  d   e[	        US   5      [	        U5      :X  a  M7   e   g r  r  r  s                rG   test_internal_external_VT2T2r:  s  s   U-FBU-FB5d6DA5d6DAAAD 	
!aro%aro5	!aro%aro5	!aro%aro5	!aro%aro5	E )E!H~f---!%(+/A&/IIII  	
!aro%aro5	!aro%aro5	!aro%aro5	!aro%aro5	E )E!H~f---!%(+/A&/IIII  	
!aro%aro5	!aro%aro5	!aro%aro5	!aro%aro5	E )E!H~f---!%(+/A&/IIII rI   c            
         [        S5      u  p[        S5      u  p#[        S[        S9u  pE[        S[        S9u  pg[        S5      n[        S5      n	[        n
U" XEXg5      U	" X&X5      -  U	" X7X5      -  U" XTXg5      U	" X&X5      -  U	" X7X5      -  U" XEXv5      U	" X'X5      -  U	" X6X5      -  U" XTXv5      U	" X'X5      -  U	" X6X5      -  /nUSS   H7  nU
" US	   5      U
" U5      :w  d   e[	        US	   5      [	        U5      :X  a  M7   e   g )
Nr   r   r  rM   r  r   r   rY   r   r  r  s                rG   test_internal_external_pqrsr<    s   U^FBU^FB5e$DA5e$DAAAD 	
!aro%aro5	!aro%aro5	!aro%aro5	!aro%aro5	E )E!H~f---!%(+/A&/IIII rI   c                  
   [        SSS9u  p[        SS[        S9u  p#n[        SS[        S9u  pV[        S[        S	9u  px[        S
5      n	[        S5      n
[        S5      n[        nU" U	" X#5      U
" X25      -  5      X#/:X  d   eU" U	" X25      U
" X25      -  5      X2/:X  d   eU" U	" X#5      U
" X#5      -  5      X#/:X  d   eU" U	" X25      U
" X#5      -  5      X2/:X  d   eU" U	" X#5      U
" X45      -  U" X$5      -  5      X2U/:X  d   eU" U	" X#5      U
" X45      -  U" XB5      -  5      X2U/:X  d   eU" U	" X25      U
" X45      -  U" X$5      -  5      X2U/:X  d   eU" U	" X25      U
" X45      -  U" XB5      -  5      X2U/:X  d   eU" U	" X#5      U
" XC5      -  U" X$5      -  5      X2U/:X  d   eU" U	" X#5      U
" XC5      -  U" XB5      -  5      X2U/:X  d   eU" U	" X25      U
" XC5      -  U" X$5      -  5      X2U/:X  d   eU" U	" X25      U
" XC5      -  U" XB5      -  5      X2U/:X  d   eU" U	" X U5      U	" X1U5      -  U	" XU5      -  5      X2U/:X  d   eU" U	" X U5      U	" X1U5      -  U	" XU5      -  5      X2U/:X  d   eU" U	" X U5      U	" XAU5      -  U	" XU5      -  5      X2U/:X  d   eU" U	" X U5      U	" XAU5      -  U	" XU5      -  5      X2U/:X  d   eU" U	" X0U5      U	" X1U5      -  U	" XU5      -  5      X2U/:X  d   eU" U	" X0U5      U	" X1U5      -  U	" XU5      -  5      X2U/:X  d   eU" U	" X0U5      U	" XAU5      -  U	" XU5      -  5      X2U/:X  d   eU" U	" X0U5      U	" XAU5      -  U	" XU5      -  5      X2U/:X  d   eU" U	" XuU5      U
" XuU5      -  5      X%U/:X  d   eU" U	" XrU5      U
" XuU5      -  5      X%U/:X  d   eU" U	" XRU5      U
" XuU5      -  5      X%U/:X  d   eU" U	" XWU5      U
" XuU5      -  5      X%U/:X  d   eU" U	" X%U5      U
" XuU5      -  5      X%U/:X  d   eU" U	" X'U5      U
" XuU5      -  5      X%U/:X  d   eU" U
" XuU5      U	" XuU5      -  5      X%U/:X  d   eU" U
" XrU5      U	" XuU5      -  5      X%U/:X  d   eU" U
" XRU5      U	" XuU5      -  5      X%U/:X  d   eU" U
" XWU5      U	" XuU5      -  5      X%U/:X  d   eU" U
" X%U5      U	" XuU5      -  5      X%U/:X  d   eU" U
" X'U5      U	" XuU5      -  5      X%U/:X  d   eg )Nr   Tr   zk l mr   r  r   r  rM   Ar	   r   )r.   r,   r'   r"   )r  r  r   r   ra   rR   rS   r:   r;   r>  r	   r   r  s                rG   test_dummy_order_well_definedr?    s   U-FBg4U;GA!5d6DA5e$DAAAAD !! QF***!! QF***!! QF***!! QF*** !!!'(Q1I555!!!'(Q1I555!!!'(Q1I555!!!'(Q1I555!!!'(Q1I555!!!'(Q1I555!!!'(Q1I555!!!'(Q1I555 !AaQK'"34q	AAA!AaQK'"34q	AAA!AaQK'"34q	AAA!AaQK'"34q	AAA!AaQK'"34q	AAA!AaQK'"34q	AAA!AaQK'"34q	AAA!AaQK'"34q	AAA !
1Q1:%&1)333!
1Q1:%&1)333!
1Q1:%&1)333!
1Q1:%&1)333!
1Q1:%&1)333!
1Q1:%&1)333!
1Q1:%&1)333!
1Q1:%&1)333!
1Q1:%&1)333!
1Q1:%&1)333!
1Q1:%&1)333!
1Q1:%&1)333rI   c            	      .   [        SSS9u  p[        SS[        S9u  p#pEn[        SS[        S9u  pxpn[        S[        S	9u  p[        S
S[        S9u  pnn[        SS[        S9u  nnnn[        SS[        S9u  nnnn[        SS[        S9u  nnnn[        S5      n[        S5      nSSKJn   U" X5      U" UU5      -  U" UU5      -  U" UU5      -  U" UU5      -  n!U " XxXU/S5      n"U!R                  [        XUUU/[        U"5      5      5      n#U" H>  n$[        XUUU/U$5      n%U!R                  U%5      n&[        U&5      [        U#5      :X  a  M>   e   U" X5      U" UU5      -  U" UU5      -  U" UU5      -  U" UU5      -  n!U " XxXU/S5      n"U!R                  [        XUUU/[        U"5      5      5      n#U" H>  n$[        XUUU/U$5      n%U!R                  U%5      n&[        U&5      [        U#5      :X  a  M>   e   U" XUU5      U" UUUU5      -  U" UU5      -  n!U " XxXU/S5      n"U!R                  [        XUUU/[        U"5      5      5      n#U" H>  n$[        XUUU/U$5      n%U!R                  U%5      n&[        U&5      [        U#5      :X  a  M>   e   g )Nr   Tr   z	i j k l mr   z	a b c d er   r  rM   r$  zp5 p6 p7 p8r%  zh5 h6 h7 h8r>  r	   r   r  rv   )	r.   r,   r'   r  r  rl   r'  r(  r#   )'r  r  rA   r_   r   r   ra   rP   rQ   rR   rS   r   r:   r;   rE   rF   r*  r+  p5p6p7p8r,  r-  r.  r/  h5h6h7h8r>  r	   r  r0  r1  r2  r  r3  rC   s'                                          rG   test_dummy_order_ambiguousrI    s   U-FBKTuEMA!KTuEMA!5e$DA]%HNBB]%HNBB]%HNBB]%HNBBAA4 y2r"1R9,Qr2Y6qRy@HQ1OQ/J==bb"b14
3CDEDB+V4}}X&!$'+=d+CCCC  y2r"1R9,Qr2Y6qRy@HQ1OQ/J==bb"b14
3CDEDB+V4}}X&!$'+=d+CCCC  R 2r2r!221R9<HQ1OQ/J==bb"b14
3CDEDB+V4}}X&!$'+=d+CCCC rI   c                  (    [        SU S S U SS  5      $ )Nr   rZ   )r   rx   s    rG   atvrL    s    sD!Hd12h88rI   c                      [        U 5      S:X  a  [        SU S S U SS  5      $ [        U 5      S:X  a  [        SU S   4U S   45      $ g )Nru   r   rZ   r   rY   )rw   r   rK  s    rG   r   r     sS    
4yA~"3Ra$qr(<<	Ta"3a
T!WJ?? 
rI   c            	      >   [        SSS9n [        SSS9n[        SS[        S9u  p#[        SS[        S	9u  pE[        X#XE5      [        X@5      -  [        XS5      -  [        X5      -  [        X2XE5      [        X@5      -  [        XR5      -  [        X5      -  [        X#XT5      [        XP5      -  [        XC5      -  [        X5      -  [        X2XT5      [        XP5      -  [        XB5      -  [        X5      -  /nUS
S   H   n[	        US   5      [	        U5      :X  a  M    e   g )NrA   Tr   rP   r   r  r   r  r   rY   r   r.   r,   rL  r   r#   )r  r  r   r   rR   rS   r  r  s           rG   -test_dummy_order_inner_outer_lines_VT1T1T1_ATrP    s   	$	'B	$	'B5d6DA5d6DA 	A!A
"3q9,SZ7A!A
"3q9,SZ7A!A
"3q9,SZ7A!A
"3q9,SZ7E )!%(+/A&/IIII rI   c                  t   [        SSS9u  p[        SSS9u  p#[        SS[        S9u  pE[        SS[        S	9u  pg[        XEXg5      [        X`5      -  [        Xq5      -  [        X$5      -  [        X55      -  [        XEXg5      [        Xa5      -  [        Xp5      -  [        X$5      -  [        X55      -  [        XEXg5      [        X`5      -  [        Xq5      -  [        X45      -  [        X%5      -  /nUS
S   H!  n	[	        US   5      [	        U	5      * :X  a  M!   e   [        XEXg5      [        X`5      -  [        Xq5      -  [        X$5      -  [        X55      -  [        XEXg5      [        Xa5      -  [        Xp5      -  [        X45      -  [        X%5      -  /nUS
S   H   n	[	        US   5      [	        U	5      :X  a  M    e   g Nr   Tr   r   r   r  r   r  r   rY   r   rO  
r  r  r  r  r   r   rR   rS   r  r  s
             rG   /test_dummy_order_inner_outer_lines_VT1T1T1T1_ATrT  1  s   U-FBU-FB5d6DA5d6DA 	A!A
"3q:-c"j8RCA!A
"3q:-c"j8RCA!A
"3q:-c"j8RC	E )!%(+0B60J/JJJJ 
 	A!A
"3q:-c"j8RCA!A
"3q:-c"j8RCE
 )!%(+/A&/IIII rI   c            	         [        SS[        S9u  pp#[        SS[        S9u  pEpg[        XXE5      [        X@5      -  [        XQ5      -  [        XXE5      [        X@5      -  [        XQ5      -  [        XXT5      [        X@5      -  [        XQ5      -  /nUSS   H   n	[	        US   5      [	        U	5      :w  a  M    e   [        XXE5      [        X@5      -  [        XQ5      -  [        XXT5      [        X@5      -  [        XQ5      -  /nUSS   H   n	[	        US   5      [	        U	5      :X  a  M    e   [        XXE5      [        X@5      -  [        XQ5      -  [        XXE5      [        XP5      -  [        XA5      -  /nUSS   H   n	[	        US   5      [	        U	5      :w  a  M    e   [        XXE5      [        X@5      -  [        XQ5      -  [        XXE5      [        XA5      -  [        XP5      -  [        XXT5      [        XP5      -  [        XA5      -  [        XXT5      [        XQ5      -  [        X@5      -  /nUSS   H   n	[	        US   5      [	        U	5      :X  a  M    e   g Nr   Tr   rK   r   rY   r   rO  
rA   r_   r   r   rP   rQ   rR   rS   r  r  s
             rG   'test_equivalent_internal_lines_VT1T1_ATrX  L  s/   %@JA!%@JA! 	A!A	!#a)+A!A	!#a)+A!A	!#a)+E
 )!%(+/A&/IIII  	A!A	!#a)+A!A	!#a)+E )!%(+/A&/IIII  	A!A	!#a)+A!A	!#a)+E )!%(+/A&/IIII  	A!A	!#a)+A!A	!#a)+A!A	!#a)+A!A	!#a)+	E )!%(+/A&/IIII rI   c                  p   [        SS[        S9u  pp#pE[        SS[        S9u  pgpp[        SS[        S9u  pp[        SS[        S9u  nnnnSS	KJn  [	        XX5      [        XX5      -  [        XX5      -  nU" XgX/S
5      nUR                  [        XX/[        U5      5      5      nU H<  n[        XX/U5      nUR                  U5      n[        U5      [        U5      :X  a  M<   e   [	        XX5      [        XX5      -  [        XX5      -  nU" XgX/S
5      nUR                  [        XX/[        U5      5      5      nU H<  n[        XX/U5      nUR                  U5      n[        U5      [        U5      :X  a  M<   e   [	        XX5      [        XX5      -  [        XX5      -  nU" XgX/S
5      nUR                  [        XX/[        U5      5      5      nU H<  n[        XX/U5      nUR                  U5      n[        U5      [        U5      :X  a  M<   e   [	        XX5      [        XX5      -  [        XX5      -  nU" XgX/S
5      nUR                  [        XX/[        U5      5      5      nU H<  n[        XX/U5      nUR                  U5      n[        U5      [        U5      :X  a  M<   e   g Nr"  Tr   r#  r   r$  r%  r   r  ru   
r.   r,   r  r  rL  r   rl   r'  r(  r#   rA   r_   r   r   ra   r`   rP   rQ   rR   rS   r   r>   rE   rF   r*  r+  r,  r-  r.  r/  r  r0  r1  r2  r  r3  rC   s                              rG   +test_equivalent_internal_lines_VT2conjT2_ATr]  p  s   }$EJA!}$EJA!]%HNBB]%HNBB4 22"3rq#44Sr5FFHQ1L!,J==bb-tJ/?@AD'0}}X&!$'+=d+CCCC  22"3rq#44Sr5FFHQ1L!,J==bb-tJ/?@AD'0}}X&!$'+=d+CCCC  22"3rq#44Sr5FFHQ1L!,J==bb-tJ/?@AD'0}}X&!$'+=d+CCCC  22"3rq#44Sr5FFHQ1L!,J==bb-tJ/?@AD'0}}X&!$'+=d+CCCC rI   c                     [        SS[        S9u  pp#pE[        SS[        S9u  pgpp[        SS[        S9u  pp[        SS[        S9u  nnnnSS	KJn  [	        XX5      [        XX5      -  [        XX5      -  nU" XgX/S
5      nUR                  [        XX/[        U5      5      5      nU H<  n[        XX/U5      nUR                  U5      n[        U5      [        U5      :X  a  M<   e   [	        XX5      [        XX5      -  [        XX5      -  nU" XgX/S
5      nUR                  [        XX/[        U5      5      5      nU H<  n[        XX/U5      nUR                  U5      n[        U5      [        U5      :X  a  M<   e   g rZ  r[  r\  s                              rG   ;test_equivalent_internal_lines_VT2conjT2_ambiguous_order_ATr_    s    }$EJA!}$EJA!]%HNBB]%HNBB4 22"3rq#44S5FFHQ1L!,J==bb-tJ/?@AD'0}}X&!$'+=d+CCCC  22"3rq#44S5FFHQ1L!,J==bb-tJ/?@AD'0}}X&!$'+=d+CCCC rI   c            
      .   [        SS[        S9u  pp#[        SS[        S9u  pEpg[        XXE5      [        XEX5      -  [        XXE5      [        XEX5      -  [        XXT5      [        XEX5      -  /nUSS   H   n	[	        US   5      [	        U	5      :w  a  M    e   [        XXE5      [        XEX5      -  [        XXE5      [        XTX5      -  [        XXE5      [        XEX5      -  /nUSS   H   n	[	        US   5      [	        U	5      :w  a  M    e   [        XXE5      [        XEX5      -  [        XXE5      [        XEX5      -  [        XXT5      [        XTX5      -  [        XXT5      [        XTX5      -  /nUSS   H   n	[	        US   5      [	        U	5      :X  a  M    e   g rV  rO  rW  s
             rG   %test_equivalent_internal_lines_VT2_ATra    s   %@JA!%@JA! 	A!A!'A!A!'A!A!'	E )!%(+/A&/IIII 
 	A!A!'A!A!'A!A!'	E )!%(+/A&/IIII  	A!A!'A!A!'A!A!'A!A!'	E )!%(+/A&/IIII rI   c            
         [        SSS9u  p[        SSS9u  p#[        SS[        S9u  pE[        SS[        S	9u  pg[        XEXg5      [        X&X5      -  [        X7X5      -  [        XTXg5      [        X&X5      -  [        X7X5      -  [        XEXv5      [        X'X5      -  [        X6X5      -  [        XTXv5      [        X'X5      -  [        X6X5      -  /nUS
S   H   n	[	        US   5      [	        U	5      :X  a  M    e   [        XEXg5      [        X&X5      -  [        XsX5      -  [        XTXg5      [        X&X5      -  [        XsX5      -  [        XEXv5      [        X'X5      -  [        XcX5      -  [        XTXv5      [        X'X5      -  [        XcX5      -  /nUS
S   H   n	[	        US   5      [	        U	5      :X  a  M    e   [        XEXg5      [        XbX5      -  [        X7X5      -  [        XTXg5      [        XbX5      -  [        X7X5      -  [        XEXv5      [        XrX5      -  [        X6X5      -  [        XTXv5      [        XrX5      -  [        X6X5      -  /nUS
S   H   n	[	        US   5      [	        U	5      :X  a  M    e   g rR  rO  rS  s
             rG   test_internal_external_VT2T2_ATrc    sr   U-FBU-FB5d6DA5d6DA 	A!B2))#bR*;;A!B2))#bR*;;A!B2))#bR*;;A!B2))#bR*;;	E )!%(+/A&/IIII  	A!B2))#aR*;;A!B2))#aR*;;A!B2))#aR*;;A!B2))#aR*;;	E )!%(+/A&/IIII  	A!A2))#bR*;;A!A2))#bR*;;A!A2))#bR*;;A!A2))#bR*;;	E )!%(+/A&/IIII rI   c            
         [        S5      u  p[        S5      u  p#[        S[        S9u  pE[        S[        S9u  pg[        XEXg5      [        X&X5      -  [        X7X5      -  [        XTXg5      [        X&X5      -  [        X7X5      -  [        XEXv5      [        X'X5      -  [        X6X5      -  [        XTXv5      [        X'X5      -  [        X6X5      -  /nUSS   H   n	[	        US   5      [	        U	5      :X  a  M    e   g )Nr   r   r  rM   r  rY   r   rO  rS  s
             rG   test_internal_external_pqrs_ATre    s    U^FBU^FB5e$DA5e$DA 	A!B2))#bR*;;A!B2))#bR*;;A!B2))#bR*;;A!B2))#bR*;;	E )!%(+/A&/IIII rI   c                  z    [        S5      n [        [        [        U 5      S-  [	        U 5      5      5      S:X  d   eg )N0rZ   z(- \left[b_{0},{b^\dagger_{0}}^{2}\right])r-   r4   r   r   r	   )rP   s    rG   test_issue_19661rh    s=    sABqE1Had+ CD D DrI   c                      [        S5      n [        SS[        S9u  p[        SS[        S9u  p4[        XU4X!45      [        XU4X!45      * :X  d   eg )Nr   )rR   rS   Tr   )r   r   r   )r.   r,   r   )r   rR   rS   r   r   s        rG   +test_canonical_ordering_AntiSymmetricTensorrj    sg    A9$',.DA9$',.DA qa&1& 
!!VaV445 5 5rI   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.reprr0   sympy.simplify.simplifyr1   sympy.testing.pytestr2   r3   sympy.printing.latexr4   rH   rV   rb   rh   rp   rr   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  r4  r6  r8  r:  r<  r?  rI  rL  r   rP  rT  rX  r]  r_  ra  rc  re  rh  rj   rI   rG   <module>ry     s   : 6
 
 
 
 
 
 
 
 
 * 2 , " 6 6 9 % , - &.&8%*66-";'	:1	*
S " "*eZ`@'8	60'f'9T#KLO$#. FF=(>1-NCJ22Jj<)JX/DdDB.Jb$JNJ*54p(DV9@J(J6!JH'DTD6J@J@J D
5rI   