
    \hw                         S r SSKJr  SSKJr  SSKJr  SSKJrJrJ	r	  SSK
Jr  / SQr " S S	\5      r " S
 S\5      r " S S\	5      rg)zFermionic quantum operators.    )IntegerS)Operator)HilbertSpaceKetBra)KroneckerDelta)	FermionOpFermionFockKetFermionFockBrac                       \ rS rSrSr\S 5       r\S 5       r\S 5       r	S r
S rS rS	 rS
 rS rS rS rS rS rSrg)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                      U R                   S   $ Nr   )argsselfs    U/var/www/auris/envauris/lib/python3.13/site-packages/sympy/physics/quantum/fermion.pynameFermionOp.name'   s    yy|    c                 2    [        U R                  S   5      $ )N   )boolr   r   s    r   is_annihilationFermionOp.is_annihilation+   s    DIIaL!!r   c                     g)N)cT r   s    r   default_argsFermionOp.default_args/   s    r   c                     [        U5      S;  a  [        SU-  5      e[        U5      S:X  a  US   [        R                  4n[        U5      S:X  a  US   [	        US   5      4n[
        R                  " U /UQ76 $ )N)r      z"1 or 2 parameters expected, got %sr   r   r$   )len
ValueErrorr   Oner   r   __new__)clsr   hintss      r   r(   FermionOp.__new__3   st    4yF"ADHIIt9>GQUU#Dt9>GWT!W-.D+d++r   c                 D    SU;   a  US   (       a  [         R                  $ g )Nindependentr   Zeror   otherr*   s      r   _eval_commutator_FermionOp$FermionOp._eval_commutator_FermionOp?   s    E!eM&:66Mr   c                     U R                   UR                   :X  a3  U R                  (       d!  UR                  (       a  [        R                  $ g SU;   a  US   (       a  SU -  U-  $ g )Nr-   r$   )r   r   r   r'   r0   s      r   _eval_anticommutator_FermionOp(FermionOp._eval_anticommutator_FermionOpF   sT    99

"''E,A,Auu 	 e#m(<t8e##r   c                     SU -  U-  $ )Nr$   r    r0   s      r   _eval_anticommutator_BosonOp&FermionOp._eval_anticommutator_BosonOpR   s    4x%r   c                 "    [         R                  $ Nr.   r0   s      r   _eval_commutator_BosonOp"FermionOp._eval_commutator_BosonOpV   s    vvr   c                 ^    [        [        U R                  5      U R                  (       + 5      $ r;   )r   strr   r   r   s    r   _eval_adjointFermionOp._eval_adjointY   s     TYYT-A-A)ABBr   c                     U R                   (       a  S[        U R                  5      -  $ S[        U R                  5      -  $ )Nz{%s}z{{%s}^\dagger}r   r?   r   r   printerr   s      r   _print_contents_latexFermionOp._print_contents_latex\   s1    S^++$s499~55r   c                     U R                   (       a  S[        U R                  5      -  $ S[        U R                  5      -  $ )Nz%sz
Dagger(%s)rC   rD   s      r   _print_contentsFermionOp._print_contentsb   s1    3tyy>)) 3tyy>11r   c                     SSK Jn  UR                  " U R                  S   /UQ76 nU R                  (       a  U$ XC" S5      -  $ )Nr   )
prettyFormu   †) sympy.printing.pretty.stringpictrL   _printr   r   )r   rE   r   rL   pforms        r   _print_contents_pretty FermionOp._print_contents_prettyh   s>    ?tyy|3d3L*\222r   c                     SSK Jn  US:X  a  UR                  $ US:X  a  U $ US:  S:X  a  UR                  S:X  a  UR                  $ US:  S:X  d  UR                  S:X  a  [        S5      e[        R                  " X5      $ )Nr   r   r   TFzBFermionic operators can only be raised to a positive integer power)sympy.core.singletonr   r'   
is_integerr/   r&   r   _eval_power)r   expr   s      r   rU   FermionOp._eval_powerp   s{    *!855LAXKAg$3>>T#966MAg$#..E"9 * + +##D..r   r    N)__name__
__module____qualname____firstlineno____doc__propertyr   r   classmethodr!   r(   r2   r5   r8   r<   r@   rF   rI   rP   rU   __static_attributes__r    r   r   r   r      sv    *   " "  
,
 C623/r   r   c                   Z    \ rS rSrSrS r\S 5       r\S 5       r	\S 5       r
S rS rS	rg
)r   }   zdFock state ket for a fermionic mode.

Parameters
==========

n : Number
    The Fock state number.

c                 P    US;  a  [        S5      e[        R                  " X5      $ N)r   r   zn must be 0 or 1)r&   r   r(   r)   ns     r   r(   FermionFockKet.__new__   $    F?/00{{3""r   c                      U R                   S   $ r   labelr   s    r   re   FermionFockKet.n       zz!}r   c                     [         $ r;   )r   r   s    r   
dual_classFermionFockKet.dual_class       r   c                     [        5       $ r;   )r   )r)   rj   s     r   _eval_hilbert_space"FermionFockKet._eval_hilbert_space   s
    ~r   c                 B    [        U R                  UR                  5      $ r;   )r
   re   )r   brar*   s      r   !_eval_innerproduct_FermionFockBra0FermionFockKet._eval_innerproduct_FermionFockBra   s    dffcee,,r   c                     UR                   (       a+  U R                  S:X  a  [        S5      $ [        R                  $ U R                  S:X  a  [        S5      $ [        R                  $ )Nr   r   )r   re   r   r   r/   )r   opoptionss      r   _apply_from_right_to_FermionOp-FermionFockKet._apply_from_right_to_FermionOp   sI    vv{%a((vvvv{%a((vvr   r    N)rX   rY   rZ   r[   r\   r(   r]   re   r^   rn   rr   rv   r{   r_   r    r   r   r   r   }   sR    #
      -
r   r   c                   >    \ rS rSrSrS r\S 5       r\S 5       r	Sr
g)r      zdFock state bra for a fermionic mode.

Parameters
==========

n : Number
    The Fock state number.

c                 P    US;  a  [        S5      e[        R                  " X5      $ rc   )r&   r	   r(   rd   s     r   r(   FermionFockBra.__new__   rg   r   c                      U R                   S   $ r   ri   r   s    r   re   FermionFockBra.n   rl   r   c                     [         $ r;   )r   r   s    r   rn   FermionFockBra.dual_class   rp   r   r    N)rX   rY   rZ   r[   r\   r(   r]   re   r^   rn   r_   r    r   r   r   r      s4    #
    r   r   N)r\   sympy.core.numbersr   rS   r   sympy.physics.quantumr   r   r   r	   (sympy.functions.special.tensor_functionsr
   __all__r   r   r   r    r   r   <module>r      sI    " & " * 8 8 Cj/ j/X)S )XS r   