PTM

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

Pauli Transfer Matrix (PTM) representation of a Quantum Channel.

The PTM representation of an \(n\)-qubit quantum channel \(\mathcal{E}\) is an \(n\)-qubit SuperOp \(R\) defined with respect to vectorization in the Pauli basis instead of column-vectorization. The elements of the PTM \(R\) are given by

\[R_{i,j} = \mbox{Tr}\left[P_i \mathcal{E}(P_j) \right]\]

where \([P_0, P_1, ..., P_{4^{n}-1}]\) is the \(n\)-qubit Pauli basis in lexicographic order.

Evolution of a DensityMatrix \(\rho\) with respect to the PTM is given by

\[|\mathcal{E}(\rho)\rangle\!\rangle_P = S_P |\rho\rangle\!\rangle_P\]

where \(|A\rangle\!\rangle_P\) denotes vectorization in the Pauli basis \(\langle i | A\rangle\!\rangle_P = \mbox{Tr}[P_i A]\).

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 PTM quantum channel operator.

Parameters
  • or (data (QuantumCircuit) – 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 is not an N-qubit channel or cannot be initialized as a PTM.

Additional Information:

If the input or output dimensions are None, they will be automatically determined from the input data. The PTM representation is only valid for N-qubit channels.

Attributes

PTM.atol

The default absolute tolerance parameter for float comparisons.

PTM.data

Return data.

PTM.dim

Return tuple (input_shape, output_shape).

PTM.num_qubits

Return the number of qubits if a N-qubit operator or None otherwise.

PTM.qargs

Return the qargs for the operator.

PTM.rtol

The relative tolerance parameter for float comparisons.

Methods

PTM.__call__(qargs)

Return a clone with qargs set

PTM.__mul__(other)

PTM.add(other)

Return the linear operator self + other.

PTM.adjoint()

Return the adjoint of the operator.

PTM.compose(other[, qargs, front])

Return the composed quantum channel self @ other.

PTM.conjugate()

Return the conjugate of the QuantumChannel.

PTM.copy()

Make a deep copy of current operator.

PTM.dot(other[, qargs])

Return the right multiplied operator self * other.

PTM.expand(other)

Return the tensor product channel other ⊗ self.

PTM.input_dims([qargs])

Return tuple of input dimension for specified subsystems.

PTM.is_cp([atol, rtol])

Test if Choi-matrix is completely-positive (CP)

PTM.is_cptp([atol, rtol])

Return True if completely-positive trace-preserving (CPTP).

PTM.is_tp([atol, rtol])

Test if a channel is completely-positive (CP)

PTM.is_unitary([atol, rtol])

Return True if QuantumChannel is a unitary channel.

PTM.multiply(other)

Return the linear operator other * self.

PTM.output_dims([qargs])

Return tuple of output dimension for specified subsystems.

PTM.power(n)

The matrix power of the channel.

PTM.reshape([input_dims, output_dims])

Return a shallow copy with reshaped input and output subsystem dimensions.

PTM.set_atol(value)

Set the class default absolute tolerance parameter for float comparisons.

PTM.set_rtol(value)

Set the class default relative tolerance parameter for float comparisons.

PTM.subtract(other)

Return the linear operator self - other.

PTM.tensor(other)

Return the tensor product channel self ⊗ other.

PTM.to_instruction()

Convert to a Kraus or UnitaryGate circuit instruction.

PTM.to_operator()

Try to convert channel to a unitary representation Operator.

PTM.transpose()

Return the transpose of the QuantumChannel.

PTM.__call__(qargs)

Return a clone with qargs set

PTM.__mul__(other)