Source code for toqito.matrices.gen_pauli

"""Produces the generalized Pauli operator matrices."""

import numpy as np

from toqito.matrices import gen_pauli_x, gen_pauli_z


[docs] def gen_pauli(k_1: int, k_2: int, dim: int) -> np.ndarray: r"""Produce generalized Pauli operator [@WikiPauliGen]. Generates a `dim`-by-`dim` unitary operator. More specifically, it is the operator \(X^k_1 Z^k_2\), where \(X\) and \(Z\) are the "gen_pauli_x" and "gen_pauli_z" operators that naturally generalize the Pauli X and Z operators. These matrices span the entire space of `dim`-by-`dim` matrices as `k_1` and `k_2` range from 0 to `dim-1`, inclusive. Note that the generalized Pauli operators are also known by the name of "discrete Weyl operators". (Lecture 6: Further Remarks On Measurements And Channels from [@Watrous_2011_Lecture_Notes]) Examples: The generalized Pauli operator for `k_1 = 1`, `k_2 = 0`, and `dim = 2` is given as the standard Pauli-X matrix \[ G_{1, 0, 2} = \begin{pmatrix} 0 & 1 \\ 1 & 0 \end{pmatrix}. \] This can be obtained in `|toqito⟩` as follows. ```python exec="1" source="above" from toqito.matrices import gen_pauli print(gen_pauli(k_1=1, k_2=0, dim=2)) ``` The generalized Pauli matrix `k_1 = 1`, `k_2 = 1`, and `dim = 2` is given as the standard Pauli-Y matrix \[ G_{1, 1, 2} = \begin{pmatrix} 0 & -1 \\ 1 & 0 \end{pmatrix}. \] This can be obtained in `|toqito⟩` as follows. ```python exec="1" source="above" from toqito.matrices import gen_pauli print(gen_pauli(k_1=1, k_2=1, dim=2)) ``` Args: k_1: (a non-negative integer from 0 to `dim-1` inclusive). k_2: (a non-negative integer from 0 to `dim-1` inclusive). dim: (a positive integer indicating the dimension). Returns: A generalized Pauli operator. """ gpx_val = gen_pauli_x(dim) gpz_val = gen_pauli_z(dim) gen_pauli_w = np.linalg.matrix_power(gpx_val, k_1) @ np.linalg.matrix_power(gpz_val, k_2) return gen_pauli_w