Skip to main contentIBM Quantum Documentation Mirror

BackendEstimatorV2

class qiskit.primitives.BackendEstimatorV2(*, backend, options=None)

GitHub(opens in a new tab)

Bases: BaseEstimatorV2

Evaluates expectation values for provided quantum circuit and observable combinations.

The BackendEstimatorV2 class is a generic implementation of the BaseEstimatorV2 interface that is used to wrap a BackendV2 (or BackendV1) object in the BaseEstimatorV2 API. It facilitates using backends that do not provide a native BaseEstimatorV2 implementation in places that work with BaseEstimatorV2. However, if you’re using a provider that has a native implementation of BaseEstimatorV2, it is a better choice to leverage that native implementation as it will likely include additional optimizations and be a more efficient implementation. The generic nature of this class precludes doing any provider- or backend-specific optimizations.

This class does not perform any measurement or gate mitigation, and, presently, is only compatible with Pauli-based observables. More formally, given an observable of the type O=i=1NaiPiO=\sum_{i=1}^Na_iP_i, where aia_i is a complex number and PiP_i is a Pauli operator, the estimator calculates the expectation E(Pi)\mathbb{E}(P_i) of each PiP_i and finally calculates the expectation value of OO as E(O)=i=1NaiE(Pi)\mathbb{E}(O)=\sum_{i=1}^Na_i\mathbb{E}(P_i). The reported std is calculated as

i=1naiVar(Pi)N,\frac{\sum_{i=1}^{n}|a_i|\sqrt{\textrm{Var}\big(P_i\big)}}{\sqrt{N}}\:,

where Var(Pi)\textrm{Var}(P_i) is the variance of PiP_i, N=O(ϵ2)N=O(\epsilon^{-2}) is the number of shots, and ϵ\epsilon is the target precision [1].

Each tuple of (circuit, observables, <optional> parameter values, <optional> precision), called an estimator primitive unified bloc (PUB), produces its own array-based result. The run() method can be given a sequence of pubs to run in one call.

The options for BackendEstimatorV2 consist of the following items.

  • default_precision: The default precision to use if none are specified in run(). Default: 0.015625 (1 / sqrt(4096)).
  • abelian_grouping: Whether the observables should be grouped into sets of qubit-wise commuting observables. Default: True.
  • seed_simulator: The seed to use in the simulator. If None, a random seed will be used. Default: None.

Reference:

[1] O. Crawford, B. van Straaten, D. Wang, T. Parks, E. Campbell, St. Brierley, Efficient quantum measurement of Pauli operators in the presence of finite sampling error. Quantum 5, 385(opens in a new tab)

Parameters

  • backend (BackendV1 |BackendV2) – The backend to run the primitive on.
  • options (dict(opens in a new tab) | None) – The options to control the default precision (default_precision), the operator grouping (abelian_grouping), and the random seed for the simulator (seed_simulator).

Attributes

backend

Returns the backend which this sampler object based on.

options

Return the options


Methods

run

run(pubs, *, precision=None)

GitHub(opens in a new tab)

Estimate expectation values for each provided pub (Primitive Unified Bloc).

Parameters

  • pubs (Iterable[EstimatorPubLike]) – An iterable of pub-like objects, such as tuples (circuit, observables) or (circuit, observables, parameter_values).
  • precision (float(opens in a new tab) | None) – The target precision for expectation value estimates of each run Estimator Pub that does not specify its own precision. If None the estimator’s default precision value will be used.

Returns

A job object that contains results.

Return type

PrimitiveJob[PrimitiveResult[PubResult]]