
    sgbC                     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    N/var/www/html/venv/lib/python3.12/site-packages/sympy/physics/quantum/pauli.pynamezSigmaOpBase.name   s    yy|    c                 6    t        | j                  d         duS )Nr   F)boolr   r   s    r    use_namezSigmaOpBase.use_name   s    DIIaL!..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    4d4e44r"   c                 "    t         j                  S r*   r   Zeror   otherr.   s      r    _eval_commutator_BosonOpz$SigmaOpBase._eval_commutator_BosonOp&       vv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    99

"66Mq56$)),,,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    99

"66M7VDII...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]       =='#dii.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    <<AMM$))$,,SVaZ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    Xw/WAq6Aq6*++%&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    Xw/WAr7Q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    Xw/WAq6Ar7+,,%&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-    99

"66M499%%%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"  /    99

"66Mvdii(((r"   c                     d| z  S r@   r'   r2   s      r    rI   z"SigmaMinus._eval_commutator_SigmaZ(  s    4xr"   c                 ,    t        | j                        S r*   r   r!   r2   s      r    _eval_commutator_SigmaMinusz&SigmaMinus._eval_commutator_SigmaMinus+      dii  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      uu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=      <<AMM66M *<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*    99

"66M$))$$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%    99

"66M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   zKet 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      zz!}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    dffcee,,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!    66Q;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    #vv{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+    #'66Q;q9Q<GaR9Q<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     66Q;Q<66Mr"   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     66Q;66M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    Xw/W)-16A3*%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              rt        |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              rt        |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              rt        |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              rt        |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              rt        |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1ayvv66AFF?q!9q!9	Av	a 55La vaff~%%a 3''a$FFVAFF^A--.a#FFVAFF^A--. $ 
Av	a 3''a 55La vaff~%%a$2/022a#qvv./11 $ 
Av	a vaff~%%a 3''a 55La$'''a#QVV$$ $ 
Az	"a EEF166N*A--a 3!%%&.01!33a aff%%a$66Ma#66F166N1,,, $ 
Ay	!a EEF166N*A--a qvv./11a aff%%%a$EEF166N*A--a#66M $ 1u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        |      rt        |t              rt        |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!c3_%G:166:;;!S

266!9Dr7dK0be[1991

*FF1I,T15**,CCyF r7dK0be[1991

* KK   Aw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"   