Transpile and execute Qamomile programs with Amazon Braket.
Overview¶
| Class | Description |
|---|---|
BraketExecutionHandle | Wrap one Braket task or a task batch without blocking submission. |
BraketExecutionOptions | Configure Braket task and batch submission without flat kwargs. |
BraketExecutor | Submit Braket circuits to a local simulator or injected AWS device. |
BraketMaterializer | Convert verified circuit IR to an Amazon Braket circuit. |
BraketTranspiler | Transpile Qamomile quantum kernels to Amazon Braket circuits. |
CircuitInvocation | Keep an emitted circuit and runtime parameter values together. |
CompletedExecutionHandle | Wrap an already available result for synchronous executors. |
EmitPass | Base class for engine-specific emission passes. |
EstimateRequest | Describe one Hamiltonian expectation execution. |
Exact | Request an analytic expectation value without shot noise. |
ExecutionCapabilities | Declare the execution features implemented by one executor. |
ExecutionHandle | Expose an engine execution without forcing immediate result retrieval. |
ExecutionReference | Store secret-free identifiers needed to restore remote execution. |
SampleRequest | Describe one sampling execution. |
SegmentationPass | Segment a block into a strategy-specific executable program plan. |
ShotBased | Request a shot-based expectation value. |
TargetPrecision | Request an expectation value at a provider target precision. |
Transpiler | Base class for engine-specific transpilers. |
Classes¶
BraketExecutionHandle [source]¶
class BraketExecutionHandle(ExecutionHandle[ResultT], Generic[ResultT])Wrap one Braket task or a task batch without blocking submission.
Parameters:
| Name | Type | Description |
|---|---|---|
tasks | Sequence[Any] | Provider quantum tasks when individually addressable. |
result_loader | Callable[[], Sequence[Any]] | Blocking raw-result loader that does not perform implicit retries unless configured. |
decoder | Callable[[Sequence[Any]], ResultT] | Engine result decoder. |
reference | ExecutionReference | None | Serializable AWS reference. |
reference_factory | Callable[[], ExecutionReference | None] | None | Dynamic reference builder for batches that explicitly resubmit failed tasks. Defaults to none. |
native | object | Native Braket task or batch object. |
poll_interval_seconds | float | Local status polling interval. |
default_timeout_seconds | float | None | Default local result timeout. Defaults to no timeout. |
allow_unsuccessful_loader | bool | Whether the result loader owns explicit recovery from failed child tasks. Defaults to false. |
Constructor¶
def __init__(
self,
*,
tasks: Sequence[Any],
result_loader: Callable[[], Sequence[Any]],
decoder: Callable[[Sequence[Any]], ResultT],
reference: ExecutionReference | None,
reference_factory: Callable[[], ExecutionReference | None] | None = None,
native: object,
poll_interval_seconds: float = 1.0,
default_timeout_seconds: float | None = None,
allow_unsuccessful_loader: bool = False,
) -> NoneInitialize a Braket-backed execution handle.
Parameters:
| Name | Type | Description |
|---|---|---|
tasks | Sequence[Any] | Individually addressable Braket tasks. |
result_loader | Callable[[], Sequence[Any]] | Blocking loader. |
decoder | Callable[[Sequence[Any]], ResultT] | Result decoder. |
reference | ExecutionReference | None | Serializable AWS reference. |
reference_factory | Callable[[], ExecutionReference | None] | None | Dynamic reference builder. Defaults to none. |
native | object | Native task or batch. |
poll_interval_seconds | float | Positive local polling interval. |
default_timeout_seconds | float | None | Positive default local result timeout. Defaults to no timeout. |
allow_unsuccessful_loader | bool | Whether failed children may be handled by the explicit result loader. Defaults to false. |
Raises:
ValueError— If the polling interval or default timeout is invalid.
Attributes¶
native: object | None Return the native Braket task or batch.
Methods¶
cancel¶
def cancel(self) -> NoneRequest best-effort cancellation of every unfinished task.
metadata¶
def metadata(self) -> Mapping[str, Any]Return cached-or-provider metadata for every task.
Returns:
Mapping[str, Any] — Mapping[str, Any]: Child task metadata in submission order.
raw_status¶
def raw_status(self) -> objectReturn raw task states in stable order.
Returns:
object — One state string or a tuple of state strings.
references¶
def references(self) -> tuple[ExecutionReference, ...]Return the logical Braket execution reference.
Returns:
tuple[ExecutionReference, ...] — tuple[ExecutionReference, ...]: Empty for local tasks, otherwise
one reference containing every task ARN.
result¶
def result(self, timeout: float | None = None) -> ResultTWait for and decode all Braket task results.
Parameters:
| Name | Type | Description |
|---|---|---|
timeout | float | None | Maximum local status-wait time in seconds. None uses the configured Braket polling timeout when one exists, otherwise waits indefinitely. Expiration does not cancel remote tasks. |
Returns:
ResultT — Decoded engine-neutral result.
Raises:
TimeoutError— Iftimeoutexpires before terminal state.ValueError— Iftimeoutis negative or not finite.ExecutionError— If a task fails, is cancelled, or omits a result.
snapshot¶
def snapshot(self) -> ExecutionSnapshotCapture an AWS reference or an already retrieved local result.
AWS tasks retain their provider references after result retrieval.
Local tasks require a successful result() call first; this method
never retrieves results or waits for another result caller.
Returns:
ExecutionSnapshot — One remote reference or a detached local value.
Raises:
TypeError— If a cached local result contains unsupported objects.ValueError— If no reference or cached result exists, or the cached value is nonfinite, cyclic, or nested too deeply.
status¶
def status(self) -> JobStatusReturn the aggregate Braket task status.
Returns:
JobStatus — Provider-independent aggregate status.
BraketExecutionOptions [source]¶
class BraketExecutionOptionsConfigure Braket task and batch submission without flat kwargs.
Parameters:
| Name | Type | Description |
|---|---|---|
s3_destination_folder | tuple[str, str] | None | S3 bucket and prefix for AWS task results. Defaults to the SDK configuration. |
reservation_arn | str | None | Direct reservation ARN. Defaults to None. |
max_parallel | int | None | Maximum AWS batch concurrency. Defaults to the SDK configuration. |
poll_timeout_seconds | float | None | Provider result polling timeout and default local result-wait limit. Defaults to the SDK configuration with no local limit. |
poll_interval_seconds | float | None | Provider status polling interval. Defaults to the SDK configuration. |
batch_max_retries | int | Maximum explicit Braket batch resubmissions. Defaults to zero to prevent implicit additional QPU cost. |
task_options | Mapping[str, Any] | Additional device.run options. |
batch_options | Mapping[str, Any] | Additional device.run_batch options. |
Raises:
ValueError— If options contain executor-owned argument names or an invalid numeric value.
Constructor¶
def __init__(
self,
s3_destination_folder: tuple[str, str] | None = None,
reservation_arn: str | None = None,
max_parallel: int | None = None,
poll_timeout_seconds: float | None = None,
poll_interval_seconds: float | None = None,
batch_max_retries: int = 0,
task_options: Mapping[str, Any] = dict(),
batch_options: Mapping[str, Any] = dict(),
) -> NoneAttributes¶
batch_max_retries: intbatch_options: Mapping[str, Any]max_parallel: int | Nonepoll_interval_seconds: float | Nonepoll_timeout_seconds: float | Nonereservation_arn: str | Nones3_destination_folder: tuple[str, str] | Nonetask_options: Mapping[str, Any]
Methods¶
batch_kwargs¶
def batch_kwargs(self) -> dict[str, Any]Build keyword arguments for a Braket task batch.
Returns:
dict[str, Any] — dict[str, Any]: Validated device.run_batch keyword arguments.
task_kwargs¶
def task_kwargs(self) -> dict[str, Any]Build keyword arguments for one Braket task.
Returns:
dict[str, Any] — dict[str, Any]: Validated device.run keyword arguments.
BraketExecutor [source]¶
class BraketExecutor(QuantumExecutor['Circuit'])Submit Braket circuits to a local simulator or injected AWS device.
The default device is created lazily, so importing qamomile.braket
remains safe when the optional SDK dependency is absent.
Parameters:
| Name | Type | Description |
|---|---|---|
device | Any | Braket device exposing run and optionally run_batch. Defaults to LocalSimulator. |
estimation_shots | int | Shots used for expectation values. Zero uses exact state-vector expectation on compatible devices. Defaults to zero. |
options | BraketExecutionOptions | None | Structured task and batch submission policy. Defaults to SDK behavior with no batch retry. |
run_kwargs | Mapping[str, Any] | None | Extra keyword arguments passed to every device task. This compatibility argument is deprecated in favor of options. Defaults to none. |
Constructor¶
def __init__(
self,
device: Any = None,
*,
estimation_shots: int = 0,
options: BraketExecutionOptions | None = None,
run_kwargs: Mapping[str, Any] | None = None,
) -> NoneInitialize the Braket executor.
Parameters:
| Name | Type | Description |
|---|---|---|
device | Any | Braket device or compatible test double. Defaults to a lazily created local simulator. |
estimation_shots | int | Non-negative expectation task shots. Defaults to zero for exact local estimation. |
options | BraketExecutionOptions | None | Structured execution options. Defaults to SDK behavior with retry disabled. |
run_kwargs | Mapping[str, Any] | None | Extra task options copied for each run. Kept for compatibility; cannot be combined with options. Defaults to none. |
Raises:
ValueError— Ifestimation_shotsis negative or both option forms are supplied.
Attributes¶
capabilities: ExecutionCapabilities Describe lifecycle and estimation features for the target device.device: Any Return the configured device, creating a local simulator lazily.
Methods¶
bind_parameters¶
def bind_parameters(
self,
circuit: 'Circuit',
bindings: dict[str, Any],
parameter_metadata: ParameterMetadata,
) -> 'Circuit'Bind Qamomile runtime parameters into a Braket circuit.
Parameters:
| Name | Type | Description |
|---|---|---|
circuit | Circuit | Parameterized Braket circuit. |
bindings | dict[str, Any] | Values keyed by flattened Qamomile parameter name. |
parameter_metadata | ParameterMetadata | Compiled parameter ABI. |
Returns:
'Circuit' — New circuit with all required parameters bound.
Raises:
ValueError— If a required binding is absent.
estimate¶
def estimate(
self,
circuit: 'Circuit',
hamiltonian: 'qm_o.Hamiltonian',
params: Sequence[float] | None = None,
) -> floatEstimate a Qamomile Hamiltonian expectation value.
Exact estimation submits one Braket task containing one result type per Pauli term. Shot-based estimation submits one task per term so non-commuting terms remain valid on devices with sampled result types.
Parameters:
| Name | Type | Description |
|---|---|---|
circuit | Circuit | Bound Braket state-preparation circuit. |
hamiltonian | qm_o.Hamiltonian | Hamiltonian to evaluate. |
params | Sequence[float] | None | Positional parameter values for direct executor use. Qamomile normally binds before calling this method. Defaults to none. |
Returns:
float — Real expectation value including the constant term.
Raises:
ValueError— Ifparamsdo not match Braket’s parameter order or if the result has a non-negligible imaginary component.RuntimeError— If a Braket task omits an expectation result.
execute¶
def execute(self, circuit: 'Circuit', shots: int) -> dict[str, int]Sample a Braket circuit and return Qamomile-ordered counts.
Parameters:
| Name | Type | Description |
|---|---|---|
circuit | Circuit | Bound Braket state-preparation circuit. |
shots | int | Number of measurement shots. |
Returns:
dict[str, int] — dict[str, int]: Counts with the highest qubit index on the left.
A zero-qubit circuit returns {"": shots}.
Raises:
RuntimeError— If the Braket result omits measurement counts.
restore¶
def restore(self, reference: ExecutionReference) -> ExecutionHandle[Any]Restore AWS quantum tasks from their serializable references.
Parameters:
| Name | Type | Description |
|---|---|---|
reference | ExecutionReference | Reference returned by a prior Braket execution handle. |
Returns:
ExecutionHandle[Any] — ExecutionHandle[Any]: Restored sampling or expectation handle.
Raises:
ValueError— If the reference provider or decoding context is invalid.TypeError— If the configured device has no AWS session.
submit_estimate¶
def submit_estimate(self, request: EstimateRequest['Circuit']) -> ExecutionHandle[float]Submit Braket expectation tasks without retrieving their results.
Parameters:
| Name | Type | Description |
|---|---|---|
request | EstimateRequest[Circuit] | Circuit, observable, inputs, and accuracy policy. |
Returns:
ExecutionHandle[float] — ExecutionHandle[float]: Lazy exact or shot-based result handle.
Raises:
ValueError— If the Hamiltonian is non-Hermitian, target precision is unsupported, or exact execution targets a QPU.
submit_sample¶
def submit_sample(self, request: SampleRequest['Circuit']) -> ExecutionHandle[dict[str, int]]Submit a native Braket sampling task without waiting for results.
Parameters:
| Name | Type | Description |
|---|---|---|
request | SampleRequest[Circuit] | Circuit, native parameter inputs, and shot count. |
Returns:
ExecutionHandle[dict[str, int]] — ExecutionHandle[dict[str, int]]: Lazy Braket execution handle.
BraketMaterializer [source]¶
class BraketMaterializerConvert verified circuit IR to an Amazon Braket circuit.
Attributes¶
capabilities: CircuitCapabilities Declare the Amazon Braket circuit capabilities.
Methods¶
materialize¶
def materialize(
self,
program: CircuitProgram,
parameter_names: tuple[str, ...] = (),
) -> MaterializedCircuit[Any]Build a Braket circuit and static-measurement metadata.
Parameters:
| Name | Type | Description |
|---|---|---|
program | CircuitProgram | Verified target-legal circuit program. |
parameter_names | tuple[str, ...] | Public parameter ABI names. Defaults to an empty tuple. |
Returns:
MaterializedCircuit[Any] — MaterializedCircuit[Any]: Braket circuit and binding metadata.
Raises:
EmitError— If runtime control, reset, or mid-circuit measurement remains in the program.ValueError— If structural circuit verification fails.
BraketTranspiler [source]¶
class BraketTranspiler(Transpiler['Circuit'])Transpile Qamomile quantum kernels to Amazon Braket circuits.
Methods¶
executor¶
def executor(
self,
device: Any = None,
*,
estimation_shots: int = 0,
options: BraketExecutionOptions | None = None,
run_kwargs: Mapping[str, Any] | None = None,
) -> BraketExecutorCreate a Braket executor.
Parameters:
| Name | Type | Description |
|---|---|---|
device | Any | Braket local simulator, AWS device, or compatible test double. Defaults to a local simulator. |
estimation_shots | int | Shots for expectation tasks. Defaults to zero for exact estimation. |
options | BraketExecutionOptions | None | Structured submission, polling, concurrency, and retry policy. Defaults to SDK behavior with retry disabled. |
run_kwargs | Mapping[str, Any] | None | Extra device task options. Compatibility form; cannot be combined with options. Defaults to none. |
Returns:
BraketExecutor — Configured task-backed executor.
Raises:
ValueError— If executor options are invalid.
CircuitInvocation [source]¶
class CircuitInvocation(Generic[CircuitT])Keep an emitted circuit and runtime parameter values together.
Engines may bind the values into a new circuit or submit them through a native parameter-input API. Keeping both forms available preserves native parameter sweeps and provider-side compilation caches.
Parameters:
| Name | Type | Description |
|---|---|---|
circuit | CircuitT | Emitted engine circuit or kernel artifact. |
bindings | Mapping[str, Any] | Flattened Qamomile runtime bindings. |
parameter_metadata | ParameterMetadata | Mapping from public parameter names to engine parameter objects. |
Constructor¶
def __init__(
self,
circuit: CircuitT,
bindings: Mapping[str, Any],
parameter_metadata: ParameterMetadata,
) -> NoneAttributes¶
bindings: Mapping[str, Any]circuit: CircuitTparameter_metadata: ParameterMetadata
CompletedExecutionHandle [source]¶
class CompletedExecutionHandle(ExecutionHandle[ResultT])Wrap an already available result for synchronous executors.
Parameters:
| Name | Type | Description |
|---|---|---|
value | ResultT | Completed execution value. |
Constructor¶
def __init__(self, value: ResultT) -> NoneInitialize an immediately completed execution.
Parameters:
| Name | Type | Description |
|---|---|---|
value | ResultT | Completed execution value. |
Methods¶
result¶
def result(self, timeout: float | None = None) -> ResultTReturn the completed value without waiting.
Parameters:
| Name | Type | Description |
|---|---|---|
timeout | float | None | Ignored compatibility timeout. |
Returns:
ResultT — Stored execution value.
snapshot¶
def snapshot(self) -> ExecutionSnapshotCapture the already available raw result without waiting.
Returns:
ExecutionSnapshot — Owned, type-preserving local value.
Raises:
TypeError— If the value contains unsupported result objects.ValueError— If the value is nonfinite or cyclic.
status¶
def status(self) -> JobStatusReturn the completed status.
Returns:
JobStatus — Always :attr:JobStatus.COMPLETED.
EmitPass [source]¶
class EmitPass(Pass[ProgramPlan, ExecutableProgram[T]], Generic[T])Base class for engine-specific emission passes.
Subclasses implement _emit_quantum_segment() to generate engine-specific quantum circuits.
Input: ProgramPlan Output: ExecutableProgram with compiled segments
Constructor¶
def __init__(
self,
bindings: dict[str, Any] | None = None,
parameters: list[str] | None = None,
)Initialize with optional parameter bindings.
Parameters:
| Name | Type | Description |
|---|---|---|
bindings | dict[str, Any] | None | Values to bind parameters to. If not provided, parameters must be bound at execution time. |
parameters | list[str] | None | List of parameter names to preserve as engine parameters. |
Raises:
ValueError— If a name appears in bothbindingsandparameters. This is the innermost emit-side choke point: it catches the overlap even when anEmitPassis constructed directly (e.g. viaTranspiler._create_emit_pass), bypassing thetranspile/emitwrappers. A name in both is ambiguous and would otherwise silently bake the binding while dropping the runtime parameter (see #354).
Attributes¶
bindingsname: strparameters
Methods¶
run¶
def run(self, input: ProgramPlan) -> ExecutableProgram[T]Emit engine code from a program plan.
Parameters:
| Name | Type | Description |
|---|---|---|
input | ProgramPlan | Segmented plan whose quantum and classical steps should be compiled. |
Returns:
ExecutableProgram[T] — ExecutableProgram[T]: Executable program containing all compiled
segments and the public output contract.
Raises:
EmitError— If expectation-value evaluation is combined with a measurement, projection, or reset operation, or if a planned segment cannot be emitted.
EstimateRequest [source]¶
class EstimateRequest(Generic[CircuitT])Describe one Hamiltonian expectation execution.
Parameters:
| Name | Type | Description |
|---|---|---|
invocation | CircuitInvocation[CircuitT] | Circuit and runtime inputs. |
hamiltonian | qm_o.Hamiltonian | Observable to evaluate. |
accuracy | EstimationAccuracy | None | Explicit accuracy policy. None uses the executor’s configured default. |
Constructor¶
def __init__(
self,
invocation: CircuitInvocation[CircuitT],
hamiltonian: qm_o.Hamiltonian,
accuracy: EstimationAccuracy | None = None,
) -> NoneAttributes¶
accuracy: EstimationAccuracy | Nonehamiltonian: qm_o.Hamiltonianinvocation: CircuitInvocation[CircuitT]
Exact [source]¶
class ExactRequest an analytic expectation value without shot noise.
Constructor¶
def __init__(self) -> NoneExecutionCapabilities [source]¶
class ExecutionCapabilitiesDeclare the execution features implemented by one executor.
Parameters:
| Name | Type | Description |
|---|---|---|
supports_async_sampling | bool | Whether sampling submission returns before provider execution completes. Defaults to False. |
supports_async_estimation | bool | Whether expectation submission returns before provider execution completes. Defaults to False. |
supports_estimation | bool | Whether expectation-value execution is implemented. Defaults to False. |
supports_cancellation | bool | Whether provider-backed handles can request cancellation. Defaults to False. |
supports_restoration | bool | Whether execution references can recreate provider-backed handles. Defaults to False. |
supports_native_batch | bool | Whether multiple logical requests can be submitted through one provider-native batch or job. Defaults to False. |
supports_native_parameter_inputs | bool | Whether runtime values remain separate from emitted circuits during provider submission. Defaults to False. |
estimation_accuracy | frozenset[EstimationPolicyType] | Explicit per-request accuracy policies accepted by the executor. An empty set means only executor-configured estimation behavior is available. |
Raises:
ValueError— If an unknown estimation policy type is declared or estimation features are declared without estimation support.
Constructor¶
def __init__(
self,
supports_async_sampling: bool = False,
supports_async_estimation: bool = False,
supports_estimation: bool = False,
supports_cancellation: bool = False,
supports_restoration: bool = False,
supports_native_batch: bool = False,
supports_native_parameter_inputs: bool = False,
estimation_accuracy: frozenset[EstimationPolicyType] = frozenset(),
) -> NoneAttributes¶
estimation_accuracy: frozenset[EstimationPolicyType]supports_async_estimation: boolsupports_async_sampling: boolsupports_cancellation: boolsupports_estimation: boolsupports_native_batch: boolsupports_native_parameter_inputs: boolsupports_restoration: bool
ExecutionHandle [source]¶
class ExecutionHandle(ABC, Generic[ResultT])Expose an engine execution without forcing immediate result retrieval.
Attributes¶
native: object | None Return the wrapped provider-native task when available.
Methods¶
cancel¶
def cancel(self) -> NoneRequest best-effort cancellation.
Cancellation is intentionally not reported as a boolean because
providers may accept a request after execution has already started.
Call :meth:status to observe the eventual state.
metadata¶
def metadata(self) -> Mapping[str, Any]Return optional provider execution metadata.
Returns:
Mapping[str, Any] — Mapping[str, Any]: Provider metadata such as timestamps or usage.
raw_status¶
def raw_status(self) -> objectReturn provider-specific status information.
Returns:
object — Provider status value, or the normalized status when no
richer value exists.
references¶
def references(self) -> tuple[ExecutionReference, ...]Return serializable remote execution references.
Returns:
tuple[ExecutionReference, ...] — tuple[ExecutionReference, ...]: Secret-free provider references.
result¶
def result(self, timeout: float | None = None) -> ResultTWait for and return the engine-neutral raw result.
Parameters:
| Name | Type | Description |
|---|---|---|
timeout | float | None | Maximum local wait in seconds. None delegates the wait policy to the provider. |
Returns:
ResultT — Raw result normalized by the engine executor.
Raises:
TimeoutError— If the local wait expires before completion.
result_async¶
def result_async(self, timeout: float | None = None) -> ResultTWait asynchronously for the engine-neutral raw result.
Parameters:
| Name | Type | Description |
|---|---|---|
timeout | float | None | Maximum local wait in seconds. Defaults to provider behavior when None. |
Returns:
ResultT — Raw result normalized by the engine executor.
Raises:
TimeoutError— If the local wait expires before completion.
snapshot¶
def snapshot(self) -> ExecutionSnapshotCapture one remote execution without fetching its result.
Adapters exposing several logical references must override this method with an explicit reconstruction structure. A provider reference may itself contain multiple physical job IDs.
Returns:
ExecutionSnapshot — One opaque provider execution.
Raises:
ValueError— If references are absent or their grouping is unknown.
status¶
def status(self) -> JobStatusReturn the current provider-independent execution status.
Returns:
JobStatus — Current normalized status.
ExecutionReference [source]¶
class ExecutionReferenceStore secret-free identifiers needed to restore remote execution.
Parameters:
| Name | Type | Description |
|---|---|---|
provider | str | Stable provider or adapter name. |
job_ids | tuple[str, ...] | One or more provider job identifiers. |
target | str | None | Provider target or device identifier. Defaults to None. |
group_id | str | None | Session, batch, program, or parent identifier. Defaults to None. |
context | Mapping[str, str] | Additional non-secret identifiers needed to restore the job. Defaults to an empty mapping. |
Raises:
ValueError— If the provider name or any job identifier is empty.TypeError— If identifiers or context have incompatible types.
Constructor¶
def __init__(
self,
provider: str,
job_ids: tuple[str, ...],
target: str | None = None,
group_id: str | None = None,
context: Mapping[str, str] = dict(),
) -> NoneAttributes¶
context: Mapping[str, str]group_id: str | Nonejob_ids: tuple[str, ...]provider: strtarget: str | None
Methods¶
from_dict¶
@classmethod
def from_dict(cls, data: Mapping[str, Any]) -> ExecutionReferenceReconstruct a provider reference from JSON-compatible data.
Parameters:
| Name | Type | Description |
|---|---|---|
data | Mapping[str, Any] | Mapping produced by :meth:to_dict. |
Returns:
ExecutionReference — Validated provider execution reference.
Raises:
KeyError— If a required provider or job identifier field is absent.TypeError— If a field has an incompatible type.ValueError— If provider or job identifiers are empty.
to_dict¶
def to_dict(self) -> dict[str, Any]Convert the provider reference to JSON-compatible data.
Returns:
dict[str, Any] — dict[str, Any]: Provider identifiers and decoding context without
credentials or SDK objects.
SampleRequest [source]¶
class SampleRequest(Generic[CircuitT])Describe one sampling execution.
Parameters:
| Name | Type | Description |
|---|---|---|
invocation | CircuitInvocation[CircuitT] | Circuit and runtime inputs. |
shots | int | Number of requested samples. |
Raises:
ValueError— Ifshotsis not positive.
Constructor¶
def __init__(self, invocation: CircuitInvocation[CircuitT], shots: int) -> NoneAttributes¶
invocation: CircuitInvocation[CircuitT]shots: int
SegmentationPass [source]¶
class SegmentationPass(Pass[Block, ProgramPlan])Segment a block into a strategy-specific executable program plan.
This pass:
Materializes return operations (syncs output_values from ReturnOperation)
Splits the operation list into quantum and classical segments
Builds a ProgramPlan via the configured segmentation strategy
Input: Block (typically ANALYZED or AFFINE) Output: ProgramPlan
Constructor¶
def __init__(self, strategy: SegmentationStrategy | None = None) -> NoneAttributes¶
name: str
Methods¶
run¶
def run(self, input: Block) -> ProgramPlanLower and segment a block into a program plan.
Parameters:
| Name | Type | Description |
|---|---|---|
input | Block | Block whose while contract and hybrid operations should be lowered before segmentation. |
Returns:
ProgramPlan — Strategy-produced execution plan.
Raises:
ValidationError— If a runtime while violates its contract.SeparationError— If the strategy finds no quantum segment.MultipleQuantumSegmentsError— If the strategy finds multiple quantum segments.
ShotBased [source]¶
class ShotBasedRequest a shot-based expectation value.
Parameters:
| Name | Type | Description |
|---|---|---|
shots | int | Positive number of measurement shots. |
Raises:
ValueError— Ifshotsis not positive.
Constructor¶
def __init__(self, shots: int) -> NoneAttributes¶
shots: int
TargetPrecision [source]¶
class TargetPrecisionRequest an expectation value at a provider target precision.
Parameters:
| Name | Type | Description |
|---|---|---|
precision | float | Positive absolute target precision. |
Raises:
ValueError— Ifprecisionis not positive.
Constructor¶
def __init__(self, precision: float) -> NoneAttributes¶
precision: float
Transpiler [source]¶
class Transpiler(ABC, Generic[T])Base class for engine-specific transpilers.
Provides the full compilation pipeline from qkernel-like frontend objects to executable programs.
Example:
>>> from qamomile.circuit.transpiler import TranspilerConfig
>>> from qamomile.qiskit import QiskitTranspiler
>>> transpiler = QiskitTranspiler()
>>> executable = transpiler.transpile(kernel, bindings={"theta": 0.5})
>>> circuit = executable.get_first_circuit()
>>> config = TranspilerConfig.with_strategies({"qft": "approximate_k2"})
>>> transpiler.set_config(config)Attributes¶
MAX_UNROLL_DEPTH: intconfig: TranspilerConfig Get the transpiler configuration.
Methods¶
affine_validate¶
def affine_validate(self, block: Block) -> BlockPass 1.5: Validate affine type semantics.
This is a safety net to catch affine type violations that may have bypassed frontend checks. Validates that quantum values are used at most once.
analyze¶
def analyze(self, block: Block) -> BlockPass 2: Validate and analyze dependencies.
array_bounds_check¶
def array_bounds_check(self, block: Block) -> BlockPass 1.85: Reject reachable accesses outside resolved array bounds.
Runs after :meth:partial_eval so binding-dependent view extents and
indices are concrete where possible, and before declarative slice
operations are stripped. Statically zero-trip loop bodies are skipped
because their element accesses are unreachable.
Parameters:
| Name | Type | Description |
|---|---|---|
block | Block | Post-fold affine or hierarchical block to validate. |
Returns:
Block — The input block unchanged after successful validation.
Raises:
ValidationError— If a reachable constant element index is outside a resolved root-array or view-local extent.
classical_lowering¶
def classical_lowering(self, block: Block) -> BlockPass 2.25: Lower measurement-derived classical ops.
Identifies CompOp / CondOp / NotOp / BinOp
instances whose operand dataflow traces back to a measurement and
rewrites them to RuntimeClassicalExpr. Compile-time-foldable
and emit-time-foldable (loop-bound, parameter-bound) classical
ops are left unchanged.
Runs after analyze so the measurement-taint analysis has the
full dependency graph available, and before
validate_symbolic_shapes / plan / emit so downstream
passes can rely on the cleaner IR (in particular: future
segmentation work can dispatch on RuntimeClassicalExpr type
instead of the BitType-only heuristic).
constant_fold¶
def constant_fold(self, block: Block, bindings: dict[str, Any] | None = None) -> BlockPass 1.5: Fold constant expressions.
Evaluates BinOp operations when all operands are constants
or bound parameters. This prevents quantum segment splitting
from parametric expressions like phase * 2.
emit¶
def emit(
self,
separated: ProgramPlan,
bindings: dict[str, Any] | None = None,
parameters: list[str] | None = None,
) -> ExecutableProgram[T]Pass 4: Generate engine-specific code.
Parameters:
| Name | Type | Description |
|---|---|---|
separated | ProgramPlan | The separated program to emit |
bindings | dict[str, Any] | None | Parameter values to bind at compile time |
parameters | list[str] | None | Parameter names to preserve as engine parameters |
Raises:
ValueError— If a name appears in bothbindingsandparameters. This check also runs intranspileandto_block/build, butemitis a public step-by-step entry point that bypasses those, so the guard is repeated here to prevent a name from being silently baked in (its runtime parameter dropped) when the step-by-step API is driven directly.
executor¶
def executor(self, **kwargs: Any = {}) -> QuantumExecutor[T]Create a quantum executor for this engine.
inline¶
def inline(self, block: Block) -> BlockPass 1: Inline all inline-policy callable invocations.
lower_compile_time_ifs¶
def lower_compile_time_ifs(self, block: Block, bindings: dict[str, Any] | None = None) -> BlockPass 1.75: Lower compile-time resolvable IfOperations.
Evaluates IfOperation conditions (including expression-derived conditions via CompOp/CondOp/NotOp) and replaces resolved ones with selected-branch operations. Merge outputs are substituted with selected-branch values throughout the block.
This prevents SegmentationPass from seeing classical-only compile-time IfOperations that would otherwise split quantum segments.
partial_eval¶
def partial_eval(self, block: Block, bindings: dict[str, Any] | None = None) -> BlockPass 1.75: Fold constants and lower compile-time control flow.
plan¶
def plan(self, block: Block) -> ProgramPlanPass 3: Lower and split into a program plan.
Validates C→Q→C pattern with single quantum segment.
plan_circuit¶
def plan_circuit(
self,
prepared: PreparedModule,
bindings: dict[str, Any] | None = None,
) -> ProgramPlanLower a prepared semantic module into the circuit execution model.
This is the destructive circuit-family path: inline-policy calls are
flattened, compile-time structure is evaluated, affine and borrow
invariants are checked, measurement-dependent classical expressions
are classified, and the result is segmented into C-to-Q-to-C steps.
Program-graph targets must compile :class:PreparedModule directly
instead of invoking this method.
Parameters:
| Name | Type | Description |
|---|---|---|
prepared | PreparedModule | Hierarchical semantic program returned by :meth:prepare. |
bindings | dict[str, Any] | None | Compile-time bindings used for recursion unrolling and partial evaluation. Defaults to None. |
Returns:
ProgramPlan — Circuit-family host-orchestrated execution plan.
Raises:
QamomileCompileError— If validation, partial evaluation, or segmentation rejects the program.
prepare¶
def prepare(
self,
kernel: QKernelLike,
bindings: dict[str, Any] | None = None,
parameters: list[str] | None = None,
) -> PreparedModulePrepare a qkernel for target-specific planning and lowering.
This phase preserves callable boundaries. It performs tracing, entrypoint validation, configured substitutions, and parameter-shape resolution, then collects the reachable callable graph into a program-level semantic view.
Parameters:
| Name | Type | Description |
|---|---|---|
kernel | QKernelLike | QKernel or qkernel-like frontend object to prepare as a top-level entrypoint. |
bindings | dict[str, Any] | None | Compile-time values used while tracing and resolving parameter shapes. Defaults to None. |
parameters | list[str] | None | Argument names preserved as runtime parameters. Defaults to None. |
Returns:
PreparedModule — Hierarchical entrypoint, reachable callables,
call graph, and public ABI.
Raises:
ValueError— If a name appears in bothbindingsandparameters.EntrypointValidationError— If the top-level kernel uses quantum inputs or outputs.
resolve_parameter_shapes¶
def resolve_parameter_shapes(self, block: Block, bindings: dict[str, Any] | None = None) -> BlockPass 0.75: Resolve symbolic Vector parameter shape dims.
Qamomile circuits are compile-time fixed-structure. Parameter
Vector[Float] / Vector[UInt] inputs carry symbolic
{name}_dim{i} shape Values so frontend code like
arr.shape[0] returns a usable handle. This pass looks at
bindings and, for every parameter array that has a concrete
binding, substitutes those symbolic dims with constants so that
downstream loop-bound resolution sees fixed lengths.
Parameters without a concrete binding are left as-is; their symbolic dims are harmless as long as no compile-time structure decision depends on them (the library QAOA pattern).
set_config¶
def set_config(self, config: TranspilerConfig) -> NoneSet the transpiler configuration.
Parameters:
| Name | Type | Description |
|---|---|---|
config | TranspilerConfig | Transpiler configuration to use |
slice_borrow_check¶
def slice_borrow_check(self, block: Block) -> BlockPass 1.9: Post-fold slice-view linearity checker.
Runs after :meth:partial_eval has resolved slice bounds to
concrete values. Catches the slice-view linearity violations
that the trace-time frontend check cannot detect on its own —
specifically, slices whose bounds were symbolic at trace
time (so the frontend bulk-borrow tracker had to skip them)
and aliasing scenarios that only become visible once those
bounds are folded to constants:
A view whose newly-concrete coverage overlaps another live view of the same root parent.
A view whose newly-concrete coverage hits a slot that was consumed by a destructive operation earlier in the block.
Slice ownership changes that cannot be represented safely across control-flow boundaries.
Creating a direct element borrow (q[i]) emits no IR operation,
so this pass cannot observe the borrow site itself. Later uses of
that element do appear as operation operands and are checked for
conflicts with live slice views. Trace-time validation in
:func:qamomile.circuit.frontend.func_to_block._validate_returned_arrays
covers unreturned direct-element borrows that have no observable
operand use.
The pass is a pass-through for the IR — it only raises on violations and leaves the block unchanged on success.
Parameters:
| Name | Type | Description |
|---|---|---|
block | Block | Post-fold affine or hierarchical block to validate. |
Returns:
Block — The input block unchanged after successful validation.
Raises:
QubitBorrowConflictError— If live slice ownership conflicts with another view or direct access.QubitConsumedError— If a slice or operand accesses a slot already destroyed by a destructive operation.ValidationError— If the block kind is invalid or ownership cannot be propagated safely through control flow.
strip_slice_ops¶
def strip_slice_ops(self, block: Block) -> BlockPass 1.95: Remove SliceArrayOperation nodes from the block.
PartialEvaluationPass keeps these declarative ops through
constant folding so :meth:slice_borrow_check can use them
as view-declaration markers. Once the linearity check has run,
segmentation and downstream passes expect a classical-op-free
quantum stream — this pass performs that cleanup.
substitute¶
def substitute(self, block: Block) -> BlockPass 0.5: Apply substitutions (optional).
This pass rewrites inline callable targets and sets strategy names on boxed InvokeOperations based on config.
Parameters:
| Name | Type | Description |
|---|---|---|
block | Block | Block to transform |
Returns:
Block — Block with substitutions applied
to_block¶
def to_block(
self,
kernel: QKernelLike,
bindings: dict[str, Any] | None = None,
parameters: list[str] | None = None,
) -> BlockConvert a qkernel-like frontend object to a Block.
Parameters:
| Name | Type | Description |
|---|---|---|
kernel | QKernelLike | QKernel or qkernel-like frontend object to convert. |
bindings | dict[str, Any] | None | Concrete values to bind at trace time, including values used to resolve array shapes. |
parameters | list[str] | None | Names to keep as unbound runtime parameters. |
Returns:
Block — Hierarchical block for the frontend object.
Raises:
ValueError— If a name appears in bothbindingsandparameters(propagated fromkernel.build), violating the bindings/parameters disjointness rule.
Always uses kernel.build() so Python defaults, required arguments,
runtime parameters, and array shapes follow one validated entry path.
to_circuit¶
def to_circuit(self, kernel: QKernelLike, bindings: dict[str, Any] | None = None) -> TCompile and extract just the quantum circuit.
This is a convenience method for when you just want the engine circuit without the full executable.
Parameters:
| Name | Type | Description |
|---|---|---|
kernel | QKernelLike | QKernel or qkernel-like frontend object to compile. |
bindings | dict[str, Any] | None | Parameter values to bind. |
Returns:
T — Engine-specific quantum circuit.
transpile¶
def transpile(
self,
kernel: QKernelLike,
bindings: dict[str, Any] | None = None,
parameters: list[str] | None = None,
) -> ExecutableProgram[T]Full compilation pipeline from a qkernel-like object to executable.
Parameters:
| Name | Type | Description |
|---|---|---|
kernel | QKernelLike | QKernel or qkernel-like frontend object to compile. |
bindings | dict[str, Any] | None | Parameter values to bind (also resolves array shapes). Names in bindings and parameters must be disjoint — a name is either compile-time bound or runtime symbolic, never both. |
parameters | list[str] | None | Parameter names to preserve as engine parameters. Scalars/arrays of float/int/UInt are supported, plus Dict[K, Float]: each constant-key subscript lookup (d[key]) becomes one engine parameter named "d[<key>]", and the execution-time binding bindings={"d": {...}} is decomposed per key onto those parameters. A Dict runtime parameter is recorded in Block.param_slots as a slot whose type is a DictType (compile-time-bound Dicts and Tuple arguments stay out of the slot manifest); its emitted per-key parameters are visible via ExecutableProgram.parameter_names. |
Returns:
ExecutableProgram[T] — ExecutableProgram[T]: Executable wrapping the engine circuit
and the parameter metadata needed to re-bind runtime
parameters, ready for execution.
Raises:
ValueError— If a name appears in bothbindingsandparameters. A name being in both is ambiguous (placeholder value vs runtime symbol) and used to silently miscompile control-flow predicates that depended on parameter-array elements; rejecting the overlap up front keeps the contract unambiguous.QamomileCompileError— If compilation fails (validation, dependency errors)
Pipeline:
prepare: Trace and validate the entrypoint, apply configured substitutions, resolve parameter shapes, and preserve the reachable callable graph.
plan_circuit: Inline inline-policy calls, unroll recursion, validate affine and borrow rules, partially evaluate compile-time structure, analyze dependencies, and segment the program into the host-orchestrated C-to-Q-to-C model.
lower: Convert each quantum segment to immutable, engine-neutral
CircuitProgramIR.legalize: Select native intrinsics and Pauli-evolution realizations from target capabilities and compilation policy.
verify: Prove circuit structure and target legality before constructing engine objects.
materialize: Convert the legalized circuit IR to engine-native artifacts and preserve the executable ABI.
unroll_recursion¶
def unroll_recursion(self, block: Block, bindings: dict[str, Any] | None = None) -> BlockFixed-point loop of inline and branch lowering for recursion.
Each iteration unrolls one layer of self-referential inline
callable invocation and then lowers its compile-time base-case
IfOperation. Loop-carried Bit conditions remain visible until the
final validation pass so first-iteration constants cannot erase a real
backedge read. Terminates when no
inline callable invocation remains (success), when every residual call
is trapped inside an operation-owned block whose recursive callable
contract is unsupported (control / inverse / select over a recursive
kernel — raises a targeted error, see below), or when
MAX_UNROLL_DEPTH is reached (genuinely non-terminating top-level
recursion — raises).
Parameters:
| Name | Type | Description |
|---|---|---|
block | Block | The block to unroll. May be HIERARCHICAL (still containing self-referential callable invocations) or already AFFINE (returned unchanged). |
bindings | dict[str, Any] | None | Compile-time bindings used by condition lowering to select the base case. Defaults to None, meaning no bindings are applied. |
Returns:
Block — The fully unrolled, AFFINE block once no
inline callable invocation remains. Returned unchanged when the
input already has no calls.
Raises:
FrontendTransformError— If every remaining inline callable invocation is trapped inside aControlledUOperation.block, anInverseBlockOperationblock, or aSelectOperation.case_blocksentry (a self-recursive kernel was passed toqmc.control,qmc.inverse, orqmc.select), or if a genuinely non-terminating top-level recursion does not converge withinMAX_UNROLL_DEPTHiterations. The two cases carry distinct, cause-specific messages.
validate_symbolic_shapes¶
def validate_symbolic_shapes(self, block: Block) -> BlockPass 2.5: Reject unresolvable ForOperation loop bounds.
Runs after analyze so dependency info is complete. Raises
QamomileCompileError with an actionable message when a
gamma_dim0-style symbolic Value reaches a ForOperation
bound without being folded to a constant by
ParameterShapeResolutionPass, or when a loop bound depends
(directly or through classical arithmetic) on a runtime
parameter — loop bounds are compile-time structure and must be
provided via bindings, not parameters.
Parameters:
| Name | Type | Description |
|---|---|---|
block | Block | The analyzed block to validate. |
Returns:
Block — block, unchanged, when validation succeeds.
Raises:
QamomileCompileError— If a loop bound is an unresolved parameter shape dim or depends on a runtime parameter.