Operator#
- class qiskit.quantum_info.Operator(data, input_dims=None, output_dims=None)[source]#
Bases:
LinearOp
Matrix operator class
This represents a matrix operator \(M\) that will
evolve()
aStatevector
\(|\psi\rangle\) by matrix-vector multiplication\[|\psi\rangle \mapsto M|\psi\rangle,\]and will
evolve()
aDensityMatrix
\(\rho\) by left and right multiplication\[\rho \mapsto M \rho M^\dagger.\]Initialize an operator object.
- Parameters:
data (QuantumCircuit or Operation or BaseOperator or matrix) -- data to initialize operator.
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 an operator.
- 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 (2**N, 2**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 = 1e-08#
- data#
The underlying Numpy array.
- 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 = 1e-05#
- settings#
Return operator settings.
Methods
- adjoint()#
Return the adjoint of the Operator.
- Return type:
Self
- apply_permutation(perm, front=False)[source]#
Modifies operator's data by composing it with a permutation.
- Parameters:
- Returns:
The modified operator.
- Return type:
- Raises:
QiskitError -- if the size of the permutation pattern does not match the dimensions of the operator.
- compose(other, qargs=None, front=False)[source]#
Return the operator composition with another Operator.
- Parameters:
- Returns:
The composed Operator.
- Return type:
- Raises:
QiskitError -- if other cannot be converted to an operator, or has incompatible dimensions for specified subsystems.
Note
Composition (
&
) by default is defined as left matrix multiplication for matrix operators, while@
(equivalent todot()
) is defined as right matrix multiplication. That is thatA & B == A.compose(B)
is equivalent toB @ A == B.dot(A)
whenA
andB
are of the same type.Setting the
front=True
kwarg changes this to right matrix multiplication and is equivalent to thedot()
methodA.dot(B) == A.compose(B, front=True)
.
- copy()#
Make a deep copy of current operator.
- dot(other, qargs=None)#
Return the right multiplied operator self * other.
- Parameters:
- Returns:
The right matrix multiplied Operator.
- Return type:
Note
The dot product can be obtained using the
@
binary operator. Hencea.dot(b)
is equivalent toa @ b
.
- equiv(other, rtol=None, atol=None)[source]#
Return True if operators are equivalent up to global phase.
- classmethod from_circuit(circuit, ignore_set_layout=False, layout=None, final_layout=None)[source]#
Create a new Operator object from a
QuantumCircuit
While a
QuantumCircuit
object can passed directly asdata
to the class constructor this provides no options on how the circuit is used to create anOperator
. This constructor method lets you control how theOperator
is created so it can be adjusted for a particular use case.By default this constructor method will permute the qubits based on a configured initial layout (i.e. after it was transpiled). It also provides an option to manually provide a
Layout
object directly.- Parameters:
circuit (QuantumCircuit) -- The
QuantumCircuit
to create an Operator object from.ignore_set_layout (bool) -- When set to
True
if the inputcircuit
has a layout set it will be ignoredlayout (Layout) -- If specified this kwarg can be used to specify a particular layout to use to permute the qubits in the created
Operator
. If this is specified it will be used instead of a layout contained in thecircuit
input. If specified the virtual bits in theLayout
must be present in thecircuit
input.final_layout (Layout) -- If specified this kwarg can be used to represent the output permutation caused by swap insertions during the routing stage of the transpiler.
- Returns:
An operator representing the input circuit
- Return type:
- classmethod from_label(label)[source]#
Return a tensor product of single-qubit operators.
- Parameters:
label (string) -- single-qubit operator string.
- Returns:
The N-qubit operator.
- Return type:
- Raises:
QiskitError -- if the label contains invalid characters, or the length of the label is larger than an explicitly specified num_qubits.
- Additional Information:
The labels correspond to the single-qubit matrices: 'I': [[1, 0], [0, 1]] 'X': [[0, 1], [1, 0]] 'Y': [[0, -1j], [1j, 0]] 'Z': [[1, 0], [0, -1]] 'H': [[1, 1], [1, -1]] / sqrt(2) 'S': [[1, 0], [0 , 1j]] 'T': [[1, 0], [0, (1+1j) / sqrt(2)]] '0': [[1, 0], [0, 0]] '1': [[0, 0], [0, 1]] '+': [[0.5, 0.5], [0.5 , 0.5]] '-': [[0.5, -0.5], [-0.5 , 0.5]] 'r': [[0.5, -0.5j], [0.5j , 0.5]] 'l': [[0.5, 0.5j], [-0.5j , 0.5]]
- input_dims(qargs=None)#
Return tuple of input dimension for specified subsystems.
- output_dims(qargs=None)#
Return tuple of output dimension for specified subsystems.
- power(n)[source]#
Return the matrix power of the operator.
- Parameters:
n (float) -- the power to raise the matrix to.
- Returns:
the resulting operator
O ** n
.- Return type:
- Raises:
QiskitError -- if the input and output dimensions of the operator are not equal.
- 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.
- reverse_qargs()[source]#
Return an Operator with reversed subsystem ordering.
For a tensor product operator this is equivalent to reversing the order of tensor product subsystems. For an operator \(A = A_{n-1} \otimes ... \otimes A_0\) the returned operator will be \(A_0 \otimes ... \otimes A_{n-1}\).
- Returns:
the operator with reversed subsystem order.
- Return type:
- tensor(other)[source]#
Return the tensor product with another Operator.
- Parameters:
other (Operator) -- a Operator object.
- Returns:
- the tensor product \(a \otimes b\), where \(a\)
is the current Operator, and \(b\) is the other Operator.
- Return type:
Note
The tensor product can be obtained using the
^
binary operator. Hencea.tensor(b)
is equivalent toa ^ b
.