Choi
class qiskit.quantum_info.Choi(data, input_dims=None, output_dims=None)
Bases: QuantumChannel
Choi-matrix representation of a Quantum Channel.
The Choi-matrix representation of a quantum channel is a matrix
Evolution of a DensityMatrix
with respect to the Choi-matrix is given by
where is the partial_trace()
over subsystem 1.
See reference [1] for further details.
References
- 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 Choi matrix 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 cannot be initialized as a Choi matrix.
Additional Information:
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
atol
Default value: 1e-08
data
Return data.
dim
Return tuple (input_shape, output_shape).
num_qubits
Return the number of qubits if a N-qubit operator or None otherwise.
qargs
Return the qargs for the operator.
rtol
Default value: 1e-05
settings
Return settings.
Methods
adjoint
adjoint()
Return the adjoint quantum channel.
This is equivalent to the matrix Hermitian conjugate in the SuperOp
representation ie. for a channel , the SuperOp of the adjoint channel is .
Return type
Self
compose
compose(other, qargs=None, front=False)
Return the operator composition with another Choi.
Parameters
- other (Choi) – a Choi object.
- qargs (list or None) – Optional, a list of subsystem positions to apply other on. If None apply on all subsystems (default: None).
- front (bool) – If True compose using right operator multiplication, instead of left multiplication [default: False].
Returns
The composed Choi.
Return type
Raises
QiskitError – if other cannot be converted to an operator, or has incompatible dimensions for specified subsystems.
Composition (&
) by default is defined as left matrix multiplication for matrix operators, while @
(equivalent to dot()
) is defined as right matrix multiplication. That is that A & B == A.compose(B)
is equivalent to B @ A == B.dot(A)
when A
and B
are of the same type.
Setting the front=True
kwarg changes this to right matrix multiplication and is equivalent to the dot()
method A.dot(B) == A.compose(B, front=True)
.
conjugate
conjugate()
Return the conjugate quantum channel.
This is equivalent to the matrix complex conjugate in the SuperOp
representation ie. for a channel , the SuperOp of the conjugate channel is .
copy
copy()
Make a deep copy of current operator.
dot
dot(other, qargs=None)
Return the right multiplied operator self * other.
Parameters
- other (Operator) – an operator object.
- qargs (list or None) – Optional, a list of subsystem positions to apply other on. If None apply on all subsystems (default: None).
Returns
The right matrix multiplied Operator.
Return type
The dot product can be obtained using the @
binary operator. Hence a.dot(b)
is equivalent to a @ b
.
expand
expand(other)
Return the reverse-order tensor product with another Choi.
Parameters
other (Choi) – a Choi object.
Returns
the tensor product , where
is the current Choi, and is the other Choi.
Return type
input_dims
input_dims(qargs=None)
Return tuple of input dimension for specified subsystems.
is_cp
is_cptp
is_cptp(atol=None, rtol=None)
Return True if completely-positive trace-preserving (CPTP).
Return type
is_tp
is_unitary
output_dims
output_dims(qargs=None)
Return tuple of output dimension for specified subsystems.
power
power(n)
Return the power of the quantum channel.
Parameters
n (float) – the power exponent.
Returns
the channel .
Return type
Raises
QiskitError – if the input and output dimensions of the SuperOp are not equal.
For non-positive or non-integer exponents the power is defined as the matrix power of the SuperOp
representation ie. for a channel , the SuperOp of the powered channel is .
reshape
reshape(input_dims=None, output_dims=None, num_qubits=None)
Return a shallow copy with reshaped input and output subsystem dimensions.
Parameters
- input_dims (None or tuple) – new subsystem input dimensions. If None the original input dims will be preserved [Default: None].
- output_dims (None or tuple) – new subsystem output dimensions. If None the original output dims will be preserved [Default: None].
- num_qubits (None or int) – reshape to an N-qubit operator [Default: None].
Returns
returns self with reshaped input and output dimensions.
Return type
BaseOperator
Raises
QiskitError – if combined size of all subsystem input dimension or subsystem output dimensions is not constant.
tensor
tensor(other)
Return the tensor product with another Choi.
Parameters
other (Choi) – a Choi object.
Returns
the tensor product , where
is the current Choi, and is the other Choi.
Return type
The tensor product can be obtained using the ^
binary operator. Hence a.tensor(b)
is equivalent to a ^ b
.
to_instruction
to_instruction()
Convert to a Kraus or UnitaryGate circuit instruction.
If the channel is unitary it will be added as a unitary gate, otherwise it will be added as a kraus simulator instruction.
Returns
A kraus instruction for the channel.
Return type
Raises
QiskitError – if input data is not an N-qubit CPTP quantum channel.
to_operator
transpose
transpose()
Return the transpose quantum channel.
This is equivalent to the matrix transpose in the SuperOp
representation, ie. for a channel , the SuperOp of the transpose channel is .