
    \h                         S r SSKJr  SSKJr  SSKJ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Jr  SS	KJr  / S
Qr " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      rg)zBosonic quantum operators.    )Integer)S)	conjugate)exp)sqrt)Operator)HilbertSpace	FockSpaceKetBra)KroneckerDelta)BosonOpBosonFockKetBosonFockBraBosonCoherentKetBosonCoherentBrac                   x    \ 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g)r      a  A bosonic operator that satisfies [a, Dagger(a)] == 1.

Parameters
==========

name : str
    A string that labels the bosonic mode.

annihilation : bool
    A bool that indicates if the bosonic operator is an annihilation (True,
    default value) or creation operator (False)

Examples
========

>>> from sympy.physics.quantum import Dagger, Commutator
>>> from sympy.physics.quantum.boson import BosonOp
>>> a = BosonOp("a")
>>> Commutator(a, Dagger(a)).doit()
1
c                      U R                   S   $ Nr   )argsselfs    S/var/www/auris/envauris/lib/python3.13/site-packages/sympy/physics/quantum/boson.pynameBosonOp.name-   s    yy|    c                 2    [        U R                  S   5      $ N   )boolr   r   s    r   is_annihilationBosonOp.is_annihilation1   s    DIIaL!!r   c                     g)N)aT r   s    r   default_argsBosonOp.default_args5   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.   BosonOp.__new__9   st    4yF"ADHIIt9>GQUU#Dt9>GWT!W-.D+d++r   c                     U R                   UR                   :X  a3  U R                  (       d!  UR                  (       a  [        R                  $ g SU;   a  US   (       a  [        R                  $ g )Nindependent)r   r"   r   NegativeOneZeror   otherr0   s      r   _eval_commutator_BosonOp BosonOp._eval_commutator_BosonOpE   sO    99

"''E,A,A}}$ 	 e#m(<66Mr   c                 "    [         R                  $ N)r   r5   r6   s      r   _eval_commutator_FermionOp"BosonOp._eval_commutator_FermionOpQ   s    vvr   c                 4    SU;   a  US   (       a  SU -  U-  $ g )Nr3   r*   r&   r6   s      r   _eval_anticommutator_BosonOp$BosonOp._eval_anticommutator_BosonOpT   s#    E!eM&:t8e##r   c                 ^    [        [        U R                  5      U R                  (       + 5      $ r;   )r   strr   r"   r   s    r   _eval_adjointBosonOp._eval_adjoint[   s     s499~4+?+?'?@@r   c                     U R                   (       a  S[        U R                  5      -  $ S[        U R                  5      -  $ )Nz{%s}z{{%s}^\dagger}r"   rB   r   r   printerr   s      r   _print_contents_latexBosonOp._print_contents_latex^   s1    S^++$s499~55r   c                     U R                   (       a  S[        U R                  5      -  $ S[        U R                  5      -  $ )Nz%sz
Dagger(%s)rF   rG   s      r   _print_contentsBosonOp._print_contentsd   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.stringpictrO   _printr   r"   )r   rH   r   rO   pforms        r   _print_contents_prettyBosonOp._print_contents_prettyj   s>    ?tyy|3d3L*\222r   r&   N)__name__
__module____qualname____firstlineno____doc__propertyr   r"   classmethodr'   r.   r8   r<   r?   rC   rI   rL   rS   __static_attributes__r&   r   r   r   r      sl    ,   " "  
,
A623r   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   s   zbFock state ket for a bosonic mode.

Parameters
==========

n : Number
    The Fock state number.

c                 .    [         R                  " X5      $ r;   r   r.   r/   ns     r   r.   BosonFockKet.__new__~       {{3""r   c                      U R                   S   $ r   labelr   s    r   rb   BosonFockKet.n       zz!}r   c                     [         $ r;   )r   r   s    r   
dual_classBosonFockKet.dual_class       r   c                     [        5       $ r;   r
   r/   rg   s     r   _eval_hilbert_space BosonFockKet._eval_hilbert_space   
    {r   c                 B    [        U R                  UR                  5      $ r;   )r   rb   r   brar0   s      r   _eval_innerproduct_BosonFockBra,BosonFockKet._eval_innerproduct_BosonFockBra   s    dffcee,,r   c                     UR                   (       a.  [        U R                  5      [        U R                  S-
  5      -  $ [        U R                  S-   5      [        U R                  S-   5      -  $ r   )r"   r   rb   r   r   opoptionss      r   _apply_from_right_to_BosonOp)BosonFockKet._apply_from_right_to_BosonOp   sP    <,tvvz":::
#l466A:&>>>r   r&   N)rU   rV   rW   rX   rY   r.   rZ   rb   r[   rk   rq   rw   r}   r\   r&   r   r   r   r   s   sR    #      -?r   r   c                   N    \ rS rSrSrS r\S 5       r\S 5       r	\S 5       r
Srg)	r      zbFock state bra for a bosonic mode.

Parameters
==========

n : Number
    The Fock state number.

c                 .    [         R                  " X5      $ r;   r   r.   ra   s     r   r.   BosonFockBra.__new__   rd   r   c                      U R                   S   $ r   rf   r   s    r   rb   BosonFockBra.n   ri   r   c                     [         $ r;   )r   r   s    r   rk   BosonFockBra.dual_class   rm   r   c                     [        5       $ r;   ro   rp   s     r   rq    BosonFockBra._eval_hilbert_space   rs   r   r&   N)rU   rV   rW   rX   rY   r.   rZ   rb   r[   rk   rq   r\   r&   r   r   r   r      sH    #      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      zCoherent state ket for a bosonic mode.

Parameters
==========

alpha : Number, Symbol
    The complex amplitude of the coherent state.

c                 .    [         R                  " X5      $ r;   r`   r/   alphas     r   r.   BosonCoherentKet.__new__       {{3&&r   c                      U R                   S   $ r   rf   r   s    r   r   BosonCoherentKet.alpha   ri   r   c                     [         $ r;   )r   r   s    r   rk   BosonCoherentKet.dual_class       r   c                     [        5       $ r;   )r	   rp   s     r   rq   $BosonCoherentKet._eval_hilbert_space   s
    ~r   c                    U R                   UR                   :X  a  [        R                  $ [        [	        U R                   5      S-  [	        UR                   5      S-  -   S[        UR                   5      -  U R                   -  -
  * S-  5      $ )Nr*   )r   r   r-   r   absr   ru   s      r   #_eval_innerproduct_BosonCoherentBra4BosonCoherentKet._eval_innerproduct_BosonCoherentBra   sp    ::"55LTZZ!+c#))na.??!iPSPYPYFZBZ]a]g]gBgghijjkkr   c                 D    UR                   (       a  U R                  U -  $ g r;   r"   r   rz   s      r   r}   -BosonCoherentKet._apply_from_right_to_BosonOp   s    ::$$r   r&   N)rU   rV   rW   rX   rY   r.   rZ   r   r[   rk   rq   r   r}   r\   r&   r   r   r   r      sS    '        lr   r   c                   D    \ rS rSrSrS r\S 5       r\S 5       r	S r
Srg)	r      zCoherent state bra for a bosonic mode.

Parameters
==========

alpha : Number, Symbol
    The complex amplitude of the coherent state.

c                 .    [         R                  " X5      $ r;   r   r   s     r   r.   BosonCoherentBra.__new__   r   r   c                      U R                   S   $ r   rf   r   s    r   r   BosonCoherentBra.alpha   ri   r   c                     [         $ r;   )r   r   s    r   rk   BosonCoherentBra.dual_class   r   r   c                 D    UR                   (       d  U R                  U -  $ g r;   r   rz   s      r   _apply_operator_BosonOp(BosonCoherentBra._apply_operator_BosonOp   s    !!::$$r   r&   N)rU   rV   rW   rX   rY   r.   rZ   r   r[   rk   r   r\   r&   r   r   r   r      s9    '      r   r   N)rY   sympy.core.numbersr   sympy.core.singletonr   $sympy.functions.elementary.complexesr   &sympy.functions.elementary.exponentialr   (sympy.functions.elementary.miscellaneousr   sympy.physics.quantumr   r	   r
   r   r   (sympy.functions.special.tensor_functionsr   __all__r   r   r   r   r   r&   r   r   <module>r      sk      & " : 6 9 * C C CZ3h Z3z!?3 !?H3 6$s $Ns r   