toqito.channel_props.is_completely_positive

toqito.channel_props.is_completely_positive(phi, rtol=1e-05, atol=1e-08)[source]

Determine whether the given channel is completely positive [WatCP18].

A map \(\Phi \in \text{T} \left(\mathcal{X}, \mathcal{Y} \right)\) is completely positive if it holds that

\[\Phi \otimes \mathbb{I}_{\text{L}(\mathcal{Z})}\]

is a positive map for every complex Euclidean space \(\mathcal{Z}\).

Alternatively, a channel is completely positive if the corresponding Choi matrix of the channel is both Hermitian-preserving and positive semidefinite.

Examples

We can specify the input as a list of Kraus operators. Consider the map \(\Phi\) defined as

\[\Phi(X) = X - U X U^*\]

where

\[\begin{split}U = \frac{1}{\sqrt{2}} \begin{pmatrix} 1 & 1 \\ -1 & 1 \end{pmatrix}.\end{split}\]

This map is not completely positive, as we can verify as follows.

>>> from toqito.channel_props import is_completely_positive
>>> import numpy as np
>>> unitary_mat = np.array([[1, 1], [-1, 1]]) / np.sqrt(2)
>>> kraus_ops = [[np.identity(2), np.identity(2)], [unitary_mat, -unitary_mat]]
>>> is_completely_positive(kraus_ops)
False

We can also specify the input as a Choi matrix. For instance, consider the Choi matrix corresponding to the \(2\)-dimensional completely depolarizing channel

\[\begin{split}\Omega = \frac{1}{2} \begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{pmatrix}.\end{split}\]

We may verify that this channel is completely positive

>>> from toqito.channels import depolarizing
>>> from toqito.channel_props import is_completely_positive
>>> is_completely_positive(depolarizing(2))
True

References

[WatCP18]

Watrous, John. “The Theory of Quantum Information.” Section: “Linear maps of square operators”. Cambridge University Press, 2018.

Parameters:
  • phi – The channel provided as either a Choi matrix or a list of Kraus operators.

  • rtol – The relative tolerance parameter (default 1e-05).

  • atol – The absolute tolerance parameter (default 1e-08).

Returns:

True if the channel is completely positive, and False otherwise.