kraus2superop¶
-
forest.benchmarking.operator_tools.superoperator_transformations.
kraus2superop
(kraus_ops: Sequence[numpy.ndarray]) → numpy.ndarray¶ Convert a set of Kraus operators (representing a channel) to a superoperator using the column stacking convention.
Suppose the N Kraus operators M_i are dim by dim matrices. Then the the superoperator is a (dim**2) by (dim**2) matrix. Using the column stacking relation
\[vec(ABC) = (C^T \otimes A) vec(B)\]we can show
\[\rm{super\_operator} = \sum_i^N ( M_i^\dagger )^T \otimes M_i = \sum_i^N M_i^* \otimes M_i\]where \(A^*\) is the complex conjugate of a matrix A, \(A^T\) is the transpose, and \(A^\dagger\) is the complex conjugate and transpose.
Note: This function can also convert non-square Kraus operators to a superoperator, these frequently arise in quantum measurement theory and quantum error correction. In that situation consider a single Kraus operator that is M by N then the superoperator will be a M**2 by N**2 matrix.
Parameters: kraus_ops – A tuple of N Kraus operators Returns: Returns a dim**2 by dim**2 matrix.