Qamomile is a quantum programming SDK. Write quantum circuits as typed Python functions and run them on quantum SDKs like Qiskit, CUDA-Q, QURI Parts, and qBraid. Furthermore, Qamomile supports symbolic algebraic resource estimation and can estimate resources for circuits containing black-box oracles — even when the circuit itself cannot be executed.
Tutorials¶
Your First Quantum Kernel — Define, visualize, and execute a kernel; the affine rule
Parameterized Kernels — Structure vs runtime parameters, bind/sweep pattern
Resource Estimation — Symbolic cost analysis, gate breakdown, scaling
Execution Models —
sample()vsrun(), observables, bit orderingClassical Flow Patterns — Loops, sparse data, conditional branching
Reuse Patterns — Helper kernels, composite gates, stubs
VQA¶
QAOA for MaxCut — Build a QAOA circuit from scratch to solve MaxCut, then compare with the built-in
qaoa_state
Optimization¶
QAOA for Graph Partitioning — Solve graph partitioning with QAOA end-to-end
Supported Quantum SDKs¶
Qamomile supports multiple quantum SDKs as execution backends. Qiskit is included by default; the others are optional extras.
Qiskit (default)¶
Included with pip install qamomile. No extra flags needed.
from qamomile.qiskit import QiskitTranspiler, QiskitExecutorCUDA-Q (optional)¶
CUDA-Q supports Linux and macOS ARM64 (Apple Silicon). Choose the extra that matches your CUDA version:
pip install "qamomile[cudaq-cu12]" # CUDA 12.x, Linux
pip install "qamomile[cudaq-cu13]" # CUDA 13.x, Linux or macOS ARM64from qamomile.cudaq import CudaqTranspiler, CudaqExecutorQURI Parts (optional)¶
pip install "qamomile[quri_parts]"from qamomile.quri_parts import QuriPartsTranspiler, QuriPartsExecutorqBraid (optional)¶
Runs Qiskit circuits on qBraid-supported devices and simulators.
pip install "qamomile[qbraid]"from qamomile.qbraid import QBraidExecutorInstallation¶
pip install qamomileQuick Example¶
import qamomile.circuit as qmc
from qamomile.qiskit import QiskitTranspiler
@qmc.qkernel
def bell_state() -> tuple[qmc.Bit, qmc.Bit]:
q0 = qmc.qubit(name="q0")
q1 = qmc.qubit(name="q1")
q0 = qmc.h(q0)
q0, q1 = qmc.cx(q0, q1)
return qmc.measure(q0), qmc.measure(q1)
transpiler = QiskitTranspiler()
exe = transpiler.transpile(bell_state)
result = exe.sample(transpiler.executor(), shots=1000).result()
for outcome, count in result.results:
print(f" {outcome}: {count}")