
    Ed                        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dS )zBosonic quantum operators.    )Mul)Integer)S)	conjugate)exp)sqrt)Operator)HilbertSpace	FockSpaceKetBraIdentityOperator)KroneckerDelta)BosonOpBosonFockKetBosonFockBraBosonCoherentKetBosonCoherentBrac                       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dS )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    ;lib/python3.11/site-packages/sympy/physics/quantum/boson.pynamezBosonOp.name.   s    y|    c                 6    t          | j        d                   S N   )boolr   r   s    r   is_annihilationzBosonOp.is_annihilation2   s    DIaL!!!r   c                     dS )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|R  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__:   s    4yyF" 	JADHIIIt99> 	$GQU#Dt99> 	/GWT!W--.D+d++++r   c                     | j         |j         k    r| j        s|j        rt          j        S nd|v r|d         rt          j        S d S )Nindependent)r   r"   r   NegativeOneZeror   otherr.   s      r   _eval_commutator_BosonOpz BosonOp._eval_commutator_BosonOpF   sV    9
" 	' %E,A %}$e# 	m(< 	6Mtr   c                     t           j        S N)r   r2   r3   s      r   _eval_commutator_FermionOpz"BosonOp._eval_commutator_FermionOpR   s	    vr   c                 .    d|v r|d         rd| z  |z  S d S )Nr0   r(   r%   r3   s      r   _eval_anticommutator_BosonOpz$BosonOp._eval_anticommutator_BosonOpU   s/    E! 	$eM&: 	$t8e##tr   c                 R    t          t          | j                  | j                   S r7   )r   strr   r"   r   s    r   _eval_adjointzBosonOp._eval_adjoint\   s     s49~~4+?'?@@@r   c                    |t          d          k    r| S t          |t                    rTt          d |j        D                       }t          d |j        D                       }| }|D ]}||z  }t          | |z  S t          | |          S )Nr(   c              3   (   K   | ]}|j         	|V  d S r7   is_commutative.0args     r   	<genexpr>z"BosonOp.__mul__.<locals>.<genexpr>e   s*      JJ#s7IJ#JJJJJJr   c              3   (   K   | ]}|j         	|V  d S r7   r@   rB   s     r   rE   z"BosonOp.__mul__.<locals>.<genexpr>f   s*      NN#3;MN#NNNNNNr   )r   
isinstancer   tupler   )r   r4   args1args2xys         r   __mul__zBosonOp.__mul___   s    $Q''' 	KeS!! 	#JJJJJJJENNNNNNNEA  E;?"4r   c                 l    | 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   s3     	6S^^++$s49~~55r   c                 l    | j         rdt          | j                  z  S dt          | j                  z  S )Nz%sz
Dagger(%s)rO   rP   s      r   _print_contentszBosonOp._print_contentst   s3     	23ty>>)) 3ty>>11r   c                 n    ddl m}  |j        | j        d         g|R  }| j        r|S | |d          z  S )Nr   )
prettyFormu   †) sympy.printing.pretty.stringpictrV   _printr   r"   )r   rQ   r   rV   pforms        r   _print_contents_prettyzBosonOp._print_contents_prettyz   sX    ??????ty|3d333 	3L**\2222r   N)__name__
__module____qualname____doc__propertyr   r"   classmethodr&   r,   r5   r8   r:   r=   rM   rR   rT   rZ   r%   r   r   r   r      s         ,   X " " X"   [
, 
, 
,
 
 
    A A A     6 6 62 2 23 3 3 3 3r   r   c                   f    e Zd ZdZd Zed             Zed             Zed             Z	d Z
d ZdS )	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   re   zBosonFockKet.n       z!}r   c                     t           S r7   )r   r   s    r   
dual_classzBosonFockKet.dual_class       r   c                     t                      S r7   r   r-   ri   s     r   _eval_hilbert_spacez BosonFockKet._eval_hilbert_space       {{r   c                 6    t          | j        |j                  S r7   )r   re   r   brar.   s      r   _eval_innerproduct_BosonFockBraz,BosonFockKet._eval_innerproduct_BosonFockBra   s    dfce,,,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   re   r   r   opoptionss      r   _apply_operator_BosonOpz$BosonFockKet._apply_operator_BosonOp   sU     	?<<,tvz":":::
##l46A:&>&>>>r   N)r[   r\   r]   r^   r,   r_   re   r`   rl   rq   rv   r{   r%   r   r   r   r      s         # # #   X   [   [- - -? ? ? ? ?r   r   c                   Z    e Zd ZdZd Zed             Zed             Zed             Z	dS )r   zvFock state bra for a bosonic mode.

    Parameters
    ==========

    n : Number
        The Fock state number.

    c                 ,    t          j        | |          S r7   r   r,   rd   s     r   r,   zBosonFockBra.__new__   rf   r   c                     | j         d         S r   rh   r   s    r   re   zBosonFockBra.n   rj   r   c                     t           S r7   )r   r   s    r   rl   zBosonFockBra.dual_class   rm   r   c                     t                      S r7   ro   rp   s     r   rq   z BosonFockBra._eval_hilbert_space   rr   r   N)
r[   r\   r]   r^   r,   r_   re   r`   rl   rq   r%   r   r   r   r      s~         # # #   X   [   [  r   r   c                   f    e Zd ZdZd Zed             Zed             Zed             Z	d Z
d ZdS )	r   zCoherent state ket for a bosonic mode.

    Parameters
    ==========

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

    c                 ,    t          j        | |          S r7   rc   r-   alphas     r   r,   zBosonCoherentKet.__new__       {3&&&r   c                     | j         d         S r   rh   r   s    r   r   zBosonCoherentKet.alpha   rj   r   c                     t           S r7   )r   r   s    r   rl   zBosonCoherentKet.dual_class       r   c                     t                      S r7   )r
   rp   s     r   rq   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   rt   s      r   #_eval_innerproduct_BosonCoherentBraz4BosonCoherentKet._eval_innerproduct_BosonCoherentBra   sp    :" 	l5LTZ!+c#)nna.??!iPSPYFZFZBZ]a]gBgghijjkkkr   c                 (    |j         r
| j        | z  S d S r7   r"   r   rx   s      r   r{   z(BosonCoherentKet._apply_operator_BosonOp   s     	:$$4r   N)r[   r\   r]   r^   r,   r_   r   r`   rl   rq   r   r{   r%   r   r   r   r      s         ' ' '   X     [    [l l l    r   r   c                   J    e Zd ZdZd Zed             Zed             Zd Z	dS )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   rh   r   s    r   r   zBosonCoherentBra.alpha   rj   r   c                     t           S r7   )r   r   s    r   rl   zBosonCoherentBra.dual_class   r   r   c                 (    |j         s
| j        | z  S d S r7   r   rx   s      r   r{   z(BosonCoherentBra._apply_operator_BosonOp   s    ! 	:$$4r   N)
r[   r\   r]   r^   r,   r_   r   r`   rl   r{   r%   r   r   r   r      sr         ' ' '   X     [     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      s             & & & & & & " " " " " " : : : : : : 6 6 6 6 6 6 9 9 9 9 9 9 * * * * * * U U U U U U U U U U U U U U C C C C C C  i3 i3 i3 i3 i3h i3 i3 i3X!? !? !? !? !?3 !? !? !?H    3   6$ $ $ $ $s $ $ $N    s     r   