# SuperOp¶

class SuperOp(data, input_dims=None, output_dims=None)[source]

Superoperator representation of a quantum channel.

The Superoperator representation of a quantum channel $$\mathcal{E}$$ is a matrix $$S$$ such that the evolution of a DensityMatrix $$\rho$$ is given by

$|\mathcal{E}(\rho)\rangle\!\rangle = S |\rho\rangle\!\rangle$

where the double-ket notation $$|A\rangle\!\rangle$$ denotes a vector formed by stacking the columns of the matrix $$A$$ (column-vectorization).

See reference [1] for further details.

References

1. C.J. Wood, J.D. Biamonte, D.G. Cory, Tensor networks and graphical calculus for open quantum systems, Quant. Inf. Comp. 15, 0579-0811 (2015). arXiv:1111.6950 [quant-ph]

Initialize a quantum channel Superoperator operator.

Parameters
• (QuantumCircuit or (data) – Instruction or BaseOperator or matrix): data to initialize superoperator.

• input_dims (tuple) – the input subsystem dimensions. [Default: None]

• output_dims (tuple) – the output subsystem dimensions. [Default: None]

Raises

QiskitError – if input data cannot be initialized as a superoperator.

If the input or output dimensions are None, they will be automatically determined from the input data. If the input data is a Numpy array of shape (4**N, 4**N) qubit systems will be used. If the input operator is not an N-qubit operator, it will assign a single subsystem with dimension specified by the shape of the input.

Attributes

 SuperOp.atol The default absolute tolerance parameter for float comparisons. SuperOp.data Return data. SuperOp.dim Return tuple (input_shape, output_shape). SuperOp.num_qubits Return the number of qubits if a N-qubit operator or None otherwise. SuperOp.qargs Return the qargs for the operator. SuperOp.rtol The relative tolerance parameter for float comparisons.

Methods

 SuperOp.__call__(qargs) Return a clone with qargs set SuperOp.__mul__(other) SuperOp.add(other) Return the linear operator self + other. Return the adjoint of the operator. SuperOp.compose(other[, qargs, front]) Return the composed quantum channel self @ other. Return the conjugate of the QuantumChannel. Make a deep copy of current operator. SuperOp.dot(other[, qargs]) Return the right multiplied operator self * other. SuperOp.expand(other) Return the tensor product channel other ⊗ self. SuperOp.input_dims([qargs]) Return tuple of input dimension for specified subsystems. SuperOp.is_cp([atol, rtol]) Test if Choi-matrix is completely-positive (CP) SuperOp.is_cptp([atol, rtol]) Return True if completely-positive trace-preserving (CPTP). SuperOp.is_tp([atol, rtol]) Test if a channel is completely-positive (CP) SuperOp.is_unitary([atol, rtol]) Return True if QuantumChannel is a unitary channel. SuperOp.multiply(other) Return the linear operator other * self. SuperOp.output_dims([qargs]) Return tuple of output dimension for specified subsystems. Return the compose of a QuantumChannel with itself n times. SuperOp.reshape([input_dims, output_dims]) Return a shallow copy with reshaped input and output subsystem dimensions. SuperOp.set_atol(value) Set the class default absolute tolerance parameter for float comparisons. SuperOp.set_rtol(value) Set the class default relative tolerance parameter for float comparisons. SuperOp.subtract(other) Return the linear operator self - other. SuperOp.tensor(other) Return the tensor product channel self ⊗ other. Convert to a Kraus or UnitaryGate circuit instruction. Try to convert channel to a unitary representation Operator. Return the transpose of the QuantumChannel. SuperOp.__mul__(other) SuperOp.__call__(qargs) Return a clone with qargs set