Source code for toqito.channel_props.is_unital

"""Determines if a channel is unital."""

import numpy as np

from toqito.channel_ops import apply_channel
from toqito.channel_props.channel_dim import channel_dim
from toqito.matrix_props import is_identity


[docs] def is_unital( phi: np.ndarray | list[list[np.ndarray]], rtol: float = 1e-05, atol: float = 1e-08, dim: int | list[int] | np.ndarray | None = None, ) -> bool: r"""Determine whether the given channel is unital. A map \(\Phi \in \text{T} \left(\mathcal{X}, \mathcal{Y} \right)\) is *unital* if it holds that: \[ \Phi(\mathbb{I}_{\mathcal{X}}) = \mathbb{I}_{\mathcal{Y}}. \] If the input channel maps \(M_{r,c}\) to \(M_{x,y}\) then `dim` should be the list `[[r,x], [c,y]]`. If it maps \(M_m\) to \(M_n\), then `dim` can simply be the vector `[m,n]`. More information can be found in Chapter: Unital Channels And Majorization from [@Watrous_2018_TQI]). Examples: Consider the channel whose Choi matrix is the swap operator. This channel is an example of a unital channel. ```python exec="1" source="above" from toqito.perms import swap_operator from toqito.channel_props import is_unital choi = swap_operator(3) print(is_unital(choi)) ``` Additionally, the channel whose Choi matrix is the depolarizing channel is another example of a unital channel. ```python exec="1" source="above" from toqito.channels import depolarizing from toqito.channel_props import is_unital choi = depolarizing(4) print(is_unital(choi)) ``` Args: 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). dim: A scalar, vector or matrix containing the input and output dimensions of PHI. Returns: `True` if the channel is unital, and `False` otherwise. """ dim_in, _, _ = channel_dim(phi, dim=dim, allow_rect=False, compute_env_dim=False) # Channel is unital if `mat` is the identity matrix. mat = apply_channel(np.identity(dim_in), phi) return is_identity(mat, rtol=rtol, atol=atol)