Source code for toqito.state_props.is_ensemble

"""Check if set of states form an ensemble."""
import numpy as np

from toqito.matrix_props import is_positive_semidefinite


[docs] def is_ensemble(states: list[np.ndarray]) -> bool: r""" Determine if a set of states constitute an ensemble [WatEns18]_. An ensemble of quantum states is defined by a function .. math:: \eta : \Gamma \rightarrow \text{Pos}(\mathcal{X}) that satisfies .. math:: \text{Tr}\left( \sum_{a \in \Gamma} \eta(a) \right) = 1. Examples ========== Consider the following set of matrices .. math:: \eta = \left\{ \rho_0, \rho_1 \right\} where .. math:: \rho_0 = \frac{1}{2} \begin{pmatrix} 1 & 0 \\ 0 & 0 \end{pmatrix}, \quad \rho_1 = \frac{1}{2} \begin{pmatrix} 0 & 0 \\ 0 & 1 \end{pmatrix}. The set :math:`\eta` constitutes a valid ensemble. >>> from toqito.state_props import is_ensemble >>> import numpy as np >>> rho_0 = np.array([[0.5, 0], [0, 0]]) >>> rho_1 = np.array([[0, 0], [0, 0.5]]) >>> states = [rho_0, rho_1] >>> is_ensemble(states) True References ========== .. [WatEns18] Watrous, John. "The theory of quantum information." Section: "Ensemble of quantum states". Cambridge University Press, 2018. :param states: The list of states to check. :return: :code:`True` if states form an ensemble and :code:`False` otherwise. """ trace_sum = 0 for state in states: trace_sum += np.trace(state) # Constraint: All states in ensemble must be positive semidefinite. if not is_positive_semidefinite(state): return False # Constraint: The sum of the traces of all states within the ensemble must # be equal to 1. return np.allclose(trace_sum, 1)