Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
95327dc
📝 Plan the remaining MQT Core v3 QDMI backports
burgholzer Aug 14, 2026
46a1159
✨ Backport QDMI queue telemetry
burgholzer Aug 14, 2026
29ac67b
✨ Backport existing QDMI job retrieval
burgholzer Aug 14, 2026
91c9303
✨ Backport custom QDMI operation lists
burgholzer Aug 14, 2026
fb4fa30
✨ Backport the QDMI Slurm license selector
burgholzer Aug 14, 2026
a938de5
🧪 Backport the QDMI Slurm integration fixture
burgholzer Aug 14, 2026
6150b62
✨ Backport runtime-configurable neutral-atom devices
burgholzer Aug 14, 2026
022a48e
✨ Backport runtime-configurable superconducting devices
burgholzer Aug 14, 2026
ac44c09
✨ Backport reusable IQM device models
burgholzer Aug 14, 2026
f6a493e
🐍 Backport CPython 3.15 wheel preparation
denialhaag Aug 14, 2026
370e00f
⬆️ Backport the rumdl pre-commit update
renovate[bot] Aug 14, 2026
25d9e83
🔧 Backport standard dynamic package metadata
burgholzer Aug 14, 2026
2da291f
⬆️ Backport nanobind 2.14
renovate[bot] Aug 14, 2026
2e4b0c7
⚡ Backport faster QDMI stub generation
denialhaag Aug 14, 2026
954e0ec
⚡ Backport build and CI time reductions
burgholzer Aug 14, 2026
628e09a
♻️ Backport simplified optional-dependency handling
simon1hofmann Aug 14, 2026
80aea82
📝 Backport Sphinx-LLM documentation indexes
denialhaag Aug 14, 2026
f21b9b1
🧪 Backport stronger ZX equivalence tests
burgholzer Aug 14, 2026
fc53de2
🔥 Backport removal of dead typing compatibility code
denialhaag Aug 14, 2026
905c671
⬆️ Backport CI and hook patch updates
renovate[bot] Aug 14, 2026
224f94e
♻️ Backport native unity-build compatibility fixes
burgholzer Aug 14, 2026
d38c241
📝 Backport compatible maintenance cleanups
denialhaag Aug 14, 2026
e7898a5
🔧 Backport the optional-component wheel target
burgholzer Aug 14, 2026
428d523
📝 Finalize the combined v3 backport
burgholzer Aug 14, 2026
480087b
🔇 Resolve v3 backport lint diagnostics
burgholzer Aug 14, 2026
c32fd4d
✅ Cover optional plugin import failures
burgholzer Aug 14, 2026
3ef5307
🧰 Backport typed QDMI adapter configuration
burgholzer Aug 14, 2026
5d44ef1
🪪 Backport stable QDMI IDs in Qiskit backends
burgholzer Aug 14, 2026
75729c0
🔎 Backport lazy QDMI backend discovery
burgholzer Aug 14, 2026
b30826d
💥 Backport explicit QDMI primitive defaults
burgholzer Aug 14, 2026
b31187c
📝 Record the combined v3 backport boundary
burgholzer Aug 14, 2026
805b6f1
💥 Backport removal of dead pybind11 CMake support
denialhaag Aug 14, 2026
93a5b51
💥 Backport removal of pyproject QDMI configuration
denialhaag Aug 14, 2026
2e28886
📝 Backport final-design and writing guidance
burgholzer Aug 14, 2026
8831eb2
⚡ Backport documentation build optimizations
burgholzer Aug 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
313 changes: 313 additions & 0 deletions .agent/plans/backport-qdmi-slurm-v3.md

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions .github/workflows/cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ permissions:
jobs:
build-sdist:
name: 🐍 Packaging
uses: munich-quantum-toolkit/workflows/.github/workflows/reusable-python-packaging-sdist.yml@973217bac3ad300d9982fffdd3b37a9b5b3a51ea # v2.2.1
uses: munich-quantum-toolkit/workflows/.github/workflows/reusable-python-packaging-sdist.yml@579203ef22082fa5d5483412f442e50d0c5ff4a7 # v2.2.2

# Builds wheels on all supported platforms using cibuildwheel.
# The wheels are uploaded as GitHub artifacts `dev-cibw-*` or `cibw-*`, depending on whether the workflow is triggered from a PR or a release.
Expand All @@ -30,7 +30,7 @@ jobs:
windows-2025,
windows-11-arm,
]
uses: munich-quantum-toolkit/workflows/.github/workflows/reusable-python-packaging-wheel-cibuildwheel.yml@973217bac3ad300d9982fffdd3b37a9b5b3a51ea # v2.2.1
uses: munich-quantum-toolkit/workflows/.github/workflows/reusable-python-packaging-wheel-cibuildwheel.yml@579203ef22082fa5d5483412f442e50d0c5ff4a7 # v2.2.2
with:
runs-on: ${{ matrix.runs-on }}

Expand All @@ -50,7 +50,7 @@ jobs:
path: dist
merge-multiple: true
- name: Generate artifact attestation for sdist and wheel(s)
uses: actions/attest@f7c74d28b9d84cb8768d0b8ca14a4bac6ef463e6 # v4.2.0
uses: actions/attest@508db95dd578ae2727ebd6217d5ba78e4fbda05d # v4.2.1
with:
subject-path: dist/*
- uses: pypa/gh-action-pypi-publish@ba38be9e461d3875417946c167d0b5f3d385a247 # v1.14.1
- uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
135 changes: 26 additions & 109 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,22 +14,22 @@ concurrency:
jobs:
change-detection:
name: 🔍 Change
uses: munich-quantum-toolkit/workflows/.github/workflows/reusable-change-detection.yml@973217bac3ad300d9982fffdd3b37a9b5b3a51ea # v2.2.1
uses: munich-quantum-toolkit/workflows/.github/workflows/reusable-change-detection.yml@579203ef22082fa5d5483412f442e50d0c5ff4a7 # v2.2.2
cpp-tests-ubuntu:
name: 🇨‌ Test 🐧
needs: change-detection
if: fromJSON(needs.change-detection.outputs.run-cpp-tests) && !contains(github.event.pull_request.labels.*.name, 'extensive-cpp-ci')
if: fromJSON(needs.change-detection.outputs.run-cpp-tests)
strategy:
fail-fast: false
matrix:
runs-on: [ubuntu-24.04, ubuntu-24.04-arm]
compiler: [gcc]
preset: [release-mlir]
include:
- runs-on: ubuntu-24.04
compiler: gcc
preset: debug-mlir
uses: munich-quantum-toolkit/workflows/.github/workflows/reusable-cpp-tests-ubuntu.yml@973217bac3ad300d9982fffdd3b37a9b5b3a51ea # v2.2.1
- runs-on: ubuntu-24.04-arm
compiler: gcc
preset: release-mlir
uses: munich-quantum-toolkit/workflows/.github/workflows/reusable-cpp-tests-ubuntu.yml@579203ef22082fa5d5483412f442e50d0c5ff4a7 # v2.2.2
with:
runs-on: ${{ matrix.runs-on }}
compiler: ${{ matrix.compiler }}
Expand All @@ -40,18 +40,18 @@ jobs:
cpp-tests-macos:
name: 🇨‌ Test 🍎
needs: change-detection
if: fromJSON(needs.change-detection.outputs.run-cpp-tests) && !contains(github.event.pull_request.labels.*.name, 'extensive-cpp-ci')
if: fromJSON(needs.change-detection.outputs.run-cpp-tests)
strategy:
fail-fast: false
matrix:
runs-on: [macos-26, macos-26-intel]
compiler: [clang]
preset: [release-mlir]
include:
- runs-on: macos-26
compiler: clang
preset: debug-mlir
uses: munich-quantum-toolkit/workflows/.github/workflows/reusable-cpp-tests-macos.yml@973217bac3ad300d9982fffdd3b37a9b5b3a51ea # v2.2.1
- runs-on: macos-26-intel
compiler: clang
preset: release-mlir
uses: munich-quantum-toolkit/workflows/.github/workflows/reusable-cpp-tests-macos.yml@579203ef22082fa5d5483412f442e50d0c5ff4a7 # v2.2.2
with:
runs-on: ${{ matrix.runs-on }}
compiler: ${{ matrix.compiler }}
Expand All @@ -62,76 +62,18 @@ jobs:
cpp-tests-windows:
name: 🇨‌ Test 🏁
needs: change-detection
if: fromJSON(needs.change-detection.outputs.run-cpp-tests) && !contains(github.event.pull_request.labels.*.name, 'extensive-cpp-ci')
if: fromJSON(needs.change-detection.outputs.run-cpp-tests)
strategy:
fail-fast: false
matrix:
runs-on: [windows-2025, windows-11-arm]
compiler: [msvc]
preset: [release-windows-mlir]
include:
- runs-on: windows-2025
compiler: msvc
preset: debug-windows-mlir
uses: munich-quantum-toolkit/workflows/.github/workflows/reusable-cpp-tests-windows.yml@973217bac3ad300d9982fffdd3b37a9b5b3a51ea # v2.2.1
with:
runs-on: ${{ matrix.runs-on }}
compiler: ${{ matrix.compiler }}
setup-mlir: true
llvm-version: 21.1.8
mlir-debug: ${{ matrix.preset == 'debug-windows-mlir' }}
preset-name: ${{ matrix.preset }}

# run extensive C++ tests on PRs labeled with the `extensive-cpp-ci` label
cpp-tests-extensive-ubuntu:
name: 🇨‌ Test (Extensive) 🐧
needs: change-detection
if: fromJSON(needs.change-detection.outputs.run-cpp-tests) && github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'extensive-cpp-ci')
strategy:
fail-fast: false
matrix:
runs-on: [ubuntu-24.04, ubuntu-24.04-arm]
compiler: [gcc, clang, clang-20, clang-21]
preset: [release-mlir, debug-mlir]
uses: munich-quantum-toolkit/workflows/.github/workflows/reusable-cpp-tests-ubuntu.yml@973217bac3ad300d9982fffdd3b37a9b5b3a51ea # v2.2.1
with:
runs-on: ${{ matrix.runs-on }}
compiler: ${{ matrix.compiler }}
setup-mlir: true
llvm-version: 21.1.8
preset-name: ${{ matrix.preset }}

# run extensive C++ tests on PRs labeled with the `extensive-cpp-ci` label
cpp-tests-extensive-macos:
name: 🇨‌ Test (Extensive) 🍎
needs: change-detection
if: fromJSON(needs.change-detection.outputs.run-cpp-tests) && github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'extensive-cpp-ci')
strategy:
fail-fast: false
matrix:
runs-on: [macos-15, macos-15-intel, macos-26, macos-26-intel]
compiler: [clang, clang-20, clang-21, gcc-14, gcc-15]
preset: [release-mlir, debug-mlir]
uses: munich-quantum-toolkit/workflows/.github/workflows/reusable-cpp-tests-macos.yml@973217bac3ad300d9982fffdd3b37a9b5b3a51ea # v2.2.1
with:
runs-on: ${{ matrix.runs-on }}
compiler: ${{ matrix.compiler }}
setup-mlir: true
llvm-version: 21.1.8
preset-name: ${{ matrix.preset }}

# run extensive C++ tests on PRs labeled with the `extensive-cpp-ci` label
cpp-tests-extensive-windows:
name: 🇨‌ Test (Extensive) 🏁
needs: change-detection
if: fromJSON(needs.change-detection.outputs.run-cpp-tests) && github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'extensive-cpp-ci')
strategy:
fail-fast: false
matrix:
runs-on: [windows-2022, windows-2025, windows-11-arm]
compiler: [msvc, clang]
preset: [release-windows-mlir, debug-windows-mlir]
uses: munich-quantum-toolkit/workflows/.github/workflows/reusable-cpp-tests-windows.yml@973217bac3ad300d9982fffdd3b37a9b5b3a51ea # v2.2.1
- runs-on: windows-11-arm
compiler: msvc
preset: release-windows-mlir
uses: munich-quantum-toolkit/workflows/.github/workflows/reusable-cpp-tests-windows.yml@579203ef22082fa5d5483412f442e50d0c5ff4a7 # v2.2.2
with:
runs-on: ${{ matrix.runs-on }}
compiler: ${{ matrix.compiler }}
Expand All @@ -144,7 +86,7 @@ jobs:
name: 🇨‌ Coverage
needs: change-detection
if: fromJSON(needs.change-detection.outputs.run-cpp-tests)
uses: munich-quantum-toolkit/workflows/.github/workflows/reusable-cpp-coverage.yml@973217bac3ad300d9982fffdd3b37a9b5b3a51ea # v2.2.1
uses: munich-quantum-toolkit/workflows/.github/workflows/reusable-cpp-coverage.yml@579203ef22082fa5d5483412f442e50d0c5ff4a7 # v2.2.2
with:
setup-mlir: true
llvm-version: 21.1.8
Expand All @@ -156,15 +98,15 @@ jobs:
name: 🇨‌ Lint
needs: change-detection
if: fromJSON(needs.change-detection.outputs.run-cpp-linter)
uses: munich-quantum-toolkit/workflows/.github/workflows/reusable-cpp-linter.yml@973217bac3ad300d9982fffdd3b37a9b5b3a51ea # v2.2.1
uses: munich-quantum-toolkit/workflows/.github/workflows/reusable-cpp-linter.yml@579203ef22082fa5d5483412f442e50d0c5ff4a7 # v2.2.2
with:
clang-version: 22
build-project: true
files-changed-only: true
setup-python: true
install-pkgs: "nanobind==2.13.0"
install-pkgs: "nanobind==2.14.0"
cpp-linter-extra-args: "-std=c++20"
# The vendored toml++ header is checked upstream and is not maintained
# Vendored third-party headers are checked upstream and are not maintained
# according to MQT Core's clang-tidy configuration.
cpp-linter-ignore-extra: "vendor/**"
setup-mlir: true
Expand All @@ -185,37 +127,24 @@ jobs:
macos-26-intel,
windows-2025,
]
uses: munich-quantum-toolkit/workflows/.github/workflows/reusable-python-tests.yml@973217bac3ad300d9982fffdd3b37a9b5b3a51ea # v2.2.1
uses: munich-quantum-toolkit/workflows/.github/workflows/reusable-python-tests.yml@579203ef22082fa5d5483412f442e50d0c5ff4a7 # v2.2.2
with:
runs-on: ${{ matrix.runs-on }}

python-coverage:
name: 🐍 Coverage
needs: [change-detection, python-tests]
if: fromJSON(needs.change-detection.outputs.run-python-tests)
uses: munich-quantum-toolkit/workflows/.github/workflows/reusable-python-coverage.yml@973217bac3ad300d9982fffdd3b37a9b5b3a51ea # v2.2.1
uses: munich-quantum-toolkit/workflows/.github/workflows/reusable-python-coverage.yml@579203ef22082fa5d5483412f442e50d0c5ff4a7 # v2.2.2
permissions:
contents: read
id-token: write

# run extensive Python tests on PRs labeled with the `extensive-python-ci` label
python-tests-extensive:
name: 🐍 Test (Extensive)
needs: change-detection
if: fromJSON(needs.change-detection.outputs.run-python-tests) && github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'extensive-python-ci')
strategy:
fail-fast: false
matrix:
runs-on: [macos-15, macos-15-intel, windows-2022]
uses: munich-quantum-toolkit/workflows/.github/workflows/reusable-python-tests.yml@973217bac3ad300d9982fffdd3b37a9b5b3a51ea # v2.2.1
with:
runs-on: ${{ matrix.runs-on }}

python-linter:
name: 🐍 Lint
needs: change-detection
if: fromJSON(needs.change-detection.outputs.run-python-linter)
uses: munich-quantum-toolkit/workflows/.github/workflows/reusable-python-linter.yml@973217bac3ad300d9982fffdd3b37a9b5b3a51ea # v2.2.1
uses: munich-quantum-toolkit/workflows/.github/workflows/reusable-python-linter.yml@579203ef22082fa5d5483412f442e50d0c5ff4a7 # v2.2.2
with:
check-stubs: true
enable-ty: true
Expand All @@ -225,7 +154,7 @@ jobs:
name: 🚀 CD
needs: change-detection
if: fromJSON(needs.change-detection.outputs.run-cd)
uses: munich-quantum-toolkit/workflows/.github/workflows/reusable-python-packaging-sdist.yml@973217bac3ad300d9982fffdd3b37a9b5b3a51ea # v2.2.1
uses: munich-quantum-toolkit/workflows/.github/workflows/reusable-python-packaging-sdist.yml@579203ef22082fa5d5483412f442e50d0c5ff4a7 # v2.2.2

build-wheel:
name: 🚀 CD
Expand All @@ -243,7 +172,7 @@ jobs:
windows-2025,
windows-11-arm,
]
uses: munich-quantum-toolkit/workflows/.github/workflows/reusable-python-packaging-wheel-cibuildwheel.yml@973217bac3ad300d9982fffdd3b37a9b5b3a51ea # v2.2.1
uses: munich-quantum-toolkit/workflows/.github/workflows/reusable-python-packaging-wheel-cibuildwheel.yml@579203ef22082fa5d5483412f442e50d0c5ff4a7 # v2.2.2
with:
runs-on: ${{ matrix.runs-on }}

Expand All @@ -256,13 +185,9 @@ jobs:
- cpp-tests-ubuntu
- cpp-tests-macos
- cpp-tests-windows
- cpp-tests-extensive-ubuntu
- cpp-tests-extensive-macos
- cpp-tests-extensive-windows
- cpp-coverage
- cpp-linter
- python-tests
- python-tests-extensive
- python-linter
- build-sdist
- build-wheel
Expand All @@ -273,13 +198,9 @@ jobs:
with:
allowed-skips: >-
${{
(!fromJSON(needs.change-detection.outputs.run-cpp-tests) || contains(github.event.pull_request.labels.*.name, 'extensive-cpp-ci'))
!fromJSON(needs.change-detection.outputs.run-cpp-tests)
&& 'cpp-tests-ubuntu,cpp-tests-macos,cpp-tests-windows,' || ''
}}
${{
(!fromJSON(needs.change-detection.outputs.run-cpp-tests) || !contains(github.event.pull_request.labels.*.name, 'extensive-cpp-ci') || github.event_name != 'pull_request')
&& 'cpp-tests-extensive-ubuntu,cpp-tests-extensive-macos,cpp-tests-extensive-windows,' || ''
}}
${{
!fromJSON(needs.change-detection.outputs.run-cpp-tests)
&& 'cpp-coverage,' || ''
Expand All @@ -292,10 +213,6 @@ jobs:
!fromJSON(needs.change-detection.outputs.run-python-tests)
&& 'python-tests,python-coverage,' || ''
}}
${{
(!fromJSON(needs.change-detection.outputs.run-python-tests) || !contains(github.event.pull_request.labels.*.name, 'extensive-python-ci') || github.event_name != 'pull_request')
&& 'python-tests-extensive,' || ''
}}
${{
!fromJSON(needs.change-detection.outputs.run-python-linter)
&& 'python-linter,' || ''
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release-drafter.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,4 @@ jobs:
contents: write
runs-on: ubuntu-slim
steps:
- uses: release-drafter/release-drafter@eada3c96a64734dd381cfbda23511034e328ddb0 # v7.6.0
- uses: release-drafter/release-drafter@34d80673e067bdc0c24568d3af899c216adcfaa9 # v7.7.0
69 changes: 69 additions & 0 deletions .github/workflows/slurm.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
name: Slurm integration

on:
push:
branches:
- v3.x
paths:
- ".github/workflows/slurm.yml"
- "bindings/qdmi/**"
- "cmake/**"
- "include/mqt-core/fomac/**"
- "include/mqt-core/qdmi/**"
- "pyproject.toml"
- "python/mqt/core/qdmi/**"
- "src/fomac/**"
- "src/qdmi/**"
- "test/slurm/**"
- "uv.lock"
pull_request:
paths:
- ".github/workflows/slurm.yml"
- "bindings/qdmi/**"
- "cmake/**"
- "include/mqt-core/fomac/**"
- "include/mqt-core/qdmi/**"
- "pyproject.toml"
- "python/mqt/core/qdmi/**"
- "src/fomac/**"
- "src/qdmi/**"
- "test/slurm/**"
- "uv.lock"
workflow_dispatch:

concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true

permissions:
contents: read

jobs:
slurm:
name: Slurm 25.11 and QDMI devices
runs-on: ubuntu-26.04
timeout-minutes: 45
env:
UV_NO_PROGRESS: "1"
steps:
- name: Check out MQT Core
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
fetch-depth: 0

- name: Set up uv and Python
uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0
with:
enable-cache: true
python-version: "3.14"

- name: Set up MLIR
uses: munich-quantum-software/setup-mlir@fc08baf0a172e98008e6528d465de3b5dd99bc68 # v1.4.1
with:
llvm-version: 21.1.8

- name: Build the MQT Core wheel
run: uv build --wheel --out-dir test/slurm/dist

- name: Test Slurm admission and QDMI execution
run: uv run --no-project --python 3.14 test/slurm/run_integration.py
4 changes: 2 additions & 2 deletions .github/workflows/upstream.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
fail-fast: false
matrix:
runs-on: [ubuntu-24.04, macos-15, windows-2025]
uses: munich-quantum-toolkit/workflows/.github/workflows/reusable-qiskit-upstream-tests.yml@973217bac3ad300d9982fffdd3b37a9b5b3a51ea # v2.2.1
uses: munich-quantum-toolkit/workflows/.github/workflows/reusable-qiskit-upstream-tests.yml@579203ef22082fa5d5483412f442e50d0c5ff4a7 # v2.2.2
with:
runs-on: ${{ matrix.runs-on }}
setup-z3: true
Expand All @@ -28,7 +28,7 @@ jobs:
name: Create issue on failure
needs: qiskit-upstream-tests
if: ${{ always() }}
uses: munich-quantum-toolkit/workflows/.github/workflows/reusable-qiskit-upstream-issue.yml@973217bac3ad300d9982fffdd3b37a9b5b3a51ea # v2.2.1
uses: munich-quantum-toolkit/workflows/.github/workflows/reusable-qiskit-upstream-issue.yml@579203ef22082fa5d5483412f442e50d0c5ff4a7 # v2.2.2
with:
tests-result: ${{ needs.qiskit-upstream-tests.result }}
permissions:
Expand Down
Loading
Loading