Source code for toqito.channels.choi

"""The Choi channel."""
import numpy as np
from toqito.states import max_entangled


[docs] def choi(a_var: int = 1, b_var: int = 1, c_var: int = 0) -> np.ndarray: r""" Produce the Choi channel or one of its generalizations [Choi92]_. The *Choi channel* is a positive map on 3-by-3 matrices that is capable of detecting some entanglement that the transpose map is not. The standard Choi channel defined with :code:`a=1`, :code:`b=1`, and :code:`c=0` is the Choi matrix of the positive map defined in [Choi92]_. Many of these maps are capable of detecting PPT entanglement. Examples ========== The standard Choi channel is given as .. math:: \Phi_{1, 1, 0} = \begin{pmatrix} 1 & 0 & 0 & 0 & -1 & 0 & 0 & 0 & -1 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \\ -1 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & -1 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \\ -1 & 0 & 0 & 0 & -1 & 0 & 0 & 0 & 1 \end{pmatrix} We can generate the Choi channel in :code:`toqito` as follows. >>> from toqito.channels import choi >>> import numpy as np >>> choi() [[ 1., 0., 0., 0., -1., 0., 0., 0., -1.], [ 0., 0., 0., 0., 0., 0., 0., 0., 0.], [ 0., 0., 1., 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 1., 0., 0., 0., 0., 0.], [-1., 0., 0., 0., 1., 0., 0., 0., -1.], [ 0., 0., 0., 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0., 0., 1., 0.], [-1., 0., 0., 0., -1., 0., 0., 0., 1.]]) The reduction channel is the map :math:`R` defined by: .. math:: R(X) = \text{Tr}(X) \mathbb{I} - X. The matrix correspond to this is given as .. math:: \Phi_{0, 1, 1} = \begin{pmatrix} 0 & 0 & 0 & 0 & -1 & 0 & 0 & 0 & -1 \\ 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \\ -1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & -1 \\ 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \\ -1 & 0 & 0 & 0 & -1 & 0 & 0 & 0 & 0 \end{pmatrix} The reduction channel is the Choi channel that arises when :code:`a = 0` and when :code:`b = c = 1`. We can obtain this matrix using :code:`toqito` as follows. >>> from toqito.channels import choi >>> import numpy as np >>> choi(0, 1, 1) [[ 0., 0., 0., 0., -1., 0., 0., 0., -1.], [ 0., 1., 0., 0., 0., 0., 0., 0., 0.], [ 0., 0., 1., 0., 0., 0., 0., 0., 0.], [ 0., 0., 0., 1., 0., 0., 0., 0., 0.], [-1., 0., 0., 0., 0., 0., 0., 0., -1.], [ 0., 0., 0., 0., 0., 1., 0., 0., 0.], [ 0., 0., 0., 0., 0., 0., 1., 0., 0.], [ 0., 0., 0., 0., 0., 0., 0., 1., 0.], [-1., 0., 0., 0., -1., 0., 0., 0., 0.]]) See Also ========== reduction References ========== .. [Choi92] Cho, Sung Je, Seung-Hyeok Kye, and Sa Ge Lee. "Generalized Choi maps in three-dimensional matrix algebra." Linear algebra and its applications 171 (1992): 213-224. https://www.sciencedirect.com/science/article/pii/002437959290260H :param a_var: Default integer for standard Choi map. :param b_var: Default integer for standard Choi map. :param c_var: Default integer for standard Choi map. :return: The Choi channel (or one of its generalizations). """ psi = max_entangled(3, False, False) return ( np.diag([a_var + 1, c_var, b_var, b_var, a_var + 1, c_var, c_var, b_var, a_var + 1]) - psi * psi.conj().T )