o
    Rh                     @   s   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mZmZmZ dd	lmZ g d
ZG dd deZG dd deZG dd deZG dd deZG dd deZdS )zBosonic quantum operators.    )Integer)S)	conjugate)exp)sqrt)Operator)HilbertSpace	FockSpaceKetBra)KroneckerDelta)BosonOpBosonFockKetBosonFockBraBosonCoherentKetBosonCoherentBrac                   @   st   e Zd ZdZedd Zedd Zedd Zdd	 Z	d
d Z
dd Zdd Zdd Zdd Zdd Zd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                 C   
   | j d S Nr   )argsself r   ]/home/air/sanwanet/backup_V2/venv/lib/python3.10/site-packages/sympy/physics/quantum/boson.pyname-      
zBosonOp.namec                 C   s   t | jd S N   )boolr   r   r   r   r   is_annihilation1   s   zBosonOp.is_annihilationc                 C   s   dS )N)aTr   r   r   r   r   default_args5      zBosonOp.default_argsc                 O   sd   t |dvrtd| 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   hintsr   r   r   r&   9   s   zBosonOp.__new__c                 K   s<   | j |j kr| js|jrtjS d S d|v r|d rtjS d S )Nindependent)r   r   r   NegativeOneZeror   otherr(   r   r   r   _eval_commutator_BosonOpE   s   z BosonOp._eval_commutator_BosonOpc                 K   s   t jS N)r   r+   r,   r   r   r   _eval_commutator_FermionOpQ   s   z"BosonOp._eval_commutator_FermionOpc                 K   s    d|v r|d rd|  | S d S )Nr)   r"   r   r,   r   r   r   _eval_anticommutator_BosonOpT   s   z$BosonOp._eval_anticommutator_BosonOpc                 C   s   t t| j| j S r/   )r   strr   r   r   r   r   r   _eval_adjoint[   s   zBosonOp._eval_adjointc                 G   "   | j r
dt| j S dt| j S )Nz{%s}z{{%s}^\dagger}r   r2   r   r   printerr   r   r   r   _print_contents_latex^      zBosonOp._print_contents_latexc                 G   r4   )Nz%sz
Dagger(%s)r5   r6   r   r   r   _print_contentsd   r9   zBosonOp._print_contentsc                 G   s:   ddl m} |j| jd g|R  }| jr|S ||d S )Nr   )
prettyFormu   †) sympy.printing.pretty.stringpictr;   _printr   r   )r   r7   r   r;   pformr   r   r   _print_contents_prettyj   s
   zBosonOp._print_contents_prettyN)__name__
__module____qualname____doc__propertyr   r   classmethodr    r&   r.   r0   r1   r3   r8   r:   r?   r   r   r   r   r      s     


r   c                   @   L   e Zd ZdZdd Zedd Zedd Zedd	 Z	d
d Z
dd ZdS )r   zvFock state ket for a bosonic mode.

    Parameters
    ==========

    n : Number
        The Fock state number.

    c                 C      t | |S r/   r
   r&   r'   nr   r   r   r&   ~      zBosonFockKet.__new__c                 C   r   r   labelr   r   r   r   rJ      r   zBosonFockKet.nc                 C      t S r/   )r   r   r   r   r   
dual_class   r!   zBosonFockKet.dual_classc                 C      t  S r/   r	   r'   rM   r   r   r   _eval_hilbert_space      z BosonFockKet._eval_hilbert_spacec                 K   s   t | j|jS r/   )r   rJ   r   brar(   r   r   r   _eval_innerproduct_BosonFockBra   s   z,BosonFockKet._eval_innerproduct_BosonFockBrac                 K   s:   |j rt| jt| jd  S t| jd t| jd  S r   )r   r   rJ   r   r   opoptionsr   r   r   _apply_from_right_to_BosonOp   s   z)BosonFockKet._apply_from_right_to_BosonOpN)r@   rA   rB   rC   r&   rD   rJ   rE   rO   rS   rW   r[   r   r   r   r   r   s   s    



r   c                   @   s<   e Zd ZdZdd Zedd Zedd Zedd	 Z	d
S )r   zvFock state bra for a bosonic mode.

    Parameters
    ==========

    n : Number
        The Fock state number.

    c                 C   rG   r/   r   r&   rI   r   r   r   r&      rK   zBosonFockBra.__new__c                 C   r   r   rL   r   r   r   r   rJ      r   zBosonFockBra.nc                 C   rN   r/   )r   r   r   r   r   rO      r!   zBosonFockBra.dual_classc                 C   rP   r/   rQ   rR   r   r   r   rS      rT   z BosonFockBra._eval_hilbert_spaceN)
r@   rA   rB   rC   r&   rD   rJ   rE   rO   rS   r   r   r   r   r      s    


r   c                   @   rF   )r   zCoherent state ket for a bosonic mode.

    Parameters
    ==========

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

    c                 C   rG   r/   rH   r'   alphar   r   r   r&      rK   zBosonCoherentKet.__new__c                 C   r   r   rL   r   r   r   r   r^      r   zBosonCoherentKet.alphac                 C   rN   r/   )r   r   r   r   r   rO      r!   zBosonCoherentKet.dual_classc                 C   rP   r/   )r   rR   r   r   r   rS      rT   z$BosonCoherentKet._eval_hilbert_spacec                 K   sL   | j |j kr	tjS tt| j d t|j d  dt|j  | j    d S )Nr"   )r^   r   r%   r   absr   rU   r   r   r   #_eval_innerproduct_BosonCoherentBra   s   :z4BosonCoherentKet._eval_innerproduct_BosonCoherentBrac                 K   s   |j r| j|  S d S r/   r   r^   rX   r   r   r   r[         
z-BosonCoherentKet._apply_from_right_to_BosonOpN)r@   rA   rB   rC   r&   rD   r^   rE   rO   rS   r`   r[   r   r   r   r   r      s    



r   c                   @   s8   e Zd ZdZdd Zedd Zedd Zdd	 Z	d
S )r   zCoherent state bra for a bosonic mode.

    Parameters
    ==========

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

    c                 C   rG   r/   r\   r]   r   r   r   r&      rK   zBosonCoherentBra.__new__c                 C   r   r   rL   r   r   r   r   r^      r   zBosonCoherentBra.alphac                 C   rN   r/   )r   r   r   r   r   rO      r!   zBosonCoherentBra.dual_classc                 K   s   |j s| j|  S d S r/   ra   rX   r   r   r   _apply_operator_BosonOp   rb   z(BosonCoherentBra._apply_operator_BosonOpN)
r@   rA   rB   rC   r&   rD   r^   rE   rO   rc   r   r   r   r   r      s    


r   N)rC   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   r   <module>   s    	]$'