Source code for toqito.channels.depolarizing

"""Generates the depolarizing channel."""

import numpy as np


[docs] def depolarizing(dim: int, param_p: float = 0) -> np.ndarray: r"""Produce the partially depolarizing channel. (Section: Replacement Channels and the Completely Depolarizing Channel from [@Watrous_2018_TQI]). The Choi matrix of the completely depolarizing channel [@WikiDepo] that acts on `dim`-by-`dim` matrices. The *completely depolarizing channel* is defined as \[ \Omega(X) = \text{Tr}(X) \omega \] for all \(X \in \text{L}(\mathcal{X})\), where \[ \omega = \frac{\mathbb{I}_{\mathcal{X}}}{\text{dim}(\mathcal{X})} \] denotes the completely mixed stated defined with respect to the space \(\mathcal{X}\). Examples: The completely depolarizing channel maps every density matrix to the maximally-mixed state. For example, consider the density operator \[ \rho = \frac{1}{2} \begin{pmatrix} 1 & 0 & 0 & 1 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \\ 1 & 0 & 0 & 1 \end{pmatrix} \] corresponding to one of the Bell states. Applying the depolarizing channel to \(\rho\) we have that \[ \Phi(\rho) = \frac{1}{4} \begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{pmatrix}. \] This can be observed in `|toqito⟩` as follows. ```python exec="1" source="above" import numpy as np from toqito.channels import depolarizing from toqito.channel_ops import apply_channel test_input_mat = np.array([[1 / 2, 0, 0, 1 / 2], [0, 0, 0, 0], [0, 0, 0, 0], [1 / 2, 0, 0, 1 / 2]]) print(apply_channel(test_input_mat, depolarizing(4))) ``` ```python exec="1" source="above" import numpy as np from toqito.channels import depolarizing from toqito.channel_ops import apply_channel test_input_mat = np.arange(1, 17).reshape(4, 4) print(apply_channel(test_input_mat, depolarizing(4, 0.5))) ``` Raises: ValueError: If `param_p` is outside the interval [0,1]. Args: dim: The dimensionality on which the channel acts. param_p: Depolarizing probability \(p \) \in [0,1] that mixes the input state with the maximally mixed state. Default 0. Returns: The Choi matrix of the completely depolarizing channel. """ # Compute the Choi matrix of the depolarizing channel. if param_p > 1 or param_p < 0: raise ValueError("The depolarizing probability must be between 0 and 1.") result = np.zeros((dim**2, dim**2), dtype=np.float64) np.fill_diagonal(result, (1 - param_p) / dim) if param_p != 0.0: idx = np.arange(dim) * (dim + 1) result[np.ix_(idx, idx)] += param_p return result