o
    jgbC                     @   s   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 deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZdd Zd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                   @   sD   e Zd ZdZedd Zedd Zedd Zdd	 Z	d
d Z
dS )SigmaOpBasez Pauli sigma operator, base classc                 C   
   | j d S Nr   )argsself r   S/var/www/html/zoom/venv/lib/python3.10/site-packages/sympy/physics/quantum/pauli.pyname      
zSigmaOpBase.namec                 C   s   t | jd duS )Nr   F)boolr   r   r   r   r   use_name   s   zSigmaOpBase.use_namec                 C      dS )N)Fr   r   r   r   r   default_args      zSigmaOpBase.default_argsc                 O      t j| g|R i |S N)r	   __new__clsr   hintsr   r   r   r)   #      zSigmaOpBase.__new__c                 K      t jS r(   r   Zeror   otherr,   r   r   r   _eval_commutator_BosonOp&      z$SigmaOpBase._eval_commutator_BosonOpN)__name__
__module____qualname____doc__propertyr    r#   classmethodr%   r)   r3   r   r   r   r   r      s    


r   c                   @   sh   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zd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                 O   r'   r(   r   r)   r*   r   r   r   r)   B   r-   zSigmaX.__new__c                 K   $   | j |j kr	tjS dt t| j  S N   r    r   r0   r   r   r1   r   r   r   _eval_commutator_SigmaYE      zSigmaX._eval_commutator_SigmaYc                 K   r<   Nr    r   r0   r   r   r1   r   r   r   _eval_commutator_SigmaZK   rA   zSigmaX._eval_commutator_SigmaZc                 K   r.   r(   r/   r1   r   r   r   r3   Q   r4   zSigmaX._eval_commutator_BosonOpc                 K   r.   r(   r/   r1   r   r   r   _eval_anticommutator_SigmaYT   r4   z"SigmaX._eval_anticommutator_SigmaYc                 K   r.   r(   r/   r1   r   r   r   _eval_anticommutator_SigmaZW   r4   z"SigmaX._eval_anticommutator_SigmaZc                 C      | S r(   r   r   r   r   r   _eval_adjointZ      zSigmaX._eval_adjointc                 G      | j r
dt| j S dS )Nz{\sigma_x^{(%s)}}z
{\sigma_x}r#   strr    r   printerr   r   r   r   _print_contents_latex]      zSigmaX._print_contents_latexc                 G   r$   )NzSigmaX()r   rN   r   r   r   _print_contentsc   rJ   zSigmaX._print_contentsc                 C   ,   |j r|jrt| jt|d S d S d S r=   )
is_Integeris_positiver   r    __pow__intr   er   r   r   _eval_powerf      zSigmaX._eval_powerc                 K   s8   | dd}|dkrtddgddggS td| d Nformatsympyr      Representation in format  not implemented.getr   NotImplementedErrorr   optionsr]   r   r   r   _represent_default_basisj      zSigmaX._represent_default_basisN)r5   r6   r7   r8   r)   r@   rE   r3   rF   rG   rI   rP   rR   rZ   rg   r   r   r   r   r   *   s    r   c                   @   `   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zd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                 O      t j| g|R  S r(   r;   r*   r   r   r   r)         zSigmaY.__new__c                 K   r<   r=   r    r   r0   r   r   r1   r   r   r   rE      rA   zSigmaY._eval_commutator_SigmaZc                 K   r<   rB   r?   r1   r   r   r   _eval_commutator_SigmaX   rA   zSigmaY._eval_commutator_SigmaXc                 K   r.   r(   r/   r1   r   r   r   _eval_anticommutator_SigmaX   r4   z"SigmaY._eval_anticommutator_SigmaXc                 K   r.   r(   r/   r1   r   r   r   rG      r4   z"SigmaY._eval_anticommutator_SigmaZc                 C   rH   r(   r   r   r   r   r   rI      rJ   zSigmaY._eval_adjointc                 G   rK   )Nz{\sigma_y^{(%s)}}z
{\sigma_y}rL   rN   r   r   r   rP      rQ   zSigmaY._print_contents_latexc                 G   r$   )NzSigmaY()r   rN   r   r   r   rR      rJ   zSigmaY._print_contentsc                 C   rS   r=   )rT   rU   r   r    rV   rW   rX   r   r   r   rZ      r[   zSigmaY._eval_powerc                 K   s:   | dd}|dkrtdt gtdggS td| d )Nr]   r^   r   r`   ra   )rc   r   r   rd   re   r   r   r   rg      s   zSigmaY._represent_default_basisN)r5   r6   r7   r8   r)   rE   rm   rn   rG   rI   rP   rR   rZ   rg   r   r   r   r   r   s       r   c                   @   ri   )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                 O   rj   r(   r;   r*   r   r   r   r)      rk   zSigmaZ.__new__c                 K   r<   r=   rD   r1   r   r   r   rm      rA   zSigmaZ._eval_commutator_SigmaXc                 K   r<   rB   rl   r1   r   r   r   r@      rA   zSigmaZ._eval_commutator_SigmaYc                 K   r.   r(   r/   r1   r   r   r   rn      r4   z"SigmaZ._eval_anticommutator_SigmaXc                 K   r.   r(   r/   r1   r   r   r   rF      r4   z"SigmaZ._eval_anticommutator_SigmaYc                 C   rH   r(   r   r   r   r   r   rI      rJ   zSigmaZ._eval_adjointc                 G   rK   )Nz{\sigma_z^{(%s)}}z
{\sigma_z}rL   rN   r   r   r   rP      rQ   zSigmaZ._print_contents_latexc                 G   r$   )NzSigmaZ()r   rN   r   r   r   rR      rJ   zSigmaZ._print_contentsc                 C   rS   r=   )rT   rU   r   r    rV   rW   rX   r   r   r   rZ      r[   zSigmaZ._eval_powerc                 K   s8   | dd}|dkrtddgddggS td| d )Nr]   r^   r_   r   r`   ra   rb   re   r   r   r   rg      rh   zSigmaZ._represent_default_basisN)r5   r6   r7   r8   r)   rm   r@   rn   rF   rI   rP   rR   rZ   rg   r   r   r   r   r      ro   r   c                   @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zd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                 O   rj   r(   r;   r*   r   r   r   r)     rk   zSigmaMinus.__new__c                 K   s   | j |j kr	tjS t| j  S r(   r    r   r0   r   r1   r   r   r   rm     s   z"SigmaMinus._eval_commutator_SigmaXc                 K       | j |j kr	tjS tt| j  S r(   r?   r1   r   r   r   r@   "     z"SigmaMinus._eval_commutator_SigmaYc                 K   s   d|  S r=   r   r1   r   r   r   rE   (     z"SigmaMinus._eval_commutator_SigmaZc                 K   
   t | jS r(   r   r    r1   r   r   r   _eval_commutator_SigmaMinus+     
z&SigmaMinus._eval_commutator_SigmaMinusc                 K   r.   r(   r/   r1   r   r   r   rG   .  r4   z&SigmaMinus._eval_anticommutator_SigmaZc                 K   r.   r(   r   Oner1   r   r   r   rn   1  r4   z&SigmaMinus._eval_anticommutator_SigmaXc                 K   s
   t tj S r(   )r   r   NegativeOner1   r   r   r   rF   4  rx   z&SigmaMinus._eval_anticommutator_SigmaYc                 K   r.   r(   ry   r1   r   r   r   _eval_anticommutator_SigmaPlus7  r4   z)SigmaMinus._eval_anticommutator_SigmaPlusc                 C   ru   r(   )r   r    r   r   r   r   rI   :  rx   zSigmaMinus._eval_adjointc                 C      |j r	|jrtjS d S d S r(   rT   rU   r   r0   rX   r   r   r   rZ   =     zSigmaMinus._eval_powerc                 G   rK   )Nz{\sigma_-^{(%s)}}z
{\sigma_-}rL   rN   r   r   r   rP   A  rQ   z SigmaMinus._print_contents_latexc                 G   r$   )NzSigmaMinus()r   rN   r   r   r   rR   G  rJ   zSigmaMinus._print_contentsc                 K   s8   | dd}|dkrtddgddggS td| d r\   rb   re   r   r   r   rg   J  rh   z#SigmaMinus._represent_default_basisN)r5   r6   r7   r8   r)   rm   r@   rE   rw   rG   rn   rF   r|   rI   rZ   rP   rR   rg   r   r   r   r   r      s     r   c                   @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zd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                 O   rj   r(   r;   r*   r   r   r   r)   m  rk   zSigmaPlus.__new__c                 K   s   | j |j kr	tjS t| j S r(   rq   r1   r   r   r   rm   p  s   
z!SigmaPlus._eval_commutator_SigmaXc                 K   rr   r(   r?   r1   r   r   r   r@   v  rs   z!SigmaPlus._eval_commutator_SigmaYc                 K   s   | j |j kr	tjS d|  S rB   )r    r   r0   r1   r   r   r   rE   |  s   z!SigmaPlus._eval_commutator_SigmaZc                 K   ru   r(   rv   r1   r   r   r   rw     rx   z%SigmaPlus._eval_commutator_SigmaMinusc                 K   r.   r(   r/   r1   r   r   r   rG     r4   z%SigmaPlus._eval_anticommutator_SigmaZc                 K   r.   r(   ry   r1   r   r   r   rn     r4   z%SigmaPlus._eval_anticommutator_SigmaXc                 K      t S r(   r   r1   r   r   r   rF     rJ   z%SigmaPlus._eval_anticommutator_SigmaYc                 K   r.   r(   ry   r1   r   r   r   _eval_anticommutator_SigmaMinus  r4   z)SigmaPlus._eval_anticommutator_SigmaMinusc                 C   ru   r(   )r   r    r   r   r   r   rI     rx   zSigmaPlus._eval_adjointc                 C   s   | | S r(   r   )r   r2   r   r   r   	_eval_mul  rt   zSigmaPlus._eval_mulc                 C   r}   r(   r~   rX   r   r   r   rZ     r   zSigmaPlus._eval_powerc                 G   rK   )Nz{\sigma_+^{(%s)}}z
{\sigma_+}rL   rN   r   r   r   rP     rQ   zSigmaPlus._print_contents_latexc                 G   r$   )NzSigmaPlus()r   rN   r   r   r   rR     rJ   zSigmaPlus._print_contentsc                 K   s8   | dd}|dkrtddgddggS td| d r\   rb   re   r   r   r   rg     rh   z"SigmaPlus._represent_default_basisN)r5   r6   r7   r8   r)   rm   r@   rE   rw   rG   rn   rF   r   rI   r   rZ   rP   rR   rg   r   r   r   r   r   S  s"    r   c                   @   st   e Zd ZdZdd Zedd Zedd Zedd	 Z	d
d Z
dd Zdd Zdd Zdd Zdd Zdd ZdS )r   zKet for a two-level system quantum system.

    Parameters
    ==========

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

    c                 C      |dvrt dt| |S N)r   r_   zn must be 0 or 1)
ValueErrorr
   r)   r+   nr   r   r   r)        zSigmaZKet.__new__c                 C   r   r   labelr   r   r   r   r     r!   zSigmaZKet.nc                 C   r   r(   )r   r   r   r   r   
dual_class  r&   zSigmaZKet.dual_classc                 C   s   t dS r=   r   )r+   r   r   r   r   _eval_hilbert_space  s   zSigmaZKet._eval_hilbert_spacec                 K   s   t | j|jS r(   )r   r   )r   brar,   r   r   r   _eval_innerproduct_SigmaZBra  s   z&SigmaZKet._eval_innerproduct_SigmaZBrac                 K   s   | j dkr| S tj|  S r   )r   r   r{   r   oprf   r   r   r   _apply_from_right_to_SigmaZ  s   

z%SigmaZKet._apply_from_right_to_SigmaZc                 K   s   | j dkr	tdS tdS Nr   r_   )r   r   r   r   r   r   _apply_from_right_to_SigmaX  s   z%SigmaZKet._apply_from_right_to_SigmaXc                 K   s$   | j dkrttd S t td S r   )r   r   r   r   r   r   r   _apply_from_right_to_SigmaY  s   $z%SigmaZKet._apply_from_right_to_SigmaYc                 K   s   | j dkr	tdS tjS r   )r   r   r   r0   r   r   r   r   _apply_from_right_to_SigmaMinus  s   
z)SigmaZKet._apply_from_right_to_SigmaMinusc                 K   s   | j dkrtjS tdS r   )r   r   r0   r   r   r   r   r   _apply_from_right_to_SigmaPlus  s   
z(SigmaZKet._apply_from_right_to_SigmaPlusc                 K   sN   | 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| d r\   )rc   r   r   rd   re   r   r   r   rg     s   *z"SigmaZKet._represent_default_basisN)r5   r6   r7   r8   r)   r9   r   r:   r   r   r   r   r   r   r   r   rg   r   r   r   r   r     s     



r   c                   @   s0   e Zd ZdZdd Zedd Zedd ZdS )	r   z{Bra for a two-level quantum system.

    Parameters
    ==========

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

    c                 C   r   r   )r   r   r)   r   r   r   r   r)     r   zSigmaZBra.__new__c                 C   r   r   r   r   r   r   r   r     r!   zSigmaZBra.nc                 C   r   r(   )r   r   r   r   r   r     r&   zSigmaZBra.dual_classN)	r5   r6   r7   r8   r)   r9   r   r:   r   r   r   r   r   r     s    

r   c                 C   s*  t | tr
t |tst| |S | j|jkr%| j|jk r t| |S t|| S t | trkt |tr2tjS t |tr>tt	| j S t |t	rKt t| j S t |t
rZtjt	| jd  S t |tritjt	| jd  S dS t | trt |tr}t t	| j S t |trtjS t |t	rtt| j S t |t
rt tjt	| j  d S t |trttjt	| j  d S dS t | t	rt |trtt| j S t |trt t| j S t |t	rtjS t |t
rt
| j S t |trt| jS dS t | t
rBt |tr	tjt	| j d S t |trt tjt	| j  d S t |t	r't
|jS t |t
r0tjS t |tr@tjt	| jd  S dS t | trt |trXtjt	| j d S t |trjttjt	| j  d S t |t	rvt| j S t |t
rtjt	| j d S t |trtjS dS | | S )zO
    Internal helper function for simplifying products of Pauli operators.
    r>   N)
isinstancer   r   r    r   r   rz   r   r   r   r   Halfr   r0   )abr   r   r   _qsimplify_pauli_product  s   






















r   c           
      C   s  t | tr| S t | tttfrt| }|dd | jD  S t | tr|  \}}g }|r|	d}t
|ryt |tryt |d try|j|d jkry|	d}t||}| \}}	t|	 }|| }t
|ryt |tryt |d try|j|d jksI|| |s,t| t|  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                 s   s    | ]}t |V  qd S r(   )r   ).0argr   r   r   	<genexpr>  s    z"qsimplify_pauli.<locals>.<genexpr>r   )r   r	   r   r   r   typer   r   args_cncpoplenr   r    r   append)
rY   tcncnc_scurrxyc1nc1r   r   r   r   o  s>   





r   N)!r8   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   r   <module>   s,    IFFTZ@i