Ë
    7^(hbC  ã                   óL  — 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 dd	lmZ dd
l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 G d„ de«      Z G d„ de«      Z G d„ de«      Zd„ Zd„ Z y) zPauli operators and statesé    )ÚAdd)ÚMul©ÚI)ÚPow)ÚS)Úexp)ÚOperatorÚKetÚBra©ÚComplexSpace)ÚMatrix)ÚKroneckerDelta)ÚSigmaXÚSigmaYÚSigmaZÚ
SigmaMinusÚ	SigmaPlusÚ	SigmaZKetÚ	SigmaZBraÚqsimplify_paulic                   óL   — e Zd ZdZed„ «       Zed„ «       Zed„ «       Zd„ Z	d„ Z
y)ÚSigmaOpBasez Pauli sigma operator, base classc                 ó    — | j                   d   S ©Nr   )Úargs©Úselfs    úY/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/physics/quantum/pauli.pyÚnamezSigmaOpBase.name   s   € à�y‰y˜‰|Ðó    c                 ó6   — t        | j                  d   «      duS )Nr   F)Úboolr   r   s    r    Úuse_namezSigmaOpBase.use_name   s   € ä�D—I‘I˜a‘LÓ!¨Ð.Ð.r"   c                  ó   — y)N)F© r   s    r    Údefault_argszSigmaOpBase.default_args   s   € àr"   c                 ó4   — t        j                  | g|¢­i |¤ŽS ©N)r
   Ú__new__©Úclsr   Úhintss      r    r+   zSigmaOpBase.__new__#   s   € Ü×Ñ Ð4 dÒ4¨eÑ4Ð4r"   c                 ó"   — t         j                  S r*   ©r   ÚZero©r   Úotherr.   s      r    Ú_eval_commutator_BosonOpz$SigmaOpBase._eval_commutator_BosonOp&   ó   € Ü�v‰vˆr"   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úpropertyr!   r%   Úclassmethodr(   r+   r4   r'   r"   r    r   r      sI   „ Ù*àñó ðð ñ/ó ð/ð ñó ðò5ór"   r   c                   óR   — e Zd ZdZ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¦  Pauli sigma x operator

    Parameters
    ==========

    name : str
        An optional string that labels the operator. Pauli operators with
        different names commute.

    Examples
    ========

    >>> from sympy.physics.quantum import represent
    >>> from sympy.physics.quantum.pauli import SigmaX
    >>> sx = SigmaX()
    >>> sx
    SigmaX()
    >>> represent(sx)
    Matrix([
    [0, 1],
    [1, 0]])
    c                 ó4   — t        j                  | g|¢­i |¤ŽS r*   ©r   r+   r,   s      r    r+   zSigmaX.__new__B   s   € Ü×"Ñ" 3Ð7¨Ò7°Ñ7Ð7r"   c                 ó’   — | j                   |j                   k7  rt        j                  S dt        z  t	        | j                   «      z  S ©Né   ©r!   r   r1   r   r   r2   s      r    Ú_eval_commutator_SigmaYzSigmaX._eval_commutator_SigmaYE   ó3   € Ø�9‰9˜Ÿ
™
Ò"Ü—6‘6ˆMà”q‘5œ6 $§)¡)Ó,Ñ,Ð,r"   c                 ó’   — | j                   |j                   k7  rt        j                  S dt        z  t	        | j                   «      z  S ©Néþÿÿÿ©r!   r   r1   r   r   r2   s      r    Ú_eval_commutator_SigmaZzSigmaX._eval_commutator_SigmaZK   ó3   € Ø�9‰9˜Ÿ
™
Ò"Ü—6‘6ˆMàœ‘7œV D§I¡IÓ.Ñ.Ð.r"   c                 ó"   — t         j                  S r*   r0   r2   s      r    r4   zSigmaX._eval_commutator_BosonOpQ   r5   r"   c                 ó"   — t         j                  S r*   r0   r2   s      r    Ú_eval_anticommutator_SigmaYz"SigmaX._eval_anticommutator_SigmaYT   r5   r"   c                 ó"   — t         j                  S r*   r0   r2   s      r    Ú_eval_anticommutator_SigmaZz"SigmaX._eval_anticommutator_SigmaZW   r5   r"   c                 ó   — | S r*   r'   r   s    r    Ú_eval_adjointzSigmaX._eval_adjointZ   ó   € Øˆr"   c                 óL   — | j                   rdt        | j                  «      z  S y)Nz{\sigma_x^{(%s)}}z
{\sigma_x}©r%   Ústrr!   ©r   Úprinterr   s      r    Ú_print_contents_latexzSigmaX._print_contents_latex]   ó   € Ø�=Š=Ø'¬#¨d¯i©i«.Ñ8Ð8à r"   c                  ó   — y)NzSigmaX()r'   rV   s      r    Ú_print_contentszSigmaX._print_contentsc   ó   € Ør"   c                 ó–   — |j                   r=|j                  r0t        | j                  «      j	                  t        |«      dz  «      S y y r@   )Ú
is_IntegerÚis_positiver   r!   Ú__pow__Úint©r   Úes     r    Ú_eval_powerzSigmaX._eval_powerf   ó8   € Ø�<Š<˜AŸMšMÜ˜$Ÿ)™)Ó$×,Ñ,¬S°«V°a©ZÓ8Ð8ð *ˆ<r"   c                 ót   — |j                  dd«      }|dk(  rt        ddgddgg«      S t        d|z   dz   «      ‚©NÚformatÚsympyr   é   úRepresentation in format ú not implemented.©Úgetr   ÚNotImplementedError©r   Úoptionsrh   s      r    Ú_represent_default_basiszSigmaX._represent_default_basisj   óU   € Ø—‘˜X wÓ/ˆØ�WÒÜ˜A˜q˜6 A q 6Ð*Ó+Ð+ä%Ð&AØ&,ñ'-Ø/Bñ'Có Dð Dr"   N)r6   r7   r8   r9   r+   rC   rI   r4   rM   rO   rQ   rX   r[   rd   rr   r'   r"   r    r   r   *   s?   „ ñò.8ò-ò/òòòòò!òò9óDr"   r   c                   óL   — e Zd Z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¨  Pauli sigma y operator

    Parameters
    ==========

    name : str
        An optional string that labels the operator. Pauli operators with
        different names commute.

    Examples
    ========

    >>> from sympy.physics.quantum import represent
    >>> from sympy.physics.quantum.pauli import SigmaY
    >>> sy = SigmaY()
    >>> sy
    SigmaY()
    >>> represent(sy)
    Matrix([
    [0, -I],
    [I,  0]])
    c                 ó.   — t        j                  | g|¢­Ž S r*   r>   r,   s      r    r+   zSigmaY.__new__‹   ó   € Ü×"Ñ" 3Ð.¨Ò.Ð.r"   c                 ó’   — | j                   |j                   k7  rt        j                  S dt        z  t	        | j                   «      z  S r@   ©r!   r   r1   r   r   r2   s      r    rI   zSigmaY._eval_commutator_SigmaZŽ   rD   r"   c                 ó’   — | j                   |j                   k7  rt        j                  S dt        z  t	        | j                   «      z  S rF   rB   r2   s      r    Ú_eval_commutator_SigmaXzSigmaY._eval_commutator_SigmaX”   rJ   r"   c                 ó"   — t         j                  S r*   r0   r2   s      r    Ú_eval_anticommutator_SigmaXz"SigmaY._eval_anticommutator_SigmaXš   r5   r"   c                 ó"   — t         j                  S r*   r0   r2   s      r    rO   z"SigmaY._eval_anticommutator_SigmaZ�   r5   r"   c                 ó   — | S r*   r'   r   s    r    rQ   zSigmaY._eval_adjoint    rR   r"   c                 óL   — | j                   rdt        | j                  «      z  S y)Nz{\sigma_y^{(%s)}}z
{\sigma_y}rT   rV   s      r    rX   zSigmaY._print_contents_latex£   rY   r"   c                  ó   — y)NzSigmaY()r'   rV   s      r    r[   zSigmaY._print_contents©   r\   r"   c                 ó–   — |j                   r=|j                  r0t        | j                  «      j	                  t        |«      dz  «      S y y r@   )r^   r_   r   r!   r`   ra   rb   s     r    rd   zSigmaY._eval_power¬   re   r"   c                 ó†   — |j                  dd«      }|dk(  rt        dt         gt        dgg«      S t        d|z   dz   «      ‚)Nrh   ri   r   rk   rl   )rn   r   r   ro   rp   s      r    rr   zSigmaY._represent_default_basis°   sW   € Ø—‘˜X wÓ/ˆØ�WÒÜ˜A¤˜r˜7¤Q¨ FÐ+Ó,Ð,ä%Ð&AØ&,ñ'-Ø/Bñ'Có Dð Dr"   N)r6   r7   r8   r9   r+   rI   rz   r|   rO   rQ   rX   r[   rd   rr   r'   r"   r    r   r   s   ó:   „ ñò./ò-ò/òòòò!òò9óDr"   r   c                   óL   — e Zd Z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­  Pauli sigma z operator

    Parameters
    ==========

    name : str
        An optional string that labels the operator. Pauli operators with
        different names commute.

    Examples
    ========

    >>> from sympy.physics.quantum import represent
    >>> from sympy.physics.quantum.pauli import SigmaZ
    >>> sz = SigmaZ()
    >>> sz ** 3
    SigmaZ()
    >>> represent(sz)
    Matrix([
    [1,  0],
    [0, -1]])
    c                 ó.   — t        j                  | g|¢­Ž S r*   r>   r,   s      r    r+   zSigmaZ.__new__Ñ   rv   r"   c                 ó’   — | j                   |j                   k7  rt        j                  S dt        z  t	        | j                   «      z  S r@   rH   r2   s      r    rz   zSigmaZ._eval_commutator_SigmaXÔ   rD   r"   c                 ó’   — | j                   |j                   k7  rt        j                  S dt        z  t	        | j                   «      z  S rF   rx   r2   s      r    rC   zSigmaZ._eval_commutator_SigmaYÚ   rJ   r"   c                 ó"   — t         j                  S r*   r0   r2   s      r    r|   z"SigmaZ._eval_anticommutator_SigmaXà   r5   r"   c                 ó"   — t         j                  S r*   r0   r2   s      r    rM   z"SigmaZ._eval_anticommutator_SigmaYã   r5   r"   c                 ó   — | S r*   r'   r   s    r    rQ   zSigmaZ._eval_adjointæ   rR   r"   c                 óL   — | j                   rdt        | j                  «      z  S y)Nz{\sigma_z^{(%s)}}z
{\sigma_z}rT   rV   s      r    rX   zSigmaZ._print_contents_latexé   rY   r"   c                  ó   — y)NzSigmaZ()r'   rV   s      r    r[   zSigmaZ._print_contentsï   r\   r"   c                 ó–   — |j                   r=|j                  r0t        | j                  «      j	                  t        |«      dz  «      S y y r@   )r^   r_   r   r!   r`   ra   rb   s     r    rd   zSigmaZ._eval_powerò   re   r"   c                 ót   — |j                  dd«      }|dk(  rt        ddgddgg«      S t        d|z   dz   «      ‚)Nrh   ri   rj   r   éÿÿÿÿrk   rl   rm   rp   s      r    rr   zSigmaZ._represent_default_basisö   sU   € Ø—‘˜X wÓ/ˆØ�WÒÜ˜A˜q˜6 A r 7Ð+Ó,Ð,ä%Ð&AØ&,ñ'-Ø/Bñ'Có Dð Dr"   N)r6   r7   r8   r9   r+   rz   rC   r|   rM   rQ   rX   r[   rd   rr   r'   r"   r    r   r   ¹   rƒ   r"   r   c                   ód   — e Zd ZdZd„ Zd„ Zd„ Z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á  Pauli sigma minus operator

    Parameters
    ==========

    name : str
        An optional string that labels the operator. Pauli operators with
        different names commute.

    Examples
    ========

    >>> from sympy.physics.quantum import represent, Dagger
    >>> from sympy.physics.quantum.pauli import SigmaMinus
    >>> sm = SigmaMinus()
    >>> sm
    SigmaMinus()
    >>> Dagger(sm)
    SigmaPlus()
    >>> represent(sm)
    Matrix([
    [0, 0],
    [1, 0]])
    c                 ó.   — t        j                  | g|¢­Ž S r*   r>   r,   s      r    r+   zSigmaMinus.__new__  rv   r"   c                 ó€   — | j                   |j                   k7  rt        j                  S t        | j                   «       S r*   ©r!   r   r1   r   r2   s      r    rz   z"SigmaMinus._eval_commutator_SigmaX  s-   € Ø�9‰9˜Ÿ
™
Ò"Ü—6‘6ˆMä˜4Ÿ9™9Ó%Ð%Ð%r"   c                 óŒ   — | j                   |j                   k7  rt        j                  S t        t	        | j                   «      z  S r*   rB   r2   s      r    rC   z"SigmaMinus._eval_commutator_SigmaY"  ó/   € Ø�9‰9˜Ÿ
™
Ò"Ü—6‘6ˆMä”v˜dŸi™iÓ(Ñ(Ð(r"   c                 ó   — d| z  S r@   r'   r2   s      r    rI   z"SigmaMinus._eval_commutator_SigmaZ(  s   € Ø�4‰xˆr"   c                 ó,   — t        | j                  «      S r*   ©r   r!   r2   s      r    Ú_eval_commutator_SigmaMinusz&SigmaMinus._eval_commutator_SigmaMinus+  ó   € Ü�d—i‘iÓ Ð r"   c                 ó"   — t         j                  S r*   r0   r2   s      r    rO   z&SigmaMinus._eval_anticommutator_SigmaZ.  r5   r"   c                 ó"   — t         j                  S r*   ©r   ÚOner2   s      r    r|   z&SigmaMinus._eval_anticommutator_SigmaX1  ó   € Ü�u‰uˆr"   c                 ó0   — t         t        j                  z  S r*   )r   r   ÚNegativeOner2   s      r    rM   z&SigmaMinus._eval_anticommutator_SigmaY4  s   € Ü”1—=‘=Ñ Ð r"   c                 ó"   — t         j                  S r*   r�   r2   s      r    Ú_eval_anticommutator_SigmaPlusz)SigmaMinus._eval_anticommutator_SigmaPlus7  rŸ   r"   c                 ó,   — t        | j                  «      S r*   )r   r!   r   s    r    rQ   zSigmaMinus._eval_adjoint:  s   € Ü˜Ÿ™Ó#Ð#r"   c                 óV   — |j                   r|j                  rt        j                  S y y r*   ©r^   r_   r   r1   rb   s     r    rd   zSigmaMinus._eval_power=  ó   € Ø�<Š<˜AŸMšMÜ—6‘6ˆMð *ˆ<r"   c                 óL   — | j                   rdt        | j                  «      z  S y)Nz{\sigma_-^{(%s)}}z
{\sigma_-}rT   rV   s      r    rX   z SigmaMinus._print_contents_latexA  rY   r"   c                  ó   — y)NzSigmaMinus()r'   rV   s      r    r[   zSigmaMinus._print_contentsG  s   € Ør"   c                 ót   — |j                  dd«      }|dk(  rt        ddgddgg«      S t        d|z   dz   «      ‚rg   rm   rp   s      r    rr   z#SigmaMinus._represent_default_basisJ  rs   r"   N)r6   r7   r8   r9   r+   rz   rC   rI   r™   rO   r|   rM   r£   rQ   rd   rX   r[   rr   r'   r"   r    r   r   ÿ   sN   „ ñò2/ò&ò)òò!òòò!òò$òò!òóDr"   r   c                   ój   — e Zd ZdZd„ Zd„ Zd„ Zd„ Z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Þ  Pauli sigma plus operator

    Parameters
    ==========

    name : str
        An optional string that labels the operator. Pauli operators with
        different names commute.

    Examples
    ========

    >>> from sympy.physics.quantum import represent, Dagger
    >>> from sympy.physics.quantum.pauli import SigmaPlus
    >>> sp = SigmaPlus()
    >>> sp
    SigmaPlus()
    >>> Dagger(sp)
    SigmaMinus()
    >>> represent(sp)
    Matrix([
    [0, 1],
    [0, 0]])
    c                 ó.   — t        j                  | g|¢­Ž S r*   r>   r,   s      r    r+   zSigmaPlus.__new__m  rv   r"   c                 ó~   — | j                   |j                   k7  rt        j                  S t        | j                   «      S r*   r“   r2   s      r    rz   z!SigmaPlus._eval_commutator_SigmaXp  s*   € Ø�9‰9˜Ÿ
™
Ò"Ü—6‘6ˆMä˜$Ÿ)™)Ó$Ð$r"   c                 óŒ   — | j                   |j                   k7  rt        j                  S t        t	        | j                   «      z  S r*   rB   r2   s      r    rC   z!SigmaPlus._eval_commutator_SigmaYv  r•   r"   c                 ó^   — | j                   |j                   k7  rt        j                  S d| z  S rF   )r!   r   r1   r2   s      r    rI   z!SigmaPlus._eval_commutator_SigmaZ|  s%   € Ø�9‰9˜Ÿ
™
Ò"Ü—6‘6ˆMà˜‘9Ðr"   c                 ó,   — t        | j                  «      S r*   r˜   r2   s      r    r™   z%SigmaPlus._eval_commutator_SigmaMinus‚  rš   r"   c                 ó"   — t         j                  S r*   r0   r2   s      r    rO   z%SigmaPlus._eval_anticommutator_SigmaZ…  r5   r"   c                 ó"   — t         j                  S r*   r�   r2   s      r    r|   z%SigmaPlus._eval_anticommutator_SigmaXˆ  rŸ   r"   c                 ó   — t         S r*   r   r2   s      r    rM   z%SigmaPlus._eval_anticommutator_SigmaY‹  s   € Üˆr"   c                 ó"   — t         j                  S r*   r�   r2   s      r    Ú_eval_anticommutator_SigmaMinusz)SigmaPlus._eval_anticommutator_SigmaMinusŽ  rŸ   r"   c                 ó,   — t        | j                  «      S r*   )r   r!   r   s    r    rQ   zSigmaPlus._eval_adjoint‘  s   € Ü˜$Ÿ)™)Ó$Ð$r"   c                 ó   — | |z  S r*   r'   )r   r3   s     r    Ú	_eval_mulzSigmaPlus._eval_mul”  s   € Ø�e‰|Ðr"   c                 óV   — |j                   r|j                  rt        j                  S y y r*   r¦   rb   s     r    rd   zSigmaPlus._eval_power—  r§   r"   c                 óL   — | j                   rdt        | j                  «      z  S y)Nz{\sigma_+^{(%s)}}z
{\sigma_+}rT   rV   s      r    rX   zSigmaPlus._print_contents_latex›  rY   r"   c                  ó   — y)NzSigmaPlus()r'   rV   s      r    r[   zSigmaPlus._print_contents¡  s   € Ør"   c                 ót   — |j                  dd«      }|dk(  rt        ddgddgg«      S t        d|z   dz   «      ‚rg   rm   rp   s      r    rr   z"SigmaPlus._represent_default_basis¤  rs   r"   N)r6   r7   r8   r9   r+   rz   rC   rI   r™   rO   r|   rM   rµ   rQ   r¸   rd   rX   r[   rr   r'   r"   r    r   r   S  sS   „ ñò2/ò%ò)òò!òòòòò%òòò!òóDr"   r   c                   óp   — e Zd 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y)r   z‚Ket for a two-level system quantum system.

    Parameters
    ==========

    n : Number
        The state number (0 or 1).

    c                 óL   — |dvrt        d«      ‚t        j                  | |«      S ©N)r   rj   zn must be 0 or 1)Ú
ValueErrorr   r+   ©r-   Úns     r    r+   zSigmaZKet.__new__¸  ó&   € Ø�F‰?ÜÐ/Ó0Ð0Ü�{‰{˜3 Ó"Ð"r"   c                 ó    — | j                   d   S r   ©Úlabelr   s    r    rÂ   zSigmaZKet.n½  ó   € à�z‰z˜!‰}Ðr"   c                 ó   — t         S r*   )r   r   s    r    Ú
dual_classzSigmaZKet.dual_classÁ  ó   € äÐr"   c                 ó   — t        d«      S r@   r   )r-   rÆ   s     r    Ú_eval_hilbert_spacezSigmaZKet._eval_hilbert_spaceÅ  s   € ä˜A‹Ðr"   c                 óB   — t        | j                  |j                  «      S r*   )r   rÂ   )r   Úbrar.   s      r    Ú_eval_innerproduct_SigmaZBraz&SigmaZKet._eval_innerproduct_SigmaZBraÉ  s   € Ü˜dŸf™f c§e¡eÓ,Ð,r"   c                 óJ   — | j                   dk(  r| S t        j                  | z  S r   )rÂ   r   r¡   ©r   Úoprq   s      r    Ú_apply_from_right_to_SigmaZz%SigmaZKet._apply_from_right_to_SigmaZÌ  s!   € Ø�6‰6�QŠ;ØˆKä—=‘= 4Ñ'Ð'r"   c                 óL   — | j                   dk(  rt        d«      S t        d«      S ©Nr   rj   )rÂ   r   rÑ   s      r    Ú_apply_from_right_to_SigmaXz%SigmaZKet._apply_from_right_to_SigmaXÒ  s   € Ø#Ÿv™v¨š{Œy˜‹|Ð<´	¸!³Ð<r"   c                 ój   — | j                   dk(  rt        t        d«      z  S t         t        d«      z  S rÕ   )rÂ   r   r   rÑ   s      r    Ú_apply_from_right_to_SigmaYz%SigmaZKet._apply_from_right_to_SigmaYÕ  s+   € Ø#'§6¡6¨Q¢;Œq”9˜Q“<ÑÐG´a°R¼9ÀQ»<Ñ4GÐGr"   c                 óV   — | j                   dk(  rt        d«      S t        j                  S rÕ   )rÂ   r   r   r1   rÑ   s      r    Ú_apply_from_right_to_SigmaMinusz)SigmaZKet._apply_from_right_to_SigmaMinusØ  s    € Ø�6‰6�QŠ;Ü˜Q“<Ðä—6‘6ˆMr"   c                 óV   — | j                   dk(  rt        j                  S t        d«      S r   )rÂ   r   r1   r   rÑ   s      r    Ú_apply_from_right_to_SigmaPlusz(SigmaZKet._apply_from_right_to_SigmaPlusÞ  s    € Ø�6‰6�QŠ;Ü—6‘6ˆMä˜Q“<Ðr"   c                 ó¬   — |j                  dd«      }|dk(  r-| j                  dk(  rt        dgdgg«      S t        dgdgg«      S t        d|z   dz   «      ‚rg   )rn   rÂ   r   ro   rp   s      r    rr   z"SigmaZKet._represent_default_basisä  sl   € Ø—‘˜X wÓ/ˆØ�WÒØ)-¯©°1ª”6˜A˜3  ˜*Ó%ÐL¼&À1À#ÈÀsÀÓ:LÐLä%Ð&AØ&,ñ'-Ø/Bñ'Có Dð Dr"   N)r6   r7   r8   r9   r+   r:   rÂ   r;   rÉ   rÌ   rÏ   rÓ   rÖ   rØ   rÚ   rÜ   rr   r'   r"   r    r   r   ­  sm   „ ñò#ð
 ñó ðð ñó ðð ñó ðò-ò(ò=òHòò óDr"   r   c                   ó6   — e Zd ZdZd„ Zed„ «       Zed„ «       Zy)r   z{Bra for a two-level quantum system.

    Parameters
    ==========

    n : Number
        The state number (0 or 1).

    c                 óL   — |dvrt        d«      ‚t        j                  | |«      S r¿   )rÀ   r   r+   rÁ   s     r    r+   zSigmaZBra.__new__ø  rÃ   r"   c                 ó    — | j                   d   S r   rÅ   r   s    r    rÂ   zSigmaZBra.ný  rÇ   r"   c                 ó   — t         S r*   )r   r   s    r    rÉ   zSigmaZBra.dual_class  rÊ   r"   N)	r6   r7   r8   r9   r+   r:   rÂ   r;   rÉ   r'   r"   r    r   r   í  s4   „ ñò#ð
 ñó ðð ñó ñr"   r   c                 óÔ
  — t        | t        «      rt        |t        «      st        | |«      S | j                  |j                  k7  r1| j                  |j                  k  rt        | |«      S t        || «      S t        | t        «      rìt        |t        «      rt
        j                  S t        |t        «      rt        t        | j                  «      z  S t        |t        «      rt         t        | j                  «      z  S t        |t        «      r)t
        j                  t        | j                  «      dz  z   S t        |t        «      r)t
        j                  t        | j                  «      dz  z
  S yt        | t        «      rût        |t        «      rt         t        | j                  «      z  S t        |t        «      rt
        j                  S t        |t        «      rt        t	        | j                  «      z  S t        |t        «      r1t         t
        j                  t        | j                  «      z   z  dz  S t        |t        «      r0t        t
        j                  t        | j                  «      z
  z  dz  S yt        | t        «      rÅt        |t        «      rt        t        | j                  «      z  S t        |t        «      rt         t	        | j                  «      z  S t        |t        «      rt
        j                  S t        |t        «      rt        | j                  «       S t        |t        «      rt        | j                  «      S yt        | t        «      rùt        |t        «      r)t
        j                  t        | j                  «      z
  dz  S t        |t        «      r1t         t
        j                  t        | j                  «      z
  z  dz  S t        |t        «      rt        |j                  «      S t        |t        «      rt
        j                  S t        |t        «      r)t
        j                  t        | j                  «      dz  z
  S yt        | t        «      rùt        |t        «      r)t
        j                  t        | j                  «      z   dz  S t        |t        «      r0t        t
        j                  t        | j                  «      z   z  dz  S t        |t        «      rt        | j                  «       S t        |t        «      r)t
        j                  t        | j                  «      z   dz  S t        |t        «      rt
        j                  S y| |z  S )zO
    Internal helper function for simplifying products of Pauli operators.
    rA   N)Ú
isinstancer   r   r!   r   r   rž   r   r   r   r   ÚHalfr   r1   )ÚaÚbs     r    Ú_qsimplify_pauli_productrç     sÉ  € ô �qœ+Ô&¬:°a¼Ô+EÜ�1�a‹yÐà‡v�v�—‘Òà�6‰6�A—F‘FŠ?Ü�q˜!“9Ðä�q˜!“9Ðä	�A”vÔ	ä�aœÔ Ü—5‘5ˆLä�aœÔ Ü”v˜aŸf™f“~Ñ%Ð%ä�aœÔ Ü�3œ §¡›Ñ'Ð'ä�aœÔ$Ü—F‘FœV A§F¡F›^¨AÑ-Ñ-Ð.ä�aœÔ#Ü—F‘FœV A§F¡F›^¨AÑ-Ñ-Ð.ð $ô 
�A”vÔ	ä�aœÔ Ü�3œ §¡›Ñ'Ð'ä�aœÔ Ü—5‘5ˆLä�aœÔ Ü”v˜aŸf™f“~Ñ%Ð%ä�aœÔ$Ü�2œŸ™¤¨¯©£Ñ/Ñ0°Ñ2Ð2ä�aœÔ#ÜœŸ™¤ q§v¡v£Ñ.Ñ/°Ñ1Ð1ð $ô 
�A”vÔ	ä�aœÔ Ü”v˜aŸf™f“~Ñ%Ð%ä�aœÔ Ü�3œ §¡›Ñ'Ð'ä�aœÔ Ü—5‘5ˆLä�aœÔ$Ü §¡Ó'Ð'Ð'ä�aœÔ#Ü˜QŸV™VÓ$Ð$ð $ô 
�A”zÔ	"ä�aœÔ Ü—E‘EœF 1§6¡6›NÑ*¨AÑ-Ð-ä�aœÔ Ü�3œ!Ÿ%™%¤&¨¯©£.Ñ0Ñ1°!Ñ3Ð3ä�aœÔ ä˜aŸf™fÓ%Ð%ä�aœÔ$Ü—6‘6ˆMä�aœÔ#Ü—6‘6œF 1§6¡6›N¨1Ñ,Ñ,Ð,ð $ô 
�A”yÔ	!ä�aœÔ Ü—E‘EœF 1§6¡6›NÑ*¨AÑ-Ð-ä�aœÔ ÜœŸ™¤ q§v¡v£Ñ.Ñ/°Ñ1Ð1ä�aœÔ ä˜aŸf™fÓ%Ð%Ð%ä�aœÔ$Ü—E‘EœF 1§6¡6›NÑ*¨AÑ-Ð-ä�aœÔ#Ü—6‘6ˆMð $ð �1‰uˆr"   c                 ó  — t        | t        «      r| S t        | t        t        t        f«      r!t        | «      } |d„ | j                  D «       Ž S t        | t        «      �r| j                  «       \  }}g }|r÷|j                  d«      }t        |«      rÇt        |t        «      r·t        |d   t        «      r¤|j                  |d   j                  k(  rˆ|j                  d«      }t        ||«      }|j                  «       \  }}	t        |	Ž }||z   }t        |«      r@t        |t        «      r0t        |d   t        «      r|j                  |d   j                  k(  rŒˆ|j                  |«       |rŒ÷t        |Ž t        |Ž z  S | S )aõ  
    Simplify an expression that includes products of pauli operators.

    Parameters
    ==========

    e : expression
        An expression that contains products of Pauli operators that is
        to be simplified.

    Examples
    ========

    >>> from sympy.physics.quantum.pauli import SigmaX, SigmaY
    >>> from sympy.physics.quantum.pauli import qsimplify_pauli
    >>> sx, sy = SigmaX(), SigmaY()
    >>> sx * sy
    SigmaX()*SigmaY()
    >>> qsimplify_pauli(sx * sy)
    I*SigmaZ()
    c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr*   )r   )Ú.0Úargs     r    ú	<genexpr>z"qsimplify_pauli.<locals>.<genexpr>Š  s   è ø€ Ò:¨C”? 3×'Ñ:ùs   ‚r   )rã   r
   r   r   r	   Útyper   r   Úargs_cncÚpopÚlenr   r!   rç   Úappend)
rc   ÚtÚcÚncÚnc_sÚcurrÚxÚyÚc1Únc1s
             r    r   r   o  s>  € ô, �!”XÔØˆä�!”cœ3¤�_Ô%Ü�‹GˆÙÑ:°1·6±6Ô:Ð;Ð;ä�!”SÕà—
‘
“‰ˆˆ2àˆÙØ—6‘6˜!“9ˆDä�r”7Ü˜d¤KÔ0Ü˜b ™e¤[Ô1Ø—9‘9  1¡§
¡
Ò*à—F‘F˜1“I�Ü,¨T°1Ó5�ØŸ*™*›,‘��CÜ˜C�y�Ø˜‘F�ô �r”7Ü˜d¤KÔ0Ü˜b ™e¤[Ô1Ø—9‘9  1¡§
¡
Ó*ð �K‰K˜Ôò ô  �Aˆwœ˜d˜Ñ#Ð#à€Hr"   N)!r9   Úsympy.core.addr   Úsympy.core.mulr   Úsympy.core.numbersr   Úsympy.core.powerr   Úsympy.core.singletonr   Ú&sympy.functions.elementary.exponentialr	   Úsympy.physics.quantumr
   r   r   r   Úsympy.matricesr   Ú(sympy.functions.special.tensor_functionsr   Ú__all__r   r   r   r   r   r   r   r   rç   r   r'   r"   r    ú<module>r     s¸   ðÙ  å Ý Ý  Ý  Ý "Ý 6ß 4Ñ 4Ý .Ý !Ý Cò€ô�(ô ô,FDˆ[ô FDôRCDˆ[ô CDôLCDˆ[ô CDôLQD�ô QDôhWD�ô WDôt=D�ô =Dô@�ô ò2fóR4r"   