Qiskit Development
Overview
Qiskit is the world's most popular open-source quantum computing framework (13M+ downloads). Build quantum circuits, optimize for hardware, execute on simulators or real quantum computers, and analyze results with QWARD metrics.
Key capabilities:
- Backend-agnostic execution (local simulators, IBM Quantum cloud, or Rigetti via qBraid)
- V2 primitives: StatevectorSampler, StatevectorEstimator
- 83x faster transpilation, 29% fewer two-qubit gates
- Algorithm libraries for optimization, chemistry, and ML
- QWARD's QuantumCircuitExecutor: unified
simulate(), run_ibm(), run_qbraid() interface
- Research-justified noise presets: IBM Heron R1/R2/R3, Rigetti Ankaa-3
Quick Start
from qiskit import QuantumCircuit
from qiskit.primitives import StatevectorSampler
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()
sampler = StatevectorSampler()
result = sampler.run([qc], shots=1024).result()
counts = result[0].data.meas.get_counts()
print(counts) # {'00': ~512, '11': ~512}
Integration with QWARD
from qiskit import QuantumCircuit
from qward import Scanner
from qward.metrics import QiskitMetrics, ComplexityMetrics
circuit = QuantumCircuit(2)
circuit.h(0)
circuit.cx(0, 1)
scanner = Scanner(circuit=circuit)
scanner.add_strategy(QiskitMetrics(circuit))
scanner.add_strategy(ComplexityMetrics(circuit))
results = scanner.calculate_metrics()
Reference Documentation
Load these as needed based on your task:
references/setup.md - Installation, IBM Quantum account, authentication
references/circuits.md - QuantumCircuit building, gates, measurements, composition
references/primitives.md - Sampler and Estimator (V2), parameter binding, sessions
references/transpilation.md - Optimization levels 0-3, layout, routing, basis gates
references/visualization.md - Circuit drawings, histograms, Bloch spheres, state plots
references/backends.md - IBM Quantum, IonQ, Aer, Rigetti via qBraid, Rigetti via AWS Braket direct, error mitigation
references/patterns.md - Map/Optimize/Execute/Post-process workflow
references/algorithms.md - VQE, QAOA, Grover, quantum chemistry, ML, optimization
references/qward-executor.md - QWARD's QuantumCircuitExecutor: simulate, run_ibm, run_qbraid, direct AWS Braket, async job retrieval, noise presets, experiment framework
Workflow Decision Guide
- Install Qiskit or set up IBM Quantum account ->
references/setup.md
- Build a new quantum circuit ->
references/circuits.md
- Run circuits and get measurements ->
references/primitives.md
- Optimize circuits for hardware ->
references/transpilation.md
- Visualize circuits or results ->
references/visualization.md
- Execute on IBM Quantum hardware ->
references/backends.md
- Execute on Rigetti via qBraid ->
references/qward-executor.md (Pattern 3)
- Execute on Rigetti via AWS Braket direct ->
references/qward-executor.md (Pattern 4)
- Run experiments with QWARD executor (simulate, IBM, Rigetti) ->
references/qward-executor.md
- Retrieve async AWS Braket jobs, CSV batch workflows ->
references/qward-executor.md
- Configure noise models (IBM Heron, Rigetti Ankaa) ->
references/qward-executor.md
- Implement end-to-end quantum workflow ->
references/patterns.md
- Build specific algorithm (VQE, QAOA, etc.) ->
references/algorithms.md
Common Patterns
Pattern 1: QWARD Executor - Local Simulation
from qiskit import QuantumCircuit
from qward.algorithms import QuantumCircuitExecutor
executor = QuantumCircuitExecutor(shots=1024)
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()
# Ideal simulation with automatic QWARD metrics
result = executor.simulate(qc, show_results=True)
print(result["counts"])
print(result["qward_metrics"])
# With noise model
result = executor.simulate(qc, noise_model="depolarizing", noise_level=0.05)
Pattern 2: QWARD Executor - IBM Quantum Hardware (Batch Mode)
from qward.algorithms import QuantumCircuitExecutor
executor = QuantumCircuitExecutor(shots=1024)
# One-time setup:
# QuantumCircuitExecutor.configure_ibm_account(token="YOUR_TOKEN")
result = executor.run_ibm(
qc,
optimization_levels=[0, 2, 3],
success_criteria=lambda bs: bs.replace(" ", "") in ["00", "11"],
)
for job in result.jobs:
print(f"Opt {job.optimization_level}: depth={job.circuit_depth}, success={job.success_rate:.2%}")
Pattern 3: QWARD Executor - Rigetti via qBraid
from qward.algorithms import QuantumCircuitExecutor
executor = QuantumCircuitExecutor(shots=1024, timeout=300)
# Run on Rigetti Aspen-M3 through qBraid
result = executor.run_qbraid(
qc,
device_id="rigetti_aspen_m_3",
success_criteria=lambda bs: bs.replace(" ", "") in ["00", "11"],
)
print(f"Status: {result['status']}")
print(f"QWARD metrics: {result['qward_metrics']}")
Pattern 4: Rigetti via AWS Braket Direct (qiskit-braket-provider)
import os
from qiskit_braket_provider import BraketProvider
os.environ['AWS_DEFAULT_REGION'] = 'us-west-1'
provider = BraketProvider()
backend = provider.get_backend("Ankaa-3")
# Remove barriers (AWS incompatible) and submit
from qiskit.circuit.library import Barrier
circuit_clean = qc.copy()
circuit_clean.data = [
(g, q, c) for g, q, c in qc.data if not isinstance(g, Barrier)
]
job = backend.run(circuit_clean, shots=10)
print(f"Job ARN: {job.job_id()}")
# Later: retrieve results (big-endian -> little-endian conversion)
job = backend.retrieve_job(job.job_id())
raw_counts = dict(job._tasks[0].result().entries[0].entries[0].counts)
counts = {k[::-1]: v for k, v in raw_counts.items()}
Pattern 5: Research-Justified Noise Models
from qward.algorithms import NoiseModelGenerator, get_preset_noise_config
# Use hardware-calibrated presets (IBM Heron R1-R3, Rigetti Ankaa-3)
noise = NoiseModelGenerator.create_from_config(get_preset_noise_config("IBM-HERON-R2"))
result = executor.simulate(qc, noise_model=noise)
noise_rigetti = NoiseModelGenerator.create_from_config(get_preset_noise_config("RIGETTI-ANKAA3"))
result = executor.simulate(qc, noise_model=noise_rigetti)
Pattern 6: Variational Algorithm (VQE)
from qiskit_ibm_runtime import Session, EstimatorV2 as Estimator
from scipy.optimize import minimize
with Session(backend=backend) as session:
estimator = Estimator(session=session)
def cost_function(params):
bound_qc = ansatz.assign_parameters(params)
qc_isa = transpile(bound_qc, backend=backend)
result = estimator.run([(qc_isa, hamiltonian)]).result()
return result[0].data.evs
result = minimize(cost_function, initial_params, method='COBYLA')
Pattern 7: Experiment Campaign (Systematic Multi-Config)
from qward.algorithms import BaseExperimentRunner
# Subclass for your algorithm, then run campaign across
# multiple circuit configs and noise models:
runner = MyAlgorithmRunner()
results = runner.run_campaign(
config_ids=["S2-1", "S3-1", "S4-1"],
noise_ids=["IDEAL", "IBM-HERON-R2", "RIGETTI-ANKAA3"],
num_runs=10,
)
Best Practices
- Start with simulators: Use
executor.simulate() before hardware
- Always transpile: Use
optimization_level=3 for production
- Use QWARD executor: Unified interface for simulate, IBM QPU, Rigetti
- Use appropriate primitives: Sampler for bitstrings, Estimator for expectation values
- Choose execution mode: Session for iterative (VQE/QAOA), Batch for parallel, qBraid for Rigetti
- Use hardware-calibrated noise: Preset noise models for IBM Heron and Rigetti Ankaa
- Minimize two-qubit gates: Major error source on hardware
- Save job IDs: For later retrieval of hardware results
- Apply error mitigation: Use
resilience_level in runtime options
- Run experiment campaigns: Systematic comparison across configs and noise models
Converted and distributed by TomeVault — claim your Tome and manage your conversions.
1---2name: qiskit-development3description: IBM Qiskit quantum computing framework for circuit design, transpilation, execution, and analysis. Use when building quantum circuits, running on IBM Quantum hardware or simulators, running on Rigetti hardware via qBraid or AWS Braket directly, working with Qiskit Runtime primitives (Sampler/Estimator), optimizing transpilation, implementing quantum algorithms (VQE, QAOA, Grover), using QWARD's QuantumCircuitExecutor for simulate/run_ibm/run_qbraid workflows, direct AWS Braket submission with qiskit-braket-provider, noise model generation (IBM Heron R1-R3, Rigetti Ankaa-3), experiment campaigns with async job retrieval, or integrating with the QWARD metrics library. Covers Qiskit v2 primitives, session/batch execution modes, error mitigation, qBraid transpilation, AWS Braket integration, and visualization. Use when this capability is needed.4---56# Qiskit Development78## Overview910Qiskit is the world's most popular open-source quantum computing framework (13M+ downloads). Build quantum circuits, optimize for hardware, execute on simulators or real quantum computers, and analyze results with QWARD metrics.1112**Key capabilities:**13- Backend-agnostic execution (local simulators, IBM Quantum cloud, or Rigetti via qBraid)14- V2 primitives: StatevectorSampler, StatevectorEstimator15- 83x faster transpilation, 29% fewer two-qubit gates16- Algorithm libraries for optimization, chemistry, and ML17- QWARD's QuantumCircuitExecutor: unified `simulate()`, `run_ibm()`, `run_qbraid()` interface18- Research-justified noise presets: IBM Heron R1/R2/R3, Rigetti Ankaa-31920## Quick Start2122```python23from qiskit import QuantumCircuit24from qiskit.primitives import StatevectorSampler2526qc = QuantumCircuit(2)27qc.h(0)28qc.cx(0, 1)29qc.measure_all()3031sampler = StatevectorSampler()32result = sampler.run([qc], shots=1024).result()33counts = result[0].data.meas.get_counts()34print(counts) # {'00': ~512, '11': ~512}35```3637## Integration with QWARD3839```python40from qiskit import QuantumCircuit41from qward import Scanner42from qward.metrics import QiskitMetrics, ComplexityMetrics4344circuit = QuantumCircuit(2)45circuit.h(0)46circuit.cx(0, 1)4748scanner = Scanner(circuit=circuit)49scanner.add_strategy(QiskitMetrics(circuit))50scanner.add_strategy(ComplexityMetrics(circuit))51results = scanner.calculate_metrics()52```5354## Reference Documentation5556Load these as needed based on your task:5758- **`references/setup.md`** - Installation, IBM Quantum account, authentication59- **`references/circuits.md`** - QuantumCircuit building, gates, measurements, composition60- **`references/primitives.md`** - Sampler and Estimator (V2), parameter binding, sessions61- **`references/transpilation.md`** - Optimization levels 0-3, layout, routing, basis gates62- **`references/visualization.md`** - Circuit drawings, histograms, Bloch spheres, state plots63- **`references/backends.md`** - IBM Quantum, IonQ, Aer, Rigetti via qBraid, Rigetti via AWS Braket direct, error mitigation64- **`references/patterns.md`** - Map/Optimize/Execute/Post-process workflow65- **`references/algorithms.md`** - VQE, QAOA, Grover, quantum chemistry, ML, optimization66- **`references/qward-executor.md`** - QWARD's QuantumCircuitExecutor: simulate, run_ibm, run_qbraid, direct AWS Braket, async job retrieval, noise presets, experiment framework6768## Workflow Decision Guide6970- Install Qiskit or set up IBM Quantum account -> `references/setup.md`71- Build a new quantum circuit -> `references/circuits.md`72- Run circuits and get measurements -> `references/primitives.md`73- Optimize circuits for hardware -> `references/transpilation.md`74- Visualize circuits or results -> `references/visualization.md`75- Execute on IBM Quantum hardware -> `references/backends.md`76- Execute on Rigetti via qBraid -> `references/qward-executor.md` (Pattern 3)77- Execute on Rigetti via AWS Braket direct -> `references/qward-executor.md` (Pattern 4)78- Run experiments with QWARD executor (simulate, IBM, Rigetti) -> `references/qward-executor.md`79- Retrieve async AWS Braket jobs, CSV batch workflows -> `references/qward-executor.md`80- Configure noise models (IBM Heron, Rigetti Ankaa) -> `references/qward-executor.md`81- Implement end-to-end quantum workflow -> `references/patterns.md`82- Build specific algorithm (VQE, QAOA, etc.) -> `references/algorithms.md`8384## Common Patterns8586### Pattern 1: QWARD Executor - Local Simulation8788```python89from qiskit import QuantumCircuit90from qward.algorithms import QuantumCircuitExecutor9192executor = QuantumCircuitExecutor(shots=1024)93qc = QuantumCircuit(2)94qc.h(0)95qc.cx(0, 1)96qc.measure_all()9798# Ideal simulation with automatic QWARD metrics99result = executor.simulate(qc, show_results=True)100print(result["counts"])101print(result["qward_metrics"])102103# With noise model104result = executor.simulate(qc, noise_model="depolarizing", noise_level=0.05)105```106107### Pattern 2: QWARD Executor - IBM Quantum Hardware (Batch Mode)108109```python110from qward.algorithms import QuantumCircuitExecutor111112executor = QuantumCircuitExecutor(shots=1024)113114# One-time setup:115# QuantumCircuitExecutor.configure_ibm_account(token="YOUR_TOKEN")116117result = executor.run_ibm(118 qc,119 optimization_levels=[0, 2, 3],120 success_criteria=lambda bs: bs.replace(" ", "") in ["00", "11"],121)122123for job in result.jobs:124 print(f"Opt {job.optimization_level}: depth={job.circuit_depth}, success={job.success_rate:.2%}")125```126127### Pattern 3: QWARD Executor - Rigetti via qBraid128129```python130from qward.algorithms import QuantumCircuitExecutor131132executor = QuantumCircuitExecutor(shots=1024, timeout=300)133134# Run on Rigetti Aspen-M3 through qBraid135result = executor.run_qbraid(136 qc,137 device_id="rigetti_aspen_m_3",138 success_criteria=lambda bs: bs.replace(" ", "") in ["00", "11"],139)140print(f"Status: {result['status']}")141print(f"QWARD metrics: {result['qward_metrics']}")142```143144### Pattern 4: Rigetti via AWS Braket Direct (qiskit-braket-provider)145146```python147import os148from qiskit_braket_provider import BraketProvider149150os.environ['AWS_DEFAULT_REGION'] = 'us-west-1'151provider = BraketProvider()152backend = provider.get_backend("Ankaa-3")153154# Remove barriers (AWS incompatible) and submit155from qiskit.circuit.library import Barrier156circuit_clean = qc.copy()157circuit_clean.data = [158 (g, q, c) for g, q, c in qc.data if not isinstance(g, Barrier)159]160job = backend.run(circuit_clean, shots=10)161print(f"Job ARN: {job.job_id()}")162163# Later: retrieve results (big-endian -> little-endian conversion)164job = backend.retrieve_job(job.job_id())165raw_counts = dict(job._tasks[0].result().entries[0].entries[0].counts)166counts = {k[::-1]: v for k, v in raw_counts.items()}167```168169### Pattern 5: Research-Justified Noise Models170171```python172from qward.algorithms import NoiseModelGenerator, get_preset_noise_config173174# Use hardware-calibrated presets (IBM Heron R1-R3, Rigetti Ankaa-3)175noise = NoiseModelGenerator.create_from_config(get_preset_noise_config("IBM-HERON-R2"))176result = executor.simulate(qc, noise_model=noise)177178noise_rigetti = NoiseModelGenerator.create_from_config(get_preset_noise_config("RIGETTI-ANKAA3"))179result = executor.simulate(qc, noise_model=noise_rigetti)180```181182### Pattern 6: Variational Algorithm (VQE)183184```python185from qiskit_ibm_runtime import Session, EstimatorV2 as Estimator186from scipy.optimize import minimize187188with Session(backend=backend) as session:189 estimator = Estimator(session=session)190191 def cost_function(params):192 bound_qc = ansatz.assign_parameters(params)193 qc_isa = transpile(bound_qc, backend=backend)194 result = estimator.run([(qc_isa, hamiltonian)]).result()195 return result[0].data.evs196197 result = minimize(cost_function, initial_params, method='COBYLA')198```199200### Pattern 7: Experiment Campaign (Systematic Multi-Config)201202```python203from qward.algorithms import BaseExperimentRunner204205# Subclass for your algorithm, then run campaign across206# multiple circuit configs and noise models:207runner = MyAlgorithmRunner()208results = runner.run_campaign(209 config_ids=["S2-1", "S3-1", "S4-1"],210 noise_ids=["IDEAL", "IBM-HERON-R2", "RIGETTI-ANKAA3"],211 num_runs=10,212)213```214215## Best Practices2162171. **Start with simulators**: Use `executor.simulate()` before hardware2182. **Always transpile**: Use `optimization_level=3` for production2193. **Use QWARD executor**: Unified interface for simulate, IBM QPU, Rigetti2204. **Use appropriate primitives**: Sampler for bitstrings, Estimator for expectation values2215. **Choose execution mode**: Session for iterative (VQE/QAOA), Batch for parallel, qBraid for Rigetti2226. **Use hardware-calibrated noise**: Preset noise models for IBM Heron and Rigetti Ankaa2237. **Minimize two-qubit gates**: Major error source on hardware2248. **Save job IDs**: For later retrieval of hardware results2259. **Apply error mitigation**: Use `resilience_level` in runtime options22610. **Run experiment campaigns**: Systematic comparison across configs and noise models227228---229> Converted and distributed by [TomeVault](https://tomevault.io/claim/xthecapx) — claim your Tome and manage your conversions.230<!-- tomevault:4.0:skill_md:2026-04-13 -->