About cookies on this site Our websites require some cookies to function properly (required). In addition, other cookies may be used with your consent to analyze site usage, improve the user experience and for advertising. For more information, please review your options. By visiting our website, you agree to our processing of information as described in IBM’sprivacy statement. To provide a smooth navigation, your cookie preferences will be shared across the IBM web domains listed here.
Operator utilities
qiskit_addon_obp.utils.operations
Utility functions for operator backpropagation.
apply_op_to
apply_op_to(op1, op1_qargs, op2, op2_qargs, *, apply_as_transform=False)
Apply the operator op2
to the operator op1
.
These operators do not necessarily need to act on the same number of qubits, as they are assumed to act on a larger system. The position in the system of each operator is defined by the corresponding qargs
. The output operator will be defined on union(op1_qargs, op2_qargs)
.
By default, this function applies op1
to op2
in the following way:
op2 @ op1
By setting apply_as_transform=True
, this function will apply op1
to op2
in the following way:
op2.adjoint() @ op1 @ op2
Parameters
- op1 (SparsePauliOp) – The operator on which
op2
will be applied. - op1_qargs (list[int]) – The qubit indices for
op1
. - op2 (SparsePauliOp) – The operator to apply to
op1
. - op2_qargs (list[int]) – The qubit indices for
op2
. - apply_as_transform (bool) – Whether to apply
op2
toop1
as a transformation.
Returns
The tuple (op, qargs)
where op
is the input op1
with op2
left-applied and qargs
is a list of qubit indices for the new operator op
. The qubit IDs in the output op
correspond to the global qubit ID in the same index in qargs
.
For example, if the output op
is a SparsePauliOp("YX")
and qargs
is [3, 4], the X term on qubit 0 of the operator corresponds to global qubit ID 3.
Raises
ValueError – The number of unique operator qargs must match the number of qubits in the corresponding operator.
Return type
apply_reset_to
apply_reset_to(op, qubit_id, inplace=False)
Apply a reset operation to a Pauli operator.
This function applies a reset operation to op
in the following way:
<0|op|0>
Terms containing Pauli X or Y terms on qubit-qubit_id
will have their weight reduced to 0.0
. Terms containing Pauli Z on qubit_id
will have that Pauli Z replaced by an identity.
Parameters
- op (SparsePauliOp) – The operator to which the reset will be applied.
- qubit_id (int) – The index of the qubit on which to apply the reset.
- inplace (bool) – Whether to modify the operator in-place.
Returns
The transformed operator
Return type
to_global_op
to_global_op(op, qargs, n_qubits)
Convert a local operator to a global operator by inserting identities on qubits which aren’t used.
Parameters
- op (SparsePauliOp) – Local operator to expand.
- qargs (list[int]) – Qubit indices for local operator.
- n_qubits (int) – Number of qubits in the global system.
Returns
An operator on n_qubits
qubits
Raises
ValueError – Qubit ID out of range
Return type
reduce_op
reduce_op(global_op)
Create a lean representation of a global Pauli operator.
This function returns a lean representation of the input operator such that all of the qubits associated solely with Pauli-I terms have been removed. A list of indices is also returned indicating on which qubits the lean operator acts.
For example:
>>> global_op = SparsePauliOp(["IXI", "IIZ"])
>>> reduced_op, qargs = reduce_op(global_op)
>>> reduced_op
SparsePauliOp(['XI', 'IZ'],
coeffs=[1.+0.j, 1.+0.j])
>>> qargs
[0, 1]
Parameters
global_op (SparsePauliOp) – The global operator for which to generate a lean representation
Returns
- A lean representation of the input operator with qubits associated solely with identity terms removed.
- A list of indices specifying the qubits on which the lean operator acts.
Raises
ValueError – Input operator may not be the identity operator.
Return type
Was this page helpful?
Report a bug or request content on GitHub.