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.

Documentation.

clang-format

Code formatter (LLVM style).

Documentation. Config: .clang-format in project root.

clang-tidy

Static analysis and linting for C++.

Documentation. Config: .clang-tidy in project root.

Doxygen

C++ API documentation (comments).

Documentation. Rendered in Sphinx via breathe.

GoogleTest

C++ unit testing.

Primer. Tests in test/; run via CTest.

C++/Python Bindings and Packaging

Tool

Description

Links / Notes

nanobind

C++/Python bindings (exposes C++ library to Python).

Documentation. Bindings live in bindings; stubs are auto-generated (see Contributing).

scikit-build-core

Build backend for Python package.

Documentation.

cibuildwheel

Builds wheels for all supported platforms and Python versions.

Documentation. Configured in pyproject.toml.

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 pip for installs and development.

nox

Task automation for tests, lint, docs, and other sessions defined in noxfile.py.

Documentation. Run sessions with nox -s <session>.

prek

Runs hooks (formatting, linting) before each commit.

Documentation. Install and run via prek install, prek run (staged files), or prek run -a (all files).

ruff

Linter and formatter for Python, written in Rust.

Documentation. Used in prek and CI.

ty

Fast Python type checker and language server.

Documentation.

pytest

Testing framework for Python.

Documentation. Run via nox -s tests or uv run pytest.

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.

Documentation.

PEP 518

Specifying build system requirements in pyproject.toml.

Documentation.

PEP 621

Storing project metadata in pyproject.toml.

Documentation.

PEP 639

Standardized license metadata in pyproject.toml.

Documentation.

PEP 723

Inline script metadata for efficient script execution.

Documentation.

PEP 735

Dependency groups in pyproject.toml.

Documentation.

Documentation

Tool

Description

Links / Notes

Sphinx

Documentation generator.

Documentation. Docs source in docs/.

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 .github/workflows/; see Actions.

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.

pre-commit.ci.