
    EdIC                     ~   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 dS ) 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                   `    e Zd ZdZed             Zed             Zed             Zd Z	d Z
dS )SigmaOpBasez Pauli sigma operator, base classc                     | j         d         S Nr   )argsselfs    ;lib/python3.11/site-packages/sympy/physics/quantum/pauli.pynamezSigmaOpBase.name   s    y|    c                 :    t          | j        d                   duS )Nr   F)boolr   r   s    r    use_namezSigmaOpBase.use_name   s    DIaL!!..r"   c                     dS )N)F r   s    r    default_argszSigmaOpBase.default_args   s    xr"   c                 ,    t          j        | g|R i |S N)r
   __new__clsr   hintss      r    r+   zSigmaOpBase.__new__#   s#    4d444e444r"   c                     t           j        S r*   r   Zeror   otherr.   s      r    _eval_commutator_BosonOpz$SigmaOpBase._eval_commutator_BosonOp&   	    vr"   N)__name__
__module____qualname____doc__propertyr!   r%   classmethodr(   r+   r4   r'   r"   r    r   r      s        **  X / / X/   [5 5 5    r"   r   c                   T    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S )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                 ,    t          j        | g|R i |S r*   r   r+   r,   s      r    r+   zSigmaX.__new__B   s#    "37777777r"   c                 x    | j         |j         k    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
" 	-6Mq56$),,,,r"   c                 x    | j         |j         k    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
" 	/6M7VDI....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                 B    | j         rdt          | j                  z  S dS )Nz{\sigma_x^{(%s)}}z
{\sigma_x}r%   strr!   r   printerr   s      r    _print_contents_latexzSigmaX._print_contents_latex]   $    = 	!'#di..88 =r"   c                     dS )NzSigmaX()r'   rV   s      r    _print_contentszSigmaX._print_contentsc       zr"   c                     |j         r>|j        r9t          | j                                      t          |          dz            S d S d S r@   )
is_Integeris_positiver   r!   __pow__intr   es     r    _eval_powerzSigmaX._eval_powerf   Q    < 	9AM 	9$)$$,,SVVaZ888	9 	9 	9 	9r"   c                     |                     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   g    Xw//W 	DAq6Aq6*+++%&A&,'-/B'C D 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 8 8- - -/ / /        ! ! !  9 9 9D D D D Dr"   r   c                   N    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S )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|R  S r*   r>   r,   s      r    r+   zSigmaY.__new__       "3.....r"   c                 x    | j         |j         k    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                 x    | j         |j         k    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                 B    | j         rdt          | j                  z  S dS )Nz{\sigma_y^{(%s)}}z
{\sigma_y}rT   rV   s      r    rX   zSigmaY._print_contents_latex   rY   r"   c                     dS )NzSigmaY()r'   rV   s      r    r[   zSigmaY._print_contents   r\   r"   c                     |j         r>|j        r9t          | j                                      t          |          dz            S d S d S r@   )r^   r_   r   r!   r`   ra   rb   s     r    rd   zSigmaY._eval_power   re   r"   c                     |                     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   si    Xw//W 	DAr7QF+,,,%&A&,'-/B'C D 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 9 9D D D D Dr"   r   c                   N    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S )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|R  S r*   r>   r,   s      r    r+   zSigmaZ.__new__   rv   r"   c                 x    | j         |j         k    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                 x    | j         |j         k    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                 B    | j         rdt          | j                  z  S dS )Nz{\sigma_z^{(%s)}}z
{\sigma_z}rT   rV   s      r    rX   zSigmaZ._print_contents_latex   rY   r"   c                     dS )NzSigmaZ()r'   rV   s      r    r[   zSigmaZ._print_contents   r\   r"   c                     |j         r>|j        r9t          | j                                      t          |          dz            S d S d S r@   )r^   r_   r   r!   r`   ra   rb   s     r    rd   zSigmaZ._eval_power   re   r"   c                     |                     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   sg    Xw//W 	DAq6Ar7+,,,%&A&,'-/B'C D 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                   f    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S )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|R  S r*   r>   r,   s      r    r+   zSigmaMinus.__new__  rv   r"   c                 d    | j         |j         k    rt          j        S t          | j                    S r*   r!   r   r1   r   r2   s      r    rz   z"SigmaMinus._eval_commutator_SigmaX  s-    9
" 	&6M49%%%%r"   c                 r    | j         |j         k    rt          j        S t          t	          | j                   z  S r*   rB   r2   s      r    rC   z"SigmaMinus._eval_commutator_SigmaY"  /    9
" 	)6Mvdi((((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+      di   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r"   c                 *    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                 >    |j         r|j        rt          j        S d S d S r*   r^   r_   r   r1   rb   s     r    rd   zSigmaMinus._eval_power=  0    < 	AM 	6M	 	 	 	r"   c                 B    | j         rdt          | j                  z  S dS )Nz{\sigma_-^{(%s)}}z
{\sigma_-}rT   rV   s      r    rX   z SigmaMinus._print_contents_latexA  rY   r"   c                     dS )NzSigmaMinus()r'   rV   s      r    r[   zSigmaMinus._print_contentsG  s    ~r"   c                     |                     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      s         2/ / /& & &) ) )  ! ! !    ! ! !  $ $ $  ! ! !  D D D D 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d Zd Zd Zd Zd ZdS )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|R  S r*   r>   r,   s      r    r+   zSigmaPlus.__new__m  rv   r"   c                 b    | j         |j         k    rt          j        S t          | j                   S r*   r   r2   s      r    rz   z!SigmaPlus._eval_commutator_SigmaXp  s*    9
" 	%6M$)$$$r"   c                 r    | j         |j         k    rt          j        S t          t	          | j                   z  S r*   rB   r2   s      r    rC   z!SigmaPlus._eval_commutator_SigmaYv  r   r"   c                 D    | j         |j         k    rt          j        S d| z  S rF   )r!   r   r1   r2   s      r    rI   z!SigmaPlus._eval_commutator_SigmaZ|  s$    9
" 	6M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                 >    |j         r|j        rt          j        S d S d S r*   r   rb   s     r    rd   zSigmaPlus._eval_power  r   r"   c                 B    | j         rdt          | j                  z  S dS )Nz{\sigma_+^{(%s)}}z
{\sigma_+}rT   rV   s      r    rX   zSigmaPlus._print_contents_latex  rY   r"   c                     dS )NzSigmaPlus()r'   rV   s      r    r[   zSigmaPlus._print_contents  s    }r"   c                     |                     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  s        2/ / /% % %) ) )  ! ! !        % % %    ! ! !  D D D D Dr"   r   c                       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dS )r   zKet for a two-level system quantum system.

    Parameters
    ==========

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

    c                 R    |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? 	1/000{3"""r"   c                     | j         d         S r   labelr   s    r    r   zSigmaZKet.n      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                 6    t          | j        |j                  S r*   )r   r   )r   brar.   s      r    _eval_innerproduct_SigmaZBraz&SigmaZKet._eval_innerproduct_SigmaZBra  s    dfce,,,r"   c                 :    | j         dk    r| S t          j        | z  S r   )r   r   r   r   oprq   s      r    _apply_operator_SigmaZz SigmaZKet._apply_operator_SigmaZ  s"    6Q; 	(K=4''r"   c                 T    | j         dk    rt          d          nt          d          S Nr   rj   )r   r   r   s      r    _apply_operator_SigmaXz SigmaZKet._apply_operator_SigmaX  s#    #v{<y|||	!<r"   c                 v    | j         dk    rt          t          d          z  nt           t          d          z  S r   )r   r   r   r   s      r    _apply_operator_SigmaYz SigmaZKet._apply_operator_SigmaY  s0    #'6Q;Gq9Q<<aR9Q<<4GGr"   c                 N    | j         dk    rt          d          S t          j        S r   )r   r   r   r1   r   s      r    _apply_operator_SigmaMinusz$SigmaZKet._apply_operator_SigmaMinus  s#    6Q; 	Q<<6Mr"   c                 N    | j         dk    rt          j        S t          d          S r   )r   r   r1   r   r   s      r    _apply_operator_SigmaPlusz#SigmaZKet._apply_operator_SigmaPlus  s#    6Q; 	 6MQ<<r"   c                     |                     dd          }|dk    r1| j        dk    rt          dgdgg          n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  s    Xw//W 	D)-1L6A3*%%%&1#s:L:LL%&A&,'-/B'C D 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     s         # # #
   X   [   [- - -( ( (= = =H H H       D D D D Dr"   r   c                   D    e Zd ZdZd Zed             Zed             ZdS )r   z{Bra for a two-level quantum system.

    Parameters
    ==========

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

    c                 R    |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     sc         # # #
   X   [  r"   r   c                    t          | t                    rt          |t                    st          | |          S | j        |j        k    r0| 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 dS 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                    r-t           t
          j        t          | j                  z   z  dz  S t          |t                    r,t          t
          j        t          | j                  z
  z  dz  S dS 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 dS t          | t                    r t          |t                    r$t
          j        t          | j                  z
  dz  S t          |t                    r-t           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 dS t          | t                    r t          |t                    r$t
          j        t          | j                  z   dz  S t          |t                    r,t          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 dS | |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+E 1ayyv _6AF? 	q!99q!99	Av		 Xa   	5La   	&vaf~~%%a   	(3''a$$ 	/FVAF^^A--.a## 	/FVAF^^A--.	/ 	/ 
Av		 Ga   	(3''a   	5La   	&vaf~~%%a$$ 	32/022a## 	2qv./11	2 	2 
Av		 6a   	&vaf~~%%a   	(3''a   	5La$$ 	(''''a## 	%QV$$$	% 	% 
Az	"	" %a   	.EF16NN*A--a   	43!%&..01!33a   	&af%%%a$$ 	6Ma## 	-6F16NN1,,,	- 	- 
Ay	!	! a   	.EF16NN*A--a   	2qv./11a   	&af%%%%a$$ 	.EF16NN*A--a## 	6M	 	 1ur"   c                    t          | t                    r| S t          | t          t          t          f          r#t          |           } |d | j        D              S t          | t                    rP|                                 \  }}g }|r!|	                    d          }t          |          rt          |t                    rt          |d         t                    r|j        |d         j        k    r|	                    d          }t          ||          }|                                \  }}	t          |	 }||z   }t          |          rFt          |t                    r1t          |d         t                    r|j        |d         j        k    |                    |           |!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   4   K   | ]}t          |          V  d S r*   )r   ).0args     r    	<genexpr>z"qsimplify_pauli.<locals>.<genexpr>  s*      ::C?3''::::::r"   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_%% <GGq::16:::;;!S $

2 	66!99Dr77 	dK00	be[11	 91
*	
 FF1II,T155**,,CCyF r77 	dK00	be[11	 9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 6 6 6 6 6 4 4 4 4 4 4 4 4 4 4 . . . . . . ! ! ! ! ! ! C C C C C C      (   ,FD FD FD FD FD[ FD FD FDRCD CD CD CD CD[ CD CD CDLCD CD CD CD CD[ CD CD CDLQD QD QD QD QD QD QD QDhWD WD WD WD WD WD WD WDt=D =D =D =D =D =D =D =D@       2f f fR4 4 4 4 4r"   