
    Xh                        d dl mZ d dlmZ d dlmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z% d dl&m'Z' d dl(m)Z)m*Z* d dl+m,Z,m-Z- d dl.m/Z/ d dl0m1Z1m2Z2m3Z3 d d	l4m5Z5 d d
l6m7Z7 d dl8m9Z9 d dl:m;Z;m<Z< d dl=m>Z> d Z?d Z@d ZAd ZBd ZCd ZDd ZEd ZFd ZGd ZHd ZId ZJd ZKd ZLe;d             ZMd ZNd ZOd ZPd  ZQd! ZRd" ZSd# ZTd$ ZUd% ZVd& ZWd' ZXd( ZYd) ZZd* Z[d+ Z\d, Z]d- Z^d. Z_d/ Z`d0 Zad1 Zbd2 Zcd3 Zdd4 Zed5 Zfd6 Zgd7 Zhd8 Zid9 Zjd: Zkd; Zld< Zmd= Znd> Zod? Zpd@ ZqdA ZrdB ZsdC ZtdD ZudES )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                     t          d          \  } }}}t          t          d          \  }}}}t          } || |                               ||            ||          z             ||            ||           z  k    sJ  || |                               || |                     |||            k    sJ  || |                               ||                      ||           k    sJ  ||            ||          z   ||          z   ||          z   ||           ||           z   ||          z   ||          z  z
   ||            ||          z   ||          z   ||          z  z
   ||           ||           z   ||          z   ||          z  z   }	 || |           |||          g}
t          |	|
           || |           |||          z   ||           z   ||          z   ||          z   ||          z  k    sJ t           || |                    dk    sJ t          d          \  }}t           |||          dk              sJ d S )Np,q,r,sfghizP(pq)zp1,p2zP(p_{1}p_{2}))r.   mapr'   r   get_permutedr    r4   )pqrsfghiPexprpermsp1p2s                v/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/sympy/physics/tests/test_secondquant.pytest_PermutationOperatorrH      s   ##JAq!QXv&&JAq!QA1Q77!QQqTT	**qqtteAAaDDj88881Q77!Q((QQq!WWH44441Q77!%%1----AaDD1IaaddN11Q44
!A$$qqtt)AAaDD.1

!A$$qqtt)AAaDD.1
 !A$$qqtt)AAaDD.1
D Qq!WWaa1ggE'e44	!Q!Q!QQqTT!!!A$$&qqtt+, , , ,1a>>W$$$$WFB2b_,-------    c            	      T   t          d          \  } }}}t          dt                    \  }}}}t          t          d          \  }}	t          }
 || |||           ||| ||          z
  }t          | |
| |          g           |
| |           || |||          z  k    sJ  |
| |          t           || |||                    z  } || |||           ||| ||          z
  }t          | |
| |          g          }|t          |          k    sJ  || |||           ||| ||          z
  }t          | |
| |          g          }|t          |          k    sJ  || |||           |	|| ||          z
  }t          | |
| |          g          }||k    sJ d S )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   /   s   ##JAq!Q...JAq!QxDAqA 1Q1a==11Q1a==(D&qqAwwi AaGGAAaAqMM12 2 2 2 qAww)!!Aq!Q--888H1Q1a==11Q1a==(D(!Qy99F)&1111111Q1a==11Q1a==(D(!Qy99F)&111111 1Q1a==11Q1a==(D(!Qy99F6>>>>>>rI   c                     t          d          \  } }}}t          d          dk    sJ t          d          dk    sJ t          dt          z            dt          z  k    sJ t          t          j        t          z  dz            t          t          dd          z  dz  k    sJ t          t          |g                    t          |g          k    sJ t          t          d                    t          d          k    sJ t          t          d                    t          d          k    sJ t          t          |                    t          |          k    sJ t          t          |                    t          |          k    sJ t          t          d          t          d          z             t          d          t          d          z   k    sJ t          ||z            t          |          t          |          z  k    sJ t          t          |          t          |          z            t          |          t          |          z  k    sJ t          t          |          d	z            t          t          |                    d	z  k    sJ t          d
          t          t          d
                    k    sJ t          t          d
                    t          d
          k    sJ t          t          dt          z                      t          dt          z            k    sJ t          |           t          |           k    sJ d S )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   ##JAq!Q!99>>>>#;;#!A#;;"Q$!&(3,1Xb!__#4S#88888$s))aS		))))!A$$<<2a55    "Q%%==AaDD    !A$$<<2a55    "Q%%==AaDD    !A$$1+"Q%%"Q%%-////!A#;;&))F1II-----!A$$qtt)1bee++++!A$$(vadd||R/////#;;&------&++&++----#a!e**R!V,,,,!99	!$$$$$$rI   c                      t          d          \  } }t          |           }|j        | k    sJ |j        sJ t          d          }|j        dk    sJ |j        rJ d S )Ni,jrY   )r.   r   stateis_symbolic)rA   r_   os      rG   test_operatorrh   `   sk    5>>DAqA7a<<<<=A7a<<<<}rI   c                     t          d          \  } }}}}t          |           }t          |          dk    sJ t          t          |                    dk    sJ t          |t                    sJ |                    | |          }|                    t                    |hk    sJ t          d          }|                    t          |g                    t          |dz             t          |dz   g          z  k    sJ t          |          }|                    t          |g                    |t          |g          z  k    sJ d S )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/   \**NAq!Q
1A88)))))B==22222a%%%%%	q!A776??qc!!!!
1AD!II&&$q1u++dAE7mm*CCCCC
1AD!II&&!D!II+555555rI   c                     t          d          \  } }}}}t          |           }t          |          dk    sJ t          t          |                    dk    sJ t          |t                    sJ |                    | |          }|                    t                    |hk    sJ t          d          }|                    t          |g                    t          |          t          |dz
  g          z  k    sJ t          |          }|                    t          |g                    |t          |g          z  k    sJ d S )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)   \**NAq!Q	!A88w2<<;&&&&a)))))	q!A776??qc!!!!	!AD!II&&$q''$Aw--*?????	!AD!II&&!D!II+555555rI   c                  H   t          d          \  } }}}t          g d          }t          |          dk    sJ |j        d         t	          t          d                    k    sJ |                    d          t          g d          k    sJ |                    d          t          g d          k    sJ t          d          D ]0} |                    |                               |           |k    sJ 1|                    d          dk    sJ t          d          D ]} ||          | k    sJ t          ||g          }|                    d          t          |dz
  |g          k    sJ |                    d          t          |dz   |g          k    sJ d S )	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   ##JAq!Q???##Aq66Q;;;;6!9eAhh''''4477j11111166!99
???3333331XX $ $ttAww||A!#####66!99>>>>1XX  tqyyyyyAq6A66!99
AE1:......4477j!a%,,,,,,,,rI   c                     t          d          } t          d          t          | g          z  }t          |          t	          |           t          | dz
  g          z  k    sJ t          d          t          | g          z  }t          |          t	          | dz             t          | dz   g          z  k    sJ d S )Nr`   r   rY   )r.   r	   r
   r   r/   r   )r`   es     rG   test_basic_applyr      s    A	!T1#YYA1aq1ug!66666
1dA3iiA1a!eT1q5']]!:::::::rI   c                     t          d          \  } }t          d          t          d          z  t          d          z  t          d          z  }t          |t	          | |g          z            }t          |           t          |dz             z  d| z   z  t	          d| z   d|z   g          z  }t          |          t          |          k    sJ d S )Nn,mr   rY   r\   )r.   r   r	   r   r
   r/   r(   )r`   ra   rg   r   answers        rG   test_complex_applyr      s    5>>DAq
1add
2a551A$1v,,''A!WWT!a%[[ "q&)$QA*?*??F!99v&&&&&&rI   c                      t          d          } t          d          t          d          z  }t          |t	          | g          z            }|| t	          | g          z  k    sJ d S )Nr`   r   )r.   r   r	   r   r
   )r`   rg   r   s      rG   test_number_operatorr      s^    A
1add
A$s))$$A$s))rI   c                     t          d          \  } }}}t          dg          }t          dg          }t          |t	          |                    dk    sJ t          ||          dk    sJ t          | |g          }t          ||g          }t          ||          }|t          | |          t          ||          z  k    sJ d S )Ni,j,k,lr   rY   )r.   r   r
   r   r   r   )rA   r_   kls1s2r<   s          rG   test_inner_productr      s    ##JAq!Q	qcB	qcBF2JJ''1,,,,B1$$$$	q!fB	q!fBRAq!$$^Aq%9%99999999rI   c                     t          d          \  } }t          | g          }t          |g          }t          d          }t	          ||z  |z            }|t          |          t          | |dz
            z  k    sJ d S )Nr   r   rY   )r.   r   r
   r	   r   r/   r   )r`   ra   r   r   rg   r   s         rG   test_symbolic_matrix_elementsr      s{    5>>DAq	qcB	qcB	!A1R  AQq!a%000000000rI   c                  t   t          d          } t          d          }t          ||           }t          d          D ]%}|||dz   f         t	          |dz             k    sJ &t          d          }t          ||           }t          d          D ]%}||dz   |f         t	          |dz             k    sJ &d S )Nrv   r   ru   rY   )r   r	   r   rz   r/   r   )rQ   rg   ra   rA   s       rG   test_matrix_elementsr      s    A	!A1aA1XX * *AE{d1q5kk)))))
1A1aA1XX * *Q{d1q5kk)))))* *rI   c                     t          dd          } |                     d          }|t          d          k    sJ |                     |          dk    sJ |                     d          | d         k    sJ t	          |           dk    sJ t          |           dk    sJ t          |           dk    sJ t          |           dk    sJ d S )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GGAJJE%f------775>>Q771::1q66Q;;;;q66PPPPP77QQQQQ88RRRRRRRrI   c                     t          d          \  } }t          |           t          |           z  | t          j        z   z  }t          || ddf          }|                    d          }t          dd          }t          ||          }g d}t          t          |                    D ]}||         |||f         k    sJ d S )	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>>DAq
Q%%!*a!&j
!CC!QA	EA!QA1aA MLLD3t99 " "Aw!AqD'!!!!!" "rI   c            	      
   t          dd          \  } }t          t          d          t          d                    }|dk    sJ t          t          d          t          d                    }|dk    sJ t          t          |           t          d                    }|t	          | d          k    sJ t          t          d          t          d                    }|dk    sJ t          t          d          t          d                    }t          t          |t          | g          z                      }|t          | g          k    sJ t          t          d          t          d                    }t          t          |t          | |g          z                      }|dk    sJ t          t          |          t          |                    }|ddt          t          |          t          |          z            z  z
  k    sJ t          t          |          t          |                    }|                                ddt          t          |          t          |          z            z  z   k    sJ t          }t          dd	
          \  }}} | |||          |          dk    sJ  | |||          |          dk    sJ  || |||                    dk    sJ t          dd          \  }}	}
}t          dd          \  }}}}t          d          \  }}}}t          } |t          |          t          |                    dt          t          |          t          |          z            z  k    sJ  |t          |	          t          t          |          t          |          z                                          d           ||	|           t          |          z  k    sJ  |t          |          t          |          z  t          |          t          |	          z                                d          dk    sJ t          t          |          t          |                    }t          j        ||          dk    sJ t          t          |          t          |          z  t          |          t          |	          z            }t          |          dk    sJ t          |          dk    sJ t!          |          dk    sJ d S )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      s   5d+++DAq1Q44AA66662a55!A$$A77771Q44AAq!$$$$$$1Q441A66661Q44AA499--..AaS		>>>>1Q441A4A<<0011A66661Q44AAQr"Q%%!*~~%%%%%%2a55!A$$A88::a2a551:......Ag5111GAq!1QQq!WWa==A1QQq!WWa==A1Q!Q==A555JAq!Q555JAq!Q##JAq!QA1RUUAaDD>>R1Q441:.....1RUUBr!uuQqTTzNN##((t(441aAFFFF1RUU1Q44ZAqtt$$)))55::::	AaDD"Q%%	 	 B?2r""a''''2a551:beeAaDDj))A88RRRRR77oooooq66dddddddrI   c                     t          d          \  } }}}t          |           }t          |t                    sJ |                    | |          }|                    t                    |hk    sJ t          d          }|                    t          |g                    t          d|g          k    sJ |                    t          |g                    t          |dg           k    sJ t          |          }|                    t          g                     t          |g          k    sJ t          g d          }|t          g d          k    sJ t          dd          \  } }}}t          dd	          \  }}	}
}t          d
          \  }}}}t          d          }t          |                               t          | ||gd                    t          ||gd          k    sJ t          |                              t          | |	|gd                    t          || |	|gd          k    sJ t          t          |                                        |          |t          |          z  k    sJ t          t          |                    dk    sJ t          t          |                    dk    sJ t          t          |                    dk    sJ t          t          |                    dk    sJ t          t          || gd                    dk    sJ t          t          || |	|gd                    dk    sJ d S )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     s   ##JAq!Q
1Aa'''''	q!A776??qc!!!!
1AD!II&&$1v,,6666D!II&&4A<<-7777
1ADHH%%qc2222"!$$$FT"!,,,,,,,555JAq!Q555JAq!Q##JAq!Q	Ba55aAY 2 233tQFAFFFFa55aAY 2 233tQ1aL!7L7LLLLL!A$$<<&&q))Q{1~~-=====1;;,,,,,A<<77777A<<-----B==22222qeQ  $OOOOOq1Qi##$$(_______rI   c                  P   t          d          \  } }}}t          |           }t          |t                    sJ |                    | |          }|                    t                    |hk    sJ t          d          }|                    t          d|g                    t          |g          k    sJ |                    t          |dg                    t          |g           k    sJ t          |          }|                    t          |g                    t          g           k    sJ t          dd          \  } }}}t          dd          \  }}}	}
t          d          \  }}}}t          d	          }t          |                               t          | ||gd
                    dk    sJ t          |                              t          | ||gd
                    dk    sJ t          |                              t          | ||gd                    dk    sJ t          |                              t          | ||gd
                    t          || ||gd
          k    sJ t          t          |                    dk    sJ t          t          |                    dk    sJ t          t          |                    dk    sJ t          t          |                    dk    sJ t          t          |                    dk    sJ d S )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   ##JAq!Q	!Aa*+++++	q!A776??qc!!!!	!AD!QLL))T1#YY6666D!QLL))dA3iiZ7777	!AD!II&&$r((2222555JAq!Q555JAq!Q##JAq!Q	BQ44tQ1Iq1122a7777Q44tQ1Iq1122a7777Q44tQ1Iq1122a7777Q44tQ1Iq1122dAq!Q<6K6KKKKKqtt99!:://///1;;:::::1;;'!!!!2<<;&&&&&&rI   c                  2   t          d          \  } }}}t          |           }t          |t                    sJ |                    | |          }|                    t                    |hk    sJ t          d          }|                    t          |g                    t          |dz             t          |dz   g          z  k    sJ t          |          }|                    t          |g                    |t          |g          z  k    sJ d S )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    ##JAq!Q
1Aa%%%%%	q!A776??qc!!!!
1AD!II&&$q1u++dAE7mm*CCCCC
1AD!II&&!D!II+555555rI   c                     t          d          \  } }}}t          |           }t          |t                    sJ |                    | |          }|                    t                    |hk    sJ t          d          }d S )NrX   r   )r.   r	   rk   r   rl   rm   r-   r   s        rG   test_annihilate_br   `  su    ##JAq!Q	!Aa)))))	q!A776??qc!!!!	!AAArI   c            	         t          dd          \  } }}}t          |           t          |          z  }t          |          t	          t          |           t          |          z            t          | |          z   k    sJ t          |           t          |          z  }t          |          t	          t          |           t          |          z            k    sJ t          |           t          |          z  t          |          z  t          |          z  }t          |          }t	          t          | |          t          ||          z  t          | |          t          |          z  t          |          z  z   t          ||          t          |           z  t          |          z  z   t          | |          t          |          z  t          |          z  z
  t          |           t          |          z  t          |          z  t          |          z  z
            }||k    sJ | |z  |z                                  t          | |z  |z            k    sJ || z  |z  dz                                  t          || z  |z  dz            k    sJ t          ddt                    \  }}}	}
t          ddt                    \  }}}}t          d	t          
          \  } }}}t          t          |          t	          t          |          t          |          z            z  t          |          z            t	          t          |          t          |          z  t          |          z  t          |          z            t          ||          t	          t          |          t          |          z            z  z   k    sJ t          t          |          t	          t          |          t          |          z  t          |	          z            z  t          |          z            t	          t          |          t          |          z  t          |          z  t          |	          z  t          |          z            t          ||          t	          t          |          t          |          z  t          |	          z            z  z
  k    sJ t          t          |          t	          t          |          t          |	          z            z  t          |
          z            }|t          ||	           t	          t          |          t          |
          z            z  t          ||
          t	          t          |          t          |	          z            z  z
  t          ||	          t          ||
          z  z
  t          ||
          t	          t          |          t          |	          z            z  z   t	          t          |          t          |          z  t          |	          z  t          |
          z            z   k    sJ t          t          |          t	          t          |          t          |          z            z  t          |          z            }|t          ||           t	          t          |          t          |          z            z  t          ||          t	          t          |          t          |          z            z  z
  t          ||          t          ||          z  z
  t          ||          t	          t          |          t          |          z            z  z   t	          t          |          t          |          z  t          |          z  t          |          z            z   k    sJ d S )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   555JAq!Q A$$r!uu*C::AaDDAJ.A*>*>>>>>>
Q%%!*C::BqEE!A$$J''''
A$$r!uu*QqTT/"Q%%
C::Dq!^Aq111
A

033
3M!4D4D
D	E
A

033
3M!4D4D
D	E A

033
3M!4D4D
D	E A

033
3M!4D4D
D]STEUEU
U		VW WE 5====aCH%!C..0000F1HQJ  E#a%'!)$4$44444 %@@@JAq!Q%@@@JAq!Q...JAq!Q!A$$r!A$$qtt)}}$RUU*++qttAaDDy1~bee#$$1a  AaDD1I.// / / / !A$$r!A$$qtt)AaDD.)))"Q%%/00qttAaDDy1~add"2a55())1a  AaDD1IaddN!3!3344 4 4 4 Ar"Q%%!*~~%add*++D1a   BqEE!A$$J/1a  BqEE!A$$J/01a  1!5!556 1a  BqEE!A$$J/0 r!uuRUU{1Q44!$%%	&& & & & 1b1beenn$RUU*++D1a   AaDDAJ/1a  AaDDAJ/01a  1!5!556 1a  AaDDAJ/0 qttAaDDyAr!uu$%%	&& & & & & &rI   c            	      |   t          dd          \  } }}}t          dd          \  }}}}t          dt                    \  }}	t          t                    t	                    z  t          |          t	          |          z  z             t          t                    t	                    z            t          t          |          t	          |          z            z   k    sJ t          t          |           t          t	          |          t          |          z            z            t          t          |           t	          |          z  t          |          z            k    sJ t          d          dk    sJ t          |           | k    sJ t          t          |          t          |          z  t	          |          t	          |          z   z            t          t          |          t          |          z  t	          |          z            t          t          |          t          |          z  t	          |          z            z   k    sJ t          t          |          t	          |          z                                            t          |          t	          |          z  k    sJ t          t	          |          t          |           z                                            t	          |          t          |           z  k    sJ t          t                    t	                    z                                t                    t          |          t          |           z             t          t          |          t	                    z            t          t          |           t	                    z            z   k    sJ t          t                    t	                    z                                t	                    t	          |          t	          |           z             t          t                    t	          |          z            t          t                    t	          |           z            z   k    sJ t          t                    t	                    z                                            }
t          |
          t          |
          k    sJ t          t          |          t	          |          z            t          t	          |          t          |          z             k    sJ t          t          |          t	          |           z  t	          |          z  t          |          z            }t          |	                                          }|d	dgk    sJ t          |
                                          }|d
dgk    sJ t          t          |          t          |           z            }|j        dk    sJ |j        dk    sJ t          |          dk    sJ t          |          dk    sJ t          |          dk    sJ t!          t"          fd           d S )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                  \    t          t                     t                    z            S N)r   r   r   )r:   r;   s   rG   <lambda>ztest_NO.<locals>.<lambda>  s    BqEE!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<   555JAq!Q555JAq!Q...JAq!Qr!uuQqTTzBqEE!A$$J&''	"Q%%!*~~2a551:&' ' ' 'r!uuR!RUU
^^#$$	"Q%%!*RUU
   a55A::::a55A::::r!uuRUU{AaDD1Q44K())r!uuRUU{1Q44  r!uuRUU{1Q44  !! ! ! ! beeAaDDj>>**,,1add
::::add2a55j>>**,,!RUU
::::r!uuQqTTzNN1r!uur!uu}55r!uuQqTTzNNR1add
^^+, , , ,r!uuQqTTzNN!addQqTTk22r!uuQqTTzNNR1add
^^+, , , , beeAaDDj>>**,,D;;"T((""""beeAaDDj>>r!A$$r!uu*~~-----	BqEE!A$$JqttOBqEE!	"	"B	b  ""	#	#B!Q<<<<	b$$&&	'	'B!Q<<<<	BqEE"Q%%KB!!!! B&&&&r77;;;;;88>>>>>99IIIII
 7 7 7 7 788888rI   c                  J   t          dd          \  } }t          dd          \  }}t          d          \  }}t          t          |          t          |          g          t          |          t          |          gdfk    sJ t          t          |          t          |          g          t          |          t          |          gdfk    sJ t          t          |          t          |           g          t          |          t          |           gdfk    sJ t          t          |           t          |          g          t          |          t          |           gdfk    sJ t          t          |          t          |           g          t          |          t          |           gdfk    sJ t          t          |           t          |          g          t          |          t          |           gdfk    sJ t          t          |          t          |           g          t          |           t          |          gdfk    sJ t          t          |           t          |          g          t          |           t          |          gdfk    sJ t          t          |          t          |           g          t          |           t          |          gdfk    sJ t          t          |           t          |          g          t          |           t          |          gdfk    sJ t          t          |          t          |          g          t          |          t          |          gdfk    sJ t          t          |          t          |          g          t          |          t          |          gdfk    sJ t          t          |          t          |          g          t          |          t          |          gdfk    sJ t          t          |          t          |          g          t          |          t          |          gdfk    sJ t          t          |          t          |          g          t          |          t          |          gdfk    sJ t          t          |          t          |          g          t          |          t          |          gdfk    sJ t          t          |          t          |          g          t          |          t          |          gdfk    sJ t          t          |          t          |          g          t          |          t          |          gdfk    sJ t          t          |           t          |          g          t          |           t          |          gdfk    sJ t          t          |          t          |           g          t          |           t          |          gdfk    sJ t          t          |          t          |           g          t          |          t          |           gdfk    sJ t          t          |           t          |          g          t          |          t          |           gdfk    sJ t          t          |          t          |           g          t          |           t          |          gdfk    sJ t          t          |           t          |          g          t          |           t          |          gdfk    sJ d S )	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+++DAq5d+++DAq5>>DAq (A!66BqEE1Q44=!:LLLLL'1r!uu66BqEE1Q44=!:LLLLL (1r!uu66AaDD"Q%%=!:LLLLL'A!66AaDD"Q%%=!:LLLLL'A177RUUBqEENA;NNNNN'A177RUUBqEENA;NNNNN'1qtt551Q441,9JJJJJ'1qtt551Q441,9JJJJJ'A!66AaDD"Q%%=!:LLLLL'1r!uu66AaDD"Q%%=!:LLLLL (1r!uu66BqEE1Q44=!:LLLLL'A!66BqEE1Q44=!:LLLLL'A177RUUBqEENA;NNNNN'A177RUUBqEENA;NNNNN'1qtt551Q441,9JJJJJ'1qtt551Q441,9JJJJJ'A!66BqEE1Q44=!:LLLLL'1r!uu66BqEE1Q44=!:LLLLL (1r!uu66AaDD"Q%%=!:LLLLL'A!66AaDD"Q%%=!:LLLLL'A177RUUBqEENA;NNNNN'A177RUUBqEENA;NNNNN'1qtt551Q441,9JJJJJ'1qtt551Q441,9JJJJJJJrI   c                     t          dd          \  } }}}t          dd          \  }}t          d          \  }}}}	t          t          |           t          |                    t	          | |          k    sJ t          t                    t                              t	                    k    sJ t          t                    t          |                     dk    sJ t          t                    t          |                     dk    sJ t          t          |           t                              dk    sJ t          t          |           t                              dk    sJ t          t          |           t          |                    t	          | |          k    sJ t          t          t          |          t          |                              }
|
j        sJ t          t          t          |          t          |                              }
|
j        sJ t          t          fd           d S )	Nr   Tr   r   r   r6   r   c                  X    t          t                     t                              S r   )r   r	   r   )rP   rQ   s   rG   r   z"test_contraction.<locals>.<lambda>  s    [1r!uu5M5M rI   )
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     s   555JAq!Q555JAq!Q##JAq!Qr!uuadd##~a';';;;;;qttRUU##~a';';;;;;qttRUU##q((((r!uuadd##q((((qttRUU##q((((r!uuadd##q((((r!uuadd##~a';';;;;;K1qtt4455E$$$$K!bee4455E$$$$
+-M-M-M-M-MNNNNNrI   c                     t          d          \  } }}t          | |          t          ||          z  }t          |          t          | |          k    sJ t          | d          t          ||          z  }t          |          t          | d          t          ||          z  k    sJ t          d|          t          ||          z  }t          |          t          d|          k    sJ t          |d          t          ||          z  }t          |          t          d|          k    sJ t          | d          t          | |          z  t          |d          z  }t          |          dk    sJ t          d|           t          d|          z  t          d|          z  t          d|          z  }t          |          dk    sJ d S )Nzi,j,kr   rY   rZ   )r.   r   r   )rA   r_   r   r<   s       rG   test_evaluate_deltasr     s   gGAq!q!~a333A11!5!55555q!~a333A11!5!5q!8L8L!LLLLLq!~a333A11!5!55555q!~a333A11!5!55555q!~a333nQ6J6JJA1""""	1		q! 4 4	4!Q
 "0A"6"6
7A1""""""rI   c                  >   t          ddt                    \  } }}}t          ddt                    \  }}}}t          d          \  }}	}
}t          } |d||f| |f           |d||f| |f           k    sJ  |d||f| |f           |d||f|| f          k    sJ  |d||f| |f           |d||f|| f           k    sJ  |d||f| |f          dk    sJ  |d||f| | f          dk    sJ  |d|||f| |f           |d|||f| |f           k    sJ  |d|||f| ||f           |d|||f| ||f          k    sJ  |d||f| |f          }|                    |          sJ |                    |          sJ |                    |           sJ |                    |          sJ |                    ||           |d||f| |f          k    sJ d	|z                      | |          d	 |d||f||f          z  k    sJ |j        t          d          k    sJ t          |          d
k    sJ t          |          dk    sJ  |d||f| |f                              ||           |d||f| |f          k    sJ  |d|| f||f                              ||           |d|| f||f          k    sJ t          d          \  }}}}t          d||f||f          }t          |          dk    sJ t          |          dk    sJ d S )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   %@@@JAq!Q%@@@JAq!Q##JAq!Q	B2cAq6Aq6""rr#1v1v'>'>&>>>>>2cAq6Aq6""bbq!fq!f&=&=====2cAq6Aq6""rr#1v1v'>'>&>>>>>2cAq6Aq6""a''''2cAq6Aq6""a''''2cAq!9q!f%%""S1a)aV*D*D)DDDDD2cAq!9q!Qi((BBsQ1I1ay,I,IIIIIBsQFQF##E99Q<<99Q<<99Q<<99Q<<::arr#1v1v666666eG>>!Q1RRaVaV%<%<#<<<<<<6#;;&&&&<<?****u:://///2cAq6Aq6""''1--C!Q!Q1H1HHHHH2cAq6Aq6""''1--C!Q!Q1H1HHHHHZ((NBB%cB8b"X>>K!UUUUU{EEEEEEErI   c                     t          dd          \  } }}}t          dd          \  }}}}t          dt                    \  }}	}
}t          d|f|	f          t          t	          |          t          |	          z            z  }t          d	||	f|
|f          t          t	          |          t	          |	          z  t          |          z  t          |
          z            z  d
z  }t          t          t	          |           t          |          z            |z  dd          }|t          d|f| f          k    sJ t          t          t	          |           t	          |          z  t          |          z  t          |          z            |z  dd          }|t          d	||f| |f          k    sJ d S )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   555JAq!Q555JAq!Q...JAq!QaTA400r!uuQqTTzNND	S1a&1a&	1	1	BqEE"Q%%K!QqTT!	"	"
#$%	&A 2a551:t#'+&*, , ,C %cA4!666666"RUU2a55[1%add*++A-'+&*, , ,E 'aVaV<<<<<<<<rI   c                     t          d          \  } }t          t          | |          dz             t          | |          dz   k    sJ t          t          | |          dz             t          | |          dz   k    sJ d S )Nrd   rZ   rY   )r.   r#   attrA   r_   s     rG   'test_substitute_dummies_without_dummiesr   L  sy    5>>DAqc!Qii!m,,Aq		A====c!Qii!m,,Aq		A======rI   c            
      T   t          dt                    \  } }t          t          | |          t	          t          |           t          |          z            z  t          ||           t	          t          |          t          |           z            z  z
            dk    sJ d S Ni jrM   r   )r.   r,   r#   r   r   r   r   r   s     rG   #test_substitute_dummies_NO_operatorr   R  s    5e$$$DAqc!Qii2a551:6a))Br!uuQqTTzNN*+ , ,/01 1 1 1 1 1rI   c                      t          dt                    \  } }t          t          | |          t	          |           z  t          |          z  t          ||           t	          |          z  t          |           z  z
            dk    sJ d S r   )r.   r,   r#   r   r   r   r   s     rG   #test_substitute_dummies_SQ_operatorr   X  s    5e$$$DAqc!Qii1oadd2a))BqEE/!A$$&' ( (+,- - - - - -rI   c                     t          ddt                    \  } }t          ddt                    \  }}t          dt                    \  }}t          d          }t           || ||           ||||          z
  d	          d
k    sJ d S )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666DAq5d666DAq5e$$$DAqAaa1ajj11Q1::54HHHAMMMMMMrI   c            
          t          ddt                    \  } }}}t          d          }ddlm}  || |||gd          D ])}t           ||  || |||          z
            dk    sJ *d S )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  s    %@@@JAq!QA444444*aAq\1-- C C!!!V*qqAq!}}"<==BBBBBC CrI   c            	      J   t          dd          } t          dd          }t          ddt                    \  }}t          ddt          	          \  }}t          d
          }t          d          }t          } |||||           |||           z   |||          z   |||          z   |||||           |||           z   |||          z   |||          z   |||||           |||           z   |||          z   |||          z   |||||           |||           z   |||          z   |||          z  g}	|	dd          D ]J}
 ||	d                    ||
          k    sJ t	          |	d                   t	          |
          k    sJ Kd S )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  s   	$	'	'	'B	$	'	'	'B5d666DAq5d666DAqAAD 	
!Q1aa2hhqqAww&qqQxx/	!Q1aa2hhqqAww&qqQxx/	!Q1aa2hhqqAww&qqQxx/	!Q1aa2hhqqAww&qqQxx/E ) J JtE!H~~f----!%(++/A&/I/IIIIIIJ JrI   c            	      *	   t          dd          \  } }t          dd          \  }}t          ddt                    \  }}t          ddt          	          \  }}t          d
          }t          d          }	t          }
 |||||           |	||           z   |	||          z   |	||          z   |	||          z   |||||           |	||          z   |	||           z   |	||          z   |	||          z   |||||           |	||           z   |	||          z   |	||          z   |	||          z   |||||           |	||          z   |	||           z   |	||          z   |	||          z  g}|dd          D ]J} |
|d                    |
|          k    sJ t	          |d                   t	          |          k    sJ K |||||           |	||           z   |	||          z   |	||          z   |	||          z   |||||           |	||           z   |	||          z   |	||          z   |	||          z   |||||           |	||           z   |	||          z   |	||          z   |	||          z   |||||           |	||           z   |	||          z   |	||          z   |	||          z  g}|dd          D ]J} |
|d                    |
|          k    sJ t	          |d                   t	          |          k    sJ K |||||           |	||           z   |	||          z   |	||          z   |	||          z   |||||           |	||          z   |	||           z   |	||          z   |	||          z   |||||           |	||           z   |	||          z   |	||          z   |	||          z   |||||           |	||          z   |	||           z   |	||          z   |	||          z  g}|dd          D ]J} |
|d                    |
|          k    sJ t	          |d                   t	          |          k    sJ Kd S 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    sw   U---FBU---FB5d666DAq5d666DAqAAD 	
!Q1aa2hhqqBxx'"a02q9	!Q1aa2hhqqBxx'"a02q9	!Q1aa2hhqqBxx'"a02q9	!Q1aa2hhqqBxx'"a02q9E ) J JtE!H~~f----!%(++/A&/I/IIIIII 	
!Q1aa2hhqqBxx'"a02q9	!Q1aa2hhqqBxx'"a02q9	!Q1aa2hhqqBxx'"a02q9	!Q1aa2hhqqBxx'"a02q9E ) J JtE!H~~f----!%(++/A&/I/IIIIII
 	
!Q1aa2hhqqBxx'"a02q9	!Q1aa2hhqqBxx'"a02q9	!Q1aa2hhqqBxx'"a02q9	!Q1aa2hhqqBxx'"a02q9E ) J JtE!H~~f----!%(++/A&/I/IIIIIIJ JrI   c                  &   t          d          \  } }}t          t          |           t          |          z  t          |          z                                d          t          t          |           t          |          z            k    sJ t          t          |           t          |          z  t          |          z                                d          t          t          |          t          |          z            k    sJ t          t          |           t          |          z  t          |          z                                d          t          t          |           t          |          z            k    sJ d S )Nzp,q,rrY   r   rZ   )r.   r   r   	get_subNO)r:   r;   r<   s      rG   test_get_subNOr    s    gGAq!add1Q44i!n''**b1addmm;;;;add1Q44i!n''**b1addmm;;;;add1Q44i!n''**b1addmm;;;;;;rI   c            	         t          ddt                    \  } }}}t          ddt                    \  }}}}t          d          }t          d          }	t          }
 || |||           |	||           z   |	||          z   ||| ||           |	||           z   |	||          z   || |||           |	||           z   |	||          z  g}|dd          D ]J} |
|d	                    |
|          k    sJ t	          |d	                   t	          |          k    sJ K || |||           |	||           z   |	||          z   ||| ||           |	||           z   |	||          z  g}|dd          D ]J} |
|d	                    |
|          k    sJ t	          |d	                   t	          |          k    sJ K || |||           |	||           z   |	||          z   || |||           |	||           z   |	||          z  g}|dd          D ]J} |
|d	                    |
|          k    sJ t	          |d	                   t	          |          k    sJ K || |||           |	||           z   |	||          z   ||| ||           |	||          z   |	||           z   || |||           |	||           z   |	||          z   ||| ||           |	||          z   |	||           z  g}|dd          D ]J} |
|d	                    |
|          k    sJ t	          |d	                   t	          |          k    sJ Kd S 
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.   %@@@JAq!Q%@@@JAq!QAAD 	
!Q1aa1ggaa1gg%	!Q1aa1ggaa1gg%	!Q1aa1ggaa1gg%E
 ) J JtE!H~~f----!%(++/A&/I/IIIIII 	
!Q1aa1ggaa1gg%	!Q1aa1ggaa1gg%E ) J JtE!H~~f----!%(++/A&/I/IIIIII 	
!Q1aa1ggaa1gg%	!Q1aa1ggaa1gg%E ) J JtE!H~~f----!%(++/A&/I/IIIIII 	
!Q1aa1ggaa1gg%	!Q1aa1ggaa1gg%	!Q1aa1ggaa1gg%	!Q1aa1ggaa1gg%	E ) J JtE!H~~f----!%(++/A&/I/IIIIIIJ JrI   c                     t          ddt                    \  } }}}}}t          ddt                    \  }}}}	}
}t          ddt                    \  }}}}t          ddt                    \  }}}}dd	lm} t	          d
          }t	          d          }t
          } |||||           |||| |          z   || |||          z  } |||||	gd          }|                    t          ||||gt          |                              }|D ]g}t          ||||g|          }|                    |          } ||           ||          k    sJ t          |          t          |          k    sJ h |||||           |||||           z   ||| ||          z  } |||||	gd          }|                    t          ||||gt          |                              }|D ]g}t          ||||g|          }|                    |          } ||           ||          k    sJ t          |          t          |          k    sJ h |||||           |||| |          z   ||| ||          z  } |||||	gd          }|                    t          ||||gt          |                              }|D ]g}t          ||||g|          }|                    |          } ||           ||          k    sJ t          |          t          |          k    sJ h |||||           |||||           z   || |||          z  } |||||	gd          }|                    t          ||||gt          |                              }|D ]g}t          ||||g|          }|                    |          } ||           ||          k    sJ t          |          t          |          k    sJ hd 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   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_VT2conjT2r2    s   }$EJJJAq!Q1}$EJJJAq!Q1]%HHHNBB]%HHHNBB444444AAD qRR  2r1a01aR@HQ1aL!,,J==b"b"-tJ/?/?@@AAD D DBB'00}}X&&tDzzTT$ZZ''''!$''+=d+C+CCCCCCqRR  2r1a01aR@HQ1aL!,,J==b"b"-tJ/?/?@@AAD D DBB'00}}X&&tDzzTT$ZZ''''!$''+=d+C+CCCCCC qRR  2r1a01aR@HQ1aL!,,J==b"b"-tJ/?/?@@AAD D DBB'00}}X&&tDzzTT$ZZ''''!$''+=d+C+CCCCCCqRR  2r1a01aR@HQ1aL!,,J==b"b"-tJ/?/?@@AAD D DBB'00}}X&&tDzzTT$ZZ''''!$''+=d+C+CCCCCC	D DrI   c                     t          ddt                    \  } }}}}}t          ddt                    \  }}}}	}
}t          ddt                    \  }}}}t          ddt                    \  }}}}dd	lm} t	          d
          }t	          d          }t
          } |||||           |||| |          z   |||| |          z  } |||||	gd          }|                    t          ||||gt          |                              }|D ]g}t          ||||g|          }|                    |          } ||           ||          k    sJ t          |          t          |          k    sJ h |||||           |||||           z   |||| |          z  } |||||	gd          }|                    t          ||||gt          |                              }|D ]g}t          ||||g|          }|                    |          } ||           ||          k    sJ t          |          t          |          k    sJ hd S r  r$  r'  s                                 rG   8test_equivalent_internal_lines_VT2conjT2_ambiguous_orderr4  !  s    }$EJJJAq!Q1}$EJJJAq!Q1]%HHHNBB]%HHHNBB444444AAD qRR  2r1a02r1a@HQ1aL!,,J==b"b"-tJ/?/?@@AAD D DBB'00}}X&&tDzzTT$ZZ''''!$''+=d+C+CCCCCCqRR  2r1a02r1a@HQ1aL!,,J==b"b"-tJ/?/?@@AAD D DBB'00}}X&&tDzzTT$ZZ''''!$''+=d+C+CCCCCC	D DrI   c            
      j   t          ddt                    \  } }}}t          ddt                    \  }}}}t          d          }t          d          }	t          }
 || |||           |	||| |          z   ||| ||           |	||| |          z   || |||           |	||| |          z   ||| ||           |	||| |          z  g}|dd          D ]J} |
|d	                    |
|          k    sJ t	          |d	                   t	          |          k    sJ K || |||           |	||| |          z   || |||           |	||| |          z   || |||           |	||||           z   || |||           |	||||           z  g}|dd          D ]J} |
|d	                    |
|          k    sJ t	          |d	                   t	          |          k    sJ K || |||           |	||| |          z   ||| ||           |	||||           z   || |||           |	||| |          z   ||| ||           |	||||           z  g}|dd          D ]J} |
|d	                    |
|          k    sJ t	          |d	                   t	          |          k    sJ Kd S r  r  r  s                rG   "test_equivalent_internal_lines_VT2r6  B  sg   %@@@JAq!Q%@@@JAq!QAAD 	
!Q1aa1amm#	!Q1aa1amm#	!Q1aa1amm#	!Q1aa1amm#E  ) J JtE!H~~f----!%(++/A&/I/IIIIII 	
!Q1aa1amm#	!Q1aa1amm#	!Q1aa1amm#	!Q1aa1amm#E ) J JtE!H~~f----!%(++/A&/I/IIIIII 	
!Q1aa1amm#	!Q1aa1amm#	!Q1aa1amm#	!Q1aa1amm#	E ) J JtE!H~~f----!%(++/A&/I/IIIIIIJ JrI   c            
         t          dd          \  } }t          dd          \  }}t          ddt                    \  }}t          ddt          	          \  }}t          d
          }t          d          }	t          }
 |||||           |	||| |          z   |	||||          z   |||||           |	||| |          z   |	||||          z   |||||           |	||| |          z   |	||||          z   |||||           |	||| |          z   |	||||          z  g}|dd          D ]J} |
|d                    |
|          k    sJ t	          |d                   t	          |          k    sJ K |||||           |	||| |          z   |	||||          z   |||||           |	||| |          z   |	||||          z   |||||           |	||| |          z   |	||||          z   |||||           |	||| |          z   |	||||          z  g}|dd          D ]J} |
|d                    |
|          k    sJ t	          |d                   t	          |          k    sJ K |||||           |	||| |          z   |	||||          z   |||||           |	||| |          z   |	||||          z   |||||           |	||| |          z   |	||||          z   |||||           |	||| |          z   |	||||          z  g}|dd          D ]J} |
|d                    |
|          k    sJ t	          |d                   t	          |          k    sJ Kd S r  r  r  s                rG   test_internal_external_VT2T2r8  s  sk   U---FBU---FB5d666DAq5d666DAqAAD 	
!Q1aaAr1oo%aaAr1oo5	!Q1aaAr1oo%aaAr1oo5	!Q1aaAr1oo%aaAr1oo5	!Q1aaAr1oo%aaAr1oo5	E ) J JtE!H~~f----!%(++/A&/I/IIIIII	!Q1aaAr1oo%aa2r1oo5	!Q1aaAr1oo%aa2r1oo5	!Q1aaAr1oo%aa2r1oo5	!Q1aaAr1oo%aa2r1oo5	E ) J JtE!H~~f----!%(++/A&/I/IIIIII	!Q1aa2r1oo%aaAr1oo5	!Q1aa2r1oo%aaAr1oo5	!Q1aa2r1oo%aaAr1oo5	!Q1aa2r1oo%aaAr1oo5	E ) J JtE!H~~f----!%(++/A&/I/IIIIIIJ JrI   c            
         t          d          \  } }t          d          \  }}t          dt                    \  }}t          dt                    \  }}t          d          }t          d          }	t          }
 |||||           |	||| |          z   |	||||          z   |||||           |	||| |          z   |	||||          z   |||||           |	||| |          z   |	||||          z   |||||           |	||| |          z   |	||||          z  g}|dd          D ]J} |
|d	                    |
|          k    sJ t	          |d	                   t	          |          k    sJ Kd S )
Nr   r   r	  rM   r
  r   r   rY   r   r  r  s                rG   test_internal_external_pqrsr:    s   U^^FBU^^FB5e$$$DAq5e$$$DAqAAD 	
!Q1aaAr1oo%aaAr1oo5	!Q1aaAr1oo%aaAr1oo5	!Q1aaAr1oo%aaAr1oo5	!Q1aaAr1oo%aaAr1oo5	E ) J JtE!H~~f----!%(++/A&/I/IIIIIIJ JrI   c                     t          dd          \  } }t          ddt                    \  }}}t          ddt                    \  }}t          dt          	          \  }}t          d
          }	t          d          }
t          d          }t          } | |	||           |
||          z            ||gk    sJ  | |	||           |
||          z            ||gk    sJ  | |	||           |
||          z            ||gk    sJ  | |	||           |
||          z            ||gk    sJ  | |	||           |
||          z   |||          z            |||gk    sJ  | |	||           |
||          z   |||          z            |||gk    sJ  | |	||           |
||          z   |||          z            |||gk    sJ  | |	||           |
||          z   |||          z            |||gk    sJ  | |	||           |
||          z   |||          z            |||gk    sJ  | |	||           |
||          z   |||          z            |||gk    sJ  | |	||           |
||          z   |||          z            |||gk    sJ  | |	||           |
||          z   |||          z            |||gk    sJ  | |	|| |           |	|||          z   |	|||          z            |||gk    sJ  | |	|| |           |	|||          z   |	|||          z            |||gk    sJ  | |	|| |           |	|||          z   |	|||          z            |||gk    sJ  | |	|| |           |	|||          z   |	|||          z            |||gk    sJ  | |	|| |           |	|||          z   |	|||          z            |||gk    sJ  | |	|| |           |	|||          z   |	|||          z            |||gk    sJ  | |	|| |           |	|||          z   |	|||          z            |||gk    sJ  | |	|| |           |	|||          z   |	|||          z            |||gk    sJ  | |	|||           |
|||          z            |||gk    sJ  | |	|||           |
|||          z            |||gk    sJ  | |	|||           |
|||          z            |||gk    sJ  | |	|||           |
|||          z            |||gk    sJ  | |	|||           |
|||          z            |||gk    sJ  | |	|||           |
|||          z            |||gk    sJ  | |
|||           |	|||          z            |||gk    sJ  | |
|||           |	|||          z            |||gk    sJ  | |
|||           |	|||          z            |||gk    sJ  | |
|||           |	|||          z            |||gk    sJ  | |
|||           |	|||          z            |||gk    sJ  | |
|||           |	|||          z            |||gk    sJ d S )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;;;GAq!5d666DAq5e$$$DAqAAAD 4!Q!Q  QF****4!Q!Q  QF****4!Q!Q  QF****4!Q!Q  QF**** 4!Q!Q!Q'((Q1I55554!Q!Q!Q'((Q1I55554!Q!Q!Q'((Q1I55554!Q!Q!Q'((Q1I55554!Q!Q!Q'((Q1I55554!Q!Q!Q'((Q1I55554!Q!Q!Q'((Q1I55554!Q!Q!Q'((Q1I5555 4!RAAaQKK'"a344Aq	AAAA4!RAAaQKK'"a344Aq	AAAA4!RAAaQKK'"a344Aq	AAAA4!RAAaQKK'"a344Aq	AAAA4!RAAaQKK'"a344Aq	AAAA4!RAAaQKK'"a344Aq	AAAA4!RAAaQKK'"a344Aq	AAAA4!RAAaQKK'"a344Aq	AAAA 4!Q

11Q1::%&&1a)33334!Q

11Q1::%&&1a)33334!Q

11Q1::%&&1a)33334!Q

11Q1::%&&1a)33334!Q

11Q1::%&&1a)33334!Q

11Q1::%&&1a)33334!Q

11Q1::%&&1a)33334!Q

11Q1::%&&1a)33334!Q

11Q1::%&&1a)33334!Q

11Q1::%&&1a)33334!Q

11Q1::%&&1a)33334!Q

11Q1::%&&1a)333333rI   c            	         t          dd          \  } }t          ddt                    \  }}}}}t          ddt                    \  }}}	}
}t          dt          	          \  }}t          d
dt                    \  }}}}t          ddt                    \  }}}}t          ddt                    \  }}}}t          ddt                    \  }}}}t          d          }t          d          }ddlm}   |||           |||          z   |||          z   |||          z   |||          z  }! | |||	|
|gd          }"|!                    t          |||||gt          |"                              }#|"D ]N}$t          |||||g|$          }%|!                    |%          }&t          |&          t          |#          k    sJ O |||           |||          z   |||          z   |||          z   |||          z  }! | |||	|
|gd          }"|!                    t          |||||gt          |"                              }#|"D ]N}$t          |||||g|$          }%|!                    |%          }&t          |&          t          |#          k    sJ O |||||           |||||          z   |||          z  }! | |||	|
|gd          }"|!                    t          |||||gt          |"                              }#|"D ]N}$t          |||||g|$          }%|!                    |%          }&t          |&          t          |#          k    sJ Od S )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  r.  r/  r0  r  r1  rC   s'                                          rG   test_dummy_order_ambiguousrG    s   U---FBKTuEEEMAq!QKTuEEEMAq!Q5e$$$DAq]%HHHNBB]%HHHNBB]%HHHNBB]%HHHNBBAA444444 qRyy2r"11R99,QQr2YY6qqRyy@HQ1aOQ//J==b"b"b14
3C3CDDEED D DBB+V44}}X&&!$''+=d+C+CCCCCC qRyy2r"11R99,QQr2YY6qqRyy@HQ1aOQ//J==b"b"b14
3C3CDDEED D DBB+V44}}X&&!$''+=d+C+CCCCCC qRR  2r2r!2!2211R99<HQ1aOQ//J==b"b"b14
3C3CDDEED D DBB+V44}}X&&!$''+=d+C+CCCCCCD DrI   c                  D    t          d| d d         | dd                    S )Nr   rZ   )r   rx   s    rG   atvrJ    s$    sD!Hd122h888rI   c                      t          |           dk    r!t          d| d d         | dd                    S t          |           dk    rt          d| d         f| d         f          S d S )Nru   r   rZ   r   rY   )rw   r   rI  s    rG   r   r     sg    
4yyA~~"3RaR$qrr(<<<	Ta"3a
T!WJ??? 
rI   c            	      @   t          dd          } t          dd          }t          ddt                    \  }}t          ddt          	          \  }}t          ||||          t          ||           z  t          ||          z  t          ||          z  t          ||||          t          ||           z  t          ||          z  t          ||          z  t          ||||          t          ||           z  t          ||          z  t          ||          z  t          ||||          t          ||           z  t          ||          z  t          ||          z  g}|d
d          D ]*}t	          |d                   t	          |          k    sJ +d S )NrA   Tr   rP   r   r	  r   r
  r   rY   r   r.   r,   rJ  r   r#   )r  r  r   r   rR   rS   r  r  s           rG   -test_dummy_order_inner_outer_lines_VT1T1T1_ATrN    s   	$	'	'	'B	$	'	'	'B5d666DAq5d666DAq 	Aq!QAr

"3q!99,SQZZ7Aq!QAr

"3q!99,SQZZ7Aq!QAr

"3q!99,SQZZ7Aq!QAr

"3q!99,SQZZ7E ) J J!%(++/A&/I/IIIIIIJ JrI   c                     t          dd          \  } }t          dd          \  }}t          ddt                    \  }}t          ddt          	          \  }}t          ||||          t          ||           z  t          ||          z  t          ||          z  t          ||          z  t          ||||          t          ||          z  t          ||           z  t          ||          z  t          ||          z  t          ||||          t          ||           z  t          ||          z  t          ||          z  t          ||          z  g}|d
d          D ]+}	t	          |d                   t	          |	           k    sJ ,t          ||||          t          ||           z  t          ||          z  t          ||          z  t          ||          z  t          ||||          t          ||          z  t          ||           z  t          ||          z  t          ||          z  g}|d
d          D ]*}	t	          |d                   t	          |	          k    sJ +d S Nr   Tr   r   r   r	  r   r
  r   rY   r   rM  
r  r  r  r  r   r   rR   rS   r  r  s
             rG   /test_dummy_order_inner_outer_lines_VT1T1T1T1_ATrR  1  sV   U---FBU---FB5d666DAq5d666DAq 	Aq!QAr

"3q"::-c"ajj8RCAq!QAr

"3q"::-c"ajj8RCAq!QAr

"3q"::-c"ajj8RC	E ) K K!%(++0B60J0J/JJJJJJ 	Aq!QAr

"3q"::-c"ajj8RCAq!QAr

"3q"::-c"ajj8RCE
 ) J J!%(++/A&/I/IIIIIIJ JrI   c            	         t          ddt                    \  } }}}t          ddt                    \  }}}}t          | |||          t          ||           z  t          ||          z  t          || ||          t          ||           z  t          ||          z  t          | |||          t          ||           z  t          ||          z  g}|dd          D ]*}	t	          |d                   t	          |	          k    sJ +t          | |||          t          ||           z  t          ||          z  t          || ||          t          ||           z  t          ||          z  g}|dd          D ]*}	t	          |d                   t	          |	          k    sJ +t          | |||          t          ||           z  t          ||          z  t          | |||          t          ||           z  t          ||          z  g}|dd          D ]*}	t	          |d                   t	          |	          k    sJ +t          | |||          t          ||           z  t          ||          z  t          || ||          t          ||          z  t          ||           z  t          | |||          t          ||           z  t          ||          z  t          || ||          t          ||          z  t          ||           z  g}|dd          D ]*}	t	          |d                   t	          |	          k    sJ +d S Nr   Tr   rK   r   rY   r   rM  
rA   r_   r   r   rP   rQ   rR   rS   r  r  s
             rG   'test_equivalent_internal_lines_VT1T1_ATrV  L  s=   %@@@JAq!Q%@@@JAq!Q 	Aq!QAq		!#a))+Aq!QAq		!#a))+Aq!QAq		!#a))+E
 ) J J!%(++/A&/I/IIIIII 	Aq!QAq		!#a))+Aq!QAq		!#a))+E ) J J!%(++/A&/I/IIIIII 	Aq!QAq		!#a))+Aq!QAq		!#a))+E ) J J!%(++/A&/I/IIIIII 	Aq!QAq		!#a))+Aq!QAq		!#a))+Aq!QAq		!#a))+Aq!QAq		!#a))+	E ) J J!%(++/A&/I/IIIIIIJ JrI   c                  Z   t          ddt                    \  } }}}}}t          ddt                    \  }}}}	}
}t          ddt                    \  }}}}t          ddt                    \  }}}}dd	lm} t	          ||||          t          ||| |          z  t          | |||          z  } |||||	gd
          }|                    t          ||||gt          |                              }|D ]M}t          ||||g|          }|                    |          }t          |          t          |          k    sJ Nt	          ||||          t          ||||           z  t          || ||          z  } |||||	gd
          }|                    t          ||||gt          |                              }|D ]M}t          ||||g|          }|                    |          }t          |          t          |          k    sJ Nt	          ||||          t          ||| |          z  t          || ||          z  } |||||	gd
          }|                    t          ||||gt          |                              }|D ]M}t          ||||g|          }|                    |          }t          |          t          |          k    sJ Nt	          ||||          t          ||||           z  t          | |||          z  } |||||	gd
          }|                    t          ||||gt          |                              }|D ]M}t          ||||g|          }|                    |          }t          |          t          |          k    sJ Nd S Nr   Tr   r!  r   r"  r#  r   r  ru   
r.   r,   r  r  rJ  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  r.  r/  r0  r  r1  rC   s                              rG   +test_equivalent_internal_lines_VT2conjT2_ATr[  p  s   }$EJJJAq!Q1}$EJJJAq!Q1]%HHHNBB]%HHHNBB444444 2r2r""3r2q!#4#44SAr25F5FFHQ1aL!,,J==b"b"-tJ/?/?@@AAD D DBB'00}}X&&!$''+=d+C+CCCCCC2r2r""3r2q!#4#44SAr25F5FFHQ1aL!,,J==b"b"-tJ/?/?@@AAD D DBB'00}}X&&!$''+=d+C+CCCCCC 2r2r""3r2q!#4#44SAr25F5FFHQ1aL!,,J==b"b"-tJ/?/?@@AAD D DBB'00}}X&&!$''+=d+C+CCCCCC2r2r""3r2q!#4#44SAr25F5FFHQ1aL!,,J==b"b"-tJ/?/?@@AAD D DBB'00}}X&&!$''+=d+C+CCCCCCD DrI   c                  *   t          ddt                    \  } }}}}}t          ddt                    \  }}}}	}
}t          ddt                    \  }}}}t          ddt                    \  }}}}dd	lm} t	          ||||          t          ||| |          z  t          ||| |          z  } |||||	gd
          }|                    t          ||||gt          |                              }|D ]M}t          ||||g|          }|                    |          }t          |          t          |          k    sJ Nt	          ||||          t          ||||           z  t          ||| |          z  } |||||	gd
          }|                    t          ||||gt          |                              }|D ]M}t          ||||g|          }|                    |          }t          |          t          |          k    sJ Nd S rX  rY  rZ  s                              rG   ;test_equivalent_internal_lines_VT2conjT2_ambiguous_order_ATr]    sX    }$EJJJAq!Q1}$EJJJAq!Q1]%HHHNBB]%HHHNBB444444 2r2r""3r2q!#4#44SRA5F5FFHQ1aL!,,J==b"b"-tJ/?/?@@AAD D DBB'00}}X&&!$''+=d+C+CCCCCC2r2r""3r2q!#4#44SRA5F5FFHQ1aL!,,J==b"b"-tJ/?/?@@AAD D DBB'00}}X&&!$''+=d+C+CCCCCCD DrI   c            
         t          ddt                    \  } }}}t          ddt                    \  }}}}t          | |||          t          ||| |          z  t          || ||          t          ||| |          z  t          | |||          t          ||| |          z  g}|dd          D ]*}	t	          |d                   t	          |	          k    sJ +t          | |||          t          ||| |          z  t          | |||          t          ||| |          z  t          | |||          t          ||||           z  g}|dd          D ]*}	t	          |d                   t	          |	          k    sJ +t          | |||          t          ||| |          z  t          || ||          t          ||||           z  t          | |||          t          ||| |          z  t          || ||          t          ||||           z  g}|dd          D ]*}	t	          |d                   t	          |	          k    sJ +d S rT  rM  rU  s
             rG   %test_equivalent_internal_lines_VT2_ATr_    sm   %@@@JAq!Q%@@@JAq!Q 	Aq!QAq!Q'Aq!QAq!Q'Aq!QAq!Q'	E ) J J!%(++/A&/I/IIIIII 	Aq!QAq!Q'Aq!QAq!Q'Aq!QAq!Q'	E ) J J!%(++/A&/I/IIIIII 	Aq!QAq!Q'Aq!QAq!Q'Aq!QAq!Q'Aq!QAq!Q'	E ) J J!%(++/A&/I/IIIIIIJ JrI   c            
      0   t          dd          \  } }t          dd          \  }}t          ddt                    \  }}t          ddt          	          \  }}t          ||||          t          ||| |          z  t          ||||          z  t          ||||          t          ||| |          z  t          ||||          z  t          ||||          t          ||| |          z  t          ||||          z  t          ||||          t          ||| |          z  t          ||||          z  g}|d
d          D ]*}	t	          |d                   t	          |	          k    sJ +t          ||||          t          ||| |          z  t          ||||          z  t          ||||          t          ||| |          z  t          ||||          z  t          ||||          t          ||| |          z  t          ||||          z  t          ||||          t          ||| |          z  t          ||||          z  g}|d
d          D ]*}	t	          |d                   t	          |	          k    sJ +t          ||||          t          ||| |          z  t          ||||          z  t          ||||          t          ||| |          z  t          ||||          z  t          ||||          t          ||| |          z  t          ||||          z  t          ||||          t          ||| |          z  t          ||||          z  g}|d
d          D ]*}	t	          |d                   t	          |	          k    sJ +d S rP  rM  rQ  s
             rG   test_internal_external_VT2T2_ATra    s   U---FBU---FB5d666DAq5d666DAq 	Aq!QB2q)))#b!R*;*;;Aq!QB2q)))#b!R*;*;;Aq!QB2q)))#b!R*;*;;Aq!QB2q)))#b!R*;*;;	E ) J J!%(++/A&/I/IIIIIIAq!QB2q)))#aR*;*;;Aq!QB2q)))#aR*;*;;Aq!QB2q)))#aR*;*;;Aq!QB2q)))#aR*;*;;	E ) J J!%(++/A&/I/IIIIIIAq!QAr2q)))#b!R*;*;;Aq!QAr2q)))#b!R*;*;;Aq!QAr2q)))#b!R*;*;;Aq!QAr2q)))#b!R*;*;;	E ) J J!%(++/A&/I/IIIIIIJ JrI   c            
         t          d          \  } }t          d          \  }}t          dt                    \  }}t          dt                    \  }}t          ||||          t          ||| |          z  t          ||||          z  t          ||||          t          ||| |          z  t          ||||          z  t          ||||          t          ||| |          z  t          ||||          z  t          ||||          t          ||| |          z  t          ||||          z  g}|dd          D ]*}	t	          |d                   t	          |	          k    sJ +d S )Nr   r   r	  rM   r
  rY   r   rM  rQ  s
             rG   test_internal_external_pqrs_ATrc    sy   U^^FBU^^FB5e$$$DAq5e$$$DAq 	Aq!QB2q)))#b!R*;*;;Aq!QB2q)))#b!R*;*;;Aq!QB2q)))#b!R*;*;;Aq!QB2q)))#b!R*;*;;	E ) J J!%(++/A&/I/IIIIIIJ JrI   c                      t          d          } t          t          t          |           dz  t	          |                               dk    sJ d S )N0rZ   z(- \left[b_{0},{b^\dagger_{0}}^{2}\right])r-   r4   r   r   r	   )rP   s    rG   test_issue_19661rf    s]    sABqEE1Hadd++  CD D D D D DrI   c                      t          d          } t          ddt                    \  }}t          ddt                    \  }}t          | ||f||f          t          | ||f||f           k    sJ d S )Nr   )rR   rS   Tr   )r   r   r   )r.   r,   r   )r   rR   rS   r   r   s        rG   +test_canonical_ordering_AntiSymmetricTensorrh    s    A9$',. . .DAq9$',. . .DAq q1a&1a& 
 
!!aVaV4445 5 5 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  r2  r4  r6  r8  r:  r=  rG  rJ  r   rN  rR  rV  r[  r]  r_  ra  rc  rf  rh   rI   rG   <module>rw     s   : : : : : : 6 6 6 6 6 6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 * ) ) ) ) ) 2 2 2 2 2 2 2 2 , , , , , , , , " " " " " " 6 6 6 6 6 6 6 6 6 6 9 9 9 9 9 9 % % % % % % , , , , , , - - - - - - - - & & & & & &. . .&  8% % %*  6 6 66 6 6- - -"; ; ;' ' '  	: 	: 	:1 1 1	* 	* 	*
S 
S 
S " " "*e *e *eZ` ` `@' ' '8	6 	6 	6  0' 0' 0'f'9 '9 '9T#K #K #KLO O O$# # #. F  F  FF= = =(> > >1 1 1- - -N N NC C CJ J J22J 2J 2Jj< < <)J )J )JX/D /D /DdD D DB.J .J .Jb$J $J $JNJ J J*54 54 54p(D (D (DV9 9 9@ @ @J J J(J J J6!J !J !JH'D 'D 'DTD D D6J J J@J J J@J J J D D D
5 
5 
5 
5 
5rI   