qiskit-community / qiskit-braket-provider

Qiskit-Braket provider to execute Qiskit programs on quantum computing hardware devices through Amazon Braket.
https://qiskit-community.github.io/qiskit-braket-provider/
Apache License 2.0
58 stars 44 forks source link

Different default shot numbers for qiskit Sampler and BraketLocalBackend. #183

Open maolinml opened 4 months ago

maolinml commented 4 months ago

What is the expected enhancement?

The default shot number for qiskit’s Sampler is 0, whereas that for BraketLocalBackend is 1000, see the code example below. This could cause some confusion. Ideally, the default shot values should be the same.

from qiskit import QuantumCircuit
from qiskit_braket_provider import BraketLocalBackend
from qiskit.primitives import Sampler

circuit = QuantumCircuit(1)
circuit.h(0)
circuit.measure_all()

# Run with qiskit backend
Sampler().run(circuit).result().quasi_dists[0]

# Qiskit local backend return probability calculated 
# from state vector, which has no shot noise and the
# result is fixed for different runs
# {0: 0.5, 1: 0.5}

# Run with braket backend
BraketLocalBackend().run(circuit).result().results[0].data.counts

# Braket local backend return sampled probability with shot noise
# and the result vary from run to run
# {'1': 537, '0': 487}
speller26 commented 4 weeks ago

I'm actually surprised that the sampler accepts 0 shots, and returns probabilities as the counts. In any case, the Braket provider doesn't have a native sampler, but just a classic Qiskit backend, which is a different interface. However, it might be worth considering writing native primitives in this package.

maolinml commented 4 weeks ago

I don't think we need a native sampler to resolve the discrepancy shown above. We can simply set the default shot to zero for "BraketLocalBackend().run(...)" and use the state vector simulator, right?