Ë
    täiw  ã                   ó–   — d 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	 ddl
mZ g d¢Z G d„ d	e«      Z G d
„ de«      Z G d„ de	«      Zy)zFermionic quantum operators.é    )ÚInteger©ÚS)ÚOperator)ÚHilbertSpaceÚKetÚBra)ÚKroneckerDelta)Ú	FermionOpÚFermionFockKetÚFermionFockBrac                   ó|   — 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„ Zy)r   a"  A fermionic operator that satisfies {c, Dagger(c)} == 1.

    Parameters
    ==========

    name : str
        A string that labels the fermionic mode.

    annihilation : bool
        A bool that indicates if the fermionic operator is an annihilation
        (True, default value) or creation operator (False)

    Examples
    ========

    >>> from sympy.physics.quantum import Dagger, AntiCommutator
    >>> from sympy.physics.quantum.fermion import FermionOp
    >>> c = FermionOp("c")
    >>> AntiCommutator(c, Dagger(c)).doit()
    1
    c                 ó    — | j                   d   S ©Nr   )Úargs©Úselfs    úl/Volumes/fast/ai/experiments/MLX_z-image/.venv/lib/python3.12/site-packages/sympy/physics/quantum/fermion.pyÚnamezFermionOp.name'   s   € à�y‰y˜‰|Ðó    c                 ó2   — t        | j                  d   «      S )Né   )Úboolr   r   s    r   Úis_annihilationzFermionOp.is_annihilation+   s   € ä�D—I‘I˜a‘LÓ!Ð!r   c                  ó   — y)N)ÚcT© r   s    r   Údefault_argszFermionOp.default_args/   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FermionOp.__new__3   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                 ó6   — d|v r|d   rt         j                  S y )NÚindependent©r   ÚZero©r   Úotherr&   s      r   Ú_eval_commutator_FermionOpz$FermionOp._eval_commutator_FermionOp?   s   € Ø˜EÑ! e¨MÒ&:ä—6‘6ˆMàr   c                 óª   — | j                   |j                   k(  r)| j                  s|j                  rt        j                  S y d|v r|d   rd| z  |z  S y )Nr(   r    )r   r   r   r#   r+   s      r   Ú_eval_anticommutator_FermionOpz(FermionOp._eval_anticommutator_FermionOpF   sT   € Ø�9‰9˜Ÿ
™
Ò"à×'Ò'¨E×,AÒ,AÜ—u‘u�ð ð	 ˜eÑ#¨¨mÒ(<à�t‘8˜eÑ#Ð#àr   c                 ó   — d| z  |z  S )Nr    r   r+   s      r   Ú_eval_anticommutator_BosonOpz&FermionOp._eval_anticommutator_BosonOpR   s   € à�4‰x˜%ÑÐr   c                 ó"   — t         j                  S ©Nr)   r+   s      r   Ú_eval_commutator_BosonOpz"FermionOp._eval_commutator_BosonOpV   s   € Ü�v‰vˆr   c                 óV   — t        t        | j                  «      | j                   «      S r3   )r   Ústrr   r   r   s    r   Ú_eval_adjointzFermionOp._eval_adjointY   s    € Üœ˜TŸY™Y›¨T×-AÑ-AÐ)AÓBÐBr   c                 óz   — | j                   rdt        | j                  «      z  S dt        | j                  «      z  S )Nz{%s}z{{%s}^\dagger}©r   r6   r   ©r   Úprinterr   s      r   Ú_print_contents_latexzFermionOp._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)r9   r:   s      r   Ú_print_contentszFermionOp._print_contentsb   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.stringpictr@   Ú_printr   r   )r   r;   r   r@   Úpforms        r   Ú_print_contents_prettyz FermionOp._print_contents_prettyh   s@   € Ý?Ø�—‘˜tŸy™y¨™|Ð3¨dÒ3ˆØ×ÒØˆLà™* \Ó2Ñ2Ð2r   c                 óô   — ddl m} |dk(  r|j                  S |dk(  r| S |dkD  dk(  r|j                  dk(  r|j                  S |dk  dk(  s|j                  dk(  rt        d«      ‚t        j                  | |«      S )Nr   r   r   TFzBFermionic operators can only be raised to a positive integer power)Úsympy.core.singletonr   r#   Ú
is_integerr*   r"   r   Ú_eval_power)r   Úexpr   s      r   rH   zFermionOp._eval_powerp   s}   € Ý*Ø�!Š8Ø—5‘5ˆLØ�AŠXØˆKØ�A‰g˜$Ò 3§>¡>°TÒ#9Ø—6‘6ˆMØ�A‰g˜$Ò #§.¡.°EÒ"9Üð *ó +ð +ä×#Ñ# D¨#Ó.Ð.r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úpropertyr   r   Úclassmethodr   r$   r-   r/   r1   r4   r7   r<   r>   rD   rH   r   r   r   r   r      sv   „ ñð* ñó ðð ñ"ó ð"ð ñó ðò
,òò
ò òòCò6ò2ò3ó/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   zxFock state ket for a fermionic mode.

    Parameters
    ==========

    n : Number
        The Fock state number.

    c                 óL   — |dvrt        d«      ‚t        j                  | |«      S ©N)r   r   zn must be 0 or 1)r"   r   r$   ©r%   Úns     r   r$   zFermionFockKet.__new__ˆ   ó&   € Ø�F‰?ÜÐ/Ó0Ð0Ü�{‰{˜3 Ó"Ð"r   c                 ó    — | j                   d   S r   ©Úlabelr   s    r   rT   zFermionFockKet.n�   ó   € à�z‰z˜!‰}Ðr   c                 ó   — t         S r3   )r   r   s    r   Ú
dual_classzFermionFockKet.dual_class‘   ó   € äÐr   c                 ó   — t        «       S r3   )r   )r%   rX   s     r   Ú_eval_hilbert_spacez"FermionFockKet._eval_hilbert_space•   s
   € ä‹~Ðr   c                 óB   — t        | j                  |j                  «      S r3   )r
   rT   )r   Úbrar&   s      r   Ú!_eval_innerproduct_FermionFockBraz0FermionFockKet._eval_innerproduct_FermionFockBra™   s   € Ü˜dŸf™f c§e¡eÓ,Ð,r   c                 óÂ   — |j                   r*| j                  dk(  rt        d«      S t        j                  S | j                  dk(  rt        d«      S t        j                  S )Nr   r   )r   rT   r   r   r*   )r   ÚopÚoptionss      r   Ú_apply_from_right_to_FermionOpz-FermionFockKet._apply_from_right_to_FermionOpœ   sI   € Ø×ÒØ�v‰v˜Š{Ü% aÓ(Ð(ä—v‘v�à�v‰v˜Š{Ü% aÓ(Ð(ä—v‘v�r   N)rJ   rK   rL   rM   r$   rN   rT   rO   r[   r^   ra   re   r   r   r   r   r   }   sR   „ ñò#ð
 ñó ðð ñó ðð ñó ðò-ó
r   r   c                   ó6   — e Zd ZdZd„ Zed„ «       Zed„ «       Zy)r   zxFock state bra for a fermionic mode.

    Parameters
    ==========

    n : Number
        The Fock state number.

    c                 óL   — |dvrt        d«      ‚t        j                  | |«      S rR   )r"   r	   r$   rS   s     r   r$   zFermionFockBra.__new__´   rU   r   c                 ó    — | j                   d   S r   rW   r   s    r   rT   zFermionFockBra.n¹   rY   r   c                 ó   — t         S r3   )r   r   s    r   r[   zFermionFockBra.dual_class½   r\   r   N)	rJ   rK   rL   rM   r$   rN   rT   rO   r[   r   r   r   r   r   ©   s4   „ ñò#ð
 ñó ðð ñó ñr   r   N)rM   Úsympy.core.numbersr   rF   r   Úsympy.physics.quantumr   r   r   r	   Ú(sympy.functions.special.tensor_functionsr
   Ú__all__r   r   r   r   r   r   Ú<module>rn      sI   ðÙ "å &Ý "Ý *ß 8Ñ 8Ý Cò€ôj/�ô j/ôX)�Sô )ôX�Sõ r   