skills/qiskit/references/algorithms.md
The core qiskit distribution provides circuits, operators, primitives, synthesis, transpilation, and quantum-information tools. High-level algorithms and domain applications live in separate packages.
Checked on 2026-07-23:
| Package | Version | Primary role |
|---|---|---|
qiskit-algorithms | 0.4.0 | VQE, QAOA, Grover, phase estimation, eigensolvers, optimizers |
qiskit-nature | 0.8.0 | Electronic structure, second quantization, mappers |
qiskit-nature-pyscf | 0.4.0 | PySCF electronic-structure driver integration |
qiskit-machine-learning | 0.9.0 | Kernels, QNNs, classifiers/regressors, Torch connector |
qiskit-optimization | 0.7.0 | Quadratic programs, converters, quantum optimization wrappers |
qiskit-addon-cutting | 0.10.0 | Circuit and operator cutting |
qiskit-addon-sqd | 0.12.1 | Sample-based quantum diagonalization |
qiskit-addon-obp | 0.3.0 | Operator backpropagation |
qiskit-addon-mpf | 0.3.0 | Multi-product formulas |
qiskit-addon-aqc-tensor | 0.3.1 | Approximate quantum compilation with tensor networks |
Install exact pins together in a fresh environment:
uv pip install \
"qiskit==2.5.0" \
"qiskit-algorithms==0.4.0" \
"qiskit-optimization==0.7.0"
For chemistry:
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.
Use a manual circuit when:
Use an application package when:
Do not copy a pre-1.0 algorithm tutorial without checking constructors and primitive requirements.
This verified local example uses the V2 StatevectorEstimator:
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:
EstimatorV2.Do not transpile a newly bound circuit from scratch in every cost-function call.
Model a binary problem with QuadraticProgram:
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:
Qiskit Algorithms 0.4 constructors accept V2 Sampler implementations:
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:
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 converts domain problems into second-quantized operators and qubit operators.
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:
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 includes quantum kernels, quantum neural networks, trainable models, and PyTorch integration.
This verified kernel example uses APIs moved into the Machine Learning package:
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:
Addons are modular algorithm-building components aligned with stages of the Qiskit workflow.
| Addon | Typical stage | Use |
|---|---|---|
| Circuit cutting | Optimize / execute / reconstruct | Split large circuits or observables and reconstruct estimates |
| Operator backpropagation (OBP) | Optimize | Move selected circuit operations into observables |
| Multi-product formulas (MPF) | Map / optimize | Approximate time evolution using formula combinations |
| AQC-Tensor | Map / optimize | Approximate target circuits with tensor-network-assisted compilation |
| Sample-based quantum diagonalization (SQD) | Analyze | Combine QPU samples with classical subspace diagonalization |
Example installation:
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.
Many tasks do not need a high-level algorithm package:
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:
Dense state and operator memory grows exponentially; check dimensions before constructing them.