🔀 Backport selected main changes for MQT Core 3.8.0 - #1966
Merged
Conversation
🤖 *AI text below* 🤖 - pin the MQT templates action to the released v1.4.0 revision - opt Core out of generated `AGENTS.md` synchronization - maintain a Core-specific `AGENTS.md` with real build, test, binding, MLIR, documentation, changelog, generated-file, and GitHub-workflow guidance The shared `docs/ai_usage.md` remains governed by the MQT templates repository, while Core's operational agent instructions can describe its actual layout, commands, generated outputs, and safety constraints. This implements the hybrid AI-guidance strategy without allowing policy to silently diverge. - `prek run --files AGENTS.md .github/workflows/templating.yml` - `git diff --check` - rendered-template verification confirmed that `synchronize-agents-md: false` preserves the local `AGENTS.md`; the rendered documentation build passed `uvx nox -s lint` was also run earlier, but is currently blocked by an unrelated existing `ty` diagnostic in `python/mqt/core/plugins/qiskit/estimator.py:235`. After this merges, the templating workflow should create its usual update PR for the shared AI guide, contribution guide, and pull-request template. Its diff must leave this custom `AGENTS.md` untouched. (cherry picked from commit ec2a388) Assisted-by: GPT-5.6 via Codex
This pull request updates the files in this repository with the latest changes from the MQT Templates repository. For details on the respective changes, see the [changelog](https://github.com/munich-quantum-toolkit/templates/blob/main/CHANGELOG.md) as well as the [upgrade guide](https://github.com/munich-quantum-toolkit/templates/blob/main/UPGRADING.md). Co-authored-by: mqt-app[bot] <219534693+mqt-app[bot]@users.noreply.github.com> (cherry picked from commit b01a4c6) Assisted-by: GPT-5.6 via Codex
🤖 *AI text below* 🤖 ## Summary - add `.agent/PLANS.md`, a repository-local ExecPlan specification for substantial agent-driven work - direct agents to use task-specific ExecPlans for complex features and significant refactors - preserve the upstream ExecPlan structure while adding MQT Core worktree, policy, and validation requirements ## Why Long-running, cross-cutting Core work benefits from a self-contained plan that records progress, decisions, discoveries, verification, and recovery steps. This makes work easier to review, resume, and hand off between agents without making lightweight fixes bureaucratic. ## Validation - `prek run --files AGENTS.md .agent/PLANS.md` - `git diff --check` `uvx nox -s lint` was also run but remains blocked by the existing unrelated `ty` diagnostic in `python/mqt/core/plugins/qiskit/estimator.py:235`. (cherry picked from commit a228a3d) Assisted-by: GPT-5.6 via Codex
🤖 *AI text below* 🤖 ## Summary - remove the requirement for checked-in ExecPlans to name a task worktree and branch - require repository-relative scope and paths instead - explicitly prohibit local filesystem paths, developer accounts, checkout locations, and ephemeral branches ## Why ExecPlans are committed repository artifacts and must remain portable across clones, machines, and contributors. The previous wording encouraged local development setup details to leak into plans. ## Validation - `prek run --files .agent/PLANS.md` - `git diff --check` - `uvx nox -s lint` (cherry picked from commit b5cb918) Assisted-by: GPT-5.6 via Codex
🤖 *AI text below* 🤖 Keep cache-producing agent workflows self-contained in each MQT Core worktree. This avoids sandbox failures when `uv`, `uvx`, `ccache`, or `sccache` attempt to access cache directories outside the active workspace, while leaving ordinary contributors free to configure their own caches. This pull request: - adds `.agent/run.sh` to run agent commands with worktree-local `uv`, tool, XDG, `prek`, `ccache`, and `sccache` state; - adds `.agent/clean-caches.sh` for explicit cleanup after a significant batch of work; - configures the CMake presets to use worktree-local compiler caches capped at 4 GiB each; - updates `AGENTS.md` to require the wrapper for cache-producing agent commands and document cleanup expectations; - deliberately does not set `tool.uv.cache-dir` in `pyproject.toml`, so non-agent workflows retain their preferred cache configuration. The cleanup helper targets only the worktree-local `.cache` directory and leaves build trees and other worktree state intact. - `./.agent/run.sh prek run --files AGENTS.md CMakePresets.json .agent/run.sh .agent/clean-caches.sh pyproject.toml` - `./.agent/run.sh uvx nox -s lint` - shell syntax checks for both helper scripts - CMake preset discovery - local `uv` and `ccache` configuration checks - focused CMake configure and build using the localized compiler cache - cleanup verification confirming that build output remains intact - `git diff --check origin/main...HEAD` - [x] The pull request only contains commits that are focused and relevant to this change. - [x] I have added appropriate tests that cover the new/changed functionality, or documented why automated tests are not needed. - [x] I have updated the documentation to reflect these changes. - [x] The changes follow the project's style guidelines and introduce no new warnings. - [x] The changes are fully tested and pass the relevant checks. - [x] I have reviewed my own code changes. **If PR contains AI-assisted content:** - [x] Any agent that created, edited, or submitted GitHub content was explicitly authorized for that scope, as required by our AI Usage Guidelines. - [x] Every agent-authored or agent-edited public text body begins with the visible disclosure `🤖 *AI text below* 🤖` (titles are exempt). - [x] AI-assisted commits include an `Assisted-by: [Model Name] via [Tool Name]` footer. - [x] I confirm that I have personally reviewed and understood all AI-generated content, and accept full responsibility for it. (cherry picked from commit 85851b3) Assisted-by: GPT-5.6 via Codex
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [scikit-build-core](https://redirect.github.com/scikit-build/scikit-build-core) ([changelog](https://scikit-build-core.readthedocs.io/en/latest/changelog.html)) | `~=0.12` → `~=1.0` |  |  | --- ### Release Notes <details> <summary>scikit-build/scikit-build-core (scikit-build-core)</summary> ### [`v1.0.3`](https://redirect.github.com/scikit-build/scikit-build-core/releases/tag/v1.0.3): Version 1.0.3 [Compare Source](https://redirect.github.com/scikit-build/scikit-build-core/compare/v1.0.2...v1.0.3) This patch release polishes the setuptools compatibility plugin: `config_settings` are now threaded through to the build command, the source tree stays clean in strict editable mode, and the `SubCommand` protocol is fully implemented. Fixes: - Complete the setuptools `SubCommand` protocol by [@​henryiii](https://redirect.github.com/henryiii) in [#​1502](https://redirect.github.com/scikit-build/scikit-build-core/issues/1502) - Thread `config_settings` to the build command by [@​henryiii](https://redirect.github.com/henryiii) in [#​1499](https://redirect.github.com/scikit-build/scikit-build-core/issues/1499) - Keep source tree clean in strict editable mode by [@​henryiii](https://redirect.github.com/henryiii) in [#​1501](https://redirect.github.com/scikit-build/scikit-build-core/issues/1501) Documentation: - Put uv first in installer tabs and add it to config-settings by [@​henryiii](https://redirect.github.com/henryiii) in [#​1507](https://redirect.github.com/scikit-build/scikit-build-core/issues/1507) - List choices for Literal options in the README table by [@​henryiii](https://redirect.github.com/henryiii) in [#​1506](https://redirect.github.com/scikit-build/scikit-build-core/issues/1506) - Touch up README options tables, setuptools docs by [@​henryiii](https://redirect.github.com/henryiii) in [#​1504](https://redirect.github.com/scikit-build/scikit-build-core/issues/1504) - Show the projects list as a card grid with language/binding badges by [@​henryiii](https://redirect.github.com/henryiii) in [#​1503](https://redirect.github.com/scikit-build/scikit-build-core/issues/1503) - Add high-star projects to the known projects list by [@​henryiii](https://redirect.github.com/henryiii) in [#​1497](https://redirect.github.com/scikit-build/scikit-build-core/issues/1497) CI and testing: - Make linkcheck retry timeouts from slow hosts by [@​henryiii](https://redirect.github.com/henryiii) in [#​1505](https://redirect.github.com/scikit-build/scikit-build-core/issues/1505) - Forward `-C` config-settings in downstream editable install by [@​henryiii](https://redirect.github.com/henryiii) in [#​1498](https://redirect.github.com/scikit-build/scikit-build-core/issues/1498) **Full Changelog**: <scikit-build/scikit-build-core@v1.0.2...v1.0.3> ### [`v1.0.2`](https://redirect.github.com/scikit-build/scikit-build-core/releases/tag/v1.0.2): Version 1.0.2 [Compare Source](https://redirect.github.com/scikit-build/scikit-build-core/compare/v1.0.1...v1.0.2) This patch release fixes redirect editable installs so that PEP 302 import hooks (such as `beartype.claw`) that register a `sys.path_hooks` entry are honored for redirected modules. Fixes: - Resolve redirected modules through `sys.path_hooks` by [@​henryiii](https://redirect.github.com/henryiii) in [#​1493](https://redirect.github.com/scikit-build/scikit-build-core/issues/1493) Internal: - Stop using deprecated `build.util.project_wheel_metadata` in [#​1494](https://redirect.github.com/scikit-build/scikit-build-core/issues/1494) **Full Changelog**: <scikit-build/scikit-build-core@v1.0.1...v1.0.2> ### [`v1.0.1`](https://redirect.github.com/scikit-build/scikit-build-core/releases/tag/v1.0.1): Version 1.0.1 [Compare Source](https://redirect.github.com/scikit-build/scikit-build-core/compare/v1.0.0...v1.0.1) <!-- Release notes generated using configuration in .github/release.yml at main --> This patch release fixes two bugs: shared namespace packages were being truncated in redirect editable installs, and the wheel timestamp clamp could overflow on 32-bit `time_t` platforms. Fixes: - Don't truncate shared namespaces in redirect mode by [@​henryiii](https://redirect.github.com/henryiii) in [#​1483](https://redirect.github.com/scikit-build/scikit-build-core/issues/1483) - Wheel timestamp clamp overflows on 32-bit `time_t` platforms by [@​henryiii](https://redirect.github.com/henryiii) in [#​1484](https://redirect.github.com/scikit-build/scikit-build-core/issues/1484) Internal: - Update pre-commit hooks in [#​1480](https://redirect.github.com/scikit-build/scikit-build-core/issues/1480) **Full Changelog**: <scikit-build/scikit-build-core@v1.0.0...v1.0.1> ### [`v1.0.0`](https://redirect.github.com/scikit-build/scikit-build-core/releases/tag/v1.0.0): Version 1.0.0 [Compare Source](https://redirect.github.com/scikit-build/scikit-build-core/compare/v0.12.2...v1.0.0) We've worked through over 100 issues and ran extensive review sweeps, fixing over 90 bugs and adding 40+ features! We've added support for PEP 803 (free-threaded stable ABI), PEP 808 (partially dynamic metadata), PEP 829 (`.start` files), and experimental PEP 817 (variants). Editable installs are much better, with lots of edge cases fixed, like namespace packages and resource discovery. For rebuilds, which are still experimental, loaders expose a manual `rebuild()`, inplace mode now supports rebuilds, and rebuilds can optionally target a persistent install tree (which removes several caveats). The setuptools and hatchling plugins are no longer experimental and Hatchling supports editable installs. There's a new unified `scikit-build` CLI, including an `init` command to scaffold new projects. Wheels can be reproducible. Dynamic metadata follows a spec with entry-point discovery and uses `[[tool.dynamic-metadata]]`, and you can write your own plugins. There are new settings: an `env` table for setting environment variables, `install.targets`, `force-include` for SDists and wheels, `sdist.resolve-symlinks`, and a `${SKBUILD_<TREE>_DIR}` prefix for targeting wheel trees; existing settings gained `sdist.inclusion-mode = "explicit"` and list-valued `cmake.build-type`. Imports are lazy on Python 3.15+ (PEP 810), making CLI and backend startup faster. Lots of documentation has been added and updated, along with new examples and samples. We've also polished f2py-cmake and cython-cmake. As (almost) always, if you set a minimum-version, your build should be unaffected. Behavior changes to be aware of: SDists now resolve symlinks by default, with an `sdist.resolve-symlinks` setting providing `"all"`, `"external"`, `"none"`, and `"classic"` modes. The old names of renamed configuration fields (`cmake.minimum-version`, `ninja.minimum-version`, `cmake.verbose`, and `cmake.targets`) now error unless `minimum-version` is set, and the deprecated `tool.scikit-build.metadata` table warns if minimum-version is not set. The empty `pyproject` extra was removed; installers like pip, build, and uv merely warn if you still request it. Also see [the announcement post](https://iscinumpy.dev/post/scikit-build-core-1-0). Features: - CLI: - unified `scikit-build` command with submodules as subcommands in [#​1355](https://redirect.github.com/scikit-build/scikit-build-core/issues/1355) - add `init` command to scaffold starter projects in [#​1357](https://redirect.github.com/scikit-build/scikit-build-core/issues/1357) - Configuration providers: - entry-point configuration providers in [#​1406](https://redirect.github.com/scikit-build/scikit-build-core/issues/1406) - New settings: - `env`: settable environment variables in [#​1377](https://redirect.github.com/scikit-build/scikit-build-core/issues/1377) (replaces [#​1370](https://redirect.github.com/scikit-build/scikit-build-core/issues/1370), unreleased) - `install.targets` for custom install targets in [#​1371](https://redirect.github.com/scikit-build/scikit-build-core/issues/1371) - `sdist.force-include`, `wheel.force-include` to map files to include in [#​1364](https://redirect.github.com/scikit-build/scikit-build-core/issues/1364); entries are served live in redirect editable installs in [#​1441](https://redirect.github.com/scikit-build/scikit-build-core/issues/1441) - `wheel.reproducible` allows building a reproducible wheel (with some setup) in [#​1389](https://redirect.github.com/scikit-build/scikit-build-core/issues/1389) - `editable.rebuild-dir` at a persistent install tree (opt-in) in [#​1375](https://redirect.github.com/scikit-build/scikit-build-core/issues/1375) - Updated settings: - `cmake.build-type` now can be a list for multiple builds in [#​1386](https://redirect.github.com/scikit-build/scikit-build-core/issues/1386) - `wheel.packages` can now include single module files in [#​1395](https://redirect.github.com/scikit-build/scikit-build-core/issues/1395) - `cmake.build-type` honors `CMAKE_BUILD_TYPE` from the environment in [#​1372](https://redirect.github.com/scikit-build/scikit-build-core/issues/1372) - add `"explicit"` SDist inclusion-mode (opt-in include) in [#​1249](https://redirect.github.com/scikit-build/scikit-build-core/issues/1249) - resolve symlinks by default by [@​Doekin](https://redirect.github.com/Doekin) in [#​1265](https://redirect.github.com/scikit-build/scikit-build-core/issues/1265), with `"external"`, `"classic"`, and `"none"` (store directory symlinks) modes in [#​1434](https://redirect.github.com/scikit-build/scikit-build-core/issues/1434) - support PEP 803, the free-threaded stable ABI, including the combined `abi3.abi3t` wheel tag, in [#​1269](https://redirect.github.com/scikit-build/scikit-build-core/issues/1269) and [#​1382](https://redirect.github.com/scikit-build/scikit-build-core/issues/1382) - Other settings: - add `${SKBUILD_<TREE>_DIR}` prefix for wheel-tree targeting in [#​1379](https://redirect.github.com/scikit-build/scikit-build-core/issues/1379) - add `{name}` placeholder for template-formatted settings in [#​1445](https://redirect.github.com/scikit-build/scikit-build-core/issues/1445) - warn on the deprecated `tool.scikit-build.metadata` table, and error on renamed config fields, unless an old minimum-version is set, in [#​1397](https://redirect.github.com/scikit-build/scikit-build-core/issues/1397) and [#​1399](https://redirect.github.com/scikit-build/scikit-build-core/issues/1399) - Dynamic metadata: - support `[[tool.dynamic-metadata]]` in [#​1390](https://redirect.github.com/scikit-build/scikit-build-core/issues/1390) and [#​1416](https://redirect.github.com/scikit-build/scikit-build-core/issues/1416) - honor the `dynamic_wheel` hook when building SDists in [#​1433](https://redirect.github.com/scikit-build/scikit-build-core/issues/1433) - emit METADATA 2.6 for PEP 808 partially-dynamic fields, via vendored pyproject-metadata 0.12.1, in [#​1454](https://redirect.github.com/scikit-build/scikit-build-core/issues/1454) and [#​1455](https://redirect.github.com/scikit-build/scikit-build-core/issues/1455) - Experimental: - add experimental PEP 817 variant support in [#​1284](https://redirect.github.com/scikit-build/scikit-build-core/issues/1284) - Editable: - PEP 829 (`.start` files) support in [#​1297](https://redirect.github.com/scikit-build/scikit-build-core/issues/1297) - expose `rebuild()` on redirect and inplace module loaders in [#​1403](https://redirect.github.com/scikit-build/scikit-build-core/issues/1403) and [#​1411](https://redirect.github.com/scikit-build/scikit-build-core/issues/1411) - Plugins: - de-experimentalize the setuptools and hatchling plugins in [#​1358](https://redirect.github.com/scikit-build/scikit-build-core/issues/1358) - include plugin extras for setuptools/hatchling, and warn if the extra is missing from `build-system.requires`, in [#​1290](https://redirect.github.com/scikit-build/scikit-build-core/issues/1290) and [#​1344](https://redirect.github.com/scikit-build/scikit-build-core/issues/1344) - Hatchling plugin: - editable install support in [#​1282](https://redirect.github.com/scikit-build/scikit-build-core/issues/1282) - reject `wheel.exclude` as unsupported in [#​1431](https://redirect.github.com/scikit-build/scikit-build-core/issues/1431) - Setuptools plugin: - inplace editable support in [#​1278](https://redirect.github.com/scikit-build/scikit-build-core/issues/1278) - add `cmake_install_dir` and `cmake_install_target` in [#​1286](https://redirect.github.com/scikit-build/scikit-build-core/issues/1286) and [#​1374](https://redirect.github.com/scikit-build/scikit-build-core/issues/1374) - add `cmake_process_manifest_hook` in [#​1285](https://redirect.github.com/scikit-build/scikit-build-core/issues/1285) - allow `cmake_with_sdist=False` in [#​1287](https://redirect.github.com/scikit-build/scikit-build-core/issues/1287) - honor `SKBUILD_CONFIGURE_OPTIONS` and `SKBUILD_BUILD_OPTIONS` in the wrapper in [#​1394](https://redirect.github.com/scikit-build/scikit-build-core/issues/1394) Fixes: - Settings: - accept override-only settings via config-settings in [#​1307](https://redirect.github.com/scikit-build/scikit-build-core/issues/1307) - flag scalar config-settings assignment to dict fields in [#​1435](https://redirect.github.com/scikit-build/scikit-build-core/issues/1435) - entry-point providers: treat their config as dynamic for validation gates, with robust signature dispatch and duplicate-name handling, in [#​1424](https://redirect.github.com/scikit-build/scikit-build-core/issues/1424) and [#​1425](https://redirect.github.com/scikit-build/scikit-build-core/issues/1425) - allow `=` inside dict-style env var values like `SKBUILD_CMAKE_DEFINE` in [#​1311](https://redirect.github.com/scikit-build/scikit-build-core/issues/1311) - accept plain strings for list/table fields in config-settings (e.g. `-Cwheel.packages=src/pkg`) in [#​1323](https://redirect.github.com/scikit-build/scikit-build-core/issues/1323) - don't crash on overrides mixing `inherit` with top-level fields in [#​1323](https://redirect.github.com/scikit-build/scikit-build-core/issues/1323) - apply `if.state` overrides when computing `get_requires_for_build_*` in [#​1322](https://redirect.github.com/scikit-build/scikit-build-core/issues/1322) - render `{root}` correctly in templated settings such as `build-dir` in [#​1318](https://redirect.github.com/scikit-build/scikit-build-core/issues/1318) - JSON schema no longer rejects valid `cmake.define` lists in [#​1306](https://redirect.github.com/scikit-build/scikit-build-core/issues/1306) - Dynamic metadata: - load provider-path providers via a meta-path finder in [#​1366](https://redirect.github.com/scikit-build/scikit-build-core/issues/1366) - correct the `DynamicMetadataProtocol.dynamic_metadata` signature in [#​1365](https://redirect.github.com/scikit-build/scikit-build-core/issues/1365) - combine same-field `dynamic_wheel` reports with OR in [#​1437](https://redirect.github.com/scikit-build/scikit-build-core/issues/1437) - error on unknown keys in `regex`/`template` plugin settings instead of silently ignoring them in [#​1319](https://redirect.github.com/scikit-build/scikit-build-core/issues/1319) - handle typed `vcs_versioning.overrides` in mypy in [#​1388](https://redirect.github.com/scikit-build/scikit-build-core/issues/1388) - Wheel: - auto-discover namespace packages in wheel builds in [#​1385](https://redirect.github.com/scikit-build/scikit-build-core/issues/1385) - don't error when a `wheel.packages` source is CMake-generated in [#​1440](https://redirect.github.com/scikit-build/scikit-build-core/issues/1440) - use `Path.as_posix()` for including generated files in SDist/wheel by [@​shiftinv](https://redirect.github.com/shiftinv) in [#​1381](https://redirect.github.com/scikit-build/scikit-build-core/issues/1381) - clamp `SOURCE_DATE_EPOCH` to the ZIP timestamp range in [#​1423](https://redirect.github.com/scikit-build/scikit-build-core/issues/1423) - emit installer-compatible `abi3t` wheel tag in [#​1380](https://redirect.github.com/scikit-build/scikit-build-core/issues/1380) - honor `CMAKE_OSX_DEPLOYMENT_TARGET` in the wheel platform tag in [#​1338](https://redirect.github.com/scikit-build/scikit-build-core/issues/1338) - honor an explicit empty `license-files` to disable license collection in [#​1311](https://redirect.github.com/scikit-build/scikit-build-core/issues/1311) and [#​1322](https://redirect.github.com/scikit-build/scikit-build-core/issues/1322) - write `location = "source"` generated files as UTF-8, don't crash on subdirectories inside the scripts install dir, and fully prune consecutive excluded directories in [#​1322](https://redirect.github.com/scikit-build/scikit-build-core/issues/1322) - SDist: - don't crash on dangling symlinks with `resolve-symlinks = "all"`, and detect symlink loops when walking the source tree, in [#​1341](https://redirect.github.com/scikit-build/scikit-build-core/issues/1341) and [#​1421](https://redirect.github.com/scikit-build/scikit-build-core/issues/1421) - don't prune directories matched only by glob includes in default inclusion mode in [#​1339](https://redirect.github.com/scikit-build/scikit-build-core/issues/1339) - Editable: - make namespace package installs importable, including remapped namespace packages, in [#​1346](https://redirect.github.com/scikit-build/scikit-build-core/issues/1346) and [#​1427](https://redirect.github.com/scikit-build/scikit-build-core/issues/1427) - fix import subpackage propagation in [#​1304](https://redirect.github.com/scikit-build/scikit-build-core/issues/1304) - don't treat versioned sonames as importable modules in [#​1337](https://redirect.github.com/scikit-build/scikit-build-core/issues/1337) - add symlinked module's real dir to `__path__` in [#​1335](https://redirect.github.com/scikit-build/scikit-build-core/issues/1335) - `importlib.resources.files()` in redirect mode in [#​1279](https://redirect.github.com/scikit-build/scikit-build-core/issues/1279) - recognize Cython `__init__.pxd`/`.pyx` as package indicators by [@​vyasr](https://redirect.github.com/vyasr) in [#​1292](https://redirect.github.com/scikit-build/scikit-build-core/issues/1292) - debounce rebuild to once per process in [#​1368](https://redirect.github.com/scikit-build/scikit-build-core/issues/1368) - `rebuild()` no longer hides the build output on failed rebuilds in [#​1318](https://redirect.github.com/scikit-build/scikit-build-core/issues/1318) - refuse to wipe a populated rebuild-dir, and use safe install/build paths for manual `rebuild()`, in [#​1400](https://redirect.github.com/scikit-build/scikit-build-core/issues/1400) and [#​1429](https://redirect.github.com/scikit-build/scikit-build-core/issues/1429) - only block absolute `wheel.install-dir` for rebuilds in [#​1334](https://redirect.github.com/scikit-build/scikit-build-core/issues/1334) - CMake: - cap `SKBUILD_PROJECT_VERSION` to four components in [#​1369](https://redirect.github.com/scikit-build/scikit-build-core/issues/1369) - strip flags from sysconfig CC/CXX to just the executable, keeping compiler wrappers, in [#​1331](https://redirect.github.com/scikit-build/scikit-build-core/issues/1331) and [#​1418](https://redirect.github.com/scikit-build/scikit-build-core/issues/1418) - generator handling: detect two-token `-G Ninja` and `-G` in `CMAKE_ARGS`, detect multi-config generators set via `cmake.define.CMAKE_GENERATOR` so the right `--config` is used, and apply full Ninja handling to `Ninja Multi-Config` in [#​1320](https://redirect.github.com/scikit-build/scikit-build-core/issues/1320) and [#​1352](https://redirect.github.com/scikit-build/scikit-build-core/issues/1352) - free-threaded Windows import library and two-token `-D` parsing in [#​1422](https://redirect.github.com/scikit-build/scikit-build-core/issues/1422) - don't skip the ninja requirement when the generator is forced to Ninja in [#​1442](https://redirect.github.com/scikit-build/scikit-build-core/issues/1442) - more reliably find the Python library on Windows in [#​1310](https://redirect.github.com/scikit-build/scikit-build-core/issues/1310) - warn when CMake will build a mismatched `x86_64` extension on macOS in [#​1404](https://redirect.github.com/scikit-build/scikit-build-core/issues/1404) - `-DCMAKE_SYSTEM_PROCESSOR` in the CMake args suppresses `ARCHFLAGS` handling on macOS, as documented, in [#​1320](https://redirect.github.com/scikit-build/scikit-build-core/issues/1320) - comments inside `cmake_minimum_required(...)` no longer break `cmake.version = "CMakeLists.txt"`, and unparsable files fall back gracefully in [#​1319](https://redirect.github.com/scikit-build/scikit-build-core/issues/1319) - File API: properly handle `Union` by [@​LecrisUT](https://redirect.github.com/LecrisUT) in [#​1272](https://redirect.github.com/scikit-build/scikit-build-core/issues/1272); read the toolchains reply, tolerate optional link fields, and restore missing `Target.sources`/`InstallRule.type` fields in [#​1311](https://redirect.github.com/scikit-build/scikit-build-core/issues/1311) and [#​1319](https://redirect.github.com/scikit-build/scikit-build-core/issues/1319) - CLI: - argument parsing and clear errors for common mistakes in [#​1426](https://redirect.github.com/scikit-build/scikit-build-core/issues/1426) - Hatchling plugin: - ignore hatchling's reserved enable-by-default hook option in [#​1419](https://redirect.github.com/scikit-build/scikit-build-core/issues/1419) - don't double the `wheel.install-dir` prefix, which made wheels unimportable, in [#​1321](https://redirect.github.com/scikit-build/scikit-build-core/issues/1321) - Setuptools plugin: - wrapper path and classic scikit-build compatibility fixes in [#​1295](https://redirect.github.com/scikit-build/scikit-build-core/issues/1295) and [#​1316](https://redirect.github.com/scikit-build/scikit-build-core/issues/1316) - protect `SetupError` in [#​1293](https://redirect.github.com/scikit-build/scikit-build-core/issues/1293) - accept `wheel-free-setuptools` extra in the plugin warning in [#​1413](https://redirect.github.com/scikit-build/scikit-build-core/issues/1413) - don't require `editable.mode` for `build_ext --inplace` in [#​1432](https://redirect.github.com/scikit-build/scikit-build-core/issues/1432) - build-type list rejection, `package_dir` editable root, and free-threaded limited-API gate in [#​1428](https://redirect.github.com/scikit-build/scikit-build-core/issues/1428) - resolve overrides with the correct `wheel`/`editable` state in [#​1321](https://redirect.github.com/scikit-build/scikit-build-core/issues/1321) - Sweeps: - many further small fixes across settings, wheel, editable, File API, generator detection, and the plugins from extensive review sweeps in [#​1305](https://redirect.github.com/scikit-build/scikit-build-core/issues/1305), [#​1306](https://redirect.github.com/scikit-build/scikit-build-core/issues/1306), [#​1311](https://redirect.github.com/scikit-build/scikit-build-core/issues/1311), [#​1318](https://redirect.github.com/scikit-build/scikit-build-core/issues/1318), [#​1319](https://redirect.github.com/scikit-build/scikit-build-core/issues/1319), [#​1320](https://redirect.github.com/scikit-build/scikit-build-core/issues/1320), [#​1321](https://redirect.github.com/scikit-build/scikit-build-core/issues/1321), [#​1322](https://redirect.github.com/scikit-build/scikit-build-core/issues/1322), and [#​1323](https://redirect.github.com/scikit-build/scikit-build-core/issues/1323) Documentation: - New guides and FAQs: - add a workspaces and monorepos guide in [#​1444](https://redirect.github.com/scikit-build/scikit-build-core/issues/1444) - add a Windows debug builds note in [#​1450](https://redirect.github.com/scikit-build/scikit-build-core/issues/1450) - FAQ for IDE IntelliSense / `compile_commands.json` in [#​1447](https://redirect.github.com/scikit-build/scikit-build-core/issues/1447) - explain target output paths on MSVC / multi-config generators in [#​1446](https://redirect.github.com/scikit-build/scikit-build-core/issues/1446) - FAQ on coverage and debugging (gcov/gcovr/GDB) in [#​1409](https://redirect.github.com/scikit-build/scikit-build-core/issues/1409) - tips for shipping a ctypes-loaded shared library in [#​1408](https://redirect.github.com/scikit-build/scikit-build-core/issues/1408) - FAQ for dependency library in `site-packages/bin` or `lib` in [#​1393](https://redirect.github.com/scikit-build/scikit-build-core/issues/1393) - document `cmake.module` entry point and metadata states in [#​1360](https://redirect.github.com/scikit-build/scikit-build-core/issues/1360) - 1.0 refresh: - dedupe, simplify, and restructure the documentation in [#​1448](https://redirect.github.com/scikit-build/scikit-build-core/issues/1448) - review and refresh documentation for the 1.0 release in [#​1402](https://redirect.github.com/scikit-build/scikit-build-core/issues/1402) - add missing versionadded/versionchanged directives for 1.0 in [#​1405](https://redirect.github.com/scikit-build/scikit-build-core/issues/1405) - refresh stale guidance and version pins in [#​1361](https://redirect.github.com/scikit-build/scikit-build-core/issues/1361) - fix incorrect config keys and stale claims in [#​1359](https://redirect.github.com/scikit-build/scikit-build-core/issues/1359) - remove documented unimplemented search settings in [#​1354](https://redirect.github.com/scikit-build/scikit-build-core/issues/1354) - show config-settings and env var forms in the config reference in [#​1347](https://redirect.github.com/scikit-build/scikit-build-core/issues/1347) - use `-C` instead of `--config-settings` in examples in [#​1451](https://redirect.github.com/scikit-build/scikit-build-core/issues/1451) - minor cleanup and style check in [#​1453](https://redirect.github.com/scikit-build/scikit-build-core/issues/1453) - fix typos and grammar in [#​1362](https://redirect.github.com/scikit-build/scikit-build-core/issues/1362) - Clarifications and fixes: - clarify `wheel.packages` semantics (top-level, not a find/where) in [#​1407](https://redirect.github.com/scikit-build/scikit-build-core/issues/1407) - address post-merge review notes on entry-point config in [#​1438](https://redirect.github.com/scikit-build/scikit-build-core/issues/1438) - fix `sdist.inclusion-mode` name and dynamic-metadata field requirement in [#​1420](https://redirect.github.com/scikit-build/scikit-build-core/issues/1420) - clarify README example and unify `cmake_minimum_required` ranges in [#​1392](https://redirect.github.com/scikit-build/scikit-build-core/issues/1392) - improve docs on source in [#​1276](https://redirect.github.com/scikit-build/scikit-build-core/issues/1276) - avoid a common timeout in [#​1308](https://redirect.github.com/scikit-build/scikit-build-core/issues/1308) - Examples: - use cython-cmake and f2py-cmake in getting started examples in [#​1353](https://redirect.github.com/scikit-build/scikit-build-core/issues/1353) - link `Python::Module` in the Fortran example for CMake 4.x in [#​1373](https://redirect.github.com/scikit-build/scikit-build-core/issues/1373) - Site: - fix RTD version and render GitHub-style admonitions in [#​1410](https://redirect.github.com/scikit-build/scikit-build-core/issues/1410) - make sphinx-tippy tooltips follow the active theme in [#​1349](https://redirect.github.com/scikit-build/scikit-build-core/issues/1349) - add GitHub icon to header icon row in [#​1387](https://redirect.github.com/scikit-build/scikit-build-core/issues/1387) - add more projects using scikit-build-core, including pyarrow by [@​raulcd](https://redirect.github.com/raulcd), in [#​1266](https://redirect.github.com/scikit-build/scikit-build-core/issues/1266) and [#​1309](https://redirect.github.com/scikit-build/scikit-build-core/issues/1309) CI and testing: - Cover uv as an install frontend via a workspace in [#​1443](https://redirect.github.com/scikit-build/scikit-build-core/issues/1443) - Add Python 3.15 and 3.15t to CI in [#​1383](https://redirect.github.com/scikit-build/scikit-build-core/issues/1383) - Skip heavy test matrix on docs-only changes in [#​1356](https://redirect.github.com/scikit-build/scikit-build-core/issues/1356) - Adapt to setuptools-scm 10 / vcs-versioning 2 warnings in [#​1350](https://redirect.github.com/scikit-build/scikit-build-core/issues/1350) - Exclude pytest 9.1.0 (params-fixture override regression) in [#​1329](https://redirect.github.com/scikit-build/scikit-build-core/issues/1329) - Pin old-CMake Windows rows to windows-2022, add a VS 2026 row in [#​1326](https://redirect.github.com/scikit-build/scikit-build-core/issues/1326) - Reduce test-suite wall-clock time in [#​1325](https://redirect.github.com/scikit-build/scikit-build-core/issues/1325) - Fix Windows `PermissionError` from concurrent wheelhouse lock races, and clean up incomplete or old editable wheels in the wheelhouse, in [#​1283](https://redirect.github.com/scikit-build/scikit-build-core/issues/1283) and [#​1288](https://redirect.github.com/scikit-build/scikit-build-core/issues/1288) - Secure GitHub Actions workflows in [#​1302](https://redirect.github.com/scikit-build/scikit-build-core/issues/1302) - Use native uv integration in RTD in [#​1274](https://redirect.github.com/scikit-build/scikit-build-core/issues/1274) - Stub macOS lipo arch probe for fake-subprocess tests in [#​1313](https://redirect.github.com/scikit-build/scikit-build-core/issues/1313) and [#​1314](https://redirect.github.com/scikit-build/scikit-build-core/issues/1314) - Migrate beakerlib test to python script by [@​LecrisUT](https://redirect.github.com/LecrisUT) in [#​1376](https://redirect.github.com/scikit-build/scikit-build-core/issues/1376) Internal: - Faster startup via lazy imports (PEP 810) in [#​1415](https://redirect.github.com/scikit-build/scikit-build-core/issues/1415) - Unify wheel build orchestration across backend and hatch plugin in [#​1345](https://redirect.github.com/scikit-build/scikit-build-core/issues/1345) - Rename editable files to `_editable_skbc_<name>` in [#​1332](https://redirect.github.com/scikit-build/scikit-build-core/issues/1332) - Drop the empty `pyproject` extra in [#​1398](https://redirect.github.com/scikit-build/scikit-build-core/issues/1398) - Remove `orjson` from dependencies in [#​1333](https://redirect.github.com/scikit-build/scikit-build-core/issues/1333) - Support `uvx scikit-build-core` too in [#​1396](https://redirect.github.com/scikit-build/scikit-build-core/issues/1396) - Add a utils package by [@​LecrisUT](https://redirect.github.com/LecrisUT) in [#​1268](https://redirect.github.com/scikit-build/scikit-build-core/issues/1268) - Simplification cleanups from a repo sweep in [#​1312](https://redirect.github.com/scikit-build/scikit-build-core/issues/1312) - Use local `TYPE_CHECKING = False` instead of importing from typing in [#​1412](https://redirect.github.com/scikit-build/scikit-build-core/issues/1412) - Adapt to better pathspec types in [#​1277](https://redirect.github.com/scikit-build/scikit-build-core/issues/1277) ##### New Contributors - [@​raulcd](https://redirect.github.com/raulcd) made their first contribution in [#​1266](https://redirect.github.com/scikit-build/scikit-build-core/pull/1266) - [@​shiftinv](https://redirect.github.com/shiftinv) made their first contribution in [#​1381](https://redirect.github.com/scikit-build/scikit-build-core/pull/1381) - [@​Doekin](https://redirect.github.com/Doekin) made their first contribution in [#​1265](https://redirect.github.com/scikit-build/scikit-build-core/pull/1265) **Full Changelog**: <scikit-build/scikit-build-core@v0.12.2...v1.0.0> </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - "every weekend" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/munich-quantum-toolkit/core). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNjUuMSIsInVwZGF0ZWRJblZlciI6IjQzLjI2NS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiLCJweXRob24iXX0=--> --------- Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Daniel Haag <121057143+denialhaag@users.noreply.github.com> (cherry picked from commit 70ea613) Assisted-by: GPT-5.6 via Codex
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> (cherry picked from commit b027e18) Assisted-by: GPT-5.6 via Codex
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> (cherry picked from commit 5788b46) Assisted-by: GPT-5.6 via Codex
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> (cherry picked from commit 96b6517) Assisted-by: GPT-5.6 via Codex
This pull request updates the files in this repository with the latest changes from the MQT Templates repository. For details on the respective changes, see the [changelog](https://github.com/munich-quantum-toolkit/templates/blob/main/CHANGELOG.md) as well as the [upgrade guide](https://github.com/munich-quantum-toolkit/templates/blob/main/UPGRADING.md). Co-authored-by: mqt-app[bot] <219534693+mqt-app[bot]@users.noreply.github.com> (cherry picked from commit da48c79) Assisted-by: GPT-5.6 via Codex
🤖 *AI text below* 🤖 - Update all reusable workflow pins to the immutable v2.2.1 release commit. - Share one scikit-build-core build directory across Python test sessions. - Configure coverage.py's `sysmon` core and parallel data collection centrally. - Require pytest-cov 7.1 for the coverage configuration. The shared build directory lets the minimum- and regular-resolution nox sessions reuse the same CMake and Ninja state. On Windows, reusable workflows v2.2.1 initialize native MSVC and use Ninja so the existing job-local `sccache` installation is active. The final test-only experiment passed on macOS and Windows in [run 30434315809](https://github.com/munich-quantum-toolkit/core/actions/runs/30434315809). The full Core CI run for the same source revision also passed on every supported runner in [run 30434310296](https://github.com/munich-quantum-toolkit/core/actions/runs/30434310296). The strongest reuse was on Windows: after the minimum-resolution builds, all five regular-resolution sessions completed in 47 seconds and `sccache` reported a 35.93% hit rate in [run 30404816970](https://github.com/munich-quantum-toolkit/core/actions/runs/30404816970). - [x] `uv lock --check` - [x] Full Core lint session - [x] macOS and Windows performance experiment - [x] Full Core CI matrix - [x] No mutable workflow references or benchmark-only workflow remain - [ ] I confirm that I have personally reviewed and understood all AI-generated content, and accept full responsibility for it. --------- Co-authored-by: Daniel Haag <121057143+denialhaag@users.noreply.github.com> (cherry picked from commit 3e3c7ba) Assisted-by: GPT-5.6 via Codex
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> (cherry picked from commit 9a9433d) Assisted-by: GPT-5.6 via Codex
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> (cherry picked from commit 32a5226) Assisted-by: GPT-5.6 via Codex
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> (cherry picked from commit 54b264e) Assisted-by: GPT-5.6 via Codex
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> (cherry picked from commit afd855b) Assisted-by: GPT-5.6 via Codex
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> (cherry picked from commit 07fafad) Assisted-by: GPT-5.6 via Codex
🤖 *AI text below* 🤖 Complete the public `qdmi::toString` mappings for the child-device session parameter and device property introduced with child-device support. This keeps diagnostics and property-name formatting exhaustive for the current QDMI enum surface. This small fix was identified while reviewing #1912 and is extracted because it has no dependency on configurable device discovery. The existing child-device changelog entry now also attributes this follow-up to #1952 and retains the original human author attribution. - Focused child-device string-conversion tests: 2 passed - Complete FoMaC C++ test binary: 171 passed - `uvx nox -s lint` - `git diff --check` - [x] The pull request only contains commits that are focused and relevant to this change. - [x] I have added appropriate tests that cover the changed functionality. - [x] Documentation and migration guidance are not needed for this diagnostic-string completion. - [x] The existing changelog entry includes this PR and all human authors. - [x] The change follows the project's style guidelines and introduces no new warnings. - [x] The changes are fully tested and pass the relevant local checks. - [x] I have reviewed my own code changes. **If PR contains AI-assisted content:** - [x] Any agent that created, edited, or submitted GitHub content was explicitly authorized for that scope, as required by our [AI Usage Guidelines](https://github.com/munich-quantum-toolkit/core/blob/main/docs/ai_usage.md). - [x] Every agent-authored or agent-edited public text body begins with the visible disclosure `🤖 *AI text below* 🤖` (titles are exempt). - [x] AI-assisted commits include an `Assisted-by: [Model Name] via [Tool Name]` footer. - [x] I confirm that I have personally reviewed and understood all AI-generated content, and accept full responsibility for it. (cherry picked from commit 537a694) Assisted-by: GPT-5.6 via Codex
🤖 *AI text below* 🤖 ## Description CMake 4.3 writes a `cmake_test_discovery_*.json` bookkeeping file to the directory passed to `gtest_discover_tests(WORKING_DIRECTORY ...)`. Our test helpers passed source directories there because the same argument also controls the runtime working directory of each discovered test. As a result, configuring and building tests could dirty the source tree. Run GoogleTest discovery from the current binary directory so the bookkeeping file remains a build artifact. Preserve the existing runtime working directory by setting the discovered tests' `WORKING_DIRECTORY` property separately. The property name is deferred through a generator expression so CMake's argument parser does not interpret it as a second discovery option. This is extracted from #1912 because it is independent of the QDMI configuration work. ## Validation - Configured and built representative targets with CMake 4.3.2. - Confirmed that no `cmake_test_discovery_*.json` files appear outside `build/`. - Confirmed that the ordinary helper still runs a FoMaC test from its source directory. - Confirmed that the custom-working-directory helper still runs an IR test from its configured build directory. - `uvx nox -s lint` - `git diff --check` ## Checklist - [x] The pull request only contains commits that are focused and relevant to this change. - [x] I have added appropriate tests that cover the new/changed functionality. (Existing tests exercise both helper variants.) - [x] I have updated the documentation to reflect these changes. (No user-facing documentation change is needed.) - [x] I have added entries to the changelog for any noteworthy additions, changes, fixes, or removals. (Not user-facing.) - [x] I have added migration instructions to the upgrade guide (if needed). (No migration is needed.) - [x] The changes follow the project's style guidelines and introduce no new warnings. - [x] The changes are fully tested and pass the CI checks. (Local checks pass; CI is pending.) - [x] I have reviewed my own code changes. **If PR contains AI-assisted content:** - [x] Any agent that created, edited, or submitted GitHub content was explicitly authorized for that scope, as required by our [AI Usage Guidelines](https://github.com/munich-quantum-toolkit/core/blob/main/docs/ai_usage.md). - [x] Every agent-authored or agent-edited public text body begins with the visible disclosure `🤖 *AI text below* 🤖` (titles are exempt). - [x] AI-assisted commits include an `Assisted-by: [Model Name] via [Tool Name]` footer. - [x] I confirm that I have personally reviewed and understood all AI-generated content, and accept full responsibility for it. (cherry picked from commit d14b33f) Assisted-by: GPT-5.6 via Codex
🤖 *AI text below* 🤖 ## Description This updates the locally maintained MQT Core agent guide with lessons from recent reviews: - keep tests in the corresponding test tree, organized by the subsystem that owns the behavior, and reserve subprocess tests for genuine CLI contracts; - avoid promoting optional production tools into the default build solely for testing; and - keep MLIR pass, pipeline, and option descriptions aligned with their actual scope, defaults, limitations, and failure modes. It also keeps agent reviews focused on substantive contribution quality. The shared human-facing AI policy is being updated separately in munich-quantum-toolkit/templates#383. ## Checklist - [x] The pull request only contains commits that are focused and relevant to this change. - [x] No behavioral tests are needed for this documentation-only change. - [x] I have updated the documentation to reflect these changes. - [x] No changelog entry is needed for this internal agent-guide update. - [x] No migration instructions are needed. - [x] The changes follow the project's style guidelines and introduce no new warnings. - [x] The full local lint suite passes. - [x] I have reviewed my own code changes. **If PR contains AI-assisted content:** - [x] The agent-managed GitHub actions were explicitly authorized for this scope. - [x] This agent-authored PR description begins with the required visible disclosure. - [x] I confirm that I have reviewed and understood the AI-generated content and accept full responsibility for it. (cherry picked from commit 7c8aeb2) Assisted-by: GPT-5.6 via Codex
🤖 *AI text below* 🤖 ## Description Simplify the cibuildwheel configuration after the reusable packaging workflow moved to cibuildwheel v4: - remove the unsupported `cp313t-*` skip selector; - rely on cibuildwheel v4's built-in ABI3 audit instead of appending a duplicate audit to the repair command. The generic `cp3??t-*` test skip remains because test dependencies do not yet provide the required free-threaded wheels. Consequently, `cp314t` continues to be built but is not tested in the wheel job. The corresponding migration guidance is documented in [workflows#424](munich-quantum-toolkit/workflows#424). ## Validation - `uvx --from cibuildwheel==4.1.0 cibuildwheel --platform macos --print-build-identifiers .` - `uvx nox --non-interactive -s lint` - `git diff --check` ## Checklist - [x] The pull request only contains commits that are focused and relevant to this change. - [x] Tests are not applicable to this build-configuration cleanup. - [x] Documentation, changelog, and upgrade-guide changes are not needed in this consumer repository; migration guidance lives in workflows#424. - [x] The changes follow the project's style guidelines and introduce no new warnings. - [x] The local validation checks pass. - [x] I have reviewed the proposed changes. **If PR contains AI-assisted content:** - [x] The agent was explicitly authorized to create these pull requests. - [x] This body begins with the required visible disclosure. - [x] The AI-assisted commit includes an `Assisted-by: GPT-5.6 via Codex` footer. - [x] I confirm that I have personally reviewed and understood all AI-generated content, and accept full responsibility for it. (cherry picked from commit 369e4ae) Assisted-by: GPT-5.6 via Codex
🤖 *AI text below* 🤖 ## Summary - pin the templating workflow to the exact v1.4.2 release commit - apply the generated Release Drafter schema migration and AI-disclosure policy updates - rename the custom Core category to `CI & Tooling` and include the `tooling` label This supersedes the stale v1.4.1-generated changes in #1963. In particular, rendering v1.4.2 no longer changes the MLIR dependency semantics in `docs/installation.md`. ## Validation - `./.agent/run.sh uvx nox --non-interactive -s lint` - `git diff --check` - rendered from signed release commit `d0c5adb86d19a5095f871cb6184cfdab298e943c` ## AI assistance GPT-5.6 via Codex rendered the released templates, prepared the rollout changes, and ran the validation. I reviewed the resulting diff and checks. (cherry picked from commit df4bd76) Assisted-by: GPT-5.6 via Codex
Backport-of: 85a65460dd98a841f47fa44d016181ad55f31e55 Assisted-by: GPT-5.6 via Codex
🤖 *AI text below* 🤖 ## Summary - Add `ThreeQubitGateMatrix` / `makeThreeQubitGateDD` for direct bottom-up DD construction of three-qubit gates (same style as `makeGateDD` / `makeTwoQubitGateDD`), starting with RCCX via `opToThreeQubitGateMatrix`. - Use MSB-among-operands bit order for three-qubit matrices (`targets[0]` = high bit), matching `makeTwoQubitGateDD` and QCO (`embed` / `CtrlOp`); RCCX is the `5/6/7` form (not the Qiskit little-endian `3/5/7` labeling). - Route RCCX through the new path in `getStandardOperationDD` instead of the multiply-based construction. - Share control-wrapping, range checks, and terminal materialization helpers across 1q/2q/3q gate DD builders. - Wire QCO `buildFunctionality` / `simulate` dense path through `makeThreeQubitGateDD` for 3-wire unitaries (plain copy; full-width `makeDDFromMatrix` still remaps QCO MSB → global DD LSB). - Consolidate RCCX DD construction tests (target permutations, overload wrappers, extra pos/neg controls) and cover partial-width 3q dense `inv` in QCO DD functionality tests. ## Checklist <!--- This checklist serves as a reminder of a couple of things that ensure your pull request will be merged swiftly. --> - [x] The pull request only contains commits that are focused and relevant to this change. - [x] I have added appropriate tests that cover the new/changed functionality. - [x] I have updated the documentation to reflect these changes. - [x] I have added entries to the changelog for any noteworthy additions, changes, fixes, or removals. - [ ] I have added migration instructions to the upgrade guide (if needed). - [ ] The changes follow the project's style guidelines and introduce no new warnings. - [ ] The changes are fully tested and pass the CI checks. - [x] I have reviewed my own code changes. **If PR contains AI-assisted content:** - [x] Any agent that created, edited, or submitted GitHub content was explicitly authorized for that scope, as required by our [AI Usage Guidelines](https://github.com/munich-quantum-toolkit/core/blob/main/docs/ai_usage.md). - [x] Every agent-authored or agent-edited public text body begins with the visible disclosure `🤖 *AI text below* 🤖` (titles are exempt). - [ ] AI-assisted commits include an `Assisted-by: [Model Name] via [Tool Name]` footer. - [x] I confirm that I have personally reviewed and understood all AI-generated content, and accept full responsibility for it. --------- Signed-off-by: Lukas Burgholzer <burgholzer@me.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: Lukas Burgholzer <burgholzer@me.com> Backport-of: b43afaf Assisted-by: GPT-5.6 via Codex
First contribution to UnitaryHACK for me! 🎉 And man, I've enjoyed working on this one! 😀 > [!NOTE] > The current PR still does not cover all the functionality proposed in the #1695 issue. In particular, the support for QIR adaptive base modules and strings is not yet implemented. But the current solution is ready for review. There are two main pieces of work: 1. The introduction of an MQT Core QIR JIT library (`MQT::CoreQIRJIT`, `src/qir/jit`). This library contains almost all of the previous `Runner.cpp` code: LLVM JIT initialization, QIR runtime symbols registration, and program execution. Compared to that previous Runner code, it also lets you parse an IR directly from a string, and not only from a file. The main purpose of the QIR JIT library is to encapsulate the LLVM JIT code so that it can also be used from the QDMI device. The interface is a `qir::jit::Session` type that can be constructed from an input file or from a byte string (text for LLVM assembly or binary for LLVM bitcode), and then run with or without arguments (e.g., the Runner CLI can run a JIT program with arguments, and the QDMI device without arguments). 2. The job submission in `Device.cpp`. By using the MQT Core QIR JIT library, the device can just run a JIT program, get the results, and process them (filter zero and one addresses, sort the addresses, and transform the measurements into a bit string). The new functionality is tested via two tests in `results_sampling_test.cpp`, one that exercises the QIR base module path, and the other that exercises the QIR base string path. For this PR I have used Claude Opus 4.7, mainly from a CLion terminal, and for different purposes: from understanding existing code, to drafting code snippets, catching bugs and typos, running clang-format and clang-tidy and proposing fixes for clang-tidy warnings, reviewing wording in commit messages and docs... Fixes #1695 <!--- This checklist serves as a reminder of a couple of things that ensure your pull request will be merged swiftly. --> - [X] The pull request only contains commits that are focused and relevant to this change. - [X] I have added appropriate tests that cover the new/changed functionality. - [X] I have updated the documentation to reflect these changes. - [X] I have added entries to the changelog for any noteworthy additions, changes, fixes, or removals. - [X] I have added migration instructions to the upgrade guide (if needed). - [X] The changes follow the project's style guidelines and introduce no new warnings. - [X] The changes are fully tested and pass the CI checks. - [X] I have reviewed my own code changes. **If PR contains AI-assisted content:** - [X] I have disclosed the use of AI tools in the PR description as per our [AI Usage Guidelines](https://github.com/munich-quantum-toolkit/core/blob/main/docs/ai_usage.md). - [X] AI-assisted commits include an `Assisted-by: [Model Name] via [Tool Name]` footer. - [X] I confirm that I have personally reviewed and understood all AI-generated content, and accept full responsibility for it. --------- Signed-off-by: Roberto Turrado Camblor <rturrado@gmail.com> Co-authored-by: Yannick Stade <100073938+ystade@users.noreply.github.com> (cherry picked from commit 12cf546) Assisted-by: GPT-5.6 via Codex
## Description This PR fixes the QIR function names for adjoint gates. For example, `__quantum__qis__sdg__body` is replaced with `__quantum__qis__s__adj`. ## Checklist - [x] The pull request only contains commits that are focused and relevant to this change. - [x] ~~I have added appropriate tests that cover the new/changed functionality.~~ - [x] ~~I have updated the documentation to reflect these changes.~~ - [x] I have added entries to the changelog for any noteworthy additions, changes, fixes, or removals. - [x] ~~I have added migration instructions to the upgrade guide (if needed).~~ - [x] The changes follow the project's style guidelines and introduce no new warnings. - [x] The changes are fully tested and pass the CI checks. - [x] I have reviewed my own code changes. Backport-of: 334da06e6ad68686706234775788d51407c307ba Assisted-by: GPT-5.6 via Codex
(cherry picked from commit a8cb36f) Assisted-by: GPT-5.6 via Codex
This PR completes the QIR Output Schemas support in the runtime. PR #1799 added the non-bit `__quantum__rt__*_record_output` entry points in MQT Core's own `label: value` format. This follow-up switches the runtime to the spec-mandated tab-separated output records, adds `HEADER` and per-shot `START` / `METADATA` / `END` framing, and drives the Labeled / Ordered schema selection from the QIR program's `output_labeling_schema` function attribute. QIR Output Schemas spec: https://github.com/qir-alliance/qir-spec/tree/main/specification/output_schemas 1. **The QIR program drives the schema selection**. `JitSession::initialize` reads the `output_labeling_schema` attribute from the entry-point function and calls `Runtime::setOutputSchema`. The value `ordered` selects Ordered; any other value, a valueless attribute, or a missing attribute selects Labeled (the Runtime's chosen default; the spec does not define one). 2. **QIR record-output calls delegate to a per-type Runtime API**. `Runtime` exposes per-type output methods: `output{Result,Bool,Int,Float,Tuple,Array}`. Each `__quantum__rt__*_record_output` in `QIR.cpp` becomes a one-line delegation. The methods share a private `outputType` helper that emits `OUTPUT\t<TYPE>\t<value>[\tlabel]\n` and honors the active schema (label column dropped in Ordered mode). 3. **Runtime exposes framing to clients**. `Runtime` exposes `outputProgramHeader`, `outputShotStart`, `outputShotEnd`. The `mqt-core-qir-runner` and the DDSIM QDMI Device emit the two `HEADER` records once before running, and bracket each shot with `START` / `END`. `outputShotStart` also emits `METADATA\toutput_labeling_schema\t<schema>\n` so the output is self-describing. Tests: `test_qir_runtime.cpp` covers the framing shape, per-type line shape, and Labeled vs. Ordered branches. `test_jit_session.cpp` covers the attribute-driven schema selection for `ordered`, `labeled`, and absent-attribute cases. Fixes #1798 - [x] The pull request only contains commits that are focused and relevant to this change. - [x] I have added appropriate tests that cover the new/changed functionality. - [x] I have updated the documentation to reflect these changes. - [x] I have added entries to the changelog for any noteworthy additions, changes, fixes, or removals. - [ ] I have added migration instructions to the upgrade guide (if needed). - [x] The changes follow the project's style guidelines and introduce no new warnings. - [ ] The changes are fully tested and pass the CI checks. - [x] I have reviewed my own code changes. **If PR contains AI-assisted content:** - [x] I have disclosed the use of AI tools in the PR description as per our [AI Usage Guidelines](https://github.com/munich-quantum-toolkit/core/blob/main/docs/ai_usage.md). - [x] AI-assisted commits include an `Assisted-by: [Model Name] via [Tool Name]` footer. - [x] I confirm that I have personally reviewed and understood all AI-generated content, and accept full responsibility for it. --------- Signed-off-by: rturrado <rturrado@gmail.com> Signed-off-by: Roberto Turrado Camblor <rturrado@gmail.com> (cherry picked from commit afd8180) Assisted-by: GPT-5.6 via Codex
🤖 *AI text below* 🤖 This PR extracts the additive, MQT Core 3.x-compatible QDMI configuration foundation from #1901. It adds stable device identities and configurable discovery while retaining the current client interface, `qdmi::Driver`, FoMaC, Qiskit, and neutral-atom APIs. The breaking object-model refactor remains in #1901 and will be rebased onto this foundation. - Discover versioned definitions from `qdmi.json`, `[tool.qdmi]`, environment configuration, packaged fragments, and C++ runtime overrides. - Merge definitions by stable device ID with field-wise precedence, explicit disabled-ID reservation, strict validation, relative-path resolution, and explicit or isolated configuration modes. - Register and open devices by stable ID through C++, FoMaC, and Python. Fresh opens create independent sessions and apply per-call overrides without changing the configured client catalog. - Generate relocatable fragments for built-in devices and export neutral `QDMI_DEVICE_ID`, `QDMI_DEVICE_PREFIX`, and `QDMI_MANIFEST_NAME` CMake target metadata. Installed consumers can copy selected device runtimes without project-specific loader code. - Vendor the current toml++ single header used by the native TOML parser. - Document administration, project, environment, C++, Python, relocation, and static-consumer workflows. The public QDMI client C interface, `MQT::CoreQDMIDriver`, the FoMaC object model, and the existing Qiskit and neutral-atom APIs remain available. The unstable C++ `Driver::addDynamicDeviceLibrary` and Python `add_dynamic_device_library` entry points are replaced by `DeviceDefinition` registration and stable-ID opening; `UPGRADING.md` documents that migration. Configuration discovery and registration do not load device code. A library is loaded when a stable ID is explicitly opened or when the configured client catalog is first materialized. Separately installed device wheels are not scanned automatically; they can register a fallback definition or have their runtime and generated fragment colocated by the consuming build. - Release configure and complete 471-step build with LLVM/MLIR 22.1.3 - QDMI Driver suite: 109 passed - Registry suite: 12 passed - FoMaC suite: 174 passed - Neutral-atom FoMaC suite: 2 passed - Imported-device consumer tests: 2 passed - DDSIM suite: 45 passed - QIR JIT, runtime, and runner suites: 9, 63, and 5 passed - Python stub generation through the aggregate wheel target - `uvx nox -s lint` - `git diff --check` Fixes #1362 Fixes #1363 (cherry picked from commit 72c5f5f) Assisted-by: GPT-5.6 via Codex
🤖 *AI text below* 🤖 - add exact-byte FoMaC submission and retrieval for binary QDMI programs while preserving null-terminated text handling - expose the complete standard QDMI program-format enum in Python and enforce text/binary representation contracts - let embedding projects reuse an existing `spdlog::spdlog` target when adding MQT Core as a subdirectory - exercise textual QASM and real QIR bitcode paths through the DDSIM QDMI device This is an independent prerequisite for the QDMI integration in NVIDIA/cuda-quantum#4882. It does not depend on #1912 and can merge separately. Stable-ID device registration and selective provider composition remain part of #1912. QIR support is provided unconditionally by MQT Core following #1953; this PR does not add feature or capability negotiation. - release configure and focused build with LLVM/MLIR 22.1.3 - 172 native FoMaC tests - 47 DDSIM QDMI device tests, including QIR string and binary profiles - 178 focused Python FoMaC tests - focused parent-provided `spdlog::spdlog` CMake configure test - full repository lint - warning-as-error documentation build --------- Signed-off-by: Lukas Burgholzer <burgholzer@me.com> (cherry picked from commit d5ae60e) Assisted-by: GPT-5.6 via Codex
Use the v3 qc::Qubit type while ordering and wrapping gate controls, cast only at the DD node boundary, and keep the final QDMI malformed-program fixture name. Acknowledge intentionally discarded registry test paths and apply the formatter and updated Ruff suppression syntax required by the maintenance backports. These adaptations preserve the upstream behavior without v3 conversion warnings, test build failures, or lint drift. Assisted-by: GPT-5.6 via Codex
Make bundled DDSIM, neutral-atom, and superconducting QDMI devices independently selectable and disable them by default when MQT Core is embedded. Keep the driver, FoMaC, and device-independent registry tests available without bundled devices, and avoid modifying an embedding project's MLIR documentation target. Adapt the current PR head to v3 by retaining optional MLIR 21 support and the v3 documentation roles. Backport-of: cdc7403 Assisted-by: GPT-5.6 via Codex
burgholzer
commented
Jul 29, 2026
burgholzer
left a comment
Member
Author
There was a problem hiding this comment.
I believe this looks pretty good already.
Codecov Report❌ Patch coverage is 📢 Thoughts on this report? Let us know! |
Assisted-by: GPT-5.6 via Codex
Assisted-by: GPT-5.6 via Codex
Assisted-by: GPT-5.6 via Codex
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🤖 AI text below 🤖
Description
Backport selected changes from
mainto the maintainedv3.xbranch in preparation for MQT Core 3.8.0.The commits are kept separate by upstream change wherever practical. The series includes:
cdc740398e472c19b585cf6dbd7d41de053d84a6)v3 compatibility
This backport deliberately preserves the v3 architecture:
Validation
git diff --checkpassedThe pre-existing v3 test configuration still requires
llceven when MLIR is disabled. The non-MLIR library build itself succeeds; MLIR/QIR validation used LLVM/MLIR 21.Checklist
If PR contains AI-assisted content:
🤖 *AI text below* 🤖(titles are exempt).