Back to Claude Scientific Skills

Algorithms, Addons, and Application Packages

skills/qiskit/references/algorithms.md

2.55.09.7 KB
Original Source

Algorithms, Addons, and Application Packages

The core qiskit distribution provides circuits, operators, primitives, synthesis, transpilation, and quantum-information tools. High-level algorithms and domain applications live in separate packages.

Verified Package Matrix

Checked on 2026-07-23:

PackageVersionPrimary role
qiskit-algorithms0.4.0VQE, QAOA, Grover, phase estimation, eigensolvers, optimizers
qiskit-nature0.8.0Electronic structure, second quantization, mappers
qiskit-nature-pyscf0.4.0PySCF electronic-structure driver integration
qiskit-machine-learning0.9.0Kernels, QNNs, classifiers/regressors, Torch connector
qiskit-optimization0.7.0Quadratic programs, converters, quantum optimization wrappers
qiskit-addon-cutting0.10.0Circuit and operator cutting
qiskit-addon-sqd0.12.1Sample-based quantum diagonalization
qiskit-addon-obp0.3.0Operator backpropagation
qiskit-addon-mpf0.3.0Multi-product formulas
qiskit-addon-aqc-tensor0.3.1Approximate quantum compilation with tensor networks

Install exact pins together in a fresh environment:

bash
uv pip install \
  "qiskit==2.5.0" \
  "qiskit-algorithms==0.4.0" \
  "qiskit-optimization==0.7.0"

For chemistry:

bash
uv pip install \
  "qiskit==2.5.0" \
  "qiskit-algorithms==0.4.0" \
  "qiskit-nature==0.8.0" \
  "qiskit-nature-pyscf==0.4.0"

Resolve application packages together; their Qiskit compatibility windows can differ.

Decide Between Manual and Library Implementations

Use a manual circuit when:

  • teaching or inspecting a small algorithm,
  • testing a new circuit construction,
  • controlling every primitive PUB and compilation step,
  • avoiding an application package dependency.

Use an application package when:

  • it provides tested problem transformations,
  • the result object and domain post-processing are valuable,
  • the implementation accepts current V2 primitives,
  • its release supports the installed Qiskit version.

Do not copy a pre-1.0 algorithm tutorial without checking constructors and primitive requirements.

VQE with Qiskit Algorithms 0.4

This verified local example uses the V2 StatevectorEstimator:

python
from qiskit.circuit.library import efficient_su2
from qiskit.primitives import StatevectorEstimator
from qiskit.quantum_info import SparsePauliOp
from qiskit_algorithms import VQE
from qiskit_algorithms.optimizers import SLSQP

hamiltonian = SparsePauliOp.from_list(
    [
        ("ZI", 1.0),
        ("IZ", 1.0),
        ("XX", 0.2),
    ]
)
ansatz = efficient_su2(
    num_qubits=2,
    reps=1,
    entanglement="linear",
)

vqe = VQE(
    estimator=StatevectorEstimator(),
    ansatz=ansatz,
    optimizer=SLSQP(maxiter=100),
    initial_point=[0.0] * ansatz.num_parameters,
)
result = vqe.compute_minimum_eigenvalue(hamiltonian)
print(float(result.eigenvalue.real))

For hardware:

  1. Use a Runtime EstimatorV2.
  2. Provide a transpiler adapter or manage the parameterized ISA circuit explicitly.
  3. Bound optimizer iterations and requested precision.
  4. Store each job ID and convergence record.

Do not transpile a newly bound circuit from scratch in every cost-function call.

QAOA and Qiskit Optimization

Model a binary problem with QuadraticProgram:

python
from qiskit.primitives import StatevectorSampler
from qiskit_algorithms import QAOA
from qiskit_algorithms.optimizers import COBYLA
from qiskit_optimization import QuadraticProgram
from qiskit_optimization.algorithms import MinimumEigenOptimizer

problem = QuadraticProgram("binary_demo")
problem.binary_var("x")
problem.binary_var("y")
problem.maximize(
    linear={"x": 1, "y": 1},
    quadratic={("x", "y"): -2},
)

qaoa = QAOA(
    sampler=StatevectorSampler(seed=5),
    optimizer=COBYLA(maxiter=100),
    reps=1,
)
solver = MinimumEigenOptimizer(qaoa)
result = solver.solve(problem)

print(result.x, result.fval, result.status)

Use optimizer objects such as COBYLA(...), not old string-valued optimizer arguments.

Before claiming a quantum result:

  • compare with a classical solver for small instances,
  • verify variable-to-bitstring ordering,
  • report feasibility and objective value,
  • separate optimizer stochasticity from quantum sampling,
  • quantify total circuit evaluations and shot cost.

Grover and Phase Estimation

Qiskit Algorithms 0.4 constructors accept V2 Sampler implementations:

python
from qiskit.primitives import StatevectorSampler
from qiskit_algorithms import Grover, PhaseEstimation

sampler = StatevectorSampler(seed=5)
grover = Grover(sampler=sampler)
phase_estimation = PhaseEstimation(
    num_evaluation_qubits=4,
    sampler=sampler,
)

The old quantum_instance= argument is not current.

Use QFTGate in custom phase-estimation circuits:

python
from qiskit import QuantumCircuit
from qiskit.circuit.library import QFTGate

inverse_qft = QFTGate(4).inverse()
circuit = QuantumCircuit(4)
circuit.append(inverse_qft, range(4))

The QFT blueprint class is deprecated and scheduled for removal in Qiskit 3.0.

Qiskit Nature

Qiskit Nature converts domain problems into second-quantized operators and qubit operators.

python
from qiskit_nature.second_q.drivers import PySCFDriver
from qiskit_nature.second_q.mappers import JordanWignerMapper

driver = PySCFDriver(
    atom="H 0 0 0; H 0 0 0.735",
    basis="sto3g",
    charge=0,
    spin=0,
)
problem = driver.run()

fermionic_hamiltonian = problem.hamiltonian.second_q_op()
mapper = JordanWignerMapper()
qubit_hamiltonian = mapper.map(fermionic_hamiltonian)

print(problem.num_spatial_orbitals)
print(problem.num_particles)
print(qubit_hamiltonian.num_qubits)

The PySCF calculation is classical preprocessing. Record:

  • geometry and units,
  • basis set,
  • charge and spin,
  • active-space or freeze-core choices,
  • mapper and symmetry reductions,
  • nuclear repulsion energy,
  • package versions.

Do not add the nuclear repulsion term twice. Prefer Qiskit Nature's result interpreters for complete energy reporting.

QubitConverter is obsolete; use mapper classes directly.

Qiskit Machine Learning 0.9

Qiskit Machine Learning includes quantum kernels, quantum neural networks, trainable models, and PyTorch integration.

This verified kernel example uses APIs moved into the Machine Learning package:

python
import numpy as np
from qiskit.circuit.library import zz_feature_map
from qiskit.primitives import StatevectorSampler
from qiskit_machine_learning.kernels import FidelityQuantumKernel
from qiskit_machine_learning.state_fidelities import ComputeUncompute

feature_map = zz_feature_map(
    feature_dimension=2,
    reps=1,
    entanglement="full",
)
sampler = StatevectorSampler(seed=5)
fidelity = ComputeUncompute(sampler=sampler)
kernel = FidelityQuantumKernel(
    fidelity=fidelity,
    feature_map=feature_map,
)

x = np.array([[0.1, 0.2], [0.3, 0.4]])
kernel_matrix = kernel.evaluate(x)

Since Qiskit Machine Learning 0.8, relevant gradients, optimizers, state fidelities, and utilities moved from qiskit_algorithms into qiskit_machine_learning. Check its migration guide before adapting old imports.

For evaluation:

  • use a held-out test set,
  • compare against matched classical kernels/models,
  • avoid generating labels randomly in demonstration code presented as evidence,
  • account for kernel-matrix (O(n^2)) evaluations,
  • separate simulation results from hardware results.

Qiskit Addons

Addons are modular algorithm-building components aligned with stages of the Qiskit workflow.

AddonTypical stageUse
Circuit cuttingOptimize / execute / reconstructSplit large circuits or observables and reconstruct estimates
Operator backpropagation (OBP)OptimizeMove selected circuit operations into observables
Multi-product formulas (MPF)Map / optimizeApproximate time evolution using formula combinations
AQC-TensorMap / optimizeApproximate target circuits with tensor-network-assisted compilation
Sample-based quantum diagonalization (SQD)AnalyzeCombine QPU samples with classical subspace diagonalization

Example installation:

bash
uv pip install "qiskit-addon-cutting==0.10.0"
uv pip install "qiskit-addon-sqd==0.12.1"
uv pip install "qiskit-addon-obp==0.3.0"
uv pip install "qiskit-addon-mpf==0.3.0"
uv pip install "qiskit-addon-aqc-tensor==0.3.1"

Each addon has independent release notes and assumptions. Read its tutorial and validate against a classically tractable instance.

Direct Quantum-Information Tools

Many tasks do not need a high-level algorithm package:

python
from qiskit.quantum_info import DensityMatrix, Operator, Statevector

state = Statevector.from_instruction(circuit)
operator = Operator(circuit)
density_matrix = DensityMatrix(state)

Use qiskit.quantum_info for:

  • ideal state/operator analysis,
  • fidelity and distance metrics,
  • partial traces and entropies,
  • Pauli and Clifford algebra,
  • channel representations,
  • small-system validation.

Dense state and operator memory grows exponentially; check dimensions before constructing them.

Algorithm Review Checklist

  1. Is the cited speedup asymptotic, heuristic, or empirically demonstrated?
  2. Does state preparation or readout dominate the claimed advantage?
  3. Is the instance classically verifiable at the tested size?
  4. Are package and primitive versions compatible?
  5. Does the implementation use V2 primitives?
  6. Is the parameterized circuit compiled once for the selected target?
  7. Are observable layouts and bit order handled correctly?
  8. Are optimizer evaluations, precision, shots, mitigation, and total QPU usage reported?
  9. Is every result labeled as ideal simulation, noisy simulation, or hardware?
  10. Are classical baselines and uncertainty included?