diff --git a/CMakeLists.txt b/CMakeLists.txt index 4d384fa03..f83f77f9c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,7 +32,7 @@ if(BUILD_MQT_QMAP_BINDINGS) # top-level call to find Python find_package( - Python 3.8 REQUIRED + Python 3.9 REQUIRED COMPONENTS Interpreter Development.Module OPTIONAL_COMPONENTS Development.SABIModule) endif() diff --git a/README.md b/README.md index 548260104..ea9a30766 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ If you have any questions, feel free to contact us via [quantum.cda@xcit.tum.de]

-QMAP is available via [PyPI](https://pypi.org/project/mqt.qmap/) for Linux, macOS, and Windows and supports Python 3.8 to 3.12. +QMAP is available via [PyPI](https://pypi.org/project/mqt.qmap/) for Linux, macOS, and Windows and supports Python 3.9 to 3.13. ```console (venv) $ pip install mqt.qmap @@ -76,7 +76,7 @@ circ_opt, results = qmap.optimize_clifford(circ) ## System Requirements and Building -The implementation is compatible with any C++17 compiler, a minimum CMake version of 3.19, and Python 3.8+. +The implementation is compatible with any C++17 compiler, a minimum CMake version of 3.19, and Python 3.9+. Please refer to the [documentation](https://mqt.readthedocs.io/projects/qmap) on how to build the project. Building (and running) is continuously tested under Linux, macOS, and Windows using the [latest available system versions for GitHub Actions](https://github.com/actions/virtual-environments). diff --git a/docs/source/Installation.rst b/docs/source/Installation.rst index bf3bf22f3..6fe62db8e 100644 --- a/docs/source/Installation.rst +++ b/docs/source/Installation.rst @@ -34,7 +34,7 @@ In most practical cases (under 64-bit Linux, MacOS incl. Apple Silicon, and Wind (venv) $ pip install --upgrade pip setuptools wheel .. warning:: - As of version 2.1.0, support for Python 3.7 has been officially dropped. + As of version 2.7.0, support for Python 3.8 has been officially dropped. We strongly recommend that users upgrade to a more recent version of Python to ensure compatibility and continue receiving updates and support. Thank you for your understanding. diff --git a/noxfile.py b/noxfile.py index 91549cb13..0fa462b03 100644 --- a/noxfile.py +++ b/noxfile.py @@ -18,7 +18,7 @@ nox.options.sessions = ["lint", "tests"] -PYTHON_ALL_VERSIONS = ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] +PYTHON_ALL_VERSIONS = ["3.9", "3.10", "3.11", "3.12", "3.13"] # The following lists all the build requirements for building the package. # Note that this includes transitive build dependencies of package dependencies, @@ -100,18 +100,17 @@ def docs(session: nox.Session) -> None: extra_installs = ["sphinx-autobuild"] if serve else [] session.install(*BUILD_REQUIREMENTS, *extra_installs) session.install("--no-build-isolation", "-ve.[docs]", "--reinstall-package", "mqt.qmap") - session.chdir("docs") if args.builder == "linkcheck": - session.run("sphinx-build", "-b", "linkcheck", "source", "_build/linkcheck", *posargs) + session.run("sphinx-build", "-b", "linkcheck", "docs", "docs/_build/linkcheck", *posargs) return shared_args = ( "-n", # nitpicky mode "-T", # full tracebacks f"-b={args.builder}", - "source", - f"_build/{args.builder}", + "docs", + f"docs/_build/{args.builder}", *posargs, ) diff --git a/pyproject.toml b/pyproject.toml index 05131428d..f8a451e4b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,7 +30,6 @@ classifiers = [ "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3 :: Only", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", @@ -39,7 +38,7 @@ classifiers = [ "Development Status :: 5 - Production/Stable", "Typing :: Typed", ] -requires-python = ">=3.8" +requires-python = ">=3.9" dependencies = [ "qiskit[qasm3-import]>=1.0.0", "rustworkx[all]>=0.14.0", @@ -151,7 +150,6 @@ xfail_strict = true filterwarnings = [ "error", 'ignore:.*datetime\.datetime\.utcfromtimestamp.*:DeprecationWarning:', - 'ignore:.*Qiskit with Python 3.8.*:DeprecationWarning:', 'ignore:.*qiskit\.providers\.models.* is deprecated.*:DeprecationWarning:qiskit.*', # Qiskit imports deprecated code (should be resolved in the 1.2.1 release) 'ignore:.*Treating CircuitInstruction as an iterable is deprecated.*:DeprecationWarning:mqt.qcec.*', # Needs a new release of QCEC (should be resolved in 2.7.1) # we purposely maintain compatibility with the V1 backends until Qiskit removes them in 2.0 @@ -176,7 +174,7 @@ report.exclude_also = [ [tool.mypy] files = ["src/mqt", "test/python"] mypy_path = ["$MYPY_CONFIG_FILE_DIR/src"] -python_version = "3.8" +python_version = "3.9" warn_unused_configs = true enable_error_code = ["ignore-without-code", "redundant-expr", "truthy-bool"] strict = true @@ -305,7 +303,7 @@ build = "cp3*" skip = "*-musllinux*" archs = "auto64" test-command = "python -c \"from mqt import qmap\"" -test-skip = ["cp38-macosx_arm64", "cp313*"] # skip testing on Python 3.13 until our dependencies are ready +test-skip = ["cp313*"] # skip testing on Python 3.13 until our dependencies are ready build-frontend = "build[uv]" free-threaded-support = true manylinux-x86_64-image = "manylinux_2_28" diff --git a/src/mqt/qmap/subarchitectures.py b/src/mqt/qmap/subarchitectures.py index 932a4cf2c..1456f8dce 100644 --- a/src/mqt/qmap/subarchitectures.py +++ b/src/mqt/qmap/subarchitectures.py @@ -8,7 +8,7 @@ import pickle from itertools import combinations from pathlib import Path -from typing import TYPE_CHECKING, Dict, Optional, Set, Tuple # noqa: TID251 +from typing import TYPE_CHECKING, Optional from ._compat.importlib import resources @@ -29,7 +29,7 @@ with contextlib.suppress(TypeError): Graph: TypeAlias = rx.PyGraph[int, Optional[int]] -PartialOrder: TypeAlias = Dict[Tuple[int, int], Set[Tuple[int, int]]] +PartialOrder: TypeAlias = dict[tuple[int, int], set[tuple[int, int]]] #: Architectures for which precomputed orderings are available precomputed_backends = ["rigetti_16", "ibm_guadalupe_16"] diff --git a/src/mqt/qmap/visualization/visualize_search_graph.py b/src/mqt/qmap/visualization/visualize_search_graph.py index 4ec278138..e4e179f2d 100644 --- a/src/mqt/qmap/visualization/visualize_search_graph.py +++ b/src/mqt/qmap/visualization/visualize_search_graph.py @@ -9,13 +9,13 @@ from dataclasses import dataclass from pathlib import Path from random import shuffle -from typing import TYPE_CHECKING, Literal, Tuple, TypedDict, Union +from typing import TYPE_CHECKING, Literal, TypedDict, Union if TYPE_CHECKING: from .._compat.typing import TypeAlias - Position: TypeAlias = Tuple[float, float] - Colorscale: TypeAlias = Union[str, Sequence[str], Sequence[Tuple[float, str]]] + Position: TypeAlias = tuple[float, float] + Colorscale: TypeAlias = Union[str, Sequence[str], Sequence[tuple[float, str]]] class _ActiveTraceIndices(TypedDict): search_edges: list[int]