Source code for toqito.matrix_props.is_circulant

"""Checks if the matrix is circulant."""

import numpy as np


[docs] def is_circulant(mat: np.ndarray) -> bool: r"""Determine if matrix is circulant [@WikiCirc]. A circulant matrix is a square matrix in which all row vectors are composed of the same elements and each row vector is rotated one element to the right relative to the preceding row vector. Examples: Consider the following matrix: \[ C = \begin{pmatrix} 4 & 1 & 2 & 3 \\ 3 & 4 & 1 & 2 \\ 2 & 3 & 4 & 1 \\ 1 & 2 & 3 & 4 \end{pmatrix} \] As can be seen, this matrix is circulant. We can verify this in `|toqito⟩` as ```python exec="1" source="above" import numpy as np from toqito.matrix_props import is_circulant mat = np.array([[4, 1, 2, 3], [3, 4, 1, 2], [2, 3, 4, 1], [1, 2, 3, 4]]) print(is_circulant(mat)) ``` Args: mat: Matrix to check the circulancy of. Returns: Return `True` if `mat` is circulant; `False` otherwise. """ n, m = mat.shape if n != m: return False for i in range(n - 1): row = mat[i + 1] shifted = np.roll(mat[i], 1) if not np.allclose(row, shifted): return False return True