Ë
    täiÊ  ã                   óê   — 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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.é    )ÚInteger)ÚS)Ú	conjugate)Úexp)Úsqrt)ÚOperator)ÚHilbertSpaceÚ	FockSpaceÚKetÚBra)ÚKroneckerDelta)ÚBosonOpÚBosonFockKetÚBosonFockBraÚBosonCoherentKetÚBosonCoherentBrac                   óp   — 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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    új/Volumes/fast/ai/experiments/MLX_z-image/.venv/lib/python3.12/site-packages/sympy/physics/quantum/boson.pyÚnamezBosonOp.name-   s   € à�y‰y˜‰|Ðó    c                 ó2   — t        | j                  d   «      S ©Né   )Úboolr   r   s    r   Úis_annihilationzBosonOp.is_annihilation1   s   € ä�D—I‘I˜a‘LÓ!Ð!r   c                  ó   — y)N)ÚaT© r   s    r   Údefault_argszBosonOp.default_args5   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__9   st   € Ü�4‹y˜FÑ"ÜÐAÀDÑHÓIÐIäˆt‹9˜Š>Ø˜‘GœQŸU™UÐ#ˆDäˆt‹9˜Š>Ø˜‘GœW T¨!¡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_BosonOpE   sO   € Ø�9‰9˜Ÿ
™
Ò"à×'Ò'¨E×,AÒ,AÜ—}‘}Ð$ð ð	 ˜eÑ#¨¨mÒ(<ä—6‘6ˆMàr   c                 ó"   — t         j                  S ©N)r   r0   r1   s      r   Ú_eval_commutator_FermionOpz"BosonOp._eval_commutator_FermionOpQ   s   € Ü�v‰vˆr   c                 ó&   — d|v r|d   rd| z  |z  S y )Nr.   r&   r#   r1   s      r   Ú_eval_anticommutator_BosonOpz$BosonOp._eval_anticommutator_BosonOpT   s#   € Ø˜EÑ! e¨MÒ&:à�t‘8˜eÑ#Ð#àr   c                 óV   — t        t        | j                  «      | j                   «      S r5   )r   Ústrr   r    r   s    r   Ú_eval_adjointzBosonOp._eval_adjoint[   s    € Ü”s˜4Ÿ9™9“~¨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_latex^   s1   € Ø×ÒØœS §¡›^Ñ+Ð+à$¤s¨4¯9©9£~Ñ5Ð5r   c                 óz   — | j                   rdt        | j                  «      z  S dt        | j                  «      z  S )Nz%sz
Dagger(%s)r=   r>   s      r   Ú_print_contentszBosonOp._print_contentsd   s1   € Ø×ÒØœ3˜tŸy™y›>Ñ)Ð)à ¤3 t§y¡y£>Ñ1Ð1r   c                 ó€   — ddl m}  |j                  | j                  d   g|¢­Ž }| j                  r|S | |d«      z  S )Nr   )Ú
prettyFormu   â€ )Ú sympy.printing.pretty.stringpictrD   Ú_printr   r    )r   r?   r   rD   Úpforms        r   Ú_print_contents_prettyzBosonOp._print_contents_prettyj   s@   € Ý?Ø�—‘˜tŸy™y¨™|Ð3¨dÒ3ˆØ×ÒØˆLà™* \Ó2Ñ2Ð2r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úpropertyr   r    Úclassmethodr$   r*   r3   r6   r8   r;   r@   rB   rH   r#   r   r   r   r      sl   „ ñð, ñó ðð ñ"ó ð"ð ñó ðò
,ò
òòò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 r5   ©r   r*   ©r+   Úns     r   r*   zBosonFockKet.__new__~   ó   € Ü�{‰{˜3 Ó"Ð"r   c                 ó    — | j                   d   S r   ©Úlabelr   s    r   rS   zBosonFockKet.n�   ó   € à�z‰z˜!‰}Ðr   c                 ó   — t         S r5   )r   r   s    r   Ú
dual_classzBosonFockKet.dual_class…   ó   € äÐr   c                 ó   — t        «       S r5   ©r
   ©r+   rW   s     r   Ú_eval_hilbert_spacez BosonFockKet._eval_hilbert_space‰   ó
   € ä‹{Ðr   c                 óB   — t        | j                  |j                  «      S r5   )r   rS   ©r   Úbrar,   s      r   Ú_eval_innerproduct_BosonFockBraz,BosonFockKet._eval_innerproduct_BosonFockBra�   s   € Ü˜dŸf™f c§e¡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   rS   r   ©r   ÚopÚoptionss      r   Ú_apply_from_right_to_BosonOpz)BosonFockKet._apply_from_right_to_BosonOp�   sP   € Ø×ÒÜ˜Ÿ™“<¤,¨t¯v©v¸©zÓ":Ñ:Ð:ä˜Ÿ™ ™
Ó#¤l°4·6±6¸A±:Ó&>Ñ>Ð>r   N)rI   rJ   rK   rL   r*   rM   rS   rN   rZ   r_   rd   ri   r#   r   r   r   r   s   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 r5   ©r   r*   rR   s     r   r*   zBosonFockBra.__new__¢   rT   r   c                 ó    — | j                   d   S r   rV   r   s    r   rS   zBosonFockBra.n¥   rX   r   c                 ó   — t         S r5   )r   r   s    r   rZ   zBosonFockBra.dual_class©   r[   r   c                 ó   — t        «       S r5   r]   r^   s     r   r_   z BosonFockBra._eval_hilbert_space­   r`   r   N)
rI   rJ   rK   rL   r*   rM   rS   rN   rZ   r_   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   zœCoherent state ket for a bosonic mode.

    Parameters
    ==========

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

    c                 ó.   — t        j                  | |«      S r5   rQ   ©r+   Úalphas     r   r*   zBosonCoherentKet.__new__½   ó   € Ü�{‰{˜3 Ó&Ð&r   c                 ó    — | j                   d   S r   rV   r   s    r   rs   zBosonCoherentKet.alphaÀ   rX   r   c                 ó   — t         S r5   )r   r   s    r   rZ   zBosonCoherentKet.dual_classÄ   ó   € äÐr   c                 ó   — t        «       S r5   )r	   r^   s     r   r_   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&   )rs   r   r)   r   Úabsr   rb   s      r   Ú#_eval_innerproduct_BosonCoherentBraz4BosonCoherentKet._eval_innerproduct_BosonCoherentBraÌ   sp   € Ø�:‰:˜Ÿ™Ò"Ü—5‘5ˆLäœ˜TŸZ™Z›¨!Ñ+¬c°#·)±)«n¸aÑ.?Ñ?À!ÄiÐPS×PYÑPYÓFZÑBZÐ]a×]gÑ]gÑBgÑgÐhÐijÑjÓkÐkr   c                 ó:   — |j                   r| j                  | z  S y r5   ©r    rs   rf   s      r   ri   z-BosonCoherentKet._apply_from_right_to_BosonOpÒ   s   € Ø×ÒØ—:‘: Ñ$Ð$àr   N)rI   rJ   rK   rL   r*   rM   rs   rN   rZ   r_   r{   ri   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   zœCoherent state bra for a bosonic mode.

    Parameters
    ==========

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

    c                 ó.   — t        j                  | |«      S r5   rl   rr   s     r   r*   zBosonCoherentBra.__new__ä   rt   r   c                 ó    — | j                   d   S r   rV   r   s    r   rs   zBosonCoherentBra.alphaç   rX   r   c                 ó   — t         S r5   )r   r   s    r   rZ   zBosonCoherentBra.dual_classë   rw   r   c                 ó:   — |j                   s| j                  | z  S y r5   r}   rf   s      r   Ú_apply_operator_BosonOpz(BosonCoherentBra._apply_operator_BosonOpï   s   € Ø×!Ò!Ø—:‘: Ñ$Ð$àr   N)
rI   rJ   rK   rL   r*   rM   rs   rN   rZ   rƒ   r#   r   r   r   r   Ù   s9   „ ñò'ð ñó ðð ñ ó ð ór   r   N)rL   Ú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3ˆhô Z3ôz!?�3ô !?ôH�3ô ô6$�sô $ôN�sõ r   