channel_metrics.channel_fidelity ================================ .. py:module:: channel_metrics.channel_fidelity .. autoapi-nested-parse:: Computes the channel fidelity between two quantum channels. Functions --------- .. autoapisummary:: channel_metrics.channel_fidelity.channel_fidelity Module Contents --------------- .. py:function:: channel_fidelity(choi_1, choi_2) Compute the channel fidelity between two quantum channels :cite:`Katariya_2021_Geometric`. Let :math:`\Phi : \text{L}(\mathcal{Y}) \rightarrow \text{L}(\mathcal{X})` and :math:`\Psi: \text{L}(\mathcal{Y}) \rightarrow \text{L}(\mathcal{X})` be quantum channels. Then the root channel fidelity defined as .. math:: \sqrt{F}(\Phi, \Psi) := \text{inf}_{\rho} \sqrt{F}(\Phi(\rho), \Psi(\rho)) where :math:`\rho \in \text{D}(\mathcal{Z} \otimes \mathcal{X})` can be calculated by means of the following semidefinite program (Proposition 50) in :cite:`Katariya_2021_Geometric`, .. math:: \begin{align*} \text{maximize:} \quad & \lambda \\ \text{subject to:} \quad & \lambda \mathbb{I}_{\mathcal{Z}} \leq \text{Re}\left( \text{Tr}_{\mathcal{Y}} \left( Q \right) \right),\\ & \begin{pmatrix} J(\Phi) & Q^* \\ Q & J(\Psi) \end{pmatrix} \geq 0 \end{align*} where :math:`Q \in \text{L}(\mathcal{Z} \otimes \mathcal{X})`. .. rubric:: Examples For two identical channels, we should expect that the channel fidelity should yield a value of :math:`1`. >>> import numpy as np >>> from toqito.channels import dephasing >>> from toqito.channel_metrics import channel_fidelity >>> >>> # The Choi matrices of dimension-4 for the dephasing channel >>> choi_1 = dephasing(4) >>> choi_2 = dephasing(4) >>> np.around(channel_fidelity(choi_1, choi_2), decimals=2) np.float64(1.0) We can also compute the channel fidelity between two different channels. For example, we can compute the channel fidelity between the dephasing and depolarizing channels. >>> import numpy as np >>> from toqito.channels import dephasing, depolarizing >>> from toqito.channel_metrics import channel_fidelity >>> >>> # The Choi matrices of dimension-4 for the dephasing and depolarizing channels >>> choi_1 = dephasing(4) >>> choi_2 = depolarizing(4) >>> np.around(channel_fidelity(choi_1, choi_2), decimals=2) np.float64(0.5) .. rubric:: References .. bibliography:: :filter: docname in docnames :raises ValueError: If matrices are not of equal dimension. :raises ValueError: If matrices are not square. :param choi_1: The Choi matrix of the first quantum channel. :param choi_2: The Choi matrix of the second quantum channel. :return: The channel fidelity between the channels specified by the quantum channels corresponding to the Choi matrices :code:`choi_1` and :code:`choi_2`.