Source code for toqito.state_metrics.hilbert_schmidt_inner_product

"""Hilbert-Schmidt Inner Product refers to the inner product between two Hilbert-Schmidt operators."""

import numpy as np


[docs] def hilbert_schmidt_inner_product(a_mat: np.ndarray, b_mat: np.ndarray) -> complex: r"""Compute the Hilbert-Schmidt inner product between two matrices [@WikiHilbSchOp]. The Hilbert-Schmidt inner product between `a_mat` and `b_mat` is defined as \[ HS = (A|B) = Tr[A^\dagger B] \] where \(|B\rangle = \text{vec}(B)\) and \(\langle A|\) is the dual vector to \(|A \rangle\). Note: This function has been adapted from [@Rigetti_2022_Forest]. Examples: One may consider taking the Hilbert-Schmidt distance between two Hadamard matrices. ```python exec="1" source="above" import numpy as np from toqito.matrices import hadamard from toqito.state_metrics import hilbert_schmidt_inner_product h = hadamard(1) print(np.around(hilbert_schmidt_inner_product(h, h), decimals=2)) ``` Args: a_mat: An input matrix provided as a numpy array. b_mat: An input matrix provided as a numpy array. Returns: The Hilbert-Schmidt inner product between `a_mat` and `b_mat`. """ return np.trace(a_mat.conj().T @ b_mat)