Source code for toqito.state_metrics.hilbert_schmidt

"""Hilbert-Schmidt metric is a distance metric used to generate an entanglement measure."""

import numpy as np

from toqito.matrix_props import is_density


[docs] def hilbert_schmidt(rho: np.ndarray, sigma: np.ndarray) -> float | np.floating: r"""Compute the Hilbert-Schmidt distance between two states [@WikiHilbSchOp]. The Hilbert-Schmidt distance between density operators \(\rho\) and \(\sigma\) is defined as \[ D_{\text{HS}}(\rho, \sigma) = \text{Tr}((\rho - \sigma)^2) = \left\lVert \rho - \sigma \right\rVert_2^2. \] Examples: One may consider taking the Hilbert-Schmidt distance between two Bell states. In `|toqito⟩`, one may accomplish this as ```python exec="1" source="above" import numpy as np from toqito.states import bell from toqito.state_metrics import hilbert_schmidt rho = bell(0) @ bell(0).conj().T sigma = bell(3) @ bell(3).conj().T print(np.around(hilbert_schmidt(rho, sigma), decimals=2)) ``` Raises: ValueError: If matrices are not density operators. Args: rho: An input matrix. sigma: An input matrix. Returns: The Hilbert-Schmidt distance between `rho` and `sigma`. """ if not is_density(rho) or not is_density(sigma): raise ValueError("Hilbert-Schmidt is only defined for density operators.") return np.linalg.norm(rho - sigma, ord=2) ** 2