Skip to content

✨ Extract QDMI multi-program Client and bundled-device support #2362

Description

@burgholzer

πŸ€– AI text below πŸ€–

Elevator pitch

Provide the native job API once so SDK batching can progress without inheriting compiler or execution-capability changes.

Current state

The low-level multi-program contract has been extracted from #2226 into #2373 targeting v4.1. Payload descriptors, compiler integration, and SDK consumers remain separate. The draft passes local native, Python, minimum-dependency, stub, and lint checks; hosted CI and review remain gates.

Work and decisions

  • Use the enum-based QDMI #509 contract. Preserve existing single-program entry points as one-element submissions.
  • Add ordered text and byte-program submission, one shared optional shot setting, and indexed results in the Client/bindings.
  • Update the bundled driver and devices, exports, generated stubs, examples, and installation consumers required by that ABI.
  • Preserve byte-exact payloads, optional shots, result ordering, and current job lifetime/cancellation behavior.
  • Keep capability descriptors, compiler target models, SDK dynamic-control work, and replaceable-driver changes out of this PR.

Dependencies and release boundary

Parent: ✨ Adopt native multi-program QDMI jobs across Core and SDK plugins. Contract: Munich-Quantum-Software-Stack/QDMI#509. Extraction source: #2226. Implementation: #2373.

Acceptance and validation

  • Tests cover one/many/zero programs, unsupported cardinality, invalid index, mutation-after-set ownership, failed-set rollback, and aggregate terminal states.
  • Binary payloads retain embedded NUL bytes; optional shots are not replaced with invented values.
  • Retrieval and failure behavior match the standard and do not claim unavailable partial results.
  • Run focused C++/Python QDMI tests, supported/minimum sessions, generated stubs, uvx nox -s lint, and uvx nox -s cpp-lint.

Non-goals

SDK grouping policies; provider-specific batch emulation; new format descriptors or QDMI driver replacement.

Provider validation

Pair the low-level consumer in #2373 with provider evidence through #2359. A test provider validates the Client contract, but it does not establish aggregate-job support in a production provider. Preserve unsupported-cardinality behavior and the concurrent single-program path.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

QDMIAnything related to QDMIc++Anything related to C++ codepythonAnything related to Python code

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions