Skip to main contentIBM Quantum Documentation
This page is from the dev version of Qiskit SDK. Go to the stable version.

BaseEstimatorV1

class qiskit.primitives.BaseEstimatorV1(*, options=None)

GitHub

Bases: BasePrimitiveV1, Generic[T]

Base class for EstimatorV1 implementations.

Note that the reference estimator in Qiskit follows the EstimatorV2 interface specifications instead.

An estimator calculates expectation values for provided quantum circuit and observable combinations.

Implementations of BaseEstimatorV1 should define their own BaseEstimatorV1._run() method that will be called by the public-facing qiskit.primitives.BaseEstimatorV1.run(), which takes the following inputs:

  • quantum circuits (ψi(θ)\psi_i(\theta)): list of (parameterized) quantum circuits (a list of QuantumCircuit objects).
  • observables (HjH_j): a list of SparsePauliOp objects.
  • parameter values (θk\theta_k): list of sets of values to be bound to the parameters of the quantum circuits (list of list of float).

The method returns a JobV1 object. Calling qiskit.providers.JobV1.result() yields the a list of expectation values plus optional metadata like confidence intervals for the estimation.

ψi(θk)Hjψi(θk)\langle\psi_i(\theta_k)|H_j|\psi_i(\theta_k)\rangle

Here is an example of how a BaseEstimatorV1 would be used:

# This is a fictional import path.
# There are currently no EstimatorV1 implementations in Qiskit.
from estimator_v1_location import EstimatorV1
from qiskit.circuit.library import RealAmplitudes
from qiskit.quantum_info import SparsePauliOp
 
psi1 = RealAmplitudes(num_qubits=2, reps=2)
psi2 = RealAmplitudes(num_qubits=2, reps=3)
 
H1 = SparsePauliOp.from_list([("II", 1), ("IZ", 2), ("XI", 3)])
H2 = SparsePauliOp.from_list([("IZ", 1)])
H3 = SparsePauliOp.from_list([("ZI", 1), ("ZZ", 1)])
 
theta1 = [0, 1, 1, 2, 3, 5]
theta2 = [0, 1, 1, 2, 3, 5, 8, 13]
theta3 = [1, 2, 3, 4, 5, 6]
 
estimator = EstimatorV1()
 
# calculate [ <psi1(theta1)|H1|psi1(theta1)> ]
job = estimator.run([psi1], [H1], [theta1])
job_result = job.result() # It will block until the job finishes.
print(f"The primitive-job finished with result {job_result}")
 
# calculate [ <psi1(theta1)|H1|psi1(theta1)>,
#             <psi2(theta2)|H2|psi2(theta2)>,
#             <psi1(theta3)|H3|psi1(theta3)> ]
job2 = estimator.run([psi1, psi2, psi1], [H1, H2, H3], [theta1, theta2, theta3])
job_result = job2.result()
print(f"The primitive-job finished with result {job_result}")

Initialize EstimatorV1.

Parameters

options (dict | None) – Default options.


Attributes

options

Return options values for the estimator.

Returns

options


Methods

run

run(circuits, observables, parameter_values=None, **run_options)

GitHub

Run the job of the estimation of expectation value(s).

circuits, observables, and parameter_values should have the same length. The i-th element of the result is the expectation of observable

obs = observables[i]

for the state prepared by

circ = circuits[i]

with bound parameters

values = parameter_values[i]

Parameters

  • circuits (Sequence[QuantumCircuit] | QuantumCircuit) – one or more circuit objects.
  • observables (Sequence[BaseOperator | str] | BaseOperator | str) – one or more observable objects. Several formats are allowed; importantly, str should follow the string representation format for Pauli objects.
  • parameter_values (Sequence[Sequence[float]] | Sequence[float] | float | None) – concrete parameters to be bound.
  • run_options – runtime options used for circuit execution.

Returns

The job object of EstimatorResult.

Raises

Return type

T

set_options

set_options(**fields)

GitHub

Set options values for the estimator.

Parameters

**fields – The fields to update the options

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