toqito.channel_ops.choi_to_kraus¶
Computes a list of Kraus operators from the Choi matrix.
Module Contents¶
- toqito.channel_ops.choi_to_kraus.choi_to_kraus(choi_mat, tol=1e-09, dim=None)[source]¶
Compute a list of Kraus operators from the Choi matrix from [@Rigetti_2022_Forest].
Note that unlike the Choi or natural representation of operators, the Kraus representation is not unique.
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].
For completely positive maps the output is a single flat list of numpy arrays since the left and right Kraus maps are the same.
This function has been adapted from [@Rigetti_2022_Forest] and QETLAB [@QETLAB_link].
Examples
Consider taking the Kraus operators of the Choi matrix that characterizes the “swap operator” defined as
- [
- begin{pmatrix}
1 & 0 & 0 & 0 \ 0 & 0 & 1 & 0 \ 0 & 1 & 0 & 0 \ 0 & 0 & 0 & 1
end{pmatrix}
]
The corresponding Kraus operators of the swap operator are given as follows,
- [
begin{equation} big[
frac{1}{sqrt{2}} begin{pmatrix} 0 & 1 \ -1 & 0 end{pmatrix}, frac{1}{sqrt{2}} begin{pmatrix} 0 & -1 \ 1 & 0 end{pmatrix}
big], big[
frac{1}{sqrt{2}} begin{pmatrix} 0 & 1 \ 1 & 0 end{pmatrix}, frac{1}{sqrt{2}} begin{pmatrix} 0 & 1 \ 1 & 0 end{pmatrix}
big], big[
begin{pmatrix} 1 & 0 \ 0 & 0 end{pmatrix}, begin{pmatrix} 1 & 0 \ 0 & 0 end{pmatrix}
big], big[
begin{pmatrix} 0 & 0 \ 0 & 1 end{pmatrix}, begin{pmatrix} 0 & 0 \ 0 & 1 end{pmatrix}
big] end{equation}
]
This can be verified in |toqito⟩ as follows.
```python exec=”1” source=”above” import numpy as np from toqito.channel_ops import choi_to_kraus choi_mat = np.array([[1, 0, 0, 0], [0, 0, 1, 0], [0, 1, 0, 0], [0, 0, 0, 1]]) kraus_ops = choi_to_kraus(choi_mat) for i, pair in enumerate(kraus_ops):
print(f”nKraus Pair {i+1}:”) for j, op in enumerate(pair):
print(f” Operator {j+1}:n{np.array_str(op, precision=4, suppress_small=True)}”)
- !!! See Also
[kraus_to_choi][toqito.channel_ops.kraus_to_choi.kraus_to_choi]
- Parameters:
choi_mat (numpy.ndarray) – A Choi matrix
tol (float) – optional threshold parameter for eigenvalues/kraus ops to be discarded
dim (int | list[int] | numpy.ndarray | None) – A scalar, vector or matrix containing the input and output dimensions of Choi matrix.
- Returns:
List of Kraus operators
- Return type:
list[numpy.ndarray] | list[list[numpy.ndarray]]