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.