Operator backpropagation (OBP) for estimation of expectation values
Usage estimate: 16 minutes on an Eagle r3 processor (NOTE: This is an estimate only. Your runtime might vary.)
# Added by doQumentation — installs packages not in the Binder environment
%pip install -q qiskit-addon-obp
# This cell is hidden from users;
# it disables linting rules.
# ruff: noqa
Background
Operator backpropagation is a technique which involves absorbing operations from the end of a quantum circuit into the measured observable, generally reducing the depth of the circuit at the cost of additional terms in the observable. The goal is to backpropagate as much of the circuit as possible without allowing the observable to grow too large. A Qiskit-based implementation is available in the OBP Qiskit addon, more details can be found in the corresponding docs with a simple example to get started.
Consider an example circuit for which an observable is to be measured, where are Paulis and are coefficients. Let us denote the circuit as a single unitary which can be logically partitioned into as shown in the figure below.

Operator backpropagation absorbs the unitary into the observable by evolving it as . In other words, part of the computation is performed classically via the evolution of the observable from to . The original problem can now be reformulated as measuring the observable for the new lower depth circuit whose unitary is .
The unitary is represented as a number of slices . There are multiple ways for defining a slice. For instance, in the above example circuit, each layer of and each layer of gates can be considered as an individual slice. Backpropagation involves calculation of classically. Each slice can be represented as , where is a -qubit Pauli and is a scalar. It is easy to verify that