Source code for toqito.channels.dephasing
"""Generates the dephasing channel."""
import numpy as np
from toqito.states import max_entangled
[docs]
def dephasing(dim: int, param_p: float = 0) -> np.ndarray:
r"""Produce the partially dephasing channel.
(Section: The Completely Dephasing Channel from [@Watrous_2018_TQI]).
The Choi matrix of the completely dephasing channel that acts on `dim`-by-`dim`
matrices.
Let \(\Sigma\) be an alphabet and let \(\mathcal{X} = \mathbb{C}^{\Sigma}\). The map
\(\Delta \in \text{T}(\mathcal{X})\) defined as
\[
\Delta(X) = \sum_{a \in \Sigma} X(a, a) E_{a,a}
\]
for every \(X \in \text{L}(\mathcal{X})\) is defined as the *completely dephasing channel*.
Examples:
The completely dephasing channel maps kills everything off the diagonal. Consider the
following matrix
\[
\rho = \begin{pmatrix}
1 & 2 & 3 & 4 \\
5 & 6 & 7 & 8 \\
9 & 10 & 11 & 12 \\
13 & 14 & 15 & 16
\end{pmatrix}.
\]
Applying the dephasing channel to \(\rho\) we have that
\[
\Phi(\rho) = \begin{pmatrix}
1 & 0 & 0 & 0 \\
0 & 6 & 0 & 0 \\
0 & 0 & 11 & 0 \\
0 & 0 & 0 & 16
\end{pmatrix}.
\]
This can be observed in `|toqito⟩` as follows.
```python exec="1" source="above"
import numpy as np
from toqito.channels import dephasing
from toqito.channel_ops import apply_channel
test_input_mat = np.arange(1, 17).reshape(4, 4)
print(apply_channel(test_input_mat, dephasing(4)))
```
We may also consider setting the parameter `p = 0.5`.
```python exec="1" source="above"
import numpy as np
from toqito.channels import dephasing
from toqito.channel_ops import apply_channel
test_input_mat = np.arange(1, 17).reshape(4, 4)
print(apply_channel(test_input_mat, dephasing(4, 0.5)))
```
Args:
dim: The dimensionality on which the channel acts.
param_p: Default is 0.
Returns:
The Choi matrix of the dephasing channel.
"""
# Compute the Choi matrix of the dephasing channel.
# Gives a sparse non-normalized state.
psi = max_entangled(dim=dim, is_sparse=False, is_normalized=False)
return (1 - param_p) * np.diag(np.diag(psi @ psi.conj().T)) + param_p * (psi @ psi.conj().T)