Chi
class Chi(data, input_dims=None, output_dims=None)
Bases: qiskit.quantum_info.operators.channel.quantum_channel.QuantumChannel
Pauli basis Chi-matrix representation of a quantum channel.
The Chi-matrix representation of an -qubit quantum channel is a matrix such that the evolution of a DensityMatrix
is given by
where is the -qubit Pauli basis in lexicographic order. It is related to the Choi
representation by a change of basis of the Choi-matrix into the Pauli basis.
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 Chi-matrix 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 is not an N-qubit channel or cannot be initialized as a Chi-matrix.
Additional Information:
If the input or output dimensions are None, they will be automatically determined from the input data. The Chi matrix representation is only valid for N-qubit channels.
Methods
adjoint
Chi.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 .
compose
Chi.compose(other, qargs=None, front=False)
Return the operator composition with another Chi.
Parameters
- other (Chi) – a Chi 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 Chi.
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 dot()
is defined as right matrix multiplication. That is that A & B == A.compose(B)
is equivalent to 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
Chi.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
Chi.copy()
Make a deep copy of current operator.
dot
Chi.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
expand
Chi.expand(other)
Return the reverse-order tensor product with another Chi.
Parameters
other (Chi) – a Chi object.
Returns
the tensor product , where
is the current Chi, and is the other Chi.
Return type
input_dims
Chi.input_dims(qargs=None)
Return tuple of input dimension for specified subsystems.
is_cp
Chi.is_cp(atol=None, rtol=None)
Test if Choi-matrix is completely-positive (CP)
is_cptp
Chi.is_cptp(atol=None, rtol=None)
Return True if completely-positive trace-preserving (CPTP).
is_tp
Chi.is_tp(atol=None, rtol=None)
Test if a channel is trace-preserving (TP)
is_unitary
Chi.is_unitary(atol=None, rtol=None)
Return True if QuantumChannel is a unitary channel.
output_dims
Chi.output_dims(qargs=None)
Return tuple of output dimension for specified subsystems.
power
Chi.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
Chi.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
Chi.tensor(other)
Return the tensor product with another Chi.
Parameters
other (Chi) – a Chi object.
Returns
the tensor product , where
is the current Chi, and is the other Chi.
Return type
The tensor product can be obtained using the ^
binary operator. Hence a.tensor(b)
is equivalent to a ^ b
.
to_instruction
Chi.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
Chi.to_operator()
Try to convert channel to a unitary representation Operator.
transpose
Chi.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 .
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.