Skip to content

pauli

Generates the Pauli matrices.

pauli

pauli(
    ind: int | str | list[int] | list[str],
    is_sparse: bool = False,
) -> ndarray | csr_array | None

Produce a Pauli operator 1.

Produces the 2-by-2 Pauli matrix indicated by the value of ind or a tensor product of Pauli matrices when ind is provided as a list. In general, when ind is a list \([i_1, i_2, \dots, i_n]\), the function returns the tensor product

\[ P_{i_1} \otimes P_{i_2} \otimes \cdots \otimes P_{i_n} \]

where each \(i_k \in \{0,1,2,3\}\), with the correspondence: \(P_{0} = I\), \(P_{1} = X\), \(P_{2} = Y\), and \(P_{3} = Z\).

The 2-by-2 Pauli matrices are defined as follows:

\[ \begin{equation} \begin{aligned} X = \begin{pmatrix} 0 & 1 \\ 1 & 0 \end{pmatrix}, \quad Y = \begin{pmatrix} 0 & -i \\ i & 0 \end{pmatrix}, \quad Z = \begin{pmatrix} 1 & 0 \\ 0 & -1 \end{pmatrix}, \quad I = \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix}. \end{aligned} \end{equation} \]

Parameters:

  • ind (int | str | list[int] | list[str]) –

    The index to indicate which Pauli operator to generate.

  • is_sparse (bool, default: False ) –

    Returns a compressed sparse row array if set to True and a non compressed sparse row array if set to False.

Examples:

Example for identity Pauli matrix.

from toqito.matrices import pauli

print(pauli("I"))
[[1. 0.]
 [0. 1.]]

Example for Pauli-X matrix.

from toqito.matrices import pauli

print(pauli("X"))
[[0 1]
 [1 0]]

Example for Pauli-Y matrix.

from toqito.matrices import pauli

print(pauli("Y"))
[[ 0.+0.j -0.-1.j]
 [ 0.+1.j  0.+0.j]]

Example for Pauli-Z matrix.

from toqito.matrices import pauli

print(pauli("Z"))
[[ 1  0]
 [ 0 -1]]

Example using ind as list.

from toqito.matrices import pauli

print(pauli([0,1]))
[[0. 1. 0. 0.]
 [1. 0. 0. 0.]
 [0. 0. 0. 1.]
 [0. 0. 1. 0.]]

References

1 Wikipedia. Pauli matrices. link.

Source code in toqito/matrices/pauli.py
def pauli(ind: int | str | list[int] | list[str], is_sparse: bool = False) -> np.ndarray | csr_array | None:
    r"""Produce a Pauli operator [@wikipediapauli].

    Produces the 2-by-2 Pauli matrix indicated by the value of `ind` or a tensor product
    of Pauli matrices when `ind` is provided as a list. In general, when `ind` is a list
    \([i_1, i_2, \dots, i_n]\), the function returns the tensor product

    \[
        P_{i_1} \otimes P_{i_2} \otimes \cdots \otimes P_{i_n}
    \]

    where each \(i_k \in \{0,1,2,3\}\), with the correspondence:
    \(P_{0} = I\), \(P_{1} = X\), \(P_{2} = Y\), and \(P_{3} = Z\).

    The 2-by-2 Pauli matrices are defined as follows:

    \[
        \begin{equation}
            \begin{aligned}
                X = \begin{pmatrix}
                        0 & 1 \\
                        1 & 0
                    \end{pmatrix}, \quad
                Y = \begin{pmatrix}
                        0 & -i \\
                        i & 0
                    \end{pmatrix}, \quad
                Z = \begin{pmatrix}
                        1 & 0 \\
                        0 & -1
                    \end{pmatrix}, \quad
                I = \begin{pmatrix}
                        1 & 0 \\
                        0 & 1
                    \end{pmatrix}.
                \end{aligned}
            \end{equation}
    \]

    Args:
        ind: The index to indicate which Pauli operator to generate.
        is_sparse: Returns a compressed sparse row array if set to True and a non compressed sparse row array if set to
            False.

    Examples:
        Example for identity Pauli matrix.

        ```python exec="1" source="above" result="text"
        from toqito.matrices import pauli

        print(pauli("I"))
        ```

        Example for Pauli-X matrix.

        ```python exec="1" source="above" result="text"
        from toqito.matrices import pauli

        print(pauli("X"))
        ```


        Example for Pauli-Y matrix.

        ```python exec="1" source="above" result="text"
        from toqito.matrices import pauli

        print(pauli("Y"))
        ```


        Example for Pauli-Z matrix.

        ```python exec="1" source="above" result="text"
        from toqito.matrices import pauli

        print(pauli("Z"))
        ```

        Example using `ind` as list.

        ```python exec="1" source="above" result="text"
        from toqito.matrices import pauli

        print(pauli([0,1]))
        ```


    """
    if isinstance(ind, (int, str)):
        allowed_ind_options = {"x", "X", 1, "y", "Y", 2, "z", "Z", 3, "i", "I", 0}
        if ind not in allowed_ind_options:
            raise ValueError(f"Invalid Pauli operator index provided. Allowed options are {allowed_ind_options}.")
        if ind in {"x", "X", 1}:
            pauli_mat = np.array([[0, 1], [1, 0]])
        elif ind in {"y", "Y", 2}:
            pauli_mat = np.array([[0, -1j], [1j, 0]])
        elif ind in {"z", "Z", 3}:
            pauli_mat = np.array([[1, 0], [0, -1]])
        else:
            pauli_mat = np.identity(2)

        if is_sparse:
            pauli_mat = csr_array(pauli_mat)

        return pauli_mat

    num_qubits = len(ind)
    pauli_mats = []
    for i in range(num_qubits):
        pauli_mats.append(pauli(ind[i], is_sparse))
    return tensor(pauli_mats)