Skip to main contentIBM Quantum Documentation

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)

GitHub

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 to op1 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

tuple[SparsePauliOp, list[int]]

apply_reset_to

apply_reset_to(op, qubit_id, inplace=False)

GitHub

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

SparsePauliOp

to_global_op

to_global_op(op, qargs, n_qubits)

GitHub

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

SparsePauliOp

reduce_op

reduce_op(global_op)

GitHub

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

tuple[SparsePauliOp, list[int]]

Was this page helpful?
Report a bug or request content on GitHub.