-
-
Notifications
You must be signed in to change notification settings - Fork 44
✨ Refactor QDMI Devices and Fix Singleton Handling #1347
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
Docstrings generation was requested by @ystade. * #1328 (comment) The following files were modified: * `include/mqt-core/qdmi/sc/Device.hpp` * `src/na/device/Device.cpp` * `src/qdmi/Driver.cpp` * `src/qdmi/sc/App.cpp` * `src/qdmi/sc/Device.cpp` * `src/qdmi/sc/DynDevice.cpp` * `src/qdmi/sc/Generator.cpp` * `test/na/device/test_app.cpp` * `test/na/device/test_device.cpp` * `test/na/device/test_generator.cpp` * `test/qdmi/sc/test_app.cpp` * `test/qdmi/sc/test_device.cpp` * `test/qdmi/sc/test_generator.cpp` * `test/qdmi/test_driver.cpp` <details> <summary>These file types are not supported</summary> * `json/sc/device.json` * `src/qdmi/CMakeLists.txt` * `src/qdmi/sc/CMakeLists.txt` * `test/qdmi/CMakeLists.txt` * `test/qdmi/sc/CMakeLists.txt` </details> <details> <summary>ℹ️ Note</summary><blockquote> CodeRabbit cannot perform edits on its own pull requests yet. </blockquote></details> Co-authored-by: Yannick Stade <100073938+ystade@users.noreply.github.com>
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [munich-quantum-toolkit/workflows](https://redirect.github.com/munich-quantum-toolkit/workflows) | action | patch | `v1.17.2` -> `v1.17.3` | --- ### Release Notes <details> <summary>munich-quantum-toolkit/workflows (munich-quantum-toolkit/workflows)</summary> ### [`v1.17.3`](https://redirect.github.com/munich-quantum-toolkit/workflows/blob/HEAD/CHANGELOG.md#181---2025-04-04) [Compare Source](https://redirect.github.com/munich-quantum-toolkit/workflows/compare/v1.17.2...v1.17.3) *📚 Refer to the [GitHub Release Notes] for previous changelogs.* <!-- Version links --> [unreleased]: https://redirect.github.com/munich-quantum-toolkit/workflows/compare/v1.17.3...HEAD [1.17.3]: https://redirect.github.com/munich-quantum-toolkit/workflows/releases/tag/v1.17.3 [1.17.2]: https://redirect.github.com/munich-quantum-toolkit/workflows/releases/tag/v1.17.2 [1.17.1]: https://redirect.github.com/munich-quantum-toolkit/workflows/releases/tag/v1.17.1 [1.17.0]: https://redirect.github.com/munich-quantum-toolkit/workflows/releases/tag/v1.17.0 [1.16.2]: https://redirect.github.com/munich-quantum-toolkit/workflows/releases/tag/v1.16.2 [1.16.1]: https://redirect.github.com/munich-quantum-toolkit/workflows/releases/tag/v1.16.1 [1.16.0]: https://redirect.github.com/munich-quantum-toolkit/workflows/releases/tag/v1.16.0 [1.15.1]: https://redirect.github.com/munich-quantum-toolkit/workflows/releases/tag/v1.15.1 [1.15.0]: https://redirect.github.com/munich-quantum-toolkit/workflows/releases/tag/v1.15.0 [1.14.0]: https://redirect.github.com/munich-quantum-toolkit/workflows/releases/tag/v1.14.0 [1.13.0]: https://redirect.github.com/munich-quantum-toolkit/workflows/releases/tag/v1.13.0 [1.12.0]: https://redirect.github.com/munich-quantum-toolkit/workflows/releases/tag/v1.12.0 [1.11.0]: https://redirect.github.com/munich-quantum-toolkit/workflows/releases/tag/v1.11.0 [1.10.0]: https://redirect.github.com/munich-quantum-toolkit/workflows/releases/tag/v1.10.0 [1.9.0]: https://redirect.github.com/munich-quantum-toolkit/workflows/releases/tag/v1.9.0 [1.8.1]: https://redirect.github.com/munich-quantum-toolkit/workflows/releases/tag/v1.8.1 <!-- PR links --> [#​255]: https://redirect.github.com/munich-quantum-toolkit/workflows/pull/255 [#​254]: https://redirect.github.com/munich-quantum-toolkit/workflows/pull/254 [#​247]: https://redirect.github.com/munich-quantum-toolkit/workflows/pull/247 [#​241]: https://redirect.github.com/munich-quantum-toolkit/workflows/pull/241 [#​206]: https://redirect.github.com/munich-quantum-toolkit/workflows/pull/206 [#​188]: https://redirect.github.com/munich-quantum-toolkit/workflows/pull/188 [#​184]: https://redirect.github.com/munich-quantum-toolkit/workflows/pull/184 [#​160]: https://redirect.github.com/munich-quantum-toolkit/workflows/pull/160 [#​157]: https://redirect.github.com/munich-quantum-toolkit/workflows/pull/157 [#​151]: https://redirect.github.com/munich-quantum-toolkit/workflows/pull/151 [#​150]: https://redirect.github.com/munich-quantum-toolkit/workflows/pull/150 [#​146]: https://redirect.github.com/munich-quantum-toolkit/workflows/pull/146 [#​142]: https://redirect.github.com/munich-quantum-toolkit/workflows/pull/142 [#​128]: https://redirect.github.com/munich-quantum-toolkit/workflows/pull/128 [#​126]: https://redirect.github.com/munich-quantum-toolkit/workflows/pull/126 [#​119]: https://redirect.github.com/munich-quantum-toolkit/workflows/pull/119 [#​114]: https://redirect.github.com/munich-quantum-toolkit/workflows/pull/114 [#​102]: https://redirect.github.com/munich-quantum-toolkit/workflows/pull/102 [#​100]: https://redirect.github.com/munich-quantum-toolkit/workflows/pull/100 [#​96]: https://redirect.github.com/munich-quantum-toolkit/workflows/pull/96 [#​95]: https://redirect.github.com/munich-quantum-toolkit/workflows/pull/95 <!-- Contributor --> [**@​burgholzer**]: https://redirect.github.com/burgholzer [**@​ystade**]: https://redirect.github.com/ystade [**@​denialhaag**]: https://redirect.github.com/denialhaag [**@​flowerthrower**]: https://redirect.github.com/flowerthrower <!-- General links --> [Keep a Changelog]: https://keepachangelog.com/en/1.1.0/ [Common Changelog]: https://common-changelog.org [Semantic Versioning]: https://semver.org/spec/v2.0.0.html [GitHub Release Notes]: https://redirect.github.com/munich-quantum-toolkit/workflows/releases </details> --- ### Configuration 📅 **Schedule**: Branch creation - "every weekend" (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update 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:eyJjcmVhdGVkSW5WZXIiOiI0Mi4xOS45IiwidXBkYXRlZEluVmVyIjoiNDIuMTkuOSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIiwiZ2l0aHViLWFjdGlvbnMiXX0=--> Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [munich-quantum-software/setup-mlir](https://redirect.github.com/munich-quantum-software/setup-mlir) | action | pinDigest | -> `2f40b6e` | --- ### Configuration 📅 **Schedule**: Branch creation - "every weekend" (UTC), 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 this update 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:eyJjcmVhdGVkSW5WZXIiOiI0Mi4xOS45IiwidXBkYXRlZEluVmVyIjoiNDIuMTkuOSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIiwiZ2l0aHViLWFjdGlvbnMiXX0=--> Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
## Description This PR includes some changes to streamline the DX across repositories. ## 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. --------- Signed-off-by: burgholzer <burgholzer@me.com> Co-authored-by: burgholzer <burgholzer@me.com>
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [astral-sh/ruff-pre-commit](https://redirect.github.com/astral-sh/ruff-pre-commit) | repository | patch | `v0.14.6` -> `v0.14.7` | Note: The `pre-commit` manager in Renovate is not supported by the `pre-commit` maintainers or community. Please do not report any problems there, instead [create a Discussion in the Renovate repository](https://redirect.github.com/renovatebot/renovate/discussions/new) if you have any questions. --- ### Release Notes <details> <summary>astral-sh/ruff-pre-commit (astral-sh/ruff-pre-commit)</summary> ### [`v0.14.7`](https://redirect.github.com/astral-sh/ruff-pre-commit/compare/v0.14.6...v0.14.7) [Compare Source](https://redirect.github.com/astral-sh/ruff-pre-commit/compare/v0.14.6...v0.14.7) </details> --- ### Configuration 📅 **Schedule**: Branch creation - "every weekend" (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update 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:eyJjcmVhdGVkSW5WZXIiOiI0Mi4xOS45IiwidXBkYXRlZEluVmVyIjoiNDIuMTkuOSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIiwicHJlLWNvbW1pdCJdfQ==--> Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [astral-sh/uv-pre-commit](https://redirect.github.com/astral-sh/uv-pre-commit) | repository | patch | `0.9.12` -> `0.9.13` | Note: The `pre-commit` manager in Renovate is not supported by the `pre-commit` maintainers or community. Please do not report any problems there, instead [create a Discussion in the Renovate repository](https://redirect.github.com/renovatebot/renovate/discussions/new) if you have any questions. --- ### Release Notes <details> <summary>astral-sh/uv-pre-commit (astral-sh/uv-pre-commit)</summary> ### [`v0.9.13`](https://redirect.github.com/astral-sh/uv-pre-commit/releases/tag/0.9.13) [Compare Source](https://redirect.github.com/astral-sh/uv-pre-commit/compare/0.9.12...0.9.13) See: <https://github.com/astral-sh/uv/releases/tag/0.9.13> </details> --- ### Configuration 📅 **Schedule**: Branch creation - "every weekend" (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update 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:eyJjcmVhdGVkSW5WZXIiOiI0Mi4xOS45IiwidXBkYXRlZEluVmVyIjoiNDIuMTkuOSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIiwicHJlLWNvbW1pdCJdfQ==--> Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [crate-ci/typos](https://redirect.github.com/crate-ci/typos) | repository | minor | `v1.39.2` -> `v1.40.0` | Note: The `pre-commit` manager in Renovate is not supported by the `pre-commit` maintainers or community. Please do not report any problems there, instead [create a Discussion in the Renovate repository](https://redirect.github.com/renovatebot/renovate/discussions/new) if you have any questions. --- ### Release Notes <details> <summary>crate-ci/typos (crate-ci/typos)</summary> ### [`v1.40.0`](https://redirect.github.com/crate-ci/typos/blob/HEAD/CHANGELOG.md#014---2019-11-03) [Compare Source](https://redirect.github.com/crate-ci/typos/compare/v1.39.2...v1.40.0) ##### Bug Fixes - Ignore numbers as identifiers ([a00831c8](https://redirect.github.com/crate-ci/typos/commit/a00831c847b7efd81be520ea9b5d02f70555351f)) - Improve the organization of --help ([a48a457c](https://redirect.github.com/crate-ci/typos/commit/a48a457cc3ca817850118e2a2fb8b20fecdd40b8)) ##### Features - Dump files, identifiers, and words ([ce365ae1](https://redirect.github.com/crate-ci/typos/commit/ce365ae12e12fddfb6fc42a7f1e5ea71834d6051), closes [#​41](https://redirect.github.com/crate-ci/typos/issues/41)) - Give control over allowed identifier characters for leading vs rest ([107308a6](https://redirect.github.com/crate-ci/typos/commit/107308a655a425eb593bf5e4928572c16e6a9bdd)) ##### Performance - Use standard identifier rules to avoid doing umber checks ([107308a6](https://redirect.github.com/crate-ci/typos/commit/107308a655a425eb593bf5e4928572c16e6a9bdd)) - Only do hex check if digits are in identifiers ([68cd36d0](https://redirect.github.com/crate-ci/typos/commit/68cd36d0de90226dbc9d31c2ce6d8bf6b69adb5c)) <!-- next-url --> [Unreleased]: https://redirect.github.com/crate-ci/typos/compare/v1.40.0...HEAD [1.40.0]: https://redirect.github.com/crate-ci/typos/compare/v1.39.2...v1.40.0 [1.39.2]: https://redirect.github.com/crate-ci/typos/compare/v1.39.1...v1.39.2 [1.39.1]: https://redirect.github.com/crate-ci/typos/compare/v1.39.0...v1.39.1 [1.39.0]: https://redirect.github.com/crate-ci/typos/compare/v1.38.1...v1.39.0 [1.38.1]: https://redirect.github.com/crate-ci/typos/compare/v1.38.0...v1.38.1 [1.38.0]: https://redirect.github.com/crate-ci/typos/compare/v1.37.3...v1.38.0 [1.37.3]: https://redirect.github.com/crate-ci/typos/compare/v1.37.2...v1.37.3 [1.37.2]: https://redirect.github.com/crate-ci/typos/compare/v1.37.1...v1.37.2 [1.37.1]: https://redirect.github.com/crate-ci/typos/compare/v1.37.0...v1.37.1 [1.37.0]: https://redirect.github.com/crate-ci/typos/compare/v1.36.3...v1.37.0 [1.36.3]: https://redirect.github.com/crate-ci/typos/compare/v1.36.2...v1.36.3 [1.36.2]: https://redirect.github.com/crate-ci/typos/compare/v1.36.1...v1.36.2 [1.36.1]: https://redirect.github.com/crate-ci/typos/compare/v1.36.0...v1.36.1 [1.36.0]: https://redirect.github.com/crate-ci/typos/compare/v1.35.8...v1.36.0 [1.35.8]: https://redirect.github.com/crate-ci/typos/compare/v1.35.7...v1.35.8 [1.35.7]: https://redirect.github.com/crate-ci/typos/compare/v1.35.6...v1.35.7 [1.35.6]: https://redirect.github.com/crate-ci/typos/compare/v1.35.5...v1.35.6 [1.35.5]: https://redirect.github.com/crate-ci/typos/compare/v1.35.4...v1.35.5 [1.35.4]: https://redirect.github.com/crate-ci/typos/compare/v1.35.3...v1.35.4 [1.35.3]: https://redirect.github.com/crate-ci/typos/compare/v1.35.2...v1.35.3 [1.35.2]: https://redirect.github.com/crate-ci/typos/compare/v1.35.1...v1.35.2 [1.35.1]: https://redirect.github.com/crate-ci/typos/compare/v1.35.0...v1.35.1 [1.35.0]: https://redirect.github.com/crate-ci/typos/compare/v1.34.0...v1.35.0 [1.34.0]: https://redirect.github.com/crate-ci/typos/compare/v1.33.1...v1.34.0 [1.33.1]: https://redirect.github.com/crate-ci/typos/compare/v1.33.0...v1.33.1 [1.33.0]: https://redirect.github.com/crate-ci/typos/compare/v1.32.0...v1.33.0 [1.32.0]: https://redirect.github.com/crate-ci/typos/compare/v1.31.2...v1.32.0 [1.31.2]: https://redirect.github.com/crate-ci/typos/compare/v1.31.1...v1.31.2 [1.31.1]: https://redirect.github.com/crate-ci/typos/compare/v1.31.0...v1.31.1 [1.31.0]: https://redirect.github.com/crate-ci/typos/compare/v1.30.3...v1.31.0 [1.30.3]: https://redirect.github.com/crate-ci/typos/compare/v1.30.2...v1.30.3 [1.30.2]: https://redirect.github.com/crate-ci/typos/compare/v1.30.1...v1.30.2 [1.30.1]: https://redirect.github.com/crate-ci/typos/compare/v1.30.0...v1.30.1 [1.30.0]: https://redirect.github.com/crate-ci/typos/compare/v1.29.10...v1.30.0 [1.29.10]: https://redirect.github.com/crate-ci/typos/compare/v1.29.9...v1.29.10 [1.29.9]: https://redirect.github.com/crate-ci/typos/compare/v1.29.8...v1.29.9 [1.29.8]: https://redirect.github.com/crate-ci/typos/compare/v1.29.7...v1.29.8 [1.29.7]: https://redirect.github.com/crate-ci/typos/compare/v1.29.6...v1.29.7 [1.29.6]: https://redirect.github.com/crate-ci/typos/compare/v1.29.5...v1.29.6 [1.29.5]: https://redirect.github.com/crate-ci/typos/compare/v1.29.4...v1.29.5 [1.29.4]: https://redirect.github.com/crate-ci/typos/compare/v1.29.3...v1.29.4 [1.29.3]: https://redirect.github.com/crate-ci/typos/compare/v1.29.2...v1.29.3 [1.29.2]: https://redirect.github.com/crate-ci/typos/compare/v1.29.1...v1.29.2 [1.29.1]: https://redirect.github.com/crate-ci/typos/compare/v1.29.0...v1.29.1 [1.29.0]: https://redirect.github.com/crate-ci/typos/compare/v1.28.4...v1.29.0 [1.28.4]: https://redirect.github.com/crate-ci/typos/compare/v1.28.3...v1.28.4 [1.28.3]: https://redirect.github.com/crate-ci/typos/compare/v1.28.2...v1.28.3 [1.28.2]: https://redirect.github.com/crate-ci/typos/compare/v1.28.1...v1.28.2 [1.28.1]: https://redirect.github.com/crate-ci/typos/compare/v1.28.0...v1.28.1 [1.28.0]: https://redirect.github.com/crate-ci/typos/compare/v1.27.3...v1.28.0 [1.27.3]: https://redirect.github.com/crate-ci/typos/compare/v1.27.2...v1.27.3 [1.27.2]: https://redirect.github.com/crate-ci/typos/compare/v1.27.1...v1.27.2 [1.27.1]: https://redirect.github.com/crate-ci/typos/compare/v1.27.0...v1.27.1 [1.27.0]: https://redirect.github.com/crate-ci/typos/compare/v1.26.8...v1.27.0 [1.26.8]: https://redirect.github.com/crate-ci/typos/compare/v1.26.7...v1.26.8 [1.26.7]: https://redirect.github.com/crate-ci/typos/compare/v1.26.6...v1.26.7 [1.26.6]: https://redirect.github.com/crate-ci/typos/compare/v1.26.5...v1.26.6 [1.26.5]: https://redirect.github.com/crate-ci/typos/compare/v1.26.4...v1.26.5 [1.26.4]: https://redirect.github.com/crate-ci/typos/compare/v1.26.3...v1.26.4 [1.26.3]: https://redirect.github.com/crate-ci/typos/compare/v1.26.2...v1.26.3 [1.26.2]: https://redirect.github.com/crate-ci/typos/compare/v1.26.1...v1.26.2 [1.26.1]: https://redirect.github.com/crate-ci/typos/compare/v1.26.0...v1.26.1 [1.26.0]: https://redirect.github.com/crate-ci/typos/compare/v1.25.0...v1.26.0 [1.25.0]: https://redirect.github.com/crate-ci/typos/compare/v1.24.6...v1.25.0 [1.24.6]: https://redirect.github.com/crate-ci/typos/compare/v1.24.5...v1.24.6 [1.24.5]: https://redirect.github.com/crate-ci/typos/compare/v1.24.4...v1.24.5 [1.24.4]: https://redirect.github.com/crate-ci/typos/compare/v1.24.3...v1.24.4 [1.24.3]: https://redirect.github.com/crate-ci/typos/compare/v1.24.2...v1.24.3 [1.24.2]: https://redirect.github.com/crate-ci/typos/compare/v1.24.1...v1.24.2 [1.24.1]: https://redirect.github.com/crate-ci/typos/compare/v1.24.0...v1.24.1 [1.24.0]: https://redirect.github.com/crate-ci/typos/compare/v1.23.7...v1.24.0 [1.23.7]: https://redirect.github.com/crate-ci/typos/compare/v1.23.6...v1.23.7 [1.23.6]: https://redirect.github.com/crate-ci/typos/compare/v1.23.5...v1.23.6 [1.23.5]: https://redirect.github.com/crate-ci/typos/compare/v1.23.4...v1.23.5 [1.23.4]: https://redirect.github.com/crate-ci/typos/compare/v1.23.3...v1.23.4 [1.23.3]: https://redirect.github.com/crate-ci/typos/compare/v1.23.2...v1.23.3 [1.23.2]: https://redirect.github.com/crate-ci/typos/compare/v1.23.1...v1.23.2 [1.23.1]: https://redirect.github.com/crate-ci/typos/compare/v1.23.0...v1.23.1 [1.23.0]: https://redirect.github.com/crate-ci/typos/compare/v1.22.9...v1.23.0 [1.22.9]: https://redirect.github.com/crate-ci/typos/compare/v1.22.8...v1.22.9 [1.22.8]: https://redirect.github.com/crate-ci/typos/compare/v1.22.7...v1.22.8 [1.22.7]: https://redirect.github.com/crate-ci/typos/compare/v1.22.6...v1.22.7 [1.22.6]: https://redirect.github.com/crate-ci/typos/compare/v1.22.5...v1.22.6 [1.22.5]: https://redirect.github.com/crate-ci/typos/compare/v1.22.4...v1.22.5 [1.22.4]: https://redirect.github.com/crate-ci/typos/compare/v1.22.3...v1.22.4 [1.22.3]: https://redirect.github.com/crate-ci/typos/compare/v1.22.2...v1.22.3 [1.22.2]: https://redirect.github.com/crate-ci/typos/compare/v1.22.1...v1.22.2 [1.22.1]: https://redirect.github.com/crate-ci/typos/compare/v1.22.0...v1.22.1 [1.22.0]: https://redirect.github.com/crate-ci/typos/compare/v1.21.0...v1.22.0 [1.21.0]: https://redirect.github.com/crate-ci/typos/compare/v1.20.10...v1.21.0 [1.20.10]: https://redirect.github.com/crate-ci/typos/compare/v1.20.9...v1.20.10 [1.20.9]: https://redirect.github.com/crate-ci/typos/compare/v1.20.8...v1.20.9 [1.20.8]: https://redirect.github.com/crate-ci/typos/compare/v1.20.7...v1.20.8 [1.20.7]: https://redirect.github.com/crate-ci/typos/compare/v1.20.6...v1.20.7 [1.20.6]: https://redirect.github.com/crate-ci/typos/compare/v1.20.5...v1.20.6 [1.20.5]: https://redirect.github.com/crate-ci/typos/compare/v1.20.4...v1.20.5 [1.20.4]: https://redirect.github.com/crate-ci/typos/compare/v1.20.3...v1.20.4 [1.20.3]: https://redirect.github.com/crate-ci/typos/compare/v1.20.2...v1.20.3 [1.20.2]: https://redirect.github.com/crate-ci/typos/compare/v1.20.1...v1.20.2 [1.20.1]: https://redirect.github.com/crate-ci/typos/compare/v1.20.0...v1.20.1 [1.20.0]: https://redirect.github.com/crate-ci/typos/compare/v1.19.0...v1.20.0 [1.19.0]: https://redirect.github.com/crate-ci/typos/compare/v1.18.2...v1.19.0 [1.18.2]: https://redirect.github.com/crate-ci/typos/compare/v1.18.1...v1.18.2 [1.18.1]: https://redirect.github.com/crate-ci/typos/compare/v1.18.0...v1.18.1 [1.18.0]: https://redirect.github.com/crate-ci/typos/compare/v1.17.2...v1.18.0 [1.17.2]: https://redirect.github.com/crate-ci/typos/compare/v1.17.1...v1.17.2 [1.17.1]: https://redirect.github.com/crate-ci/typos/compare/v1.17.0...v1.17.1 [1.17.0]: https://redirect.github.com/crate-ci/typos/compare/v1.16.26...v1.17.0 [1.16.26]: https://redirect.github.com/crate-ci/typos/compare/v1.16.25...v1.16.26 [1.16.25]: https://redirect.github.com/crate-ci/typos/compare/v1.16.24...v1.16.25 [1.16.24]: https://redirect.github.com/crate-ci/typos/compare/v1.16.23...v1.16.24 [1.16.23]: https://redirect.github.com/crate-ci/typos/compare/v1.16.22...v1.16.23 [1.16.22]: https://redirect.github.com/crate-ci/typos/compare/v1.16.21...v1.16.22 [1.16.21]: https://redirect.github.com/crate-ci/typos/compare/v1.16.20...v1.16.21 [1.16.20]: https://redirect.github.com/crate-ci/typos/compare/v1.16.19...v1.16.20 [1.16.19]: https://redirect.github.com/crate-ci/typos/compare/v1.16.18...v1.16.19 [1.16.18]: https://redirect.github.com/crate-ci/typos/compare/v1.16.17...v1.16.18 [1.16.17]: https://redirect.github.com/crate-ci/typos/compare/v1.16.16...v1.16.17 [1.16.16]: https://redirect.github.com/crate-ci/typos/compare/v1.16.15...v1.16.16 [1.16.15]: https://redirect.github.com/crate-ci/typos/compare/v1.16.14...v1.16.15 [1.16.14]: https://redirect.github.com/crate-ci/typos/compare/v1.16.13...v1.16.14 [1.16.13]: https://redirect.github.com/crate-ci/typos/compare/v1.16.12...v1.16.13 [1.16.12]: https://redirect.github.com/crate-ci/typos/compare/v1.16.11...v1.16.12 [1.16.11]: https://redirect.github.com/crate-ci/typos/compare/v1.16.10...v1.16.11 [1.16.10]: https://redirect.github.com/crate-ci/typos/compare/v1.16.9...v1.16.10 [1.16.9]: https://redirect.github.com/crate-ci/typos/compare/v1.16.8...v1.16.9 [1.16.8]: https://redirect.github.com/crate-ci/typos/compare/v1.16.7...v1.16.8 [1.16.7]: https://redirect.github.com/crate-ci/typos/compare/v1.16.6...v1.16.7 [1.16.6]: https://redirect.github.com/crate-ci/typos/compare/v1.16.5...v1.16.6 [1.16.5]: https://redirect.github.com/crate-ci/typos/compare/v1.16.4...v1.16.5 [1.16.4]: https://redirect.github.com/crate-ci/typos/compare/v1.16.3...v1.16.4 [1.16.3]: https://redirect.github.com/crate-ci/typos/compare/v1.16.2...v1.16.3 [1.16.2]: https://redirect.github.com/crate-ci/typos/compare/v1.16.1...v1.16.2 [1.16.1]: https://redirect.github.com/crate-ci/typos/compare/v1.16.0...v1.16.1 [1.16.0]: https://redirect.github.com/crate-ci/typos/compare/v1.15.10...v1.16.0 [1.15.10]: https://redirect.github.com/crate-ci/typos/compare/v1.15.9...v1.15.10 [1.15.9]: https://redirect.github.com/crate-ci/typos/compare/v1.15.8...v1.15.9 [1.15.8]: https://redirect.github.com/crate-ci/typos/compare/v1.15.7...v1.15.8 [1.15.7]: https://redirect.github.com/crate-ci/typos/compare/v1.15.6...v1.15.7 [1.15.6]: https://redirect.github.com/crate-ci/typos/compare/v1.15.5...v1.15.6 [1.15.5]: https://redirect.github.com/crate-ci/typos/compare/v1.15.4...v1.15.5 [1.15.4]: https://redirect.github.com/crate-ci/typos/compare/v1.15.3...v1.15.4 [1.15.3]: https://redirect.github.com/crate-ci/typos/compare/v1.15.2...v1.15.3 [1.15.2]: https://redirect.github.com/crate-ci/typos/compare/v1.15.1...v1.15.2 [1.15.1]: https://redirect.github.com/crate-ci/typos/compare/v1.15.0...v1.15.1 [1.15.0]: https://redirect.github.com/crate-ci/typos/compare/v1.14.12...v1.15.0 [1.14.12]: https://redirect.github.com/crate-ci/typos/compare/v1.14.11...v1.14.12 [1.14.11]: https://redirect.github.com/crate-ci/typos/compare/v1.14.10...v1.14.11 [1.14.10]: https://redirect.github.com/crate-ci/typos/compare/v1.14.9...v1.14.10 [1.14.9]: https://redirect.github.com/crate-ci/typos/compare/v1.14.8...v1.14.9 [1.14.8]: https://redirect.github.com/crate-ci/typos/compare/v1.14.7...v1.14.8 [1.14.7]: https://redirect.github.com/crate-ci/typos/compare/v1.14.6...v1.14.7 [1.14.6]: https://redirect.github.com/crate-ci/typos/compare/v1.14.5...v1.14.6 [1.14.5]: https://redirect.github.com/crate-ci/typos/compare/v1.14.4...v1.14.5 [1.14.4]: https://redirect.github.com/crate-ci/typos/compare/v1.14.3...v1.14.4 [1.14.3]: https://redirect.github.com/crate-ci/typos/compare/v1.14.2...v1.14.3 [1.14.2]: https://redirect.github.com/crate-ci/typos/compare/v1.14.1...v1.14.2 [1.14.1]: https://redirect.github.com/crate-ci/typos/compare/v1.14.0...v1.14.1 [1.14.0]: https://redirect.github.com/crate-ci/typos/compare/v1.13.26...v1.14.0 [1.13.26]: https://redirect.github.com/crate-ci/typos/compare/v1.13.25...v1.13.26 [1.13.25]: https://redirect.github.com/crate-ci/typos/compare/v1.13.24...v1.13.25 [1.13.24]: https://redirect.github.com/crate-ci/typos/compare/v1.13.23...v1.13.24 [1.13.23]: https://redirect.github.com/crate-ci/typos/compare/v1.13.22...v1.13.23 [1.13.22]: https://redirect.github.com/crate-ci/typos/compare/v1.13.21...v1.13.22 [1.13.21]: https://redirect.github.com/crate-ci/typos/compare/v1.13.20...v1.13.21 [1.13.20]: https://redirect.github.com/crate-ci/typos/compare/v1.13.19...v1.13.20 [1.13.19]: https://redirect.github.com/crate-ci/typos/compare/v1.13.18...v1.13.19 [1.13.18]: https://redirect.github.com/crate-ci/typos/compare/v1.13.17...v1.13.18 [1.13.17]: https://redirect.github.com/crate-ci/typos/compare/v1.13.16...v1.13.17 [1.13.16]: https://redirect.github.com/crate-ci/typos/compare/v1.13.15...v1.13.16 [1.13.15]: https://redirect.github.com/crate-ci/typos/compare/v1.13.14...v1.13.15 [1.13.14]: https://redirect.github.com/crate-ci/typos/compare/v1.13.13...v1.13.14 [1.13.13]: https://redirect.github.com/crate-ci/typos/compare/v1.13.12...v1.13.13 [1.13.12]: https://redirect.github.com/crate-ci/typos/compare/v1.13.11...v1.13.12 [1.13.11]: https://redirect.github.com/crate-ci/typos/compare/v1.13.10...v1.13.11 [1.13.10]: https://redirect.github.com/crate-ci/typos/compare/v1.13.9...v1.13.10 [1.13.9]: https://redirect.github.com/crate-ci/typos/compare/v1.13.8...v1.13.9 [1.13.8]: https://redirect.github.com/crate-ci/typos/compare/v1.13.7...v1.13.8 [1.13.7]: https://redirect.github.com/crate-ci/typos/compare/v1.13.6...v1.13.7 [1.13.6]: https://redirect.github.com/crate-ci/typos/compare/v1.13.5...v1.13.6 [1.13.5]: https://redirect.github.com/crate-ci/typos/compare/v1.13.4...v1.13.5 [1.13.4]: https://redirect.github.com/crate-ci/typos/compare/v1.13.3...v1.13.4 [1.13.3]: https://redirect.github.com/crate-ci/typos/compare/v1.13.2...v1.13.3 [1.13.2]: https://redirect.github.com/crate-ci/typos/compare/v1.13.1...v1.13.2 [1.13.1]: https://redirect.github.com/crate-ci/typos/compare/v1.13.0...v1.13.1 [1.13.0]: https://redirect.github.com/crate-ci/typos/compare/v1.12.14...v1.13.0 [1.12.14]: https://redirect.github.com/crate-ci/typos/compare/v1.12.13...v1.12.14 [1.12.13]: https://redirect.github.com/crate-ci/typos/compare/v1.12.12...v1.12.13 [1.12.12]: https://redirect.github.com/crate-ci/typos/compare/v1.12.11...v1.12.12 [1.12.11]: https://redirect.github.com/crate-ci/typos/compare/v1.12.10...v1.12.11 [1.12.10]: https://redirect.github.com/crate-ci/typos/compare/v1.12.9...v1.12.10 [1.12.9]: https://redirect.github.com/crate-ci/typos/compare/v1.12.8...v1.12.9 [1.12.8]: https://redirect.github.com/crate-ci/typos/compare/v1.12.7...v1.12.8 [1.12.7]: https://redirect.github.com/crate-ci/typos/compare/v1.12.6...v1.12.7 [1.12.6]: https://redirect.github.com/crate-ci/typos/compare/v1.12.5...v1.12.6 [1.12.5]: https://redirect.github.com/crate-ci/typos/compare/v1.12.4...v1.12.5 [1.12.4]: https://redirect.github.com/crate-ci/typos/compare/v1.12.3...v1.12.4 [1.12.3]: https://redirect.github.com/crate-ci/typos/compare/v1.12.2...v1.12.3 [1.12.2]: https://redirect.github.com/crate-ci/typos/compare/v1.12.1...v1.12.2 [1.12.1]: https://redirect.github.com/crate-ci/typos/compare/v1.12.0...v1.12.1 [1.12.0]: https://redirect.github.com/crate-ci/typos/compare/v1.11.5...v1.12.0 [1.11.5]: https://redirect.github.com/crate-ci/typos/compare/v1.11.4...v1.11.5 [1.11.4]: https://redirect.github.com/crate-ci/typos/compare/v1.11.3...v1.11.4 [1.11.3]: https://redirect.github.com/crate-ci/typos/compare/v1.11.2...v1.11.3 [1.11.2]: https://redirect.github.com/crate-ci/typos/compare/v1.11.1...v1.11.2 [1.11.1]: https://redirect.github.com/crate-ci/typos/compare/v1.11.0...v1.11.1 [1.11.0]: https://redirect.github.com/crate-ci/typos/compare/v1.10.3...v1.11.0 [1.10.3]: https://redirect.github.com/crate-ci/typos/compare/v1.10.2...v1.10.3 [1.10.2]: https://redirect.github.com/crate-ci/typos/compare/v1.10.1...v1.10.2 [1.10.1]: https://redirect.github.com/crate-ci/typos/compare/v1.10.0...v1.10.1 [1.10.0]: https://redirect.github.com/crate-ci/typos/compare/v1.9.0...v1.10.0 [1.9.0]: https://redirect.github.com/crate-ci/typos/compare/v1.8.1...v1.9.0 [1.8.1]: https://redirect.github.com/crate-ci/typos/compare/v1.8.0...v1.8.1 [1.8.0]: https://redirect.github.com/crate-ci/typos/compare/v1.7.3...v1.8.0 [1.7.3]: https://redirect.github.com/crate-ci/typos/compare/v1.7.2...v1.7.3 [1.7.2]: https://redirect.github.com/crate-ci/typos/compare/v1.7.1...v1.7.2 [1.7.1]: https://redirect.github.com/crate-ci/typos/compare/v1.7.0...v1.7.1 [1.7.0]: https://redirect.github.com/crate-ci/typos/compare/v1.6.0...v1.7.0 [1.6.0]: https://redirect.github.com/crate-ci/typos/compare/v1.5.0...v1.6.0 [1.5.0]: https://redirect.github.com/crate-ci/typos/compare/v1.4.1...v1.5.0 [1.4.1]: https://redirect.github.com/crate-ci/typos/compare/v1.4.0...v1.4.1 [1.4.0]: https://redirect.github.com/crate-ci/typos/compare/v1.3.9...v1.4.0 [1.3.9]: https://redirect.github.com/crate-ci/typos/compare/v1.3.8...v1.3.9 [1.3.8]: https://redirect.github.com/crate-ci/typos/compare/v1.3.7...v1.3.8 [1.3.7]: https://redirect.github.com/crate-ci/typos/compare/v1.3.6...v1.3.7 [1.3.6]: https://redirect.github.com/crate-ci/typos/compare/v1.3.5...v1.3.6 [1.3.5]: https://redirect.github.com/crate-ci/typos/compare/v1.3.4...v1.3.5 [1.3.4]: https://redirect.github.com/crate-ci/typos/compare/v1.3.3...v1.3.4 [1.3.3]: https://redirect.github.com/crate-ci/typos/compare/v1.3.2...v1.3.3 [1.3.2]: https://redirect.github.com/crate-ci/typos/compare/v1.3.1...v1.3.2 [1.3.1]: https://redirect.github.com/crate-ci/typos/compare/v1.3.0...v1.3.1 [1.3.0]: https://redirect.github.com/crate-ci/typos/compare/v1.2.1...v1.3.0 [1.2.1]: https://redirect.github.com/crate-ci/typos/compare/v1.2.0...v1.2.1 [1.2.0]: https://redirect.github.com/crate-ci/typos/compare/v1.1.9...v1.2.0 [1.1.9]: https://redirect.github.com/crate-ci/typos/compare/v1.1.8...v1.1.9 [1.1.8]: https://redirect.github.com/crate-ci/typos/compare/v1.1.7...v1.1.8 [1.1.7]: https://redirect.github.com/crate-ci/typos/compare/v1.1.6...v1.1.7 [1.1.6]: https://redirect.github.com/crate-ci/typos/compare/v1.1.5...v1.1.6 [1.1.5]: https://redirect.github.com/crate-ci/typos/compare/v1.1.4...v1.1.5 [1.1.4]: https://redirect.github.com/crate-ci/typos/compare/v1.1.3...v1.1.4 [1.1.3]: https://redirect.github.com/crate-ci/typos/compare/v1.1.2...v1.1.3 [1.1.2]: https://redirect.github.com/crate-ci/typos/compare/v1.1.1...v1.1.2 [1.1.1]: https://redirect.github.com/crate-ci/typos/compare/v1.1.0...v1.1.1 [1.1.0]: https://redirect.github.com/crate-ci/typos/compare/v1.0.11...v1.1.0 [1.0.11]: https://redirect.github.com/crate-ci/typos/compare/v1.0.10...v1.0.11 [1.0.10]: https://redirect.github.com/crate-ci/typos/compare/v1.0.9...v1.0.10 [1.0.9]: https://redirect.github.com/crate-ci/typos/compare/v1.0.8...v1.0.9 [1.0.8]: https://redirect.github.com/crate-ci/typos/compare/v1.0.7...v1.0.8 [1.0.7]: https://redirect.github.com/crate-ci/typos/compare/v1.0.6...v1.0.7 [1.0.6]: https://redirect.github.com/crate-ci/typos/compare/v1.0.5...v1.0.6 [1.0.5]: https://redirect.github.com/crate-ci/typos/compare/v1.0.4...v1.0.5 [1.0.4]: https://redirect.github.com/crate-ci/typos/compare/v1.0.3...v1.0.4 [1.0.3]: https://redirect.github.com/crate-ci/typos/compare/v1.0.2...v1.0.3 [1.0.2]: https://redirect.github.com/crate-ci/typos/compare/v1.0.1...v1.0.2 [1.0.1]: https://redirect.github.com/crate-ci/typos/compare/v1.0.0...v1.0.1 [1.0.0]: https://redirect.github.com/crate-ci/typos/compare/v0.4.0...v1.0.0 [0.4.0]: https://redirect.github.com/crate-ci/typos/compare/v0.3.0...v0.4.0 [0.3.0]: https://redirect.github.com/crate-ci/typos/compare/v0.2.0...v0.3.0 [0.2.0]: https://redirect.github.com/crate-ci/typos/compare/v0.1.4...v0.2.0 </details> --- ### Configuration 📅 **Schedule**: Branch creation - "every weekend" (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update 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:eyJjcmVhdGVkSW5WZXIiOiI0Mi4xOS45IiwidXBkYXRlZEluVmVyIjoiNDIuMTkuOSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIiwicHJlLWNvbW1pdCJdfQ==--> Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [emzeat/mz-lictools](https://redirect.github.com/emzeat/mz-lictools) | repository | minor | `v2.8.0` -> `v2.9.0` | Note: The `pre-commit` manager in Renovate is not supported by the `pre-commit` maintainers or community. Please do not report any problems there, instead [create a Discussion in the Renovate repository](https://redirect.github.com/renovatebot/renovate/discussions/new) if you have any questions. --- ### Release Notes <details> <summary>emzeat/mz-lictools (emzeat/mz-lictools)</summary> ### [`v2.9.0`](https://redirect.github.com/emzeat/mz-lictools/blob/HEAD/Changelog.md#v290) [Compare Source](https://redirect.github.com/emzeat/mz-lictools/compare/v2.8.0...v2.9.0) *29.11.2025* - Added support for Go text/template commenting style, used e.g. by Helm charts - Fixed issue causing relative config paths to get resolved incorrectly - Made sure to discover config for each file individually </details> --- ### Configuration 📅 **Schedule**: Branch creation - "every weekend" (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update 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:eyJjcmVhdGVkSW5WZXIiOiI0Mi4xOS45IiwidXBkYXRlZEluVmVyIjoiNDIuMTkuOSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIiwicHJlLWNvbW1pdCJdfQ==--> Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [rbubley/mirrors-prettier](https://redirect.github.com/rbubley/mirrors-prettier) | repository | minor | `v3.6.2` -> `v3.7.2` | Note: The `pre-commit` manager in Renovate is not supported by the `pre-commit` maintainers or community. Please do not report any problems there, instead [create a Discussion in the Renovate repository](https://redirect.github.com/renovatebot/renovate/discussions/new) if you have any questions. --- ### Release Notes <details> <summary>rbubley/mirrors-prettier (rbubley/mirrors-prettier)</summary> ### [`v3.7.2`](https://redirect.github.com/rbubley/mirrors-prettier/compare/v3.7.1...v3.7.2) [Compare Source](https://redirect.github.com/rbubley/mirrors-prettier/compare/v3.7.1...v3.7.2) ### [`v3.7.1`](https://redirect.github.com/rbubley/mirrors-prettier/compare/v3.7.0...v3.7.1) [Compare Source](https://redirect.github.com/rbubley/mirrors-prettier/compare/v3.7.0...v3.7.1) ### [`v3.7.0`](https://redirect.github.com/rbubley/mirrors-prettier/compare/v3.6.2...v3.7.0) [Compare Source](https://redirect.github.com/rbubley/mirrors-prettier/compare/v3.6.2...v3.7.0) </details> --- ### Configuration 📅 **Schedule**: Branch creation - "every weekend" (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update 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:eyJjcmVhdGVkSW5WZXIiOiI0Mi4xOS45IiwidXBkYXRlZEluVmVyIjoiNDIuMTkuOSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIiwicHJlLWNvbW1pdCJdfQ==--> Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [pre-commit/mirrors-mypy](https://redirect.github.com/pre-commit/mirrors-mypy) | repository | minor | `v1.18.2` -> `v1.19.0` | Note: The `pre-commit` manager in Renovate is not supported by the `pre-commit` maintainers or community. Please do not report any problems there, instead [create a Discussion in the Renovate repository](https://redirect.github.com/renovatebot/renovate/discussions/new) if you have any questions. --- ### Release Notes <details> <summary>pre-commit/mirrors-mypy (pre-commit/mirrors-mypy)</summary> ### [`v1.19.0`](https://redirect.github.com/pre-commit/mirrors-mypy/compare/v1.18.2...v1.19.0) [Compare Source](https://redirect.github.com/pre-commit/mirrors-mypy/compare/v1.18.2...v1.19.0) </details> --- ### Configuration 📅 **Schedule**: Branch creation - "every weekend" (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update 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:eyJjcmVhdGVkSW5WZXIiOiI0Mi4xOS45IiwidXBkYXRlZEluVmVyIjoiNDIuMTkuOSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIiwicHJlLWNvbW1pdCJdfQ==--> Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [rbubley/mirrors-prettier](https://redirect.github.com/rbubley/mirrors-prettier) | repository | patch | `v3.7.2` -> `v3.7.3` | Note: The `pre-commit` manager in Renovate is not supported by the `pre-commit` maintainers or community. Please do not report any problems there, instead [create a Discussion in the Renovate repository](https://redirect.github.com/renovatebot/renovate/discussions/new) if you have any questions. --- ### Release Notes <details> <summary>rbubley/mirrors-prettier (rbubley/mirrors-prettier)</summary> ### [`v3.7.3`](https://redirect.github.com/rbubley/mirrors-prettier/compare/v3.7.2...v3.7.3) [Compare Source](https://redirect.github.com/rbubley/mirrors-prettier/compare/v3.7.2...v3.7.3) </details> --- ### Configuration 📅 **Schedule**: Branch creation - "every weekend" (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update 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:eyJjcmVhdGVkSW5WZXIiOiI0Mi4xOS45IiwidXBkYXRlZEluVmVyIjoiNDIuMTkuOSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIiwicHJlLWNvbW1pdCJdfQ==--> Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
## Description This PR refactors the singleton pattern for QDMI Device implementations to support explicit initialization and finalization, enabling proper cleanup when device libraries are loaded and unloaded dynamically. - Replaces Meyer's singleton pattern (function-local static) with manual initialization using raw pointers - Adds explicit initialize() and finalize() methods to control Device singleton lifecycle - Includes the DDSIM device in cross-platform test coverage ## 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. - [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. - [ ] The changes are fully tested and pass the CI checks. - [x] I have reviewed my own code changes. --------- Signed-off-by: burgholzer <burgholzer@me.com> Co-authored-by: burgholzer <burgholzer@me.com> # Conflicts: # src/na/device/Device.cpp # test/qdmi/test_driver.cpp
This PR contains the following updates: | Update | Change | |---|---| | lockFileMaintenance | All locks refreshed | 🔧 This Pull Request updates lock files to use the latest dependency versions. --- ### Configuration 📅 **Schedule**: Branch creation - "before 4am on monday" (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- 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:eyJjcmVhdGVkSW5WZXIiOiI0Mi4xOS45IiwidXBkYXRlZEluVmVyIjoiNDIuMTkuOSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIiwicHl0aG9uIl19--> Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Codecov Report❌ Patch coverage is
📢 Thoughts on this report? Let us know! |
Cpp-Linter Report
|
|
@coderabbitai full review |
✅ Actions performedFull review triggered. |
This reverts commit 0915e13.
📝 WalkthroughSummary by CodeRabbitRelease Notes
✏️ Tip: You can customize this high-level summary in your review settings. WalkthroughThis PR extracts singleton handling from individual QDMI device implementations into a reusable generic Changes
Sequence Diagram(s)sequenceDiagram
autonumber
participant Client as Caller Code
participant Lifecycle as Lifecycle Manager
participant SingletonDevice as SingletonDevice<T>
participant Device as Device Implementation
participant SharedPtr as shared_ptr<Device>
participant Mutex as Thread Mutex
Client->>Lifecycle: initialize()
Lifecycle->>Mutex: acquire lock
alt not initialized
Mutex->>Device: construct via make_shared()
Device->>SharedPtr: new shared_ptr
SharedPtr->>SingletonDevice: store instance pointer
end
Mutex->>Lifecycle: release lock
Client->>Client: call get() later
Client->>SingletonDevice: get()
SingletonDevice->>Mutex: acquire lock
alt instance exists
SingletonDevice->>SharedPtr: return shared_ptr copy
SharedPtr->>Client: provide shared_ptr<Device>
else not initialized
SingletonDevice->>Client: throw runtime_error
end
Mutex->>SingletonDevice: release lock
Client->>SharedPtr: use -> accessor
SharedPtr->>Device: delegate call
Client->>Lifecycle: finalize()
Lifecycle->>Mutex: acquire lock (then leak)
Mutex->>SingletonDevice: reset instance pointer
Lifecycle->>Client: complete (SharedPtr refs remain valid)
Estimated code review effort🎯 4 (Complex) | ⏱️ ~50 minutes
Possibly related PRs
Suggested reviewers
Pre-merge checks and finishing touches❌ Failed checks (2 warnings)
✅ Passed checks (1 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
b3d45d4 to
0f920cb
Compare
|
The conflicts here stem from the merge of #1328. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 9
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (36)
CHANGELOG.md(2 hunks)bindings/na/fomac/fomac.cpp(1 hunks)include/mqt-core/na/fomac/Device.hpp(1 hunks)include/mqt-core/qdmi/devices/base/Device.hpp(1 hunks)include/mqt-core/qdmi/devices/dd/Device.hpp(4 hunks)include/mqt-core/qdmi/devices/na/Device.hpp(3 hunks)include/mqt-core/qdmi/devices/sc/Device.hpp(2 hunks)src/na/CMakeLists.txt(0 hunks)src/na/fomac/Device.cpp(1 hunks)src/qdmi/CMakeLists.txt(1 hunks)src/qdmi/devices/CMakeLists.txt(1 hunks)src/qdmi/devices/base/CMakeLists.txt(1 hunks)src/qdmi/devices/dd/CMakeLists.txt(1 hunks)src/qdmi/devices/dd/Device.cpp(7 hunks)src/qdmi/devices/na/App.cpp(1 hunks)src/qdmi/devices/na/CMakeLists.txt(5 hunks)src/qdmi/devices/na/Device.cpp(4 hunks)src/qdmi/devices/na/Generator.cpp(1 hunks)src/qdmi/devices/sc/App.cpp(1 hunks)src/qdmi/devices/sc/CMakeLists.txt(5 hunks)src/qdmi/devices/sc/Device.cpp(4 hunks)src/qdmi/devices/sc/Generator.cpp(2 hunks)src/qdmi/driver/CMakeLists.txt(1 hunks)src/qdmi/driver/Driver.cpp(1 hunks)test/fomac/test_fomac.cpp(1 hunks)test/na/CMakeLists.txt(0 hunks)test/qdmi/CMakeLists.txt(1 hunks)test/qdmi/devices/CMakeLists.txt(1 hunks)test/qdmi/devices/na/test_device.cpp(1 hunks)test/qdmi/devices/na/test_generator.cpp(1 hunks)test/qdmi/devices/sc/CMakeLists.txt(1 hunks)test/qdmi/devices/sc/test_app.cpp(1 hunks)test/qdmi/devices/sc/test_device.cpp(1 hunks)test/qdmi/devices/sc/test_generator.cpp(1 hunks)test/qdmi/driver/CMakeLists.txt(1 hunks)test/qdmi/driver/test_driver.cpp(1 hunks)
💤 Files with no reviewable changes (2)
- test/na/CMakeLists.txt
- src/na/CMakeLists.txt
🧰 Additional context used
🧠 Learnings (11)
📓 Common learnings
Learnt from: burgholzer
Repo: munich-quantum-toolkit/yaqs PR: 212
File: CHANGELOG.md:12-15
Timestamp: 2025-10-14T14:37:38.047Z
Learning: In the munich-quantum-toolkit/yaqs project, changelog entries follow the template: "- $TITLE ([#$NUMBER]($URL)) ([**AUTHOR**](https://github.com/$AUTHOR))". Issue references should not be included in changelog entries; the PR number is sufficient for traceability.
Learnt from: marcelwa
Repo: munich-quantum-toolkit/core PR: 1243
File: test/python/qdmi/qiskit/test_qdmi_qiskit_site_handling.py:162-173
Timestamp: 2025-10-17T11:09:50.147Z
Learning: For QDMI tests that reference a specific named device via fixture (e.g., "MQT NA Default QDMI Device"), it is acceptable to hard-code device-specific values such as zone counts and indices, as these tests are intentionally coupled to that device's structure and serve as structural invariant checks.
📚 Learning: 2025-11-03T23:09:26.881Z
Learnt from: burgholzer
Repo: munich-quantum-toolkit/core PR: 1287
File: test/qdmi/dd/CMakeLists.txt:9-21
Timestamp: 2025-11-03T23:09:26.881Z
Learning: The CMake functions `generate_device_defs_executable` and `generate_prefixed_qdmi_headers` used in QDMI device test CMakeLists.txt files are provided by the external QDMI library (fetched via FetchContent from https://github.com/Munich-Quantum-Software-Stack/qdmi.git), specifically in the cmake/PrefixHandling.cmake module of the QDMI repository.
Applied to files:
test/qdmi/devices/CMakeLists.txtinclude/mqt-core/na/fomac/Device.hpptest/qdmi/devices/na/test_generator.cpptest/qdmi/CMakeLists.txtsrc/qdmi/devices/base/CMakeLists.txttest/qdmi/devices/sc/CMakeLists.txtsrc/qdmi/driver/CMakeLists.txtsrc/qdmi/CMakeLists.txtbindings/na/fomac/fomac.cpptest/qdmi/driver/CMakeLists.txttest/qdmi/devices/na/test_device.cpptest/qdmi/driver/test_driver.cppsrc/qdmi/driver/Driver.cppsrc/qdmi/devices/CMakeLists.txtsrc/qdmi/devices/sc/App.cppsrc/qdmi/devices/na/App.cppinclude/mqt-core/qdmi/devices/dd/Device.hpptest/qdmi/devices/sc/test_device.cppsrc/qdmi/devices/na/Generator.cppsrc/na/fomac/Device.cppsrc/qdmi/devices/sc/Generator.cppsrc/qdmi/devices/sc/CMakeLists.txtsrc/qdmi/devices/dd/Device.cppsrc/qdmi/devices/dd/CMakeLists.txtsrc/qdmi/devices/na/CMakeLists.txt
📚 Learning: 2025-10-17T11:09:50.147Z
Learnt from: marcelwa
Repo: munich-quantum-toolkit/core PR: 1243
File: test/python/qdmi/qiskit/test_qdmi_qiskit_site_handling.py:162-173
Timestamp: 2025-10-17T11:09:50.147Z
Learning: For QDMI tests that reference a specific named device via fixture (e.g., "MQT NA Default QDMI Device"), it is acceptable to hard-code device-specific values such as zone counts and indices, as these tests are intentionally coupled to that device's structure and serve as structural invariant checks.
Applied to files:
test/qdmi/devices/CMakeLists.txttest/qdmi/devices/na/test_generator.cpptest/qdmi/CMakeLists.txtsrc/qdmi/devices/base/CMakeLists.txttest/qdmi/devices/sc/CMakeLists.txttest/qdmi/driver/CMakeLists.txttest/qdmi/devices/na/test_device.cppsrc/qdmi/driver/Driver.cppinclude/mqt-core/qdmi/devices/sc/Device.hppinclude/mqt-core/qdmi/devices/base/Device.hppsrc/qdmi/devices/sc/Device.cppinclude/mqt-core/qdmi/devices/dd/Device.hpptest/qdmi/devices/sc/test_device.cppsrc/qdmi/devices/na/Generator.cppsrc/qdmi/devices/dd/Device.cppsrc/qdmi/devices/na/Device.cppinclude/mqt-core/qdmi/devices/na/Device.hppsrc/qdmi/devices/dd/CMakeLists.txtsrc/qdmi/devices/na/CMakeLists.txt
📚 Learning: 2025-11-04T14:28:32.371Z
Learnt from: marcelwa
Repo: munich-quantum-toolkit/core PR: 1243
File: test/python/qdmi/qiskit/test_qdmi_qiskit_backend.py:0-0
Timestamp: 2025-11-04T14:28:32.371Z
Learning: In the munich-quantum-toolkit/core repository, at least one FoMaC device is always available during testing, so skip logic for missing devices in QDMI Qiskit backend tests is not necessary.
Applied to files:
test/qdmi/CMakeLists.txttest/qdmi/devices/sc/CMakeLists.txtbindings/na/fomac/fomac.cpptest/qdmi/driver/CMakeLists.txtinclude/mqt-core/qdmi/devices/base/Device.hppsrc/qdmi/devices/sc/Device.cpptest/qdmi/devices/sc/test_device.cppsrc/qdmi/devices/dd/Device.cppsrc/qdmi/devices/na/Device.cpp
📚 Learning: 2025-11-05T07:42:45.507Z
Learnt from: burgholzer
Repo: munich-quantum-toolkit/core PR: 1287
File: test/qdmi/dd/error_handling_test.cpp:118-194
Timestamp: 2025-11-05T07:42:45.507Z
Learning: In the munich-quantum-toolkit/core QDMI device API, session parameters can only be set before calling `device_session_init()`. Once a session is initialized, any attempt to set a parameter returns `QDMI_ERROR_BADSTATE`. Since `SessionGuard` (in test/qdmi/dd/helpers/test_utils.hpp) automatically initializes the session in its constructor, tests that need to verify session parameter setting behavior before initialization must allocate a separate uninitialized session rather than reusing the `SessionGuard`'s session.
Applied to files:
include/mqt-core/qdmi/devices/sc/Device.hppinclude/mqt-core/qdmi/devices/base/Device.hppsrc/qdmi/devices/sc/Device.cppinclude/mqt-core/qdmi/devices/dd/Device.hpptest/qdmi/devices/sc/test_device.cppsrc/qdmi/devices/dd/Device.cppsrc/qdmi/devices/na/Device.cppinclude/mqt-core/qdmi/devices/na/Device.hpp
📚 Learning: 2025-10-14T14:37:38.047Z
Learnt from: burgholzer
Repo: munich-quantum-toolkit/yaqs PR: 212
File: CHANGELOG.md:12-15
Timestamp: 2025-10-14T14:37:38.047Z
Learning: In the munich-quantum-toolkit/yaqs project, changelog entries follow the template: "- $TITLE ([#$NUMBER]($URL)) ([**AUTHOR**](https://github.com/$AUTHOR))". Issue references should not be included in changelog entries; the PR number is sufficient for traceability.
Applied to files:
CHANGELOG.md
📚 Learning: 2025-12-01T11:00:40.342Z
Learnt from: flowerthrower
Repo: munich-quantum-toolkit/core-plugins-catalyst PR: 1
File: CHANGELOG.md:18-18
Timestamp: 2025-12-01T11:00:40.342Z
Learning: In the munich-quantum-toolkit/core-plugins-catalyst repository, the CHANGELOG.md intentionally references the parent MQT Core repository's release notes (https://github.com/munich-quantum-toolkit/core/releases) because the plugin repository is based on work performed in the parent repository.
Applied to files:
CHANGELOG.md
📚 Learning: 2025-10-10T08:09:54.528Z
Learnt from: burgholzer
Repo: munich-quantum-toolkit/core PR: 1246
File: bindings/CMakeLists.txt:0-0
Timestamp: 2025-10-10T08:09:54.528Z
Learning: In the Munich Quantum Toolkit (MQT) Core project, scikit-build-core is configured with `wheel.install-dir = "mqt/core"` in pyproject.toml, which automatically prefixes all CMake `DESTINATION` paths with `mqt/core/` during wheel installation. Therefore, CMake install destinations are relative to the `mqt/core` package namespace, not `site-packages`.
Applied to files:
src/qdmi/devices/CMakeLists.txtsrc/qdmi/devices/sc/CMakeLists.txt
📚 Learning: 2025-10-10T08:10:16.394Z
Learnt from: burgholzer
Repo: munich-quantum-toolkit/core PR: 1246
File: test/python/na/test_na_fomac.py:35-0
Timestamp: 2025-10-10T08:10:16.394Z
Learning: In the munich-quantum-toolkit/core repository, scikit-build-core is configured with `wheel.install-dir = "mqt/core"` in pyproject.toml, which means CMake `install()` commands with `DESTINATION <path>` install files relative to `mqt/core/` in the wheel, making them accessible via `files("mqt.core").joinpath("<path>")`.
Applied to files:
src/qdmi/devices/CMakeLists.txt
📚 Learning: 2025-11-04T19:50:14.489Z
Learnt from: burgholzer
Repo: munich-quantum-toolkit/core PR: 1287
File: test/qdmi/dd/helpers/test_utils.cpp:103-118
Timestamp: 2025-11-04T19:50:14.489Z
Learning: In the munich-quantum-toolkit/core QDMI device tests, when QDMI APIs return a string result size `ks` that includes a null terminator, the pattern `std::string keys(ks - 1, '\0'); ... device_job_get_results(..., ks, keys.data(), nullptr)` is correct and safe. The string allocates `ks` bytes total (ks-1 content + implicit null), and the API writing `ks` bytes (including trailing null) fits exactly into this space without buffer overrun.
Applied to files:
test/qdmi/devices/sc/test_device.cpp
📚 Learning: 2025-10-09T13:14:10.178Z
Learnt from: DRovara
Repo: munich-quantum-toolkit/core PR: 1108
File: mlir/lib/Dialect/MQTOpt/Transforms/ReplaceBasisStateControlsWithIfPattern.cpp:219-221
Timestamp: 2025-10-09T13:14:10.178Z
Learning: The MQT Core project (munich-quantum-toolkit/core repository) uses the C++20 standard, not C++17. C++20 features such as abbreviated function templates (e.g., `const auto&` parameters) are supported and valid in this codebase.
Applied to files:
src/qdmi/devices/sc/CMakeLists.txtsrc/qdmi/devices/na/CMakeLists.txt
🧬 Code graph analysis (5)
include/mqt-core/qdmi/devices/sc/Device.hpp (2)
include/mqt-core/qdmi/devices/dd/Device.hpp (4)
Device(66-66)Device(70-70)Device(73-73)Device(77-77)include/mqt-core/qdmi/devices/na/Device.hpp (4)
Device(71-71)Device(75-75)Device(78-78)Device(82-82)
include/mqt-core/qdmi/devices/dd/Device.hpp (1)
src/qdmi/devices/dd/Device.cpp (1)
Device(212-214)
test/qdmi/devices/sc/test_device.cpp (1)
src/qdmi/devices/sc/Device.cpp (33)
MQT_SC_QDMI_device_session_query_device_property(577-584)MQT_SC_QDMI_device_session_query_device_property(577-579)MQT_SC_QDMI_device_session_alloc(474-482)MQT_SC_QDMI_device_session_alloc(474-474)MQT_SC_QDMI_device_session_init(484-489)MQT_SC_QDMI_device_session_init(484-484)MQT_SC_QDMI_device_session_free(491-497)MQT_SC_QDMI_device_session_free(491-491)MQT_SC_QDMI_device_finalize(469-472)MQT_SC_QDMI_device_finalize(469-469)MQT_SC_QDMI_device_session_create_device_job(508-514)MQT_SC_QDMI_device_session_create_device_job(508-509)MQT_SC_QDMI_device_job_free(516-516)MQT_SC_QDMI_device_job_free(516-516)MQT_SC_QDMI_device_session_set_parameter(499-506)MQT_SC_QDMI_device_session_set_parameter(499-501)MQT_SC_QDMI_device_job_set_parameter(518-525)MQT_SC_QDMI_device_job_set_parameter(518-520)MQT_SC_QDMI_device_job_query_property(527-535)MQT_SC_QDMI_device_job_query_property(527-530)MQT_SC_QDMI_device_job_submit(537-542)MQT_SC_QDMI_device_job_submit(537-537)MQT_SC_QDMI_device_job_cancel(544-549)MQT_SC_QDMI_device_job_cancel(544-544)MQT_SC_QDMI_device_job_check(551-557)MQT_SC_QDMI_device_job_check(551-552)MQT_SC_QDMI_device_job_wait(559-565)MQT_SC_QDMI_device_job_wait(559-560)MQT_SC_QDMI_device_job_get_results(567-575)MQT_SC_QDMI_device_job_get_results(567-570)site(307-307)MQT_SC_QDMI_device_session_query_site_property(586-594)MQT_SC_QDMI_device_session_query_site_property(586-589)
test/qdmi/devices/sc/test_generator.cpp (1)
src/qdmi/devices/sc/Generator.cpp (4)
writeJSONSchema(150-163)writeJSONSchema(150-150)writeJSONSchema(175-186)writeJSONSchema(175-175)
include/mqt-core/qdmi/devices/na/Device.hpp (1)
include/mqt-core/qdmi/devices/dd/Device.hpp (4)
Device(66-66)Device(70-70)Device(73-73)Device(77-77)
🪛 GitHub Check: 🇨 Lint / 🚨 Lint
src/qdmi/devices/dd/Device.cpp
[warning] 360-360: src/qdmi/devices/dd/Device.cpp:360:23 [misc-include-cleaner]
no header providing "std::runtime_error" is directly included
[warning] 826-826: src/qdmi/devices/dd/Device.cpp:826:5 [bugprone-empty-catch]
empty catch statements hide issues; to handle exceptions appropriately, consider re-throwing, handling, or avoiding catch altogether
src/qdmi/devices/na/Device.cpp
[warning] 228-228: src/qdmi/devices/na/Device.cpp:228:23 [misc-include-cleaner]
no header providing "std::runtime_error" is directly included
[warning] 663-663: src/qdmi/devices/na/Device.cpp:663:5 [bugprone-empty-catch]
empty catch statements hide issues; to handle exceptions appropriately, consider re-throwing, handling, or avoiding catch altogether
[warning] 662-662: src/qdmi/devices/na/Device.cpp:662:5 [readability-avoid-return-with-void-value]
return statement within a void function should not have a specified return value
⏰ Context from checks skipped due to timeout of 900000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
- GitHub Check: 🐍 Test (ubuntu-24.04) / 🐍 ubuntu-24.04
- GitHub Check: 🐍 Test (macos-15-intel) / 🐍 macos-15-intel
- GitHub Check: 🐍 Test (windows-2022) / 🐍 windows-2022
🔇 Additional comments (55)
bindings/na/fomac/fomac.cpp (1)
15-15: Include path update to new QDMI device location looks correctSwitching to
#include "qdmi/devices/na/Generator.hpp"is consistent with the new unified QDMI device layout and does not alter the binding logic in this file.src/na/fomac/Device.cpp (1)
15-15: Include path realignment looks correctThe switch to
qdmi/devices/na/Generator.hppmatches the new device header layout and keeps this TU consistent with the rest of the refactor.src/qdmi/devices/dd/CMakeLists.txt (1)
37-50: DD device now correctly depends on base QDMI device interfaceUsing
qdmi/devices/dd/Device.hppin the FILE_SET and addingMQT::CoreQDMIBaseDeviceas a private dependency cleanly tie the DD device into the new shared base-device infrastructure. The wiring here looks consistent with the refactor.test/qdmi/devices/na/test_generator.cpp (1)
11-11: Test include updated to new generator locationThe test now includes
qdmi/devices/na/Generator.hpp, which matches the refactored header layout used by the NA device implementation and CLI. Looks good.src/qdmi/devices/na/App.cpp (1)
11-11: CLI now includes generator from unifiedqdmi/devices/napathThe include adjustment keeps the NA generator CLI aligned with the new header layout; no behavioral impact.
src/qdmi/driver/Driver.cpp (1)
11-11: Driver include path matches new header layoutSwitching to
"qdmi/driver/Driver.hpp"is consistent with the reorganized QDMI driver module. No functional changes here.src/qdmi/devices/na/Generator.cpp (1)
15-15: NA generator implementation now uses the consolidated header pathIncluding
qdmi/devices/na/Generator.hpphere keeps the implementation consistent with the new device/generator directory structure; no behavioral issues.test/fomac/test_fomac.cpp (1)
19-19: Explicitly including<optional>matches thestd::optionalusage in the operation tests.This removes reliance on transitive includes and is consistent with the rest of the file.
CHANGELOG.md (1)
24-24: New changelog entry and PR link follow existing style and guidelines.The entry for extracting thread‑safe singleton handling and its
[#1347]reference are consistent with the surrounding entries (emoji, title, PR ref, contributor handle) and do not introduce issue references, which matches the documented changelog conventions.As per coding guidelines / learnings, this format looks correct.
Also applies to: 275-275
test/qdmi/driver/test_driver.cpp (1)
11-11: Driver header path update aligns with the new driver layout.Including
"qdmi/driver/Driver.hpp"is consistent with the refactored QDMI driver structure and should continue to exposeqdmi::DriverandDYN_DEV_LIBSas used below.test/qdmi/devices/na/test_device.cpp (1)
12-12: NA generator include path correctly reflects the new device header layout.Switching to
"qdmi/devices/na/Generator.hpp"matches the refactored NA device/generator structure while preserving the expected JSON‑backed invariants these tests assert on.Based on learnings about NA QDMI tests being intentionally device‑specific, this change keeps that contract intact.
src/qdmi/devices/sc/App.cpp (1)
11-11: SC generator include path matches the newqdmi/devices/scstructure.The updated include keeps
sc::Deviceand the generator helpers in sync with the reorganized device directory without affecting the CLI logic.src/qdmi/devices/sc/Generator.cpp (1)
15-18: Generator header relocation and doc tweak are consistent and non‑breaking.Including
"qdmi/devices/sc/Generator.hpp"matches the new device layout; the added<cassert>and@returnstag do not alter behavior and keep the implementation ready for future assertions and clearer documentation.Also applies to: 218-218
test/qdmi/devices/CMakeLists.txt (1)
1-11: New device test CMake aggregator is straightforward and appropriate.Adding
na,dd, andscsubdirectories centralizes QDMI device tests cleanly, leaving per‑device CMake files to manage their own conditions and targets.include/mqt-core/na/fomac/Device.hpp (1)
14-14: FoMaC NA device now correctly includes the relocated NA generator header.Referencing
"qdmi/devices/na/Generator.hpp"keepsna::FoMaC::Devicewired to the samena::Devicedefinition after the header move, without altering its public interface.src/qdmi/devices/CMakeLists.txt (1)
1-17: LGTM!The CMake structure cleanly organizes device subdirectories and correctly propagates the target list to parent scope.
test/qdmi/devices/sc/test_generator.cpp (2)
23-39: LGTM!The recursive validation helper correctly ensures arrays are populated with non-null entries and properly validates nested structures.
42-52: LGTM!The test case comprehensively validates JSON schema generation by checking both successful parsing and structural integrity through the recursive validation helper.
test/qdmi/CMakeLists.txt (1)
9-10: LGTM!The simplified structure cleanly delegates test wiring to the respective subdirectories, improving maintainability and aligning with the device reorganization.
test/qdmi/devices/sc/test_app.cpp (4)
18-28: LGTM!Platform abstraction for
popen/pcloseis correctly implemented with appropriate conditional compilation for Windows and POSIX systems.
30-144: LGTM!The test cases properly validate command-line interface behavior including version output format, error handling for missing/unknown commands, and argument validation. The consistent test pattern enhances readability and maintainability.
279-371: LGTM!The round-trip tests provide excellent end-to-end validation by ensuring generated schemas are valid. The file-based variant properly cleans up after itself to maintain test isolation.
183-277: LGTM!The usage/help tests comprehensively validate that help output is available and contains expected descriptions for all subcommands, ensuring good user experience.
src/qdmi/CMakeLists.txt (1)
9-15: LGTM!The reorganization cleanly delegates device and driver target creation to their respective subdirectories, improving modularity and maintainability.
test/qdmi/devices/sc/test_device.cpp (6)
23-41: LGTM!The
querySiteshelper follows the standard QDMI two-phase query pattern and properly handles errors with descriptive exceptions.
44-89: LGTM!The test fixture hierarchy is well-designed with proper RAII cleanup, ensuring resources are freed in the correct order. The helpful error message in
SetUpaids debugging authentication or connectivity issues.
91-119: LGTM!The session lifecycle tests properly validate error handling for null arguments, bad states, and parameter setting timing. The use of
testing::AnyOfcorrectly handles optional feature support.
121-240: LGTM!The job lifecycle tests comprehensively validate creation, parameter setting, property queries, and operations (submit, cancel, check, wait, get results). The proper use of
GTEST_SKIP()for unsupported features andtesting::AnyOffor optional behavior demonstrates robust test design.
242-277: LGTM!The property query tests thoroughly validate error handling for device and site properties across various invalid argument and state conditions.
279-342: LGTM!The specific property tests validate required QDMI device properties (name, version, library version) and ensure they're non-empty. The string allocation pattern correctly accounts for the null terminator.
Based on learnings, the pattern
std::string value(size - 1, '\0')followed by an API call writingsizebytes is correct and safe.include/mqt-core/qdmi/devices/sc/Device.hpp (3)
30-31: LGTM!The class correctly inherits from
SingletonDevice<Device>using CRTP and declares it as a friend to enable the base class to access the private constructor. Thefinalspecifier appropriately prevents further derivation.
18-18: LGTM!The include path correctly references the new base device header location under the reorganized directory structure.
64-64: LGTM!The
overridespecifier correctly indicates this destructor overrides the virtual destructor in theSingletonDevicebase class, aligning with the singleton refactoring.src/qdmi/driver/CMakeLists.txt (1)
9-33: LGTM!The QDMI driver target is correctly configured with:
- Proper target guard to prevent duplicate definition
- Modern FILE_SET HEADERS for header exposure
- Appropriate public/private linkage visibility
- Correct propagation to parent scope via MQT_CORE_TARGETS
The driver appropriately depends on all three device implementations (NA, SC, DD_DDSIM).
test/qdmi/devices/sc/CMakeLists.txt (1)
1-31: LGTM!The CMake configuration follows the established pattern from other QDMI device tests (na, dd). The conditional target check, QDMI prefix setup, and dependency chain are properly configured. The compile definitions correctly use generator expressions for paths and version info.
src/qdmi/devices/sc/Device.cpp (3)
15-18: LGTM!Include paths correctly updated to reflect the new
qdmi/devices/sc/directory structure.
219-225: LGTM!Appropriate exception handling for the new singleton pattern. Catching
std::runtime_errorfromget()and translating it toQDMI_ERROR_BADSTATEis the correct approach for API consistency.
475-481: LGTM!Consistent exception handling pattern with
queryDeviceProperty. The error translation toQDMI_ERROR_BADSTATEmaintains API contract.src/qdmi/devices/na/CMakeLists.txt (4)
26-28: LGTM!Header paths correctly updated to the new
qdmi/devices/na/directory structure.
96-99: LGTM!Generated header paths and directory creation properly aligned with the new directory structure.
130-137: LGTM!Device header path updated and the new
MQT::CoreQDMIBaseDevicedependency correctly added to support theSingletonDevice<T>base class inheritance.
180-180: LGTM!Dynamic device header path consistent with the static device configuration.
test/qdmi/driver/CMakeLists.txt (1)
1-21: LGTM!The driver test configuration is well-structured with appropriate platform-specific handling. The
DYN_DEV_LIBScompile definition cleverly uses C++17 CTAD (Class Template Argument Deduction) forstd::arrayandstd::pair, which is supported since the project uses C++20.include/mqt-core/qdmi/devices/na/Device.hpp (4)
18-18: LGTM!Correctly includes the new
SingletonDevicebase class header.
31-32: LGTM!The CRTP inheritance pattern (
SingletonDevice<Device>) is the idiomatic approach for implementing a generic singleton base. The friend declaration is necessary to allow the base class to construct the singleton instance.
75-76: LGTM!Deleting move operations is correct for singleton semantics—singletons should be neither copyable nor movable. This aligns with the
dd/Device.hpppattern shown in the relevant code snippets.
82-82: LGTM!The
overridespecifier is correct sinceSingletonDevicehas a virtual destructor, and= defaultis appropriate here.src/qdmi/devices/sc/CMakeLists.txt (1)
26-28: Path updates align with new directory structure.The updated include paths and base directory references correctly reflect the new
qdmi/devices/layout. The addition ofMQT::CoreQDMIBaseDeviceas a private link dependency (line 137) properly connects the SC device to the new singleton base class.Also applies to: 96-99, 130-130, 137-137, 180-180
src/qdmi/devices/na/Device.cpp (2)
15-18: Include path updates are correct.The include paths now correctly reference the new
qdmi/devices/na/directory structure.
643-649: Singleton access with exception handling looks correct.The try/catch pattern properly maps uninitialized device state to
QDMI_ERROR_BADSTATE, consistent with the new singleton API contract.include/mqt-core/qdmi/devices/dd/Device.hpp (3)
20-20: Singleton base class inheritance correctly implemented.The
Deviceclass now properly derives fromSingletonDevice<Device>using the CRTP pattern. Thefriend class SingletonDevicedeclaration correctly grants the base class access to the private constructor, which is required for the singleton factory method.Also applies to: 35-36
77-77: Destructoroverridespecifier is correct.Adding
overrideensures the destructor properly overrides the virtual destructor inSingletonDevice<Device>.
248-250: Job constructor correctly uses pointer-based singleton access.The change from
Device::get().generateUniqueID()toDevice::get()->generateUniqueID()correctly adapts to the new API that returnsshared_ptr<Device>.src/qdmi/devices/dd/Device.cpp (2)
15-15: Include path update is correct.The include path now correctly references the new
qdmi/devices/dd/directory structure.
507-519: UnguardedDevice::get()calls inside async lambda may cause termination.Within
std::asynclambdas, ifDevice::get()throws (e.g., device finalized mid-execution), the exception will propagate out of the async task and causestd::terminate()when the future is destroyed or accessed. Consider wrapping these calls in try/catch or verifying the device remains initialized for the duration of job execution.This is a theoretical concern assuming the device lifecycle is managed correctly (device won't be finalized while jobs are running). Please verify this invariant is enforced elsewhere, or consider adding defensive try/catch blocks:
jobHandle_ = std::async(std::launch::async, [this]() { + try { qdmi::dd::Device::get()->increaseRunningJobs(); // ... rest of job execution ... qdmi::dd::Device::get()->decreaseRunningJobs(); + } catch (...) { + status_.store(QDMI_JOB_STATUS_FAILED); + } });
| // Define a macro for hidden visibility, which works on GCC and Clang. | ||
| #if defined(__GNUC__) || defined(__clang__) | ||
| #define MQT_HIDDEN __attribute__((visibility("hidden"))) | ||
| #else | ||
| #define MQT_HIDDEN | ||
| #endif |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick | 🔵 Trivial
Consider avoiding raw owning pointers for instance and mutex
You intentionally leak the mutex to sidestep static deinitialization order, and manage instance via a raw pointer:
MQT_HIDDEN inline static std::shared_ptr<ConcreteType>* instance = nullptr;
MQT_HIDDEN inline static std::mutex* mutex = new std::mutex;This works, but it is non‑idiomatic and easy to misuse. A cleaner alternative is to rely on function‑local statics for initialization order and avoid manual new/delete:
static auto instanceStorage() -> std::shared_ptr<ConcreteType>& {
static std::shared_ptr<ConcreteType> inst{};
return inst;
}
static auto instanceMutex() -> std::mutex& {
static std::mutex m;
return m;
}and then use instanceStorage() / instanceMutex() in initialize(), finalize(), and get(). That eliminates raw owning pointers and the intentional leak while still avoiding the static deinit‑order fiasco.
Not mandatory for correctness once get() is fixed, but it would simplify reasoning and static‑analysis tooling.
Also applies to: 32-35
🤖 Prompt for AI Agents
In include/mqt-core/qdmi/devices/base/Device.hpp around lines 22-27 (and
similarly 32-35), replace the raw owning pointers and intentional leak for
instance and mutex with function-local statics: create a function returning a
reference to a static std::shared_ptr<ConcreteType> (instanceStorage()) and
another returning a reference to a static std::mutex (instanceMutex()), then
update initialize(), finalize(), and get() to use those accessors instead of the
pointer variables; this removes manual new/delete, avoids the leak, and
preserves safe initialization order without changing external behavior.
| MQT_HIDDEN inline static std::shared_ptr<ConcreteType>* instance = nullptr; | ||
| // NOLINTNEXTLINE(cppcoreguidelines-owning-memory) | ||
| MQT_HIDDEN inline static std::mutex* mutex = new std::mutex; | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
# First, find and read the Device.hpp file to see the full SingletonDevice implementation
find . -name "Device.hpp" -path "*/qdmi/devices/base/*" | head -5Repository: munich-quantum-toolkit/core
Length of output: 118
🏁 Script executed:
# Read the full Device.hpp file to understand the complete SingletonDevice implementation
cat -n ./include/mqt-core/qdmi/devices/base/Device.hppRepository: munich-quantum-toolkit/core
Length of output: 3837
🏁 Script executed:
# Search for calls to SingletonDevice::get() to see if there are production callers
# and if they provide any guards or assumptions
rg "\.get\(\)" --type cpp -B 2 -A 2 | head -80Repository: munich-quantum-toolkit/core
Length of output: 5521
🏁 Script executed:
# Search more specifically for SingletonDevice class usage and get() calls
# First find all files that use SingletonDevice
rg "SingletonDevice" --type cpp -l | head -20Repository: munich-quantum-toolkit/core
Length of output: 248
🏁 Script executed:
# Check one concrete device implementation to see the pattern
cat -n ./include/mqt-core/qdmi/devices/dd/Device.hpp | head -50Repository: munich-quantum-toolkit/core
Length of output: 1665
🏁 Script executed:
# Search for Device::get() or similar get() calls in QDMI device code
rg "Device::get|device.*get\(\)" include/mqt-core/qdmi/ src/qdmi/ --type cpp -B 2 -A 2Repository: munich-quantum-toolkit/core
Length of output: 5176
🏁 Script executed:
# Check one of the Device.cpp implementation files to see the full context
cat -n ./src/qdmi/devices/dd/Device.cpp | head -100Repository: munich-quantum-toolkit/core
Length of output: 4468
🏁 Script executed:
# Look at the specific get() calls and their exception handling
rg -A 10 "Device::get\(\)->" src/qdmi/devices/dd/Device.cpp | head -60Repository: munich-quantum-toolkit/core
Length of output: 2340
🏁 Script executed:
# Let me check if there are any test files that verify get() behavior when device is not initialized
find . -path "*/test/*" -name "*device*test*.cpp" -o -path "*/test/*" -name "*Device*test*.cpp" | grep -i qdmi | head -5Repository: munich-quantum-toolkit/core
Length of output: 166
🏁 Script executed:
# Check one test file to see initialization patterns
cat -n ./test/qdmi/devices/dd/device_status_test.cpp | head -80Repository: munich-quantum-toolkit/core
Length of output: 3380
🏁 Script executed:
# Check the SessionGuard implementation to see if it calls initialize()
cat -n ./test/qdmi/dd/helpers/test_utils.hpp | head -100Repository: munich-quantum-toolkit/core
Length of output: 140
🏁 Script executed:
# Find test_utils.hpp
find . -name "test_utils.hpp" -path "*/qdmi/*"Repository: munich-quantum-toolkit/core
Length of output: 116
🏁 Script executed:
# Read test_utils.hpp to see SessionGuard implementation
cat -n ./test/qdmi/devices/dd/helpers/test_utils.hppRepository: munich-quantum-toolkit/core
Length of output: 2608
🏁 Script executed:
# Find the SessionGuard implementation
rg "SessionGuard::" test/qdmi/devices/dd/helpers/ -A 5Repository: munich-quantum-toolkit/core
Length of output: 1020
Fix SingletonDevice::get() null pointer dereference and inconsistent error handling
The get() method has a critical undefined behavior bug: if instance is nullptr (before initialize() or after finalize()), the line assert(*instance != nullptr) dereferences a null pointer before the assertion fires. Additionally, production code in Device.cpp wraps some get() calls in try-catch blocks expecting std::runtime_error, but the implementation uses assert() which doesn't throw.
[[nodiscard]] static auto get() -> std::shared_ptr<ConcreteType> {
const std::scoped_lock lock(*mutex);
assert(*instance != nullptr &&
"Device not initialized. Call `initialize()` first.");
return *instance;
}Should be changed to:
[[nodiscard]] static auto get() -> std::shared_ptr<ConcreteType> {
const std::scoped_lock lock(*mutex);
if (instance == nullptr || !*instance) {
throw std::runtime_error(
"Device not initialized. Call `initialize()` before `get()`.");
}
return *instance;
}This matches the documented error handling pattern already expected by production code callers (lines 57-64, 71-85, 90-95 in Device.cpp which catch std::runtime_error), ensures all code paths are safe, and removes undefined behavior.
🤖 Prompt for AI Agents
In include/mqt-core/qdmi/devices/base/Device.hpp around lines 32 to 35, the
SingletonDevice::get() currently dereferences instance via assert(*instance !=
nullptr) causing undefined behavior if instance is null and uses assert instead
of throwing; change the implementation to lock the mutex, check if instance is
nullptr or *instance is null, and if so throw a std::runtime_error with the
message "Device not initialized. Call `initialize()` before `get()`.", otherwise
return *instance so callers expecting exceptions (not assertions) behave
correctly and no null pointer is dereferenced.
| # Set versioning information | ||
| set_target_properties(${TARGET_NAME} PROPERTIES EXPORT_NAME Core${ARG_ALIAS_NAME}) | ||
|
|
||
| # add headers using file sets | ||
| target_sources( | ||
| ${TARGET_NAME} PUBLIC FILE_SET HEADERS BASE_DIRS ${MQT_CORE_INCLUDE_BUILD_DIR} FILES | ||
| ${MQT_CORE_INCLUDE_BUILD_DIR}/qdmi/devices/base/Device.hpp) | ||
|
|
||
| # Always compile with position independent code such that the library can be used in shared | ||
| # libraries | ||
| set_target_properties(${TARGET_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON) | ||
|
|
||
| # add to list of MQT core targets | ||
| set(MQT_CORE_TARGETS | ||
| ${MQT_CORE_TARGETS} ${TARGET_NAME} | ||
| PARENT_SCOPE) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick | 🔵 Trivial
Double‑check EXPORT_NAME source and PIC property for INTERFACE target
Two small CMake nits in this block:
EXPORT_NAME Core${ARG_ALIAS_NAME}assumesARG_ALIAS_NAMEis set in the including scope; if not, the export name degrades to justCore. Consider either hard‑coding the intended export name for this target or wiring a clearly defined argument/variable in the caller.- For an
INTERFACElibrary,INTERFACE_POSITION_INDEPENDENT_CODEis typically the property that propagates PIC requirements to consumers; settingPOSITION_INDEPENDENT_CODEon the INTERFACE target itself may not have the intended effect.
You might want something along the lines of:
set_target_properties(${TARGET_NAME} PROPERTIES
EXPORT_NAME CoreQDMIBaseDevice
INTERFACE_POSITION_INDEPENDENT_CODE ON
)(adjust export name to whatever is desired if ARG_ALIAS_NAME is indeed intentional).
🤖 Prompt for AI Agents
In src/qdmi/devices/base/CMakeLists.txt around lines 18 to 33, the EXPORT_NAME
uses ARG_ALIAS_NAME which may be undefined in the including scope and
POSITION_INDEPENDENT_CODE is being set on an INTERFACE target; replace or
hard‑code EXPORT_NAME (e.g., CoreQDMIBaseDevice) or ensure ARG_ALIAS_NAME is
explicitly defined/passed by the caller, and change the PIC property to
INTERFACE_POSITION_INDEPENDENT_CODE ON so PIC propagates to consumers; update
the set_target_properties call accordingly and verify the export name and PIC
behavior in the consuming projects.
| try { | ||
| // Use the new get() that returns a shared_ptr. | ||
| return qdmi::dd::Device::get()->queryProperty(prop, size, value, sizeRet); | ||
| } catch (const std::runtime_error&) { | ||
| // This happens if get() throws because the device is not initialized. | ||
| return QDMI_ERROR_BADSTATE; | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Missing <stdexcept> include for std::runtime_error.
The catch clause references std::runtime_error, but no header providing it is directly included.
Add at the top of the file with other includes:
#include <utility>
+#include <stdexcept>Committable suggestion skipped: line range outside the PR's diff.
🧰 Tools
🪛 GitHub Check: 🇨 Lint / 🚨 Lint
[warning] 360-360: src/qdmi/devices/dd/Device.cpp:360:23 [misc-include-cleaner]
no header providing "std::runtime_error" is directly included
🤖 Prompt for AI Agents
In src/qdmi/devices/dd/Device.cpp around lines 357 to 363, the catch uses
std::runtime_error but the header <stdexcept> is not included; add an include
for <stdexcept> at the top of the file with the other includes (so the catch
compiles and the symbol is resolved).
| try { | ||
| // Use the new get() that returns a shared_ptr. | ||
| qdmi::dd::Device::get()->sessionFree(session); | ||
| } catch (const std::runtime_error&) { | ||
| } | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Empty catch block silently swallows exceptions.
Same issue as in the NA device implementation. Consider adding a comment or parameter name to document the intentional silence.
Apply this diff:
void MQT_DDSIM_QDMI_device_session_free(MQT_DDSIM_QDMI_Device_Session session) {
try {
// Use the new get() that returns a shared_ptr.
qdmi::dd::Device::get()->sessionFree(session);
- } catch (const std::runtime_error&) {
+ } catch (const std::runtime_error& /*unused*/) {
+ // Device not initialized; session cannot be freed - silently ignore.
}
}🧰 Tools
🪛 GitHub Check: 🇨 Lint / 🚨 Lint
[warning] 826-826: src/qdmi/devices/dd/Device.cpp:826:5 [bugprone-empty-catch]
empty catch statements hide issues; to handle exceptions appropriately, consider re-throwing, handling, or avoiding catch altogether
🤖 Prompt for AI Agents
In src/qdmi/devices/dd/Device.cpp around lines 823 to 828, the empty catch block
silently swallows std::runtime_error; update the catch to either name the
exception (e.g., catch (const std::runtime_error& e)) and add a brief comment
explaining why the exception is intentionally ignored, or log the exception at
debug/trace level so the silence is documented and future debugging is possible;
ensure the chosen approach matches the NA device implementation for consistency.
| try { | ||
| // Use the new get() that returns a shared_ptr. | ||
| return qdmi::na::Device::get()->queryProperty(prop, size, value, sizeRet); | ||
| } catch (const std::runtime_error&) { | ||
| // This happens if get() throws because the device is not initialized. | ||
| return QDMI_ERROR_BADSTATE; | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Missing <stdexcept> include for std::runtime_error.
The catch clause references std::runtime_error, but no header providing it is directly included. Add the missing include to satisfy include-what-you-use requirements.
Add at the top of the file with other includes:
#include <vector>
+#include <stdexcept>Committable suggestion skipped: line range outside the PR's diff.
🧰 Tools
🪛 GitHub Check: 🇨 Lint / 🚨 Lint
[warning] 228-228: src/qdmi/devices/na/Device.cpp:228:23 [misc-include-cleaner]
no header providing "std::runtime_error" is directly included
🤖 Prompt for AI Agents
In src/qdmi/devices/na/Device.cpp around lines 225 to 231, the catch block
references std::runtime_error but the file does not include the <stdexcept>
header; add #include <stdexcept> alongside the other includes at the top of the
file so the symbol is declared and the code satisfies include-what-you-use.
| try { | ||
| // Use the new get() that returns a shared_ptr. | ||
| return qdmi::na::Device::get()->sessionFree(session); | ||
| } catch (const std::runtime_error&) { | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix void return and empty catch block.
Two issues flagged by static analysis:
- Line 662:
returnstatement within a void function should not have a specified return value.sessionFreereturnsvoid, soreturnshould be plain. - Line 663: Empty catch block silently swallows exceptions. Consider adding a comment explaining intentional silence or logging at debug level.
Apply this diff:
void MQT_NA_QDMI_device_session_free(MQT_NA_QDMI_Device_Session session) {
try {
// Use the new get() that returns a shared_ptr.
- return qdmi::na::Device::get()->sessionFree(session);
- } catch (const std::runtime_error&) {
+ qdmi::na::Device::get()->sessionFree(session);
+ } catch (const std::runtime_error& /*unused*/) {
+ // Device not initialized; session cannot be freed - silently ignore.
}
}🧰 Tools
🪛 GitHub Check: 🇨 Lint / 🚨 Lint
[warning] 663-663: src/qdmi/devices/na/Device.cpp:663:5 [bugprone-empty-catch]
empty catch statements hide issues; to handle exceptions appropriately, consider re-throwing, handling, or avoiding catch altogether
[warning] 662-662: src/qdmi/devices/na/Device.cpp:662:5 [readability-avoid-return-with-void-value]
return statement within a void function should not have a specified return value
🤖 Prompt for AI Agents
In src/qdmi/devices/na/Device.cpp around lines 660 to 664, the code uses `return
qdmi::na::Device::get()->sessionFree(session);` inside a void function and has
an empty catch that swallows exceptions; change the call to invoke
`sessionFree(session)` without returning a value (call the method then plain
`return;` or simply fall through) and replace the empty catch block with a
deliberate no-op comment or a debug-level log (e.g., comment "// intentionally
ignoring errors" or a debug log call) so exceptions are not silently swallowed
without explanation.
| #include "qdmi/devices/sc/DeviceMemberInitializers.hpp" | ||
|
|
||
| #include <algorithm> | ||
| #include <atomic> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick | 🔵 Trivial
Consider removing unused <atomic> include.
With the singleton management moved to the SingletonDevice base class, <atomic> appears to no longer be used in this file. Consider removing it for cleaner dependencies.
-#include <atomic>📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| #include <atomic> |
🤖 Prompt for AI Agents
In src/qdmi/devices/sc/Device.cpp around line 21, the file still includes
<atomic> but that header is no longer used after moving singleton management to
SingletonDevice; remove the #include <atomic> line, run a full rebuild or at
least compile this translation unit to ensure there are no remaining references,
and commit the cleaned include removal.
| try { | ||
| // Use the new get() that returns a shared_ptr. | ||
| qdmi::sc::Device::get()->sessionFree(session); | ||
| } catch (const std::runtime_error&) { | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick | 🔵 Trivial
Consider adding a comment for the empty catch block.
The empty catch block is intentional for an idempotent free operation, but a brief comment would clarify this design choice and prevent future confusion.
try {
// Use the new get() that returns a shared_ptr.
qdmi::sc::Device::get()->sessionFree(session);
} catch (const std::runtime_error&) {
+ // Silently ignore: if device is uninitialized, there's nothing to free.
}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| try { | |
| // Use the new get() that returns a shared_ptr. | |
| qdmi::sc::Device::get()->sessionFree(session); | |
| } catch (const std::runtime_error&) { | |
| } | |
| try { | |
| // Use the new get() that returns a shared_ptr. | |
| qdmi::sc::Device::get()->sessionFree(session); | |
| } catch (const std::runtime_error&) { | |
| // Silently ignore: if device is uninitialized, there's nothing to free. | |
| } |
🤖 Prompt for AI Agents
In src/qdmi/devices/sc/Device.cpp around lines 492 to 496, the empty catch block
swallowing std::runtime_error should include a brief inline comment clarifying
it's intentional; update the catch to contain a one-line comment such as
"Intentionally ignored — sessionFree is idempotent and may throw if session
already freed" so future readers understand the design choice and no behavior
changes are made.
|
Some of the changes here have already made their way into main through #1355. The key take-away for me from here was that we intentionally leak memory to avoid the fiasco. This led to a simpler version than implemented here, where we, again, simply use a static variable in the singleton getter. Since C++11, static variable initialization is guaranteed to be thread safe. |
Description
This PR contributes to #1331 (but does not fully resolve it).
Checklist: