---
title: EstimatorV2 (latest version)
description: API reference for qiskit_ibm_runtime.EstimatorV2 in the latest version of qiskit-ibm-runtime
source: https://eu-de.quantum.cloud.ibm.com/docs/en/api/qiskit-ibm-runtime/estimator-v2
---

# EstimatorV2

*class* `EstimatorV2(mode=None, options=None)`

[GitHub](https://github.com/Qiskit/qiskit-ibm-runtime/tree/stable/0.49/qiskit_ibm_runtime/estimator.py#L47-L184)

Bases: `BasePrimitiveV2`\[[`EstimatorOptions`](/docs/api/qiskit-ibm-runtime/options-estimator-options "qiskit_ibm_runtime.options.estimator_options.EstimatorOptions")], `Estimator`, [`BaseEstimatorV2`](/docs/api/qiskit/qiskit.primitives.BaseEstimatorV2)

EstimatorV2 primitive for IBM Quantum Compute (formerly Qiskit Runtime).

IBM Quantum Compute Estimator primitive service estimates expectation values of quantum circuits and observables.

The [`run()`](#qiskit_ibm_runtime.EstimatorV2.run "qiskit_ibm_runtime.EstimatorV2.run") can be used to submit circuits, observables, and parameters to the Estimator primitive.

Following construction, an estimator is used by calling its [`run()`](#qiskit_ibm_runtime.EstimatorV2.run "qiskit_ibm_runtime.EstimatorV2.run") method with a list of PUBs (Primitive Unified Blocs). Each PUB contains four values that, together, define a computation unit of work for the estimator to complete:

- a single [`QuantumCircuit`](/docs/api/qiskit/qiskit.circuit.QuantumCircuit), possibly parametrized, whose final state we define as $\psi(\theta)$,
- one or more observables (specified as any `ObservablesArrayLike`, including `Pauli`, `SparsePauliOp`, `str`) that specify which expectation values to estimate, denoted $H_j$, and
- a collection parameter value sets to bind the circuit against, $\theta_k$.
- an optional target precision for expectation value estimates.

Here is an example of how the estimator is used.

```python
from qiskit.circuit.library import real_amplitudes
from qiskit.quantum_info import SparsePauliOp
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit_ibm_runtime import QiskitRuntimeService, EstimatorV2 as Estimator

service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)

psi = real_amplitudes(num_qubits=2, reps=2)
hamiltonian = SparsePauliOp.from_list([("II", 1), ("IZ", 2), ("XI", 3)])
theta = [0, 1, 1, 2, 3, 5]

pm = generate_preset_pass_manager(backend=backend, optimization_level=1)
isa_psi = pm.run(psi)
isa_observables = hamiltonian.apply_layout(isa_psi.layout)

estimator = Estimator(mode=backend)

# calculate [ <psi(theta)|hamiltonian|psi(theta)> ]
job = estimator.run([(isa_psi, isa_observables, [theta])])
pub_result = job.result()[0]
print(f"Expectation values: {pub_result.data.evs}")
```

**Parameters**

- **mode** (*BackendV2 |* [*Session*](/docs/api/qiskit-ibm-runtime/session "qiskit_ibm_runtime.Session")  *|*[*Batch*](/docs/api/qiskit-ibm-runtime/batch "qiskit_ibm_runtime.Batch") *| str | None*) –

  The execution mode used to make the primitive query. It can be:

  - A `Backend` if you are using job mode.
  - A [`Session`](/docs/api/qiskit-ibm-runtime/session "qiskit_ibm_runtime.Session") if you are using session execution mode.
  - A [`Batch`](/docs/api/qiskit-ibm-runtime/batch "qiskit_ibm_runtime.Batch") if you are using batch execution mode.

  Refer to the [IBM Quantum Compute documentation](/docs/guides/execution-modes) for more information about the `Execution modes`.

- **options** (*dict |* [*EstimatorOptions*](/docs/api/qiskit-ibm-runtime/options-estimator-options "qiskit_ibm_runtime.options.EstimatorOptions") *| None*) – Estimator options, see `EstimatorOptions` for detailed description.

## Attributes

### mode

Return the execution mode used by this primitive.

**Returns**

Mode used by this primitive, or `None` if an execution mode is not used.

### options

Return options.

### version

Default value: `2`

## Methods

### backend

`backend()`

[GitHub](https://github.com/Qiskit/qiskit-ibm-runtime/tree/stable/0.49/qiskit_ibm_runtime/base_primitive.py#L213-L215)

Return the backend the primitive query will be run on.

**Return type**

[*BackendV2*](/docs/api/qiskit/qiskit.providers.BackendV2)

### run

`run(pubs, *, precision=None)`

[GitHub](https://github.com/Qiskit/qiskit-ibm-runtime/tree/stable/0.49/qiskit_ibm_runtime/estimator.py#L128-L161)

Submit a request to the estimator primitive.

**Parameters**

- **pubs** (*Iterable\[EstimatorPubLike]*) – An iterable of pub-like (primitive unified bloc) objects, such as tuples `(circuit, observables)` or `(circuit, observables, parameter_values)`.
- **precision** (*float | 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**

Submitted job.

**Raises**

**ValueError** – if precision value is not strictly greater than 0.

**Return type**

[RuntimeJobV2](/docs/api/qiskit-ibm-runtime/runtime-job-v2 "qiskit_ibm_runtime.RuntimeJobV2")
