Tooling¶
This page summarizes the main tools, software, and standards used in MQT QuSAT. It serves as a quick reference for new contributors and users who want to understand the project’s ecosystem.
C++¶
Tool |
Description |
Links / Notes |
|---|---|---|
CMake |
Build system. |
|
clang-format |
Code formatter (LLVM style). |
Documentation. Config: |
clang-tidy |
Static analysis and linting for C++. |
Documentation. Config: |
Doxygen |
C++ API documentation (comments). |
Documentation. Rendered in Sphinx via breathe. |
GoogleTest |
C++ unit testing. |
Primer. Tests in |
C++/Python Bindings and Packaging¶
Tool |
Description |
Links / Notes |
|---|---|---|
nanobind |
C++/Python bindings (exposes C++ library to Python). |
Documentation. Bindings live in |
scikit-build-core |
Build backend for Python package. |
|
cibuildwheel |
Builds wheels for all supported platforms and Python versions. |
Documentation. Configured in |
By using nanobind, we can take advantage of the Stable ABI for Python 3.12+. This means that, starting from Python 3.12, we only need to build one wheel per platform, which can be used across all Python 3.12+ versions. We still build separate wheels for older supported Python versions.
Additionally, we support the free-threading version of Python that is no longer marked experimental as of Python 3.14. The corresponding wheels are built separately since there is no stable ABI for free-threading Python yet.
Python¶
Tool |
Description |
Links / Notes |
|---|---|---|
uv |
Fast Python package and project manager (install, venv, dependencies). |
Documentation. Recommended over |
nox |
Task automation for tests, lint, docs, and other sessions defined in |
Documentation. Run sessions with |
prek |
Runs hooks (formatting, linting) before each commit. |
Documentation. Install and run via |
ruff |
Linter and formatter for Python, written in Rust. |
Documentation. Used in prek and CI. |
ty |
Fast Python type checker and language server. |
|
pytest |
Testing framework for Python. |
Documentation. Run via |
The project adheres to modern standards and practices. For the Python ecosystem, we make use of the following standards:
Standard |
Description |
Links / Notes |
|---|---|---|
PEP 8 |
Style guide for Python code. |
|
PEP 518 |
Specifying build system requirements in |
|
PEP 621 |
Storing project metadata in |
|
PEP 639 |
Standardized license metadata in |
|
PEP 723 |
Inline script metadata for efficient script execution. |
|
PEP 735 |
Dependency groups in |
Documentation¶
Tool |
Description |
Links / Notes |
|---|---|---|
Sphinx |
Documentation generator. |
Documentation. Docs source in |
MyST |
Markdown flavor for Sphinx (used in docs). |
Documentation. Enables rich Markdown in doc sources. |
CI and Quality¶
Tool |
Description |
Links / Notes |
|---|---|---|
GitHub Actions |
CI workflows (build, test, lint, coverage). |
Reusable MQT Workflows in |
Codecov |
Code coverage reporting. |
Codecov for this repo. |
CodeRabbit |
Automated code review on PRs. |
CodeRabbit. See Contributing. |
pre-commit.ci |
Runs pre-commit in CI and can auto-fix. |