Source code for toqito.matrices.gen_gell_mann
"""Produces the generalized Gell-Mann operator matrices."""
import numpy as np
[docs]
def gen_gell_mann(ind_1: int, ind_2: int, dim: int) -> np.ndarray:
r"""Produce a generalized Gell-Mann operator [@WikiGellMann].
Construct a `dim`-by-`dim` Hermitian operator. These matrices
span the entire space of `dim`-by-`dim` matrices as
`ind_1` and `ind_2` range from 0 to `dim-1`, inclusive,
and they generalize the Pauli operators when `dim = 2` and the
Gell-Mann operators when `dim = 3`.
Examples:
The generalized Gell-Mann matrix for `ind_1 = 0`, `ind_2 = 1`
and `dim = 2` is given as
\[
G_{0, 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_gell_mann
print(gen_gell_mann(ind_1=0, ind_2=1, dim=2))
```
The generalized Gell-Mann matrix `ind_1 = 2`, `ind_2 = 3`, and
`dim = 4` is given as
\[
G_{2, 3, 4} = \begin{pmatrix}
0 & 0 & 0 & 0 \\
0 & 0 & 0 & 0 \\
0 & 0 & 0 & 1 \\
0 & 0 & 1 & 0
\end{pmatrix}.
\]
This can be obtained in `|toqito⟩` as follows.
```python exec="1" source="above"
from toqito.matrices import gen_gell_mann
gen_gell_mann(ind_1=2, ind_2=3, dim=4)
```
Args:
ind_1: A non-negative integer from 0 to `dim-1` (inclusive).
ind_2: A non-negative integer from 0 to `dim-1` (inclusive).
dim: The dimension of the Gell-Mann operator.
Returns:
The generalized Gell-Mann operator as an array.
"""
if ind_1 == ind_2:
if ind_1 == 0:
gm_op = np.eye(dim)
else:
scalar = np.sqrt(2 / (ind_1 * (ind_1 + 1)))
diag = np.ones((ind_1,))
diag = np.append(diag, -ind_1)
diag = scalar * np.append(diag, np.zeros((dim - ind_1 - 1)))
gm_op = np.diag(diag)
else:
e_mat = np.zeros((dim, dim))
e_mat[ind_1, ind_2] = 1
if ind_1 < ind_2:
gm_op = e_mat + e_mat.conj().T
else:
gm_op = 1j * e_mat - 1j * e_mat.conj().T
return gm_op