ó
¡¼™\c           @   sd  d  Z  d d l m Z m Z m Z m Z m Z 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 d d d	 d
 d d d d g Z d e	 f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d	 e f d „  ƒ  YZ d
 e f d „  ƒ  YZ d e f d „  ƒ  YZ d e
 f d „  ƒ  YZ d e f d „  ƒ  YZ d „  Z d „  Z d S(   s   Pauli operators and statesiÿÿÿÿ(   t   It   Mult   Addt   Powt   expt   Integer(   t   Operatort   Kett   Bra(   t   ComplexSpace(   t   Matrix(   t   KroneckerDeltat   SigmaXt   SigmaYt   SigmaZt
   SigmaMinust	   SigmaPlust	   SigmaZKett	   SigmaZBrat   qsimplify_paulit   SigmaOpBasec           B   sM   e  Z d  Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z d „  Z d „  Z	 RS(   s    Pauli sigma operator, base classc         C   s   |  j  d S(   Ni    (   t   args(   t   self(    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyt   name   s    c         C   s   t  |  j d ƒ t k	 S(   Ni    (   t   boolR   t   False(   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyt   use_name   s    c         C   s   t  f S(   N(   R   (   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyt   default_args   s    c         O   s   t  j |  | | Ž S(   N(   R   t   __new__(   t   clsR   t   hints(    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR      s    c         K   s
   t  d ƒ S(   Ni    (   R   (   R   t   otherR   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyt   _eval_commutator_BosonOp!   s    (
   t   __name__t
   __module__t   __doc__t   propertyR   R   t   classmethodR   R   R    (    (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR      s   	c           B   sq   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 RS(   s¦  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   s   t  j |  | | Ž S(   N(   R   R   (   R   R   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR   =   s    c         K   s5   |  j  | j  k r t d ƒ Sd t t |  j  ƒ Sd  S(   Ni    i   (   R   R   R    R   (   R   R   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyt   _eval_commutator_SigmaY@   s    
c         K   s5   |  j  | j  k r t d ƒ Sd t t |  j  ƒ Sd  S(   Ni    iþÿÿÿ(   R   R   R    R   (   R   R   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyt   _eval_commutator_SigmaZF   s    
c         K   s
   t  d ƒ S(   Ni    (   R   (   R   R   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR    L   s    c         K   s
   t  d ƒ S(   Ni    (   R   (   R   R   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyt   _eval_anticommutator_SigmaYO   s    c         K   s
   t  d ƒ S(   Ni    (   R   (   R   R   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyt   _eval_anticommutator_SigmaZR   s    c         C   s   |  S(   N(    (   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyt   _eval_adjointU   s    c         G   s"   |  j  r d t |  j ƒ Sd Sd  S(   Ns   {\sigma_x^{(%s)}}s
   {\sigma_x}(   R   t   strR   (   R   t   printerR   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyt   _print_contents_latexX   s    	c         G   s   d S(   Ns   SigmaX()(    (   R   R,   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyt   _print_contents^   s    c         C   s6   | j  r2 | j r2 t |  j ƒ j t | ƒ d ƒ Sd  S(   Ni   (   t
   is_Integert   is_positiveR   R   t   __pow__t   int(   R   t   e(    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyt   _eval_powera   s    c         K   sR   | j  d d ƒ } | d k r: t d d g d d g g ƒ St d | d ƒ ‚ d  S(   Nt   formatt   sympyi    i   s   Representation in format s    not implemented.(   t   getR
   t   NotImplementedError(   R   t   optionsR5   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyt   _represent_default_basise   s
    (   R!   R"   R#   R   R&   R'   R    R(   R)   R*   R-   R.   R4   R:   (    (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR   %   s   										c           B   sh   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 „  Z RS(   s¨  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   s   t  j |  | Œ S(   N(   R   R   (   R   R   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR   †   s    c         K   s5   |  j  | j  k r t d ƒ Sd t t |  j  ƒ Sd  S(   Ni    i   (   R   R   R    R   (   R   R   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR'   ‰   s    
c         K   s5   |  j  | j  k r t d ƒ Sd t t |  j  ƒ Sd  S(   Ni    iþÿÿÿ(   R   R   R    R   (   R   R   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyt   _eval_commutator_SigmaX   s    
c         K   s
   t  d ƒ S(   Ni    (   R   (   R   R   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyt   _eval_anticommutator_SigmaX•   s    c         K   s
   t  d ƒ S(   Ni    (   R   (   R   R   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR)   ˜   s    c         C   s   |  S(   N(    (   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR*   ›   s    c         G   s"   |  j  r d t |  j ƒ Sd Sd  S(   Ns   {\sigma_y^{(%s)}}s
   {\sigma_y}(   R   R+   R   (   R   R,   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR-   ž   s    	c         G   s   d S(   Ns   SigmaY()(    (   R   R,   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR.   ¤   s    c         C   s6   | j  r2 | j r2 t |  j ƒ j t | ƒ d ƒ Sd  S(   Ni   (   R/   R0   R   R   R1   R2   (   R   R3   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR4   §   s    c         K   sS   | j  d d ƒ } | d k r; t d t g t d g g ƒ St d | d ƒ ‚ d  S(   NR5   R6   i    s   Representation in format s    not implemented.(   R7   R
   R    R8   (   R   R9   R5   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR:   «   s
    (   R!   R"   R#   R   R'   R;   R<   R)   R*   R-   R.   R4   R:   (    (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR   n   s   									c           B   sh   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 „  Z RS(   s­  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   s   t  j |  | Œ S(   N(   R   R   (   R   R   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR   Ì   s    c         K   s5   |  j  | j  k r t d ƒ Sd t t |  j  ƒ Sd  S(   Ni    i   (   R   R   R    R   (   R   R   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR;   Ï   s    
c         K   s5   |  j  | j  k r t d ƒ Sd t t |  j  ƒ Sd  S(   Ni    iþÿÿÿ(   R   R   R    R   (   R   R   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR&   Õ   s    
c         K   s
   t  d ƒ S(   Ni    (   R   (   R   R   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR<   Û   s    c         K   s
   t  d ƒ S(   Ni    (   R   (   R   R   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR(   Þ   s    c         C   s   |  S(   N(    (   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR*   á   s    c         G   s"   |  j  r d t |  j ƒ Sd Sd  S(   Ns   {\sigma_z^{(%s)}}s
   {\sigma_z}(   R   R+   R   (   R   R,   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR-   ä   s    	c         G   s   d S(   Ns   SigmaZ()(    (   R   R,   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR.   ê   s    c         C   s6   | j  r2 | j r2 t |  j ƒ j t | ƒ d ƒ Sd  S(   Ni   (   R/   R0   R   R   R1   R2   (   R   R3   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR4   í   s    c         K   sR   | j  d d ƒ } | d k r: t d d g d d g g ƒ St d | d ƒ ‚ d  S(   NR5   R6   i   i    iÿÿÿÿs   Representation in format s    not implemented.(   R7   R
   R8   (   R   R9   R5   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR:   ñ   s
    (   R!   R"   R#   R   R;   R&   R<   R(   R*   R-   R.   R4   R:   (    (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR   ´   s   									c           B   sŒ   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 RS(   sá  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   s   t  j |  | Œ S(   N(   R   R   (   R   R   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR     s    c         K   s.   |  j  | j  k r t d ƒ St |  j  ƒ Sd  S(   Ni    (   R   R   R   (   R   R   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR;     s    
c         K   s1   |  j  | j  k r t d ƒ St t |  j  ƒ Sd  S(   Ni    (   R   R   R    R   (   R   R   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR&     s    
c         K   s   d |  S(   Ni   (    (   R   R   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR'   #  s    c         K   s   t  |  j ƒ S(   N(   R   R   (   R   R   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyt   _eval_commutator_SigmaMinus&  s    c         K   s
   t  d ƒ S(   Ni    (   R   (   R   R   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR)   )  s    c         K   s
   t  d ƒ S(   Ni   (   R   (   R   R   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR<   ,  s    c         K   s   t  t d ƒ S(   Ni   (   R    R   (   R   R   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR(   /  s    c         K   s
   t  d ƒ S(   Ni   (   R   (   R   R   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyt   _eval_anticommutator_SigmaPlus2  s    c         C   s   t  |  j ƒ S(   N(   R   R   (   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR*   5  s    c         C   s    | j  r | j r t d ƒ Sd  S(   Ni    (   R/   R0   R   (   R   R3   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR4   8  s    c         G   s"   |  j  r d t |  j ƒ Sd Sd  S(   Ns   {\sigma_-^{(%s)}}s
   {\sigma_-}(   R   R+   R   (   R   R,   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR-   <  s    	c         G   s   d S(   Ns   SigmaMinus()(    (   R   R,   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR.   B  s    c         K   sR   | j  d d ƒ } | d k r: t d d g d d g g ƒ St d | d ƒ ‚ d  S(   NR5   R6   i    i   s   Representation in format s    not implemented.(   R7   R
   R8   (   R   R9   R5   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR:   E  s
    (   R!   R"   R#   R   R;   R&   R'   R=   R)   R<   R(   R>   R*   R4   R-   R.   R:   (    (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR   ú   s   													c           B   s•   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 RS(   sÞ  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   s   t  j |  | Œ S(   N(   R   R   (   R   R   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR   h  s    c         K   s-   |  j  | j  k r t d ƒ St |  j  ƒ Sd  S(   Ni    (   R   R   R   (   R   R   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR;   k  s    
c         K   s1   |  j  | j  k r t d ƒ St t |  j  ƒ Sd  S(   Ni    (   R   R   R    R   (   R   R   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR&   q  s    
c         K   s(   |  j  | j  k r t d ƒ Sd |  Sd  S(   Ni    iþÿÿÿ(   R   R   (   R   R   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR'   w  s    
c         K   s   t  |  j ƒ S(   N(   R   R   (   R   R   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR=   }  s    c         K   s
   t  d ƒ S(   Ni    (   R   (   R   R   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR)   €  s    c         K   s
   t  d ƒ S(   Ni   (   R   (   R   R   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR<   ƒ  s    c         K   s   t  t d ƒ S(   Ni   (   R    R   (   R   R   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR(   †  s    c         K   s
   t  d ƒ S(   Ni   (   R   (   R   R   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyt   _eval_anticommutator_SigmaMinus‰  s    c         C   s   t  |  j ƒ S(   N(   R   R   (   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR*   Œ  s    c         C   s   |  | S(   N(    (   R   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyt	   _eval_mul  s    c         C   s    | j  r | j r t d ƒ Sd  S(   Ni    (   R/   R0   R   (   R   R3   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR4   ’  s    c         G   s"   |  j  r d t |  j ƒ Sd Sd  S(   Ns   {\sigma_+^{(%s)}}s
   {\sigma_+}(   R   R+   R   (   R   R,   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR-   –  s    	c         G   s   d S(   Ns   SigmaPlus()(    (   R   R,   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR.   œ  s    c         K   sR   | j  d d ƒ } | d k r: t d d g d d g g ƒ St d | d ƒ ‚ d  S(   NR5   R6   i    i   s   Representation in format s    not implemented.(   R7   R
   R8   (   R   R9   R5   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR:   Ÿ  s
    (   R!   R"   R#   R   R;   R&   R'   R=   R)   R<   R(   R?   R*   R@   R4   R-   R.   R:   (    (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR   N  s    														c           B   sƒ   e  Z d  Z d „  Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z d „  Z	 d „  Z
 d „  Z d „  Z d	 „  Z d
 „  Z d „  Z RS(   s‚   Ket for a two-level system quantum system.

    Parameters
    ==========

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

    c         C   s+   | d k r t  d ƒ ‚ n  t j |  | ƒ S(   Ni    i   s   n must be 0 or 1(   i    i   (   t
   ValueErrorR   R   (   R   t   n(    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR   ³  s    c         C   s   |  j  d S(   Ni    (   t   label(   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyRB   ¸  s    c         C   s   t  S(   N(   R   (   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyt
   dual_class¼  s    c         C   s
   t  d ƒ S(   Ni   (   R	   (   R   RC   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyt   _eval_hilbert_spaceÀ  s    c         K   s   t  |  j | j ƒ S(   N(   R   RB   (   R   t   braR   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyt   _eval_innerproduct_SigmaZBraÄ  s    c         K   s%   |  j  d k r |  St d ƒ |  Sd  S(   Ni    iÿÿÿÿ(   RB   R   (   R   t   opR9   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyt   _apply_operator_SigmaZÇ  s    c         K   s#   |  j  d k r t d ƒ St d ƒ S(   Ni    i   (   RB   R   (   R   RH   R9   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyt   _apply_operator_SigmaXÍ  s    c         K   s,   |  j  d k r t t d ƒ St t d ƒ S(   Ni    i   (   RB   R    R   (   R   RH   R9   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyt   _apply_operator_SigmaYÐ  s    c         K   s'   |  j  d k r t d ƒ St d ƒ Sd  S(   Ni    i   (   RB   R   R   (   R   RH   R9   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyt   _apply_operator_SigmaMinusÓ  s    
c         K   s'   |  j  d k r t d ƒ St d ƒ Sd  S(   Ni    (   RB   R   R   (   R   RH   R9   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyt   _apply_operator_SigmaPlusÙ  s    
c         K   sq   | j  d d ƒ } | d k rY |  j d k rC t d g d g g ƒ St d g d g g ƒ St d | d ƒ ‚ d  S(   NR5   R6   i    i   s   Representation in format s    not implemented.(   R7   RB   R
   R8   (   R   R9   R5   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR:   ß  s
    ;(   R!   R"   R#   R   R$   RB   R%   RD   RE   RG   RI   RJ   RK   RL   RM   R:   (    (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR   ¨  s   								c           B   s5   e  Z d  Z d „  Z e d „  ƒ Z e d „  ƒ Z RS(   s{   Bra for a two-level quantum system.

    Parameters
    ==========

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

    c         C   s+   | d k r t  d ƒ ‚ n  t j |  | ƒ S(   Ni    i   s   n must be 0 or 1(   i    i   (   RA   R   R   (   R   RB   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR   ó  s    c         C   s   |  j  d S(   Ni    (   RC   (   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyRB   ø  s    c         C   s   t  S(   N(   R   (   R   (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyRD   ü  s    (   R!   R"   R#   R   R$   RB   R%   RD   (    (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR   è  s   		c         C   sF  t  |  t ƒ o t  | t ƒ s+ t |  | ƒ S|  j | j k rl |  j | j k  r\ t |  | ƒ St | |  ƒ SnÖt  |  t ƒ r4t  | t ƒ r” t d ƒ St  | t ƒ r´ t t |  j ƒ St  | t ƒ rÕ t t |  j ƒ St  | t	 ƒ rt d ƒ d t |  j ƒ d St  | t
 ƒ rBt d ƒ d t |  j ƒ d Snt  |  t ƒ rýt  | t ƒ rdt t |  j ƒ St  | t ƒ r}t d ƒ St  | t ƒ rt t |  j ƒ St  | t	 ƒ rÌt t d ƒ t |  j ƒ d St  | t
 ƒ rBt t d ƒ t |  j ƒ d SnEt  |  t ƒ r¢t  | t ƒ r,t t |  j ƒ St  | t ƒ rMt t |  j ƒ St  | t ƒ rft d ƒ St  | t	 ƒ rƒt	 |  j ƒ St  | t
 ƒ rBt
 |  j ƒ Sn t  |  t	 ƒ rpt  | t ƒ rÛt d ƒ t |  j ƒ d St  | t ƒ r
t t d ƒ t |  j ƒ d St  | t ƒ r&t	 | j ƒ St  | t	 ƒ r?t d ƒ St  | t
 ƒ rBt d ƒ d t |  j ƒ d SnÒ t  |  t
 ƒ r:t  | t ƒ r©t d ƒ t |  j ƒ d St  | t ƒ r×t t d ƒ t |  j ƒ d St  | t ƒ rôt
 |  j ƒ St  | t	 ƒ rt d ƒ t |  j ƒ d St  | t
 ƒ rBt d ƒ Sn |  | Sd S(   sO   
    Internal helper function for simplifying products of Pauli operators.
    i   i   i    N(   t
   isinstanceR   R   R   R   R   R   R    R   R   R   (   t   at   b(    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyt   _qsimplify_pauli_product  s|    
"
 "
 
"c   
      C   sG  t  |  t ƒ r |  St  |  t t t f ƒ rN t |  ƒ } | d „  |  j Dƒ Œ  St  |  t ƒ rC|  j ƒ  \ } } g  } x· | r.| j	 d ƒ } xŽ t
 | ƒ rt  | t ƒ rt  | d t ƒ r| j | d j k r| j	 d ƒ } t | | ƒ } | j ƒ  \ } }	 t |	 Œ  } | | } q W| j | ƒ qx Wt | Œ  t | Œ  S|  S(   sõ  
    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(   N(   R   (   t   .0t   arg(    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pys	   <genexpr>…  s    i    (   RN   R   R   R   R   t   typeR   R   t   args_cnct   popt   lenR   R   RQ   t   append(
   R3   t   tt   ct   nct   nc_st   currt   xt   yt   c1t   nc1(    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyR   j  s,    	N(   R#   R6   R    R   R   R   R   R   t   sympy.physics.quantumR   R   R   R	   t   sympy.matricesR
   t(   sympy.functions.special.tensor_functionsR   t   __all__R   R   R   R   R   R   R   R   RQ   R   (    (    (    s:   lib/python2.7/site-packages/sympy/physics/quantum/pauli.pyt   <module>   s"   .IFFTZ@	i