§
    ^²Åj©  ã                   ó  — 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    úLC:\Projects\Historical\venv\Lib\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   € å�D”I˜a”LÑ!Ô!Ð!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ˆ   € Ý�4‰yŒy˜FÐ"Ð"ÝÐAÀDÑHÑIÔIÐIåˆt‰9Œ9˜Š>ˆ>Ø˜”G�QœUÐ#ˆDåˆt‰9Œ9˜Š>ˆ>Ø˜”G�W T¨!¤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   sP   € ØŒ9˜œ
Ò"Ð"àÔ'ð %¨EÔ,Að %Ý”}Ð$øà˜eÐ#Ð#¨¨mÔ(<Ð#å”6ˆMàˆ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Ð!Ð! e¨MÔ&:Ð!à�t‘8˜eÑ#Ð#àˆtr   c                 óR   — t          t          | j        ¦  «        | j         ¦  «        S r7   )r   Ústrr   r"   r   s    r   Ú_eval_adjointzBosonOp._eval_adjoint\   s    € Ý•s˜4œ9‘~”~¨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 #°sÔ7IÐ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å�e�SÑ!Ô!ð 	#ÝÐJÐJ¨¬ÐJÑJÔJÑJÔJˆEÝÐNÐN¨¬ÐNÑNÔNÑNÔNˆEØˆ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 ¤™^œ^Ñ+Ð+à$¥s¨4¬9¡~¤~Ñ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Ø�3˜tœy™>œ>Ñ)Ð)à ¥3 t¤y¡>¤>Ñ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   € Ø?Ð?Ð?Ð?Ð?Ð?Ø�”˜tœy¨œ|Ð3¨dÐ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   € Ý˜dœf c¤eÑ,Ô,Ð,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_from_right_to_BosonOpz)BosonFockKet._apply_from_right_to_BosonOp    sU   € ØÔð 	?Ý˜œ‘<”<¥,¨t¬v¸©zÑ":Ô":Ñ:Ð:å˜œ ™
Ñ#Ô#¥l°4´6¸A±:Ñ&>Ô&>Ñ>Ð>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   zœCoherent 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Ü   sm   € ØŒ:˜œÒ"Ð"Ý”5ˆLå�˜TœZ™œ¨!Ñ+­c°#´)©n¬n¸aÑ.?Ñ?À!ÅiÐPSÔPYÑFZÔFZÑBZÐ]aÔ]gÑBgÑgÐhÐijÑjÑkÔkÐkr   c                 ó(   — |j         r
| j        | z  S d S r7   ©r"   r…   rx   s      r   r{   z-BosonCoherentKet._apply_from_right_to_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   zœCoherent 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   Ú_apply_operator_BosonOpz(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3ˆhñ i3ô i3ð i3ðX!?ð !?ð !?ð !?ð !?�3ñ !?ô !?ð !?ðHð ð ð ð �3ñ ô ð ð6$ð $ð $ð $ð $�sñ $ô $ð $ðNð ð ð ð �sñ ô ð ð ð r   