Excellent question. You've hit on a crucial and often misunderstood aspect of D-Wave's quantum annealers. The short answer is that the concept of "qubit fidelity" as used in gate-based quantum computers doesn't directly translate to quantum annealers, and D-Wave uses a different set of metrics and calibration procedures appropriate for their architecture.
Let's break this down.
This is the most important point. In a gate-based quantum computer (like those from IBM, Google, Rigetti), the primary goal is to execute a sequence of quantum gates with high precision. Therefore, key metrics are:
|0⟩ and how accurately can you read out its final state?A D-Wave machine is a quantum annealer. Its purpose is not to run a circuit of gates but to find the lowest energy configuration (the ground state) of a configurable physical system, which is described by an Ising Hamiltonian:
Therefore, the relevant "fidelity" is not about individual gates but about the entire system's ability to solve this problem.
Instead of gate fidelity, the performance of a quantum annealer is characterized by metrics like:
h_i (biases) and J_{ij} (couplings) that you program. Due to manufacturing variations and control electronics noise, the Hamiltonian implemented by the chip is never exactly the one you specified. D-Wave works very hard to minimize these errors through a sophisticated calibration process.You are absolutely right that calibrating thousands of qubits is a massive, time-consuming task. D-Wave has a highly automated, multi-stage calibration procedure that runs continuously to keep the machine in tune.
h_i): Each qubit has a natural energy bias due to its local magnetic environment. The calibration process tunes control parameters to effectively zero out this intrinsic bias, so a programmed h_i = 0 truly means the qubit has no preference for +1 or -1.J_{ij}): The strength of the interaction between two connected qubits is calibrated so that the programmed J_{ij} value corresponds to the desired physical interaction strength.A(s) and B(s), which control the strength of the quantum tunneling field and the problem Hamiltonian over the course of the anneal, are carefully calibrated for optimal performance.This process is what allows D-Wave to provide a machine where the user can specify h and J values and have confidence that the machine is implementing a close approximation of that Hamiltonian. Randomized benchmarking is not used because it is a tool for gate-based computers.
D-Wave does not publish a single "fidelity number" per qubit, but they do provide the results of their calibration in a very practical way: by telling you which qubits and couplers are working.
You can access this information directly using D-Wave's Ocean SDK. The solver object contains a wealth of properties about the specific QPU you are targeting, including the exact list of usable qubits and couplers, and their connectivity graph.
Here is a Python code example using the dwave-system library:
from dwave.system import DWaveSampler, EmbeddingComposite
# Select a D-Wave solver
# You might need to configure your API token first
try:
sampler = DWaveSampler()
except Exception as e:
print("Could not connect to a D-Wave solver. Please check your configuration.")
print(e)
exit()
# The solver object has a 'properties' dictionary with detailed info
properties = sampler.properties
print(f"Chip ID: {properties.get('chip_id')}")
print("-" * 20)
# Number of available (calibrated) qubits
num_qubits = properties.get('num_qubits')
print(f"Number of available (calibrated) qubits: {num_qubits}")
# The list of qubit labels that are active
active_qubits = sampler.nodelist
print(f"First 10 active qubit labels: {active_qubits[:10]}")
# Number of available (calibrated) couplers
num_couplers = len(sampler.edgelist)
print(f"Number of available (calibrated) couplers: {num_couplers}")
# The list of couplers (connections between qubits) that are active
active_couplers = sampler.edgelist
print(f"First 5 active couplers: {active_couplers[:5]}")
# You can also get information about the range of h and J values
h_range = properties.get('h_range')
j_range = properties.get('j_range')
print(f"\nProgrammable range for biases (h): {h_range}")
print(f"Programmable range for couplings (J): {j_range}")
# For more detail on errors, you can check recent scientific papers.
# For example, look for papers on "Ising Control Errors in D-Wave"
# e.g., https://docs.dwavesys.com/docs/latest/c_qpu_ice.html
qubits and couplers define the exact "working graph" of the machine you are using.Was this answer helpful?
version: June 2025 release
Status: UQ Validated
Validated: 8 months ago
Status: Needs Human Verification
Loading model reviews...
Loading reviews...