---
title: operations (latest version)
description: API reference for qiskit_addon_obp.utils.operations in the latest version of qiskit-addon-obp
source: https://eu-de.quantum.cloud.ibm.com/docs/en/api/qiskit-addon-obp/utils-operations
---

# 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](https://github.com/Qiskit/qiskit-addon-obp/tree/main/qiskit_addon_obp/utils/operations.py#L54-L109)

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*](/docs/api/qiskit/qiskit.quantum_info.SparsePauliOp)) – The operator on which `op2` will be applied.
- **op1\_qargs** ([*list*](https://docs.python.org/3/library/stdtypes.html#list)*\[*[*int*](https://docs.python.org/3/library/functions.html#int)*]*) – The qubit indices for `op1`.
- **op2** ([*SparsePauliOp*](/docs/api/qiskit/qiskit.quantum_info.SparsePauliOp)) – The operator to apply to `op1`.
- **op2\_qargs** ([*list*](https://docs.python.org/3/library/stdtypes.html#list)*\[*[*int*](https://docs.python.org/3/library/functions.html#int)*]*) – The qubit indices for `op2`.
- **apply\_as\_transform** ([*bool*](https://docs.python.org/3/library/functions.html#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**](https://docs.python.org/3/library/exceptions.html#ValueError) – The number of unique operator qargs must match the number of qubits in the corresponding operator.

**Return type**

[tuple](https://docs.python.org/3/library/stdtypes.html#tuple)\[[*SparsePauliOp*](/docs/api/qiskit/qiskit.quantum_info.SparsePauliOp), [list](https://docs.python.org/3/library/stdtypes.html#list)\[[int](https://docs.python.org/3/library/functions.html#int)]]

### apply\_reset\_to

`apply_reset_to(op, qubit_id, inplace=False)`

[GitHub](https://github.com/Qiskit/qiskit-addon-obp/tree/main/qiskit_addon_obp/utils/operations.py#L194-L225)

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*](/docs/api/qiskit/qiskit.quantum_info.SparsePauliOp)) – The operator to which the reset will be applied.
- **qubit\_id** ([*int*](https://docs.python.org/3/library/functions.html#int)) – The index of the qubit on which to apply the reset.
- **inplace** ([*bool*](https://docs.python.org/3/library/functions.html#bool)) – Whether to modify the operator in-place.

**Returns**

The transformed operator

**Return type**

[*SparsePauliOp*](/docs/api/qiskit/qiskit.quantum_info.SparsePauliOp)

### to\_global\_op

`to_global_op(op, qargs, n_qubits)`

[GitHub](https://github.com/Qiskit/qiskit-addon-obp/tree/main/qiskit_addon_obp/utils/operations.py#L112-L136)

Convert a local operator to a global operator by inserting identities on qubits which aren’t used.

**Parameters**

- **op** ([*SparsePauliOp*](/docs/api/qiskit/qiskit.quantum_info.SparsePauliOp)) – Local operator to expand.
- **qargs** ([*list*](https://docs.python.org/3/library/stdtypes.html#list)*\[*[*int*](https://docs.python.org/3/library/functions.html#int)*]*) – Qubit indices for local operator.
- **n\_qubits** ([*int*](https://docs.python.org/3/library/functions.html#int)) – Number of qubits in the global system.

**Returns**

An operator on `n_qubits` qubits

**Raises**

[**ValueError**](https://docs.python.org/3/library/exceptions.html#ValueError) – Qubit ID out of range

**Return type**

[*SparsePauliOp*](/docs/api/qiskit/qiskit.quantum_info.SparsePauliOp)

### reduce\_op

`reduce_op(global_op)`

[GitHub](https://github.com/Qiskit/qiskit-addon-obp/tree/main/qiskit_addon_obp/utils/operations.py#L147-L191)

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:**

```python
>>> 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*](/docs/api/qiskit/qiskit.quantum_info.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**](https://docs.python.org/3/library/exceptions.html#ValueError) – Input operator may not be the identity operator.

**Return type**

[tuple](https://docs.python.org/3/library/stdtypes.html#tuple)\[[*SparsePauliOp*](/docs/api/qiskit/qiskit.quantum_info.SparsePauliOp), [list](https://docs.python.org/3/library/stdtypes.html#list)\[[int](https://docs.python.org/3/library/functions.html#int)]]
