K iwdZddlmZddlmZddlmZddlmZmZm Z ddl m Z gdZ Gdd eZ Gd d eZGd d e Zy)zFermionic quantum operators.)IntegerS)Operator) HilbertSpaceKetBra)KroneckerDelta) FermionOpFermionFockKetFermionFockBrac|eZdZdZedZedZedZdZ dZ dZ dZ d Z d Zd Zd Zd ZdZy)r a"A fermionic operator that satisfies {c, Dagger(c)} == 1. Parameters ========== name : str A string that labels the fermionic mode. annihilation : bool A bool that indicates if the fermionic operator is an annihilation (True, default value) or creation operator (False) Examples ======== >>> from sympy.physics.quantum import Dagger, AntiCommutator >>> from sympy.physics.quantum.fermion import FermionOp >>> c = FermionOp("c") >>> AntiCommutator(c, Dagger(c)).doit() 1 c |jdSNr)argsselfs c/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sympy/physics/quantum/fermion.pynamezFermionOp.name'syy|c2t|jdS)N)boolrrs ris_annihilationzFermionOp.is_annihilation+sDIIaL!!rcy)N)cTrs r default_argszFermionOp.default_args/srct|dvrtd|zt|dk(r|dtjf}t|dk(r|dt |df}t j |g|S)N)rz"1 or 2 parameters expected, got %srrr )len ValueErrorrOnerr__new__)clsrhintss rr$zFermionOp.__new__3st4yF"ADHI I t9>GQUU#D t9>GWT!W-.D+d++rc 6d|vr|drtjSy)N independentrZerorotherr&s r_eval_commutator_FermionOpz$FermionOp._eval_commutator_FermionOp?s E !eM&:66Mrc |j|jk(r)|js|jrtjSyd|vr |drd|z|zSy)Nr(r )rrrr#r+s r_eval_anticommutator_FermionOpz(FermionOp._eval_anticommutator_FermionOpFsT 99 "''E,A,Auu  e #m(<t8e# #rc d|z|zS)Nr rr+s r_eval_anticommutator_BosonOpz&FermionOp._eval_anticommutator_BosonOpRs4x%rc "tjSNr)r+s r_eval_commutator_BosonOpz"FermionOp._eval_commutator_BosonOpVs vv rcVtt|j|j Sr3)r strrrrs r _eval_adjointzFermionOp._eval_adjointYs TYYT-A-A)ABBrcz|jrdt|jzSdt|jzS)Nz{%s}z{{%s}^\dagger}rr6rrprinterrs r_print_contents_latexzFermionOp._print_contents_latex\s1   S^+ +$s499~5 5rcz|jrdt|jzSdt|jzS)Nz%sz Dagger(%s)r9r:s r_print_contentszFermionOp._print_contentsbs1   3tyy>) ) 3tyy>1 1rcddlm}|j|jdg|}|jr|S||dzS)Nr) prettyFormu†) sympy.printing.pretty.stringpictr@_printrr)rr;rr@pforms r_print_contents_prettyz FermionOp._print_contents_prettyhs@?tyy|3d3   L*\22 2rcddlm}|dk(r |jS|dk(r|S|dkDdk(r|jdk(r |jS|dkdk(s|jdk(r t dt j||S)NrrrTFzBFermionic operators can only be raised to a positive integer power)sympy.core.singletonrr# is_integerr*r"r _eval_power)rexprs rrHzFermionOp._eval_powerps}* !855L AXKAg$ 3>>T#966MAg$ #..E"9*+ +##D#..rN)__name__ __module__ __qualname____doc__propertyrr classmethodrr$r-r/r1r4r7r<r>rDrHrrrr r sv*"" ,  C6 2 3 /rr cReZdZdZdZedZedZedZ dZ dZ y) r zxFock state ket for a fermionic mode. Parameters ========== n : Number The Fock state number. cL|dvr tdtj||SN)rrzn must be 0 or 1)r"rr$r%ns rr$zFermionFockKet.__new__& F?/0 0{{3""rc |jdSrlabelrs rrTzFermionFockKet.nzz!}rctSr3)r rs r dual_classzFermionFockKet.dual_classrctSr3)r)r%rXs r_eval_hilbert_spacez"FermionFockKet._eval_hilbert_spaces ~rc Bt|j|jSr3)r rT)rbrar&s r!_eval_innerproduct_FermionFockBraz0FermionFockKet._eval_innerproduct_FermionFockBrasdffcee,,rc |jr*|jdk(r tdStjS|jdk(r tdStjS)Nrr)rrTr rr*)ropoptionss r_apply_from_right_to_FermionOpz-FermionFockKet._apply_from_right_to_FermionOpsI  vv{%a((vv vv{%a((vv rN) rJrKrLrMr$rNrTrOr[r^rarerrrr r }sR# - rr c6eZdZdZdZedZedZy)r zxFock state bra for a fermionic mode. Parameters ========== n : Number The Fock state number. cL|dvr tdtj||SrR)r"r r$rSs rr$zFermionFockBra.__new__rUrc |jdSrrWrs rrTzFermionFockBra.nrYrctSr3)r rs rr[zFermionFockBra.dual_classr\rN) rJrKrLrMr$rNrTrOr[rrrr r s4# rr N)rMsympy.core.numbersrrFrsympy.physics.quantumrrrr (sympy.functions.special.tensor_functionsr __all__r r r rrrrnsI"&"*88C j/j/X)S)XSr