diff --git a/docs/guides/debug-qiskit-runtime-jobs.ipynb b/docs/guides/debug-qiskit-runtime-jobs.ipynb
index 2a9969ccd60..8d933a6d1d8 100644
--- a/docs/guides/debug-qiskit-runtime-jobs.ipynb
+++ b/docs/guides/debug-qiskit-runtime-jobs.ipynb
@@ -212,7 +212,7 @@
},
{
"cell_type": "code",
- "execution_count": 4,
+ "execution_count": null,
"id": "830b1dcc-2669-46cc-bff8-01a96a05c6ab",
"metadata": {},
"outputs": [
@@ -232,7 +232,8 @@
"# Map the observables to the backend's layout\n",
"isa_obs = [SparsePauliOp(o).apply_layout(isa_qc.layout) for o in obs]\n",
"\n",
- "# Initialize the PUBs, which consist of six-qubit circuits with `n_layers` 1, ..., 6\n",
+ "# Initialize the PUBs, which consist of six-qubit circuits \n",
+ "# with `n_layers` 1, ..., 6\n",
"all_n_layers = [1, 2, 3, 4, 5, 6]\n",
"\n",
"pubs = [(pm.run(generate_circuit(6, n)), isa_obs) for n in all_n_layers]"
@@ -377,7 +378,7 @@
},
{
"cell_type": "code",
- "execution_count": 8,
+ "execution_count": null,
"id": "cd61e437-bd2f-4349-a667-7edab51c4a6e",
"metadata": {},
"outputs": [
@@ -425,7 +426,8 @@
" # Print the mean absolute difference for the observables\n",
" mean_vals = np.round(np.mean(vals), 2)\n",
" print(\n",
- " f\"Mean absolute difference between ideal and noisy results for circuits with {all_n_layers[idx]} layers:\\n {mean_vals}%\\n\"\n",
+ " f\"Mean absolute difference between ideal and noisy results \"\n",
+ " f\"for circuits with {all_n_layers[idx]} layers:\\n {mean_vals}%\\n\"\n",
" )"
]
},
@@ -453,7 +455,7 @@
},
{
"cell_type": "code",
- "execution_count": 9,
+ "execution_count": null,
"id": "0835c562-55c9-4dbe-879e-7271f8bed280",
"metadata": {},
"outputs": [
@@ -508,7 +510,8 @@
" # Print the mean absolute difference for the observables\n",
" mean_values = np.round(np.mean(values), 2)\n",
" print(\n",
- " f\"Mean absolute difference between ideal and noisy results for circuits with {all_n_layers[idx]} layers:\\n {mean_values}%\\n\"\n",
+ " f\"Mean absolute difference between ideal and noisy results \"\n",
+ " f\"for circuits with {all_n_layers[idx]} layers:\\n {mean_values}%\\n\"\n",
" )"
]
},
@@ -599,7 +602,7 @@
},
{
"cell_type": "code",
- "execution_count": 14,
+ "execution_count": null,
"id": "7db531a1-c417-4d5b-bdc3-7a4ad3385fd4",
"metadata": {},
"outputs": [
@@ -630,7 +633,8 @@
"for factors, res in zip(noise_factors, results):\n",
" d = rdiff(ideal_results[0], res[0])\n",
" print(\n",
- " f\"Mean absolute difference for factors {factors}:\\n {np.round(np.mean(d), 2)}%\\n\"\n",
+ " f\"Mean absolute difference for factors {factors}:\\n \"\n",
+ " f\"{np.round(np.mean(d), 2)}%\\n\"\n",
" )"
]
},
diff --git a/docs/guides/error-mitigation-overview.mdx b/docs/guides/error-mitigation-overview.mdx
index ef75a9a63bc..e1076bda506 100644
--- a/docs/guides/error-mitigation-overview.mdx
+++ b/docs/guides/error-mitigation-overview.mdx
@@ -1,6 +1,50 @@
---
title: Overview of noise management techniques
description: Discover tools that help manage noise through the available error mitigation and suppression techniques
+keywords: ["error mitigation", "noise management", "quantum error suppression", "ZNE", "PEC", "TREX", "dynamical decoupling", "Qiskit Runtime", "quantum noise"]
+category: "Guides"
+tags: ["error-mitigation", "noise-management", "quantum-computing", "qiskit-runtime", "qiskit-addons"]
+date: "2026-05-28"
+updated: "2026-05-28"
+version: "1.0"
+is_latest: true
+
+# Semantic context
+topic: "Quantum Error Mitigation and Noise Management"
+audience: "quantum-developers"
+difficulty: "intermediate"
+reading_time: "8 min"
+
+# Content structure
+sections: ["general-techniques", "expectation-value-mitigation", "sampling-mitigation"]
+technologies: ["Qiskit Runtime", "Qiskit Addons", "quantum-hardware"]
+
+# Relationships
+related_docs:
+ - "error-mitigation-and-suppression-techniques"
+ - "directed-execution-model"
+ - "configure-error-mitigation"
+prerequisites: ["basic-quantum-computing", "qiskit-fundamentals"]
+next_steps: ["error-mitigation-and-suppression-techniques", "directed-execution-model"]
+
+# Discoverability
+aliases: ["noise-management", "error-suppression-overview", "quantum-error-mitigation-guide"]
+summary: "Comprehensive index of error mitigation and noise suppression techniques available in Qiskit, including both open-source addons and Qiskit Runtime features. Covers general noise management, expectation value estimation techniques (TREX, ZNE, PEA, PEC), and sampling-based methods (SQD, M3)."
+
+# Content metadata
+techniques_covered:
+ - "Directed execution model"
+ - "Dynamical decoupling"
+ - "Pauli twirling"
+ - "TREX"
+ - "ZNE"
+ - "PEA"
+ - "PEC"
+ - "OBP"
+ - "PNA"
+ - "SQD"
+ - "M3"
+use_cases: ["expectation-value-estimation", "sampling-results", "noise-reduction"]
---
{/* cspell:ignore lightcones */}
@@ -73,7 +117,7 @@ When executing quantum workloads, there are multiple ways to reduce the impact o
@@ -107,7 +151,7 @@ When executing quantum workloads, there are multiple ways to reduce the impact o
diff --git a/docs/guides/hello-world.ipynb b/docs/guides/hello-world.ipynb
index 7cbd781d6d0..cfa0d4fabba 100644
--- a/docs/guides/hello-world.ipynb
+++ b/docs/guides/hello-world.ipynb
@@ -8,6 +8,79 @@
"---\n",
"title: Run your first circuit on hardware\n",
"description: Get started using Qiskit with IBM Quantum hardware in this Hello World example\n",
+ "keywords: [\"hello world\", \"quantum hardware\", \"IBM Quantum\", \"first circuit\", \"Bell state\", \"QPU\", \"quantum processing unit\", \"Qiskit Runtime\", \"hardware execution\"]\n",
+ "category: \"Guides\"\n",
+ "tags: [\"hello-world\", \"tutorial\", \"beginner\", \"hardware\", \"qpu\", \"bell-state\", \"qiskit-runtime\", \"authentication\"]\n",
+ "date: \"2026-05-28\"\n",
+ "updated: \"2026-05-28\"\n",
+ "version: \"1.0\"\n",
+ "is_latest: true\n",
+ "\n",
+ "# Semantic context\n",
+ "topic: \"Running Quantum Circuits on Real Hardware\"\n",
+ "audience: \"beginners\"\n",
+ "difficulty: \"beginner\"\n",
+ "reading_time: \"15 min\"\n",
+ "completion_time: \"20 min\"\n",
+ "\n",
+ "# Tutorial metadata\n",
+ "tutorial_type: \"hello-world\"\n",
+ "hands_on: true\n",
+ "requires_hardware: true\n",
+ "requires_api_key: true\n",
+ "requires_account: true\n",
+ "\n",
+ "# Content structure\n",
+ "sections: [\"installation\", \"authentication\", \"simple-program\", \"scaling\", \"next-steps\"]\n",
+ "code_languages: [\"python\"]\n",
+ "technologies: [\"Qiskit\", \"Qiskit Runtime\", \"IBM Quantum\", \"QPU\", \"Jupyter\"]\n",
+ "\n",
+ "# Learning objectives\n",
+ "learning_outcomes:\n",
+ " - \"Set up IBM Quantum account and authentication\"\n",
+ " - \"Install Qiskit Runtime for hardware access\"\n",
+ " - \"Create and run a Bell state circuit on real quantum hardware\"\n",
+ " - \"Understand the four-step Qiskit pattern workflow\"\n",
+ " - \"Scale circuits to utility-level qubit counts\"\n",
+ " - \"Analyze results from quantum hardware execution\"\n",
+ "\n",
+ "# Relationships\n",
+ "related_docs:\n",
+ " - \"quick-start\"\n",
+ " - \"cloud-setup-invited\"\n",
+ " - \"cloud-setup-untrusted\"\n",
+ " - \"plans-overview\"\n",
+ " - \"bit-ordering\"\n",
+ "prerequisites: [\"quick-start\", \"python-basics\", \"ibm-quantum-account\"]\n",
+ "next_steps: [\"configure-error-mitigation\", \"primitives\", \"qiskit-patterns\"]\n",
+ "\n",
+ "# Discoverability\n",
+ "aliases: [\"hello-world\", \"first-hardware-run\", \"quantum-hardware-tutorial\", \"run-on-qpu\"]\n",
+ "summary: \"Complete hello world tutorial for running quantum circuits on real IBM Quantum hardware. Covers account setup, authentication, creating Bell states, executing on QPUs, and scaling to utility-level circuits. Includes the four-step Qiskit pattern: map, optimize, execute, and analyze.\"\n",
+ "\n",
+ "# Technical details\n",
+ "qiskit_version: \"~=2.4.0\"\n",
+ "qiskit_runtime_version: \"~=0.46.1\"\n",
+ "dependencies: [\"qiskit\", \"qiskit-ibm-runtime\", \"jupyter\"]\n",
+ "environment: \"cloud\"\n",
+ "execution_mode: \"hardware\"\n",
+ "access_plan: \"Open Plan\"\n",
+ "\n",
+ "# QPU usage\n",
+ "qpu_usage:\n",
+ " estimated_shots: \"1000-10000\"\n",
+ " estimated_circuits: \"2-5\"\n",
+ " qubit_count: \"2-127\"\n",
+ " circuit_depth: \"low-to-medium\"\n",
+ " execution_time: \"minutes\"\n",
+ " cost_estimate: \"free (Open Plan)\"\n",
+ "\n",
+ "# Content features\n",
+ "includes_code: true\n",
+ "includes_visualization: true\n",
+ "interactive: true\n",
+ "estimated_runtime: \"5-10 min\"\n",
+ "quantum_concepts: [\"Bell state\", \"entanglement\", \"quantum circuits\", \"observables\", \"primitives\"]\n",
"---\n",
"\n",
"\n",
diff --git a/docs/guides/noise-learning.ipynb b/docs/guides/noise-learning.ipynb
index 9b951cb3e34..30af0d74df9 100644
--- a/docs/guides/noise-learning.ipynb
+++ b/docs/guides/noise-learning.ipynb
@@ -120,7 +120,7 @@
},
{
"cell_type": "code",
- "execution_count": 2,
+ "execution_count": null,
"id": "db9fda1f-189c-4acc-9368-b9ce7c6e7057",
"metadata": {},
"outputs": [
@@ -193,8 +193,8 @@
"# Results are truncated\n",
"with numpy.printoptions(threshold=200):\n",
" print(\n",
- " f\"And each of these `LayerError` objects possess\"\n",
- " f\" data on the generators for the error channel: \\n{noise_model.data[0].error.generators}\\n\"\n",
+ " f\"And each of these `LayerError` objects possess data on the \"\n",
+ " f\"generators for the error channel: \\n{noise_model.data[0].error.generators}\\n\"\n",
" )\n",
"# Results are truncated\n",
"with numpy.printoptions(threshold=200):\n",
@@ -416,7 +416,7 @@
},
{
"cell_type": "code",
- "execution_count": 8,
+ "execution_count": null,
"id": "3cfcc856-1fe5-4b79-ad2a-ebf275b87fb6",
"metadata": {},
"outputs": [
@@ -443,8 +443,8 @@
")\n",
"noise_map = learner_result[0].to_pauli_lindblad_map()\n",
"print(\n",
- " f\"After converting to PauliLindbladMap, you can extract data \"\n",
- " f\" on the generators for the error channel (truncated to 3): \\n{noise_map.generators()[:3]}\\n\"\n",
+ " f\"After converting to PauliLindbladMap, you can extract data on the \"\n",
+ " f\"generators for the error channel (truncated to 3): \\n{noise_map.generators()[:3]}\\n\"\n",
")\n",
"with numpy.printoptions(threshold=20):\n",
" print(\n",
diff --git a/docs/guides/quick-start.ipynb b/docs/guides/quick-start.ipynb
index 5fa9d2a5ac6..aa7053d3771 100644
--- a/docs/guides/quick-start.ipynb
+++ b/docs/guides/quick-start.ipynb
@@ -8,6 +8,64 @@
"---\n",
"title: Quickstart\n",
"description: Build and visualize a quantum circuit in under two minutes, no sign-in or API key necessary.\n",
+ "keywords: [\"quickstart\", \"getting started\", \"quantum circuit\", \"Bell state\", \"entanglement\", \"Qiskit tutorial\", \"first circuit\", \"quantum computing basics\"]\n",
+ "category: \"Guides\"\n",
+ "tags: [\"quickstart\", \"tutorial\", \"beginner\", \"quantum-circuit\", \"bell-state\", \"entanglement\", \"qiskit-basics\"]\n",
+ "date: \"2026-05-28\"\n",
+ "updated: \"2026-05-28\"\n",
+ "version: \"1.0\"\n",
+ "is_latest: true\n",
+ "\n",
+ "# Semantic context\n",
+ "topic: \"Getting Started with Qiskit\"\n",
+ "audience: \"beginners\"\n",
+ "difficulty: \"beginner\"\n",
+ "reading_time: \"5 min\"\n",
+ "completion_time: \"2 min\"\n",
+ "\n",
+ "# Tutorial metadata\n",
+ "tutorial_type: \"quickstart\"\n",
+ "hands_on: true\n",
+ "requires_hardware: false\n",
+ "requires_api_key: false\n",
+ "\n",
+ "# Content structure\n",
+ "sections: [\"installation\", \"circuit-building\", \"visualization\", \"experimentation\", \"next-steps\"]\n",
+ "code_languages: [\"python\"]\n",
+ "technologies: [\"Qiskit\", \"Python\", \"Jupyter\"]\n",
+ "\n",
+ "# Learning objectives\n",
+ "learning_outcomes:\n",
+ " - \"Install Qiskit in a local environment\"\n",
+ " - \"Build a simple quantum circuit\"\n",
+ " - \"Create a Bell state (entangled qubits)\"\n",
+ " - \"Run circuit simulation locally\"\n",
+ " - \"Visualize quantum measurement results\"\n",
+ " - \"Understand quantum entanglement basics\"\n",
+ "\n",
+ "# Relationships\n",
+ "related_docs:\n",
+ " - \"hello-world\"\n",
+ " - \"install-qiskit\"\n",
+ " - \"basics-of-quantum-information\"\n",
+ "prerequisites: [\"python-basics\"]\n",
+ "next_steps: [\"hello-world\", \"basics-of-quantum-information\"]\n",
+ "\n",
+ "# Discoverability\n",
+ "aliases: [\"getting-started\", \"first-circuit\", \"qiskit-quickstart\", \"beginner-tutorial\"]\n",
+ "summary: \"Hands-on quickstart guide for building your first quantum circuit with Qiskit. Learn to create a Bell state, run local simulations, and visualize results in under 2 minutes. No sign-in or API key required. Perfect for beginners new to quantum computing.\"\n",
+ "\n",
+ "# Technical details\n",
+ "qiskit_version: \"~=2.4.0\"\n",
+ "dependencies: [\"qiskit\", \"matplotlib\", \"qiskit[visualization]\"]\n",
+ "environment: \"local\"\n",
+ "execution_mode: \"simulation\"\n",
+ "\n",
+ "# Content features\n",
+ "includes_code: true\n",
+ "includes_visualization: true\n",
+ "interactive: true\n",
+ "estimated_runtime: \"< 1 min\"\n",
"---\n",
"\n",
"\n",
diff --git a/docs/guides/v2-primitives.mdx b/docs/guides/v2-primitives.mdx
index 239049a6366..b35f3f5dff3 100644
--- a/docs/guides/v2-primitives.mdx
+++ b/docs/guides/v2-primitives.mdx
@@ -244,7 +244,8 @@ circuit.measure(qreg[:5], alpha)
circuit.measure(qreg[5:], beta)
service = QiskitRuntimeService()
-backend = service.least_busy(operational=True, simulator=False, min_num_qubits=12)
+backend = service.least_busy(operational=True,
+ simulator=False, min_num_qubits=12)
pm = generate_preset_pass_manager(backend=backend, optimization_level=1)
isa_circuit = pm.run(circuit)
@@ -336,7 +337,8 @@ sampler.options.dynamical_decoupling.enable = True
sampler.options.twirling.enable_gates = True
# This does bulk update. The value for default_shots is overridden if you specify shots with run() or in the PUB.
-sampler.options.update(default_shots=1024, dynamical_decoupling={"sequence_type": "XpXm"})
+sampler.options.update(default_shots=1024,
+ dynamical_decoupling={"sequence_type": "XpXm"})
# Print the dictionary format.
# Server defaults are used for unset options.
@@ -517,7 +519,8 @@ from qiskit.quantum_info import SparsePauliOp, random_hermitian
from qiskit_ibm_runtime import EstimatorV2 as Estimator, QiskitRuntimeService
service = QiskitRuntimeService()
-backend = service.least_busy(operational=True, simulator=False, min_num_qubits=127)
+backend = (service.least_busy(operational=True,
+ simulator=False, min_num_qubits=127))
estimator = Estimator(backend)
n_qubits = 127
@@ -547,7 +550,8 @@ from qiskit_ibm_runtime import QiskitRuntimeService, Estimator
service = QiskitRuntimeService()
-backend = service.least_busy(operational=True, simulator=False, min_num_qubits=127)
+backend = service.least_busy(operational=True,
+ simulator=False, min_num_qubits=127)
n_qubits = 127
@@ -599,7 +603,8 @@ isa_observables = [ob.apply_layout(isa_circuits[0].layout) for ob in observables
estimator = Estimator(backend)
-job = estimator.run([(isa_circuits[0], isa_observables[0]),(isa_circuits[1], isa_observables[1]),(isa_circuits[2], isa_observables[2])])
+job = estimator.run([(isa_circuits[0], isa_observables[0]),(isa_circuits[1],
+ isa_observables[1]),(isa_circuits[2], isa_observables[2])])
job_result = job.result()
for idx in range(len(job_result)):
pub_result = job_result[idx]
@@ -617,7 +622,8 @@ from qiskit_ibm_runtime import QiskitRuntimeService, Estimator
service = QiskitRuntimeService()
-backend = service.least_busy(operational=True, simulator=False, min_num_qubits=127)
+backend = service.least_busy(operational=True,
+ simulator=False, min_num_qubits=127)
n_qubits = 127
@@ -685,7 +691,8 @@ backend = service.least_busy(operational=True, simulator=False)
pm = generate_preset_pass_manager(backend=backend, optimization_level=1)
chsh_isa_circuit = pm.run(chsh_circuit)
-isa_observables = [operator.apply_layout(chsh_isa_circuit.layout) for operator in ops]
+isa_observables = [operator.apply_layout(chsh_isa_circuit.layout)
+ for operator in ops]
from qiskit_ibm_runtime import EstimatorV2 as Estimator
@@ -740,7 +747,8 @@ backend = service.least_busy(operational=True, simulator=False)
pm = generate_preset_pass_manager(backend=backend, optimization_level=1)
chsh_isa_circuit = pm.run(chsh_circuit)
-isa_observables = [operator.apply_layout(chsh_isa_circuit.layout) for operator in ops]
+isa_observables = [operator.apply_layout(chsh_isa_circuit.layout)
+ for operator in ops]
from qiskit_ibm_runtime import Estimator
@@ -777,7 +785,8 @@ import numpy as np
from qiskit.circuit.library import IQP
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit.quantum_info import SparsePauliOp, random_hermitian
-from qiskit_ibm_runtime import QiskitRuntimeService, Session, EstimatorV2 as Estimator
+from qiskit_ibm_runtime import (QiskitRuntimeService,
+ Session, EstimatorV2 as Estimator)
n_qubits = 127
@@ -793,11 +802,13 @@ pm = generate_preset_pass_manager(optimization_level=1, backend=backend)
isa_circuit = pm.run(circuit)
another_isa_circuit = pm.run(another_circuit)
isa_observable = observable.apply_layout(isa_circuit.layout)
-another_isa_observable = another_observable.apply_layout(another_isa_circuit.layout)
+another_isa_observable = (another_observable.apply_layout
+ (another_isa_circuit.layout))
service = QiskitRuntimeService()
-backend = service.least_busy(operational=True, simulator=False, min_num_qubits=127)
+backend = service.least_busy(operational=True,
+ simulator=False, min_num_qubits=127)
with Session(backend=backend) as session:
estimator = Estimator()
@@ -849,7 +860,8 @@ options.resilience_level = 2
service = QiskitRuntimeService()
-backend = service.least_busy(operational=True, simulator=False, min_num_qubits=127)
+backend = service.least_busy(operational=True,
+ simulator=False, min_num_qubits=127)
with Session(backend=backend) as session:
estimator = Estimator(options=options)
@@ -908,7 +920,8 @@ from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
service = QiskitRuntimeService()
-backend = service.least_busy(operational=True, simulator=False, min_num_qubits=127)
+backend = service.least_busy(operational=True,
+ simulator=False, min_num_qubits=127)
n_qubits = 127
@@ -934,7 +947,8 @@ from qiskit_ibm_runtime import QiskitRuntimeService, Sampler
service = QiskitRuntimeService()
-backend = service.least_busy(operational=True, simulator=False, min_num_qubits=127)
+backend = service.least_busy(operational=True,
+ simulator=False, min_num_qubits=127)
n_qubits = 127
@@ -968,7 +982,8 @@ from qiskit_ibm_runtime import QiskitRuntimeService, SamplerV2 as Sampler
service = QiskitRuntimeService()
-backend = service.least_busy(operational=True, simulator=False, min_num_qubits=127)
+backend = service.least_busy(operational=True,
+ simulator=False, min_num_qubits=127)
n_qubits = 127
@@ -999,7 +1014,8 @@ from qiskit_ibm_runtime import QiskitRuntimeService, Sampler
service = QiskitRuntimeService()
-backend = service.least_busy(operational=True, simulator=False, min_num_qubits=127)
+backend = service.least_busy(operational=True,
+ simulator=False, min_num_qubits=127)
n_qubits = 127
@@ -1046,7 +1062,8 @@ parameter_values = [
# Step 2: Optimize problem for quantum execution.
service = QiskitRuntimeService()
-backend = service.least_busy(operational=True, simulator=False, min_num_qubits=num_qubits)
+backend = service.least_busy(operational=True, simulator=False,
+ min_num_qubits=num_qubits)
pm = generate_preset_pass_manager(backend=backend, optimization_level=1)
isa_circuit = pm.run(circuit)
@@ -1086,7 +1103,8 @@ parameter_values = [
# Step 2: Optimize problem for quantum execution.
service = QiskitRuntimeService()
-backend = service.least_busy(operational=True, simulator=False, min_num_qubits=num_qubits)
+backend = service.least_busy(operational=True, simulator=False,
+ min_num_qubits=num_qubits)
pm = generate_preset_pass_manager(backend=backend, optimization_level=1)
isa_circuit = pm.run(circuit)
@@ -1145,7 +1163,8 @@ service = QiskitRuntimeService()
sampler.options.dynamical_decoupling.enable = True
sampler.options.dynamical_decoupling.sequence_type = "XpXm"
-backend = service.least_busy(operational=True, simulator=False, min_num_qubits=127)
+backend = service.least_busy(operational=True,
+ simulator=False, min_num_qubits=127)
with Session(backend=backend) as session:
sampler = Sampler()
@@ -1185,7 +1204,8 @@ options.resilience_level = 0
service = QiskitRuntimeService()
-backend = service.least_busy(operational=True, simulator=False, min_num_qubits=127)
+backend = service.least_busy(operational=True,
+ simulator=False, min_num_qubits=127)
with Session(backend=backend) as session:
sampler = Sampler(options=options)