Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Welcome to Qamomile Documentation

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

  1. Your First Quantum Kernel — Define, visualize, and execute a kernel; the affine rule

  2. Parameterized Kernels — Structure vs runtime parameters, bind/sweep pattern

  3. Resource Estimation — Symbolic cost analysis, gate breakdown, scaling

  4. Execution Modelssample() vs run(), observables, bit ordering

  5. Classical Flow Patterns — Loops, sparse data, conditional branching

  6. Reuse Patterns — Helper kernels, composite gates, stubs

VQA

Optimization

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, QiskitExecutor

CUDA-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 ARM64
from qamomile.cudaq import CudaqTranspiler, CudaqExecutor

QURI Parts (optional)

pip install "qamomile[quri_parts]"
from qamomile.quri_parts import QuriPartsTranspiler, QuriPartsExecutor

qBraid (optional)

Runs Qiskit circuits on qBraid-supported devices and simulators.

pip install "qamomile[qbraid]"
from qamomile.qbraid import QBraidExecutor

Installation

pip install qamomile

Quick 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}")