munich-quantum-toolkit / munich-quantum-toolkit/core
✨ Use native QDMI multi-program jobs in PennyLane workflows
@burgholzer is already working on this.
Since Sep 4, 2026.
- Dominant language
- C++
- Stars
- 133
- Forks
- 73
- Avg merge
- 17h 34m
- Merged PRs (30d)
- 261
Description
🤖 AI text below 🤖
Elevator pitch
PennyLane produces batches through broadcasting, measurement grouping, differentiation, and shot vectors. Native batching should improve these workflows without undoing concurrent single-program execution.
Current state
python/mqt/core/plugins/pennylane/device.py maps preprocessed tapes to jobs. #2349 submits individual jobs before waiting and preserves ordered results and best-effort cleanup.
Work and decisions
- Build on the latest concurrent execution path, not the older sequential code in #2226.
- Use native multi-program jobs only for compatible format, shot, and job-option groups.
- Restore tape, measurement-group, broadcast, and shot-vector order after indexed decoding.
- Keep concurrent single-program submission as the unsupported-batch fallback.
- Preserve counters, batch timing, error propagation, interruption handling, and best-effort cancellation without masking the original error.
Dependencies and release boundary
Parent: ✨ Adopt native multi-program QDMI jobs across Core and SDK plugins. Requires ✨ Extract QDMI multi-program Client and bundled-device support. Preserve #2349 and any successor fixes.
Acceptance and validation
- Tests compare native and fallback results for ordinary tapes, broadcasts, non-commuting groups, parameter-shift batches, and shot vectors.
- Failure and KeyboardInterrupt cleanup preserves the first error and attempts cancellation of submitted work.
- Unsupported batching does not regress asynchronous overlap.
- Run focused PennyLane/DDSIM tests, supported/minimum sessions, and full lint.
Non-goals
Requiring the MQT compiler for batching; payload capability design; changing supported gate decomposition or sampling semantics.
Provider compatibility evidence
Contribute an end-to-end example to #2359 using the matching provider implementation. Verify ordered SDK results and lifecycle behavior for both supported native batches and concurrent single-program fallback. Do not infer aggregate support from a provider SDK's batch convenience API.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.