Source code for toqito.channels.choi
"""Generates 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 [@Choi_1992_Generalized].
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 `a=1`, `b=1`, and `c=0` is the Choi
matrix of the positive map defined in [@Choi_1992_Generalized]. Many of these maps are capable of detecting
PPT entanglement.
Examples:
The standard Choi channel is given as
\[
\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 `|toqito⟩` as follows.
```python exec="1" source="above"
import numpy as np
from toqito.channels import choi
print(choi())
```
The reduction channel is the map \(R\) defined by:
\[
R(X) = \text{Tr}(X) \mathbb{I} - X.
\]
The matrix correspond to this is given as
\[
\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 `a = 0` and when `b =
c = 1`. We can obtain this matrix using `|toqito⟩` as follows.
```python exec="1" source="above"
import numpy as np
from toqito.channels import choi
print(choi(0, 1, 1))
```
!!! See Also
[reduction][toqito.channels.reduction.reduction]
Args:
a_var: Default integer for standard Choi map.
b_var: Default integer for standard Choi map.
c_var: Default integer for standard Choi map.
Returns:
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