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