
    sg                         d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZ dd	lmZmZmZmZmZ dd
lmZ g dZ G d de      Z G d de      Z G d de      Z G d de      Z G d de      Zy)zBosonic quantum operators.    )Mul)Integer)S)	conjugate)exp)sqrt)Operator)HilbertSpace	FockSpaceKetBraIdentityOperator)KroneckerDelta)BosonOpBosonFockKetBosonFockBraBosonCoherentKetBosonCoherentBrac                   v    e Zd ZdZed        Zed        Zed        Zd Z	d Z
d Zd Zd	 Zd
 Zd Zd Zd Zy)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                      | j                   d   S Nr   )argsselfs    N/var/www/html/venv/lib/python3.12/site-packages/sympy/physics/quantum/boson.pynamezBosonOp.name.   s    yy|    c                 2    t        | j                  d         S N   )boolr   r   s    r   is_annihilationzBosonOp.is_annihilation2   s    DIIaL!!r   c                      y)N)aT r   s    r   default_argszBosonOp.default_args6   s    r   c                     t        |      dvrt        d|z        t        |      dk(  r|d   t        j                  f}t        |      dk(  r|d   t	        |d         f}t        j                  | g| S )N)r       z"1 or 2 parameters expected, got %sr    r   r(   )len
ValueErrorr   Oner   r	   __new__)clsr   hintss      r   r,   zBosonOp.__new__:   st    4yF"ADHIIt9>GQUU#Dt9>GWT!W-.D+d++r   c                     | j                   |j                   k(  r)| j                  s|j                  rt        j                  S y d|v r|d   rt        j                  S y )Nindependent)r   r"   r   NegativeOneZeror   otherr.   s      r   _eval_commutator_BosonOpz BosonOp._eval_commutator_BosonOpF   sO    99

"''E,A,A}}$ 	 e#m(<66Mr   c                 "    t         j                  S N)r   r2   r3   s      r   _eval_commutator_FermionOpz"BosonOp._eval_commutator_FermionOpR   s    vvr   c                 &    d|v r|d   rd| z  |z  S y )Nr0   r(   r%   r3   s      r   _eval_anticommutator_BosonOpz$BosonOp._eval_anticommutator_BosonOpU   s#    E!eM&:t8e##r   c                 V    t        t        | j                        | j                         S r7   )r   strr   r"   r   s    r   _eval_adjointzBosonOp._eval_adjoint\   s     s499~4+?+?'?@@r   c                     |t        d      k(  r| S t        |t              rQt        d |j                  D              }t        d |j                  D              }| }|D ]  }||z  }	 t        | |z  S t        | |      S )Nr(   c              3   :   K   | ]  }|j                   s|  y wr7   is_commutative.0args     r   	<genexpr>z"BosonOp.__mul__.<locals>.<genexpr>e   s     J#s7I7I#J   c              3   :   K   | ]  }|j                   r|  y wr7   r@   rB   s     r   rE   z"BosonOp.__mul__.<locals>.<genexpr>f   s     N#3;M;M#NrF   )r   
isinstancer   tupler   )r   r4   args1args2xys         r   __mul__zBosonOp.__mul___   s    $Q''KeS!JJJENNNEA E;?"4r   c                 z    | j                   rdt        | j                        z  S dt        | j                        z  S )Nz{%s}z{{%s}^\dagger}r"   r<   r   r   printerr   s      r   _print_contents_latexzBosonOp._print_contents_latexn   s1    S^++$s499~55r   c                 z    | j                   rdt        | j                        z  S dt        | j                        z  S )Nz%sz
Dagger(%s)rP   rQ   s      r   _print_contentszBosonOp._print_contentst   s1    3tyy>)) 3tyy>11r   c                     ddl m}  |j                  | j                  d   g| }| j                  r|S | |d      z  S )Nr   )
prettyFormu   †) sympy.printing.pretty.stringpictrW   _printr   r"   )r   rR   r   rW   pforms        r   _print_contents_prettyzBosonOp._print_contents_prettyz   s@    ?tyy|3d3L*\222r   N)__name__
__module____qualname____doc__propertyr   r"   classmethodr&   r,   r5   r8   r:   r=   rN   rS   rU   r[   r%   r   r   r   r      sq    ,   " "  
,
A 623r   r   c                   R    e Zd ZdZd Zed        Zed        Zed        Z	d Z
d Zy)	r   zvFock state ket for a bosonic mode.

    Parameters
    ==========

    n : Number
        The Fock state number.

    c                 .    t        j                  | |      S r7   r   r,   r-   ns     r   r,   zBosonFockKet.__new__       {{3""r   c                      | j                   d   S r   labelr   s    r   rf   zBosonFockKet.n       zz!}r   c                     t         S r7   )r   r   s    r   
dual_classzBosonFockKet.dual_class       r   c                     t               S r7   r   r-   rj   s     r   _eval_hilbert_spacez BosonFockKet._eval_hilbert_space   
    {r   c                 B    t        | j                  |j                        S r7   )r   rf   r   brar.   s      r   _eval_innerproduct_BosonFockBraz,BosonFockKet._eval_innerproduct_BosonFockBra   s    dffcee,,r   c                     |j                   r.t        | j                        t        | j                  dz
        z  S t        | j                  dz         t        | j                  dz         z  S r   )r"   r   rf   r   r   opoptionss      r   _apply_from_right_to_BosonOpz)BosonFockKet._apply_from_right_to_BosonOp   sP    <,tvvz":::
#l466A:&>>>r   N)r\   r]   r^   r_   r,   r`   rf   ra   rm   rr   rw   r|   r%   r   r   r   r      sR    #      -?r   r   c                   F    e Zd ZdZd Zed        Zed        Zed        Z	y)r   zvFock state bra for a bosonic mode.

    Parameters
    ==========

    n : Number
        The Fock state number.

    c                 .    t        j                  | |      S r7   r   r,   re   s     r   r,   zBosonFockBra.__new__   rg   r   c                      | j                   d   S r   ri   r   s    r   rf   zBosonFockBra.n   rk   r   c                     t         S r7   )r   r   s    r   rm   zBosonFockBra.dual_class   rn   r   c                     t               S r7   rp   rq   s     r   rr   z BosonFockBra._eval_hilbert_space   rs   r   N)
r\   r]   r^   r_   r,   r`   rf   ra   rm   rr   r%   r   r   r   r      sH    #      r   r   c                   R    e Zd ZdZd Zed        Zed        Zed        Z	d Z
d Zy)	r   zCoherent state ket for a bosonic mode.

    Parameters
    ==========

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

    c                 .    t        j                  | |      S r7   rd   r-   alphas     r   r,   zBosonCoherentKet.__new__       {{3&&r   c                      | j                   d   S r   ri   r   s    r   r   zBosonCoherentKet.alpha   rk   r   c                     t         S r7   )r   r   s    r   rm   zBosonCoherentKet.dual_class       r   c                     t               S r7   )r
   rq   s     r   rr   z$BosonCoherentKet._eval_hilbert_space   s
    ~r   c                    | j                   |j                   k(  rt        j                  S t        t	        | j                         dz  t	        |j                         dz  z   dt        |j                         z  | j                   z  z
   dz        S )Nr(   )r   r   r+   r   absr   ru   s      r   #_eval_innerproduct_BosonCoherentBraz4BosonCoherentKet._eval_innerproduct_BosonCoherentBra   sp    ::"55LTZZ!+c#))na.??!iPSPYPYFZBZ]a]g]gBgghijjkkr   c                 :    |j                   r| j                  | z  S y r7   r"   r   ry   s      r   r|   z-BosonCoherentKet._apply_from_right_to_BosonOp   s    ::$$r   N)r\   r]   r^   r_   r,   r`   r   ra   rm   rr   r   r|   r%   r   r   r   r      sS    '        lr   r   c                   <    e Zd ZdZd Zed        Zed        Zd Z	y)r   zCoherent state bra for a bosonic mode.

    Parameters
    ==========

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

    c                 .    t        j                  | |      S r7   r   r   s     r   r,   zBosonCoherentBra.__new__   r   r   c                      | j                   d   S r   ri   r   s    r   r   zBosonCoherentBra.alpha   rk   r   c                     t         S r7   )r   r   s    r   rm   zBosonCoherentBra.dual_class   r   r   c                 :    |j                   s| j                  | z  S y r7   r   ry   s      r   _apply_operator_BosonOpz(BosonCoherentBra._apply_operator_BosonOp   s    !!::$$r   N)
r\   r]   r^   r_   r,   r`   r   ra   rm   r   r%   r   r   r   r      s9    '      r   r   N)r_   sympy.core.mulr   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   r   (sympy.functions.special.tensor_functionsr   __all__r   r   r   r   r   r%   r   r   <module>r      sn       & " : 6 9 * U U Ci3h i3X!?3 !?H3 6$s $Ns r   