diff --git a/.clang-tidy b/.clang-tidy index 0599a288..be594783 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -74,5 +74,3 @@ CheckOptions: value: CamelCase - key: readability-identifier-naming.VariableCase value: camelBack - - key: misc-include-cleaner.IgnoreHeaders - value: pybind11/detail/.* diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 11cf58a1..8a565238 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -150,7 +150,7 @@ jobs: clang-version: 20 cmake-args: -DBUILD_MQT_DDSIM_BINDINGS=ON files-changed-only: true - install-pkgs: "pybind11==3.0.1" + install-pkgs: "nanobind==2.10.2" setup-python: true cpp-linter-extra-args: "-std=c++20" diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index af569542..a8f43920 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -131,7 +131,7 @@ repos: - id: disallow-caps name: Disallow improper capitalization language: pygrep - entry: PyBind|Numpy|Cmake|CCache|Github|PyTest|Mqt|Tum + entry: Nanobind|Numpy|Cmake|CCache|Github|PyTest|Mqt|Tum exclude: .pre-commit-config.yaml # Check best practices for scientific Python code diff --git a/CHANGELOG.md b/CHANGELOG.md index 3fbc8111..a697c488 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ This project adheres to [Semantic Versioning], with the exception that minor rel ### Changed +- ♻️ Migrate Python bindings from `pybind11` to `nanobind` ([#766]) ([**@denialhaag**]) +- 📦️ Provide Stable ABI wheels for Python 3.12+ ([#766]) ([**@denialhaag**]) - 👷 Stop testing on `ubuntu-22.04` and `ubuntu-22.04-arm` runners ([#740]) ([**@denialhaag**]) - 👷 Stop testing with `clang-19` and start testing with `clang-21` ([#740]) ([**@denialhaag**]) - 👷 Fix macOS tests with Homebrew Clang via new `munich-quantum-toolkit/workflows` version ([#740]) ([**@denialhaag**]) @@ -86,6 +88,7 @@ _📚 Refer to the [GitHub Release Notes] for previous changelogs._ +[#766]: https://github.com/munich-quantum-toolkit/ddsim/pull/766 [#740]: https://github.com/munich-quantum-toolkit/ddsim/pull/740 [#681]: https://github.com/munich-quantum-toolkit/ddsim/pull/681 [#674]: https://github.com/munich-quantum-toolkit/ddsim/pull/674 diff --git a/CMakeLists.txt b/CMakeLists.txt index 53cc6432..7047a68c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,10 +39,8 @@ if(BUILD_MQT_DDSIM_BINDINGS) endif() # top-level call to find Python - find_package( - Python 3.10 REQUIRED - COMPONENTS Interpreter Development.Module - OPTIONAL_COMPONENTS Development.SABIModule) + find_package(Python 3.10 REQUIRED COMPONENTS Interpreter Development.Module + ${SKBUILD_SABI_COMPONENT}) endif() # check if this is the master project or used via add_subdirectory diff --git a/UPGRADING.md b/UPGRADING.md index fa89cf3f..884b4102 100644 --- a/UPGRADING.md +++ b/UPGRADING.md @@ -4,12 +4,24 @@ This document describes breaking changes and how to upgrade. For a complete list ## [Unreleased] -### Removal of Python 3.13t wheels +### Python wheels +This release contains two changes to the distributed wheels. + +First, we have removed all wheels for Python 3.13t. Free-threading Python was introduced as an experimental feature in Python 3.13. It became stable in Python 3.14. -To conserve space on PyPI and to reduce the CD build times, we have removed all wheels for Python 3.13t from our CI. -We continue to provide wheels for the regular Python versions 3.10 to 3.14, as well as 3.14t. + +Second, for Python 3.12+, we are now providing Stable ABI wheels instead of separate version-specific wheels. +This was enabled by migrating our Python bindings from `pybind11` to `nanobind`. + +Both of these changes were made in the interest of conserving PyPI space and reducing CI/CD build times. +The full list of wheels now reads: + +- 3.10 +- 3.11 +- 3.12+ Stable ABI +- 3.14t ## [2.1.0] diff --git a/bindings/CMakeLists.txt b/bindings/CMakeLists.txt index e462cf8f..7aea7dd0 100644 --- a/bindings/CMakeLists.txt +++ b/bindings/CMakeLists.txt @@ -25,7 +25,7 @@ list( ${BASEPOINT}/../../core/lib ${BASEPOINT}/../../core/lib64) -add_mqt_python_binding( +add_mqt_python_binding_nanobind( DDSIM ${MQT_DDSIM_TARGET_NAME}-bindings bindings.cpp @@ -34,5 +34,4 @@ add_mqt_python_binding( INSTALL_DIR . LINK_LIBS - MQT::DDSim - pybind11_json) + MQT::DDSim) diff --git a/bindings/bindings.cpp b/bindings/bindings.cpp index 44212d57..b9a40884 100644 --- a/bindings/bindings.cpp +++ b/bindings/bindings.cpp @@ -20,54 +20,25 @@ #include #include #include +#include +#include // NOLINT(misc-include-cleaner) +#include // NOLINT(misc-include-cleaner) +#include // NOLINT(misc-include-cleaner) +#include // NOLINT(misc-include-cleaner) +#include // NOLINT(misc-include-cleaner) +#include // NOLINT(misc-include-cleaner) #include -#include -#include -#include // NOLINT(misc-include-cleaner) -#include -#include // NOLINT(misc-include-cleaner) #include #include -namespace py = pybind11; -using namespace pybind11::literals; +namespace nb = nanobind; +using namespace nb::literals; namespace { -template -std::unique_ptr -constructSimulator(const qc::QuantumComputation& circ, - const double stepFidelity, const unsigned int stepNumber, - const std::string& approximationStrategy, - const std::int64_t seed, Args&&... args) { - auto qc = std::make_unique(circ); - const auto approx = - ApproximationInfo{stepFidelity, stepNumber, - ApproximationInfo::fromString(approximationStrategy)}; - if constexpr (std::is_same_v) { - return std::make_unique(std::move(qc), - std::forward(args)...); - } else { - if (seed < 0) { - return std::make_unique(std::move(qc), approx, - std::forward(args)...); - } - return std::make_unique(std::move(qc), approx, seed, - std::forward(args)...); - } -} - -template -std::unique_ptr -constructSimulatorWithoutSeed(const qc::QuantumComputation& circ, - Args&&... args) { - return constructSimulator(circ, 1., 1, "fidelity", -1, - std::forward(args)...); -} - template -py::class_ createSimulator(py::module_ m, const std::string& name) { - auto sim = py::class_(std::move(m), name.c_str()); +nb::class_ createSimulator(nb::module_ m, const std::string& name) { + auto sim = nb::class_(std::move(m), name.c_str()); sim.def("get_number_of_qubits", &Sim::getNumberOfQubits, "Get the number of qubits") .def("get_name", &Sim::getName, "Get the name of the simulator") @@ -99,17 +70,35 @@ py::class_ createSimulator(py::module_ m, const std::string& name) { } // namespace -PYBIND11_MODULE(MQT_DDSIM_MODULE_NAME, m, py::mod_gil_not_used()) { - py::module::import("mqt.core.dd"); +// NOLINTNEXTLINE(performance-unnecessary-value-param) +NB_MODULE(MQT_DDSIM_MODULE_NAME, m) { + nb::module_::import_("mqt.core.dd"); m.doc() = "Python interface for the MQT DDSIM quantum circuit simulator"; // Circuit Simulator auto circuitSimulator = createSimulator(m, "CircuitSimulator"); circuitSimulator - .def(py::init<>(&constructSimulator), "circ"_a, - "approximation_step_fidelity"_a = 1., "approximation_steps"_a = 1, - "approximation_strategy"_a = "fidelity", "seed"_a = -1) + .def( + "__init__", + [](CircuitSimulator* self, const qc::QuantumComputation& circ, + const double stepFidelity, const unsigned int stepNumber, + const std::string& approximationStrategy, + const std::int64_t seed) { + auto qc = std::make_unique(circ); + const auto approx = ApproximationInfo{ + stepFidelity, stepNumber, + ApproximationInfo::fromString(approximationStrategy)}; + if (seed < 0) { + new (self) CircuitSimulator(std::move(qc), approx); + } else { + new (self) CircuitSimulator(std::move(qc), approx, + static_cast(seed)); + } + }, + "circ"_a, "approximation_step_fidelity"_a = 1., + "approximation_steps"_a = 1, "approximation_strategy"_a = "fidelity", + "seed"_a = -1) .def("expectation_value", &CircuitSimulator::expectationValue, "observable"_a); @@ -117,8 +106,28 @@ PYBIND11_MODULE(MQT_DDSIM_MODULE_NAME, m, py::mod_gil_not_used()) { auto stochasticNoiseSimulator = createSimulator(m, "StochasticNoiseSimulator"); stochasticNoiseSimulator.def( - py::init<>(&constructSimulator, double>), + "__init__", + [](StochasticNoiseSimulator* self, const qc::QuantumComputation& circ, + const double stepFidelity, const unsigned int stepNumber, + const std::string& approximationStrategy, const std::int64_t seed, + const std::string& noiseEffects, const double noiseProbability, + std::optional ampDampingProb, + const double multiQubitGateFactor) { + auto qc = std::make_unique(circ); + const auto approx = ApproximationInfo{ + stepFidelity, stepNumber, + ApproximationInfo::fromString(approximationStrategy)}; + if (seed < 0) { + new (self) StochasticNoiseSimulator( + std::move(qc), approx, noiseEffects, noiseProbability, + ampDampingProb, multiQubitGateFactor); + } else { + new (self) StochasticNoiseSimulator( + std::move(qc), approx, static_cast(seed), + noiseEffects, noiseProbability, ampDampingProb, + multiQubitGateFactor); + } + }, "circ"_a, "approximation_step_fidelity"_a = 1., "approximation_steps"_a = 1, "approximation_strategy"_a = "fidelity", "seed"_a = -1, "noise_effects"_a = "APD", "noise_probability"_a = 0.01, @@ -129,103 +138,156 @@ PYBIND11_MODULE(MQT_DDSIM_MODULE_NAME, m, py::mod_gil_not_used()) { createSimulator( m, "DeterministicNoiseSimulator"); deterministicNoiseSimulator.def( - py::init<>(&constructSimulator, double>), + "__init__", + [](DeterministicNoiseSimulator* self, const qc::QuantumComputation& circ, + const double stepFidelity, const unsigned int stepNumber, + const std::string& approximationStrategy, const std::int64_t seed, + const std::string& noiseEffects, const double noiseProbability, + std::optional ampDampingProb, + const double multiQubitGateFactor) { + auto qc = std::make_unique(circ); + const auto approx = ApproximationInfo{ + stepFidelity, stepNumber, + ApproximationInfo::fromString(approximationStrategy)}; + if (seed < 0) { + new (self) DeterministicNoiseSimulator( + std::move(qc), approx, noiseEffects, noiseProbability, + ampDampingProb, multiQubitGateFactor); + } else { + new (self) DeterministicNoiseSimulator( + std::move(qc), approx, static_cast(seed), + noiseEffects, noiseProbability, ampDampingProb, + multiQubitGateFactor); + } + }, "circ"_a, "approximation_step_fidelity"_a = 1., "approximation_steps"_a = 1, "approximation_strategy"_a = "fidelity", "seed"_a = -1, "noise_effects"_a = "APD", "noise_probability"_a = 0.01, "amp_damping_probability"_a = 0.02, "multi_qubit_gate_factor"_a = 2); // Hybrid Schrödinger-Feynman Simulator - py::native_enum( - m, "HybridSimulatorMode", "enum.Enum", - "Enumeration of modes for the :class:`~.HybridSimulator`.") + nb::enum_(m, "HybridSimulatorMode") .value("DD", HybridSchrodingerFeynmanSimulator::Mode::DD) - .value("amplitude", HybridSchrodingerFeynmanSimulator::Mode::Amplitude) - .finalize(); + .value("amplitude", HybridSchrodingerFeynmanSimulator::Mode::Amplitude); auto hsfSimulator = createSimulator(m, "HybridSimulator"); hsfSimulator - .def(py::init<>( - &constructSimulator), - "circ"_a, "approximation_step_fidelity"_a = 1., - "approximation_steps"_a = 1, "approximation_strategy"_a = "fidelity", - "seed"_a = -1, - "mode"_a = HybridSchrodingerFeynmanSimulator::Mode::Amplitude, - "nthreads"_a = 2) + .def( + "__init__", + [](HybridSchrodingerFeynmanSimulator* self, + const qc::QuantumComputation& circ, const double stepFidelity, + const unsigned int stepNumber, + const std::string& approximationStrategy, const std::int64_t seed, + HybridSchrodingerFeynmanSimulator::Mode mode, + const std::size_t nthreads) { + auto qc = std::make_unique(circ); + const auto approx = ApproximationInfo{ + stepFidelity, stepNumber, + ApproximationInfo::fromString(approximationStrategy)}; + if (seed < 0) { + new (self) HybridSchrodingerFeynmanSimulator( + std::move(qc), approx, mode, nthreads); + } else { + new (self) HybridSchrodingerFeynmanSimulator( + std::move(qc), approx, static_cast(seed), mode, + nthreads); + } + }, + "circ"_a, "approximation_step_fidelity"_a = 1., + "approximation_steps"_a = 1, "approximation_strategy"_a = "fidelity", + "seed"_a = -1, + "mode"_a = HybridSchrodingerFeynmanSimulator::Mode::Amplitude, + "nthreads"_a = 2) .def("get_mode", &HybridSchrodingerFeynmanSimulator::getMode) .def("get_final_amplitudes", &HybridSchrodingerFeynmanSimulator::getVectorFromHybridSimulation); // Path Simulator - py::native_enum( - m, "PathSimulatorMode", "enum.Enum", - "Enumeration of modes for the :class:`~.PathSimulator`.") + nb::enum_(m, "PathSimulatorMode") .value("sequential", PathSimulator::Configuration::Mode::Sequential) .value("pairwise_recursive", PathSimulator::Configuration::Mode::PairwiseRecursiveGrouping) .value("bracket", PathSimulator::Configuration::Mode::BracketGrouping) .value("alternating", PathSimulator::Configuration::Mode::Alternating) - .value("gate_cost", PathSimulator::Configuration::Mode::GateCost) - .finalize(); + .value("gate_cost", PathSimulator::Configuration::Mode::GateCost); - py::class_( + nb::class_( m, "PathSimulatorConfiguration", "Configuration options for the :class:`~.PathSimulator`.") - .def(py::init()) - .def_readwrite( + .def(nb::init()) + .def_rw( "mode", &PathSimulator::Configuration::mode, R"pbdoc(Setting the mode used for determining a simulation path)pbdoc") - .def_readwrite("bracket_size", &PathSimulator::Configuration::bracketSize, - R"pbdoc(Size of the brackets one wants to combine)pbdoc") - .def_readwrite( - "starting_point", &PathSimulator::Configuration::startingPoint, - R"pbdoc(Start of the alternating or gate_cost strategy)pbdoc") - .def_readwrite( + .def_rw("bracket_size", &PathSimulator::Configuration::bracketSize, + R"pbdoc(Size of the brackets one wants to combine)pbdoc") + .def_rw("starting_point", &PathSimulator::Configuration::startingPoint, + R"pbdoc(Start of the alternating or gate_cost strategy)pbdoc") + .def_rw( "gate_cost", &PathSimulator::Configuration::gateCost, R"pbdoc(A list that contains the number of gates which are considered in each step)pbdoc") - .def_readwrite("seed", &PathSimulator::Configuration::seed, - R"pbdoc(Seed for the simulator)pbdoc") + .def_rw("seed", &PathSimulator::Configuration::seed, + R"pbdoc(Seed for the simulator)pbdoc") .def("json", &PathSimulator::Configuration::json) .def("__repr__", &PathSimulator::Configuration::toString); auto pathSimulator = createSimulator(m, "PathSimulator"); pathSimulator - .def(py::init<>( - &constructSimulatorWithoutSeed), - "circ"_a, "config"_a = PathSimulator::Configuration()) - .def(py::init<>(&constructSimulatorWithoutSeed< - PathSimulator, PathSimulator::Configuration::Mode&, - const std::size_t&, const std::size_t&, - const std::list&, const std::size_t&>), - "circ"_a, "mode"_a = PathSimulator::Configuration::Mode::Sequential, - "bracket_size"_a = 2, "starting_point"_a = 0, - "gate_cost"_a = std::list{}, "seed"_a = 0) + .def( + "__init__", + [](PathSimulator* self, const qc::QuantumComputation& circ, + const PathSimulator::Configuration& config) { + auto qc = std::make_unique(circ); + new (self) PathSimulator(std::move(qc), config); + }, + "circ"_a, "config"_a = PathSimulator::Configuration()) + .def( + "__init__", + [](PathSimulator* self, const qc::QuantumComputation& circ, + PathSimulator::Configuration::Mode mode, + const std::size_t bracketSize, const std::size_t startingPoint, + const std::list& gateCost, const std::size_t seed) { + auto qc = std::make_unique(circ); + new (self) PathSimulator(std::move(qc), mode, bracketSize, + startingPoint, gateCost, seed); + }, + "circ"_a, "mode"_a = PathSimulator::Configuration::Mode::Sequential, + "bracket_size"_a = 2, "starting_point"_a = 0, + "gate_cost"_a = std::list{}, "seed"_a = 0) .def("set_simulation_path", - py::overload_cast(&PathSimulator::setSimulationPath), "path"_a, "assume_correct_order"_a = false); // Unitary Simulator - py::native_enum( - m, "UnitarySimulatorMode", "enum.Enum", - "Enumeration of modes for the :class:`~.UnitarySimulator`.") + nb::enum_(m, "UnitarySimulatorMode") .value("recursive", UnitarySimulator::Mode::Recursive) - .value("sequential", UnitarySimulator::Mode::Sequential) - .finalize(); + .value("sequential", UnitarySimulator::Mode::Sequential); auto unitarySimulator = createSimulator(m, "UnitarySimulator"); unitarySimulator - .def(py::init<>( - &constructSimulator), - "circ"_a, "approximation_step_fidelity"_a = 1., - "approximation_steps"_a = 1, "approximation_strategy"_a = "fidelity", - "seed"_a = -1, "mode"_a = UnitarySimulator::Mode::Recursive) + .def( + "__init__", + [](UnitarySimulator* self, const qc::QuantumComputation& circ, + const double stepFidelity, const unsigned int stepNumber, + const std::string& approximationStrategy, const std::int64_t seed, + UnitarySimulator::Mode mode) { + auto qc = std::make_unique(circ); + const auto approx = ApproximationInfo{ + stepFidelity, stepNumber, + ApproximationInfo::fromString(approximationStrategy)}; + if (seed < 0) { + new (self) UnitarySimulator(std::move(qc), approx, mode); + } else { + new (self) + UnitarySimulator(std::move(qc), approx, + static_cast(seed), mode); + } + }, + "circ"_a, "approximation_step_fidelity"_a = 1., + "approximation_steps"_a = 1, "approximation_strategy"_a = "fidelity", + "seed"_a = -1, "mode"_a = UnitarySimulator::Mode::Recursive) .def("get_mode", &UnitarySimulator::getMode) .def("get_construction_time", &UnitarySimulator::getConstructionTime) .def("get_final_node_count", &UnitarySimulator::getFinalNodeCount) diff --git a/cmake/ExternalDependencies.cmake b/cmake/ExternalDependencies.cmake index c327fd70..e03070be 100644 --- a/cmake/ExternalDependencies.cmake +++ b/cmake/ExternalDependencies.cmake @@ -25,27 +25,19 @@ if(BUILD_MQT_DDSIM_BINDINGS) message(STATUS "Found mqt-core package: ${mqt-core_DIR}") endif() - if(NOT SKBUILD) - # Manually detect the installed pybind11 package. - execute_process( - COMMAND "${Python_EXECUTABLE}" -m pybind11 --cmakedir - OUTPUT_STRIP_TRAILING_WHITESPACE - OUTPUT_VARIABLE pybind11_DIR) - - # Add the detected directory to the CMake prefix path. - list(APPEND CMAKE_PREFIX_PATH "${pybind11_DIR}") - endif() - - # add pybind11 library - find_package(pybind11 3.0.1 CONFIG REQUIRED) + execute_process( + COMMAND "${Python_EXECUTABLE}" -m nanobind --cmake_dir + OUTPUT_STRIP_TRAILING_WHITESPACE + OUTPUT_VARIABLE nanobind_ROOT) + find_package(nanobind CONFIG REQUIRED) endif() # cmake-format: off -set(MQT_CORE_MINIMUM_VERSION 3.3.1 +set(MQT_CORE_MINIMUM_VERSION 3.4.0 CACHE STRING "MQT Core minimum version") -set(MQT_CORE_VERSION 3.3.3 +set(MQT_CORE_VERSION 3.4.0 CACHE STRING "MQT Core version") -set(MQT_CORE_REV "8c9f6ab24968401e450812fc0ff7d05b5ae07a63" +set(MQT_CORE_REV "6bcc01e7d135058c6439c64fdd5f14b65ab88816" CACHE STRING "MQT Core identifier (tag, branch or commit hash)") set(MQT_CORE_REPO_OWNER "munich-quantum-toolkit" CACHE STRING "MQT Core repository owner (change when using a fork)") @@ -98,14 +90,5 @@ if(BUILD_MQT_DDSIM_CLI) list(APPEND FETCH_PACKAGES cxxopts) endif() -if(BUILD_MQT_DDSIM_BINDINGS) - # add pybind11_json library - FetchContent_Declare( - pybind11_json - GIT_REPOSITORY https://github.com/pybind/pybind11_json - FIND_PACKAGE_ARGS) - list(APPEND FETCH_PACKAGES pybind11_json) -endif() - # Make all declared dependencies available. FetchContent_MakeAvailable(${FETCH_PACKAGES}) diff --git a/pyproject.toml b/pyproject.toml index 8197b62d..1543c5b5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,10 +8,10 @@ [build-system] requires = [ - "pybind11>=3.0.1", + "nanobind>=2.10.2", "scikit-build-core>=0.11.6", "setuptools-scm>=9.2.2", - "mqt.core~=3.3.1", + "mqt.core~=3.4.0", ] build-backend = "scikit_build_core.build" @@ -48,7 +48,7 @@ classifiers = [ ] requires-python = ">=3.10" dependencies = [ - "mqt.core[qiskit]~=3.3.1", + "mqt.core[qiskit]~=3.4.0", "qiskit>=1.1", ] dynamic = ["version"] @@ -70,6 +70,9 @@ wheel.install-dir = "mqt/ddsim" # Explicitly set the package directory wheel.packages = ["python/mqt"] +# Enable Stable ABI builds for CPython 3.12+ +wheel.py-api = "cp312" + # Set required Ninja version ninja.version = ">=1.10" @@ -294,10 +297,10 @@ test-skip = [ environment = { DEPLOY = "ON" } # The SOVERSION needs to be updated when the shared libraries are updated. repair-wheel-command = """auditwheel repair -w {dest_dir} {wheel} \ ---exclude libmqt-core-ir.so.3.3 \ ---exclude libmqt-core-qasm.so.3.3 \ ---exclude libmqt-core-circuit-optimizer.so.3.3 \ ---exclude libmqt-core-dd.so.3.3""" +--exclude libmqt-core-ir.so.3.4 \ +--exclude libmqt-core-qasm.so.3.4 \ +--exclude libmqt-core-circuit-optimizer.so.3.4 \ +--exclude libmqt-core-dd.so.3.4""" [tool.cibuildwheel.macos] environment = { MACOSX_DEPLOYMENT_TARGET = "11.0" } @@ -312,6 +315,11 @@ repair-wheel-command = """delvewheel repair -w {dest_dir} {wheel} --namespace-pk --exclude mqt-core-dd.dll""" environment = { CMAKE_ARGS = "-T ClangCL" } +[[tool.cibuildwheel.overrides]] +select = "cp312-*" +inherit.repair-wheel-command = "append" +repair-wheel-command = "uvx abi3audit --strict --report {wheel}" + [tool.uv] required-version = ">=0.5.20" @@ -327,10 +335,10 @@ mqt-ddsim = { workspace = true } [dependency-groups] build = [ - "pybind11>=3.0.1", + "nanobind>=2.10.2", "scikit-build-core>=0.11.6", "setuptools-scm>=9.2.2", - "mqt.core~=3.3.1", + "mqt.core~=3.4.0", ] docs = [ "breathe>=4.36.0", diff --git a/uv.lock b/uv.lock index c8c15c4b..412cec2c 100644 --- a/uv.lock +++ b/uv.lock @@ -851,6 +851,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/32/6a/33d1702184d94106d3cdd7bfb788e19723206fce152e303473ca3b946c7b/greenlet-3.3.0-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:6f8496d434d5cb2dce025773ba5597f71f5410ae499d5dd9533e0653258cdb3d", size = 273658, upload-time = "2025-12-04T14:23:37.494Z" }, { url = "https://files.pythonhosted.org/packages/d6/b7/2b5805bbf1907c26e434f4e448cd8b696a0b71725204fa21a211ff0c04a7/greenlet-3.3.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b96dc7eef78fd404e022e165ec55327f935b9b52ff355b067eb4a0267fc1cffb", size = 574810, upload-time = "2025-12-04T14:50:04.154Z" }, { url = "https://files.pythonhosted.org/packages/94/38/343242ec12eddf3d8458c73f555c084359883d4ddc674240d9e61ec51fd6/greenlet-3.3.0-cp310-cp310-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:73631cd5cccbcfe63e3f9492aaa664d278fda0ce5c3d43aeda8e77317e38efbd", size = 586248, upload-time = "2025-12-04T14:57:39.35Z" }, + { url = "https://files.pythonhosted.org/packages/f0/d0/0ae86792fb212e4384041e0ef8e7bc66f59a54912ce407d26a966ed2914d/greenlet-3.3.0-cp310-cp310-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b299a0cb979f5d7197442dccc3aee67fce53500cd88951b7e6c35575701c980b", size = 597403, upload-time = "2025-12-04T15:07:10.831Z" }, { url = "https://files.pythonhosted.org/packages/b6/a8/15d0aa26c0036a15d2659175af00954aaaa5d0d66ba538345bd88013b4d7/greenlet-3.3.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7dee147740789a4632cace364816046e43310b59ff8fb79833ab043aefa72fd5", size = 586910, upload-time = "2025-12-04T14:25:59.705Z" }, { url = "https://files.pythonhosted.org/packages/e1/9b/68d5e3b7ccaba3907e5532cf8b9bf16f9ef5056a008f195a367db0ff32db/greenlet-3.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:39b28e339fc3c348427560494e28d8a6f3561c8d2bcf7d706e1c624ed8d822b9", size = 1547206, upload-time = "2025-12-04T15:04:21.027Z" }, { url = "https://files.pythonhosted.org/packages/66/bd/e3086ccedc61e49f91e2cfb5ffad9d8d62e5dc85e512a6200f096875b60c/greenlet-3.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b3c374782c2935cc63b2a27ba8708471de4ad1abaa862ffdb1ef45a643ddbb7d", size = 1613359, upload-time = "2025-12-04T14:27:26.548Z" }, @@ -858,6 +859,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1f/cb/48e964c452ca2b92175a9b2dca037a553036cb053ba69e284650ce755f13/greenlet-3.3.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:e29f3018580e8412d6aaf5641bb7745d38c85228dacf51a73bd4e26ddf2a6a8e", size = 274908, upload-time = "2025-12-04T14:23:26.435Z" }, { url = "https://files.pythonhosted.org/packages/28/da/38d7bff4d0277b594ec557f479d65272a893f1f2a716cad91efeb8680953/greenlet-3.3.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a687205fb22794e838f947e2194c0566d3812966b41c78709554aa883183fb62", size = 577113, upload-time = "2025-12-04T14:50:05.493Z" }, { url = "https://files.pythonhosted.org/packages/3c/f2/89c5eb0faddc3ff014f1c04467d67dee0d1d334ab81fadbf3744847f8a8a/greenlet-3.3.0-cp311-cp311-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4243050a88ba61842186cb9e63c7dfa677ec146160b0efd73b855a3d9c7fcf32", size = 590338, upload-time = "2025-12-04T14:57:41.136Z" }, + { url = "https://files.pythonhosted.org/packages/80/d7/db0a5085035d05134f8c089643da2b44cc9b80647c39e93129c5ef170d8f/greenlet-3.3.0-cp311-cp311-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:670d0f94cd302d81796e37299bcd04b95d62403883b24225c6b5271466612f45", size = 601098, upload-time = "2025-12-04T15:07:11.898Z" }, { url = "https://files.pythonhosted.org/packages/dc/a6/e959a127b630a58e23529972dbc868c107f9d583b5a9f878fb858c46bc1a/greenlet-3.3.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6cb3a8ec3db4a3b0eb8a3c25436c2d49e3505821802074969db017b87bc6a948", size = 590206, upload-time = "2025-12-04T14:26:01.254Z" }, { url = "https://files.pythonhosted.org/packages/48/60/29035719feb91798693023608447283b266b12efc576ed013dd9442364bb/greenlet-3.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2de5a0b09eab81fc6a382791b995b1ccf2b172a9fec934747a7a23d2ff291794", size = 1550668, upload-time = "2025-12-04T15:04:22.439Z" }, { url = "https://files.pythonhosted.org/packages/0a/5f/783a23754b691bfa86bd72c3033aa107490deac9b2ef190837b860996c9f/greenlet-3.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4449a736606bd30f27f8e1ff4678ee193bc47f6ca810d705981cfffd6ce0d8c5", size = 1615483, upload-time = "2025-12-04T14:27:28.083Z" }, @@ -865,6 +867,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f8/0a/a3871375c7b9727edaeeea994bfff7c63ff7804c9829c19309ba2e058807/greenlet-3.3.0-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:b01548f6e0b9e9784a2c99c5651e5dc89ffcbe870bc5fb2e5ef864e9cc6b5dcb", size = 276379, upload-time = "2025-12-04T14:23:30.498Z" }, { url = "https://files.pythonhosted.org/packages/43/ab/7ebfe34dce8b87be0d11dae91acbf76f7b8246bf9d6b319c741f99fa59c6/greenlet-3.3.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:349345b770dc88f81506c6861d22a6ccd422207829d2c854ae2af8025af303e3", size = 597294, upload-time = "2025-12-04T14:50:06.847Z" }, { url = "https://files.pythonhosted.org/packages/a4/39/f1c8da50024feecd0793dbd5e08f526809b8ab5609224a2da40aad3a7641/greenlet-3.3.0-cp312-cp312-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e8e18ed6995e9e2c0b4ed264d2cf89260ab3ac7e13555b8032b25a74c6d18655", size = 607742, upload-time = "2025-12-04T14:57:42.349Z" }, + { url = "https://files.pythonhosted.org/packages/77/cb/43692bcd5f7a0da6ec0ec6d58ee7cddb606d055ce94a62ac9b1aa481e969/greenlet-3.3.0-cp312-cp312-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c024b1e5696626890038e34f76140ed1daf858e37496d33f2af57f06189e70d7", size = 622297, upload-time = "2025-12-04T15:07:13.552Z" }, { url = "https://files.pythonhosted.org/packages/75/b0/6bde0b1011a60782108c01de5913c588cf51a839174538d266de15e4bf4d/greenlet-3.3.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:047ab3df20ede6a57c35c14bf5200fcf04039d50f908270d3f9a7a82064f543b", size = 609885, upload-time = "2025-12-04T14:26:02.368Z" }, { url = "https://files.pythonhosted.org/packages/49/0e/49b46ac39f931f59f987b7cd9f34bfec8ef81d2a1e6e00682f55be5de9f4/greenlet-3.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2d9ad37fc657b1102ec880e637cccf20191581f75c64087a549e66c57e1ceb53", size = 1567424, upload-time = "2025-12-04T15:04:23.757Z" }, { url = "https://files.pythonhosted.org/packages/05/f5/49a9ac2dff7f10091935def9165c90236d8f175afb27cbed38fb1d61ab6b/greenlet-3.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:83cd0e36932e0e7f36a64b732a6f60c2fc2df28c351bae79fbaf4f8092fe7614", size = 1636017, upload-time = "2025-12-04T14:27:29.688Z" }, @@ -872,6 +875,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/02/2f/28592176381b9ab2cafa12829ba7b472d177f3acc35d8fbcf3673d966fff/greenlet-3.3.0-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:a1e41a81c7e2825822f4e068c48cb2196002362619e2d70b148f20a831c00739", size = 275140, upload-time = "2025-12-04T14:23:01.282Z" }, { url = "https://files.pythonhosted.org/packages/2c/80/fbe937bf81e9fca98c981fe499e59a3f45df2a04da0baa5c2be0dca0d329/greenlet-3.3.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9f515a47d02da4d30caaa85b69474cec77b7929b2e936ff7fb853d42f4bf8808", size = 599219, upload-time = "2025-12-04T14:50:08.309Z" }, { url = "https://files.pythonhosted.org/packages/c2/ff/7c985128f0514271b8268476af89aee6866df5eec04ac17dcfbc676213df/greenlet-3.3.0-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7d2d9fd66bfadf230b385fdc90426fcd6eb64db54b40c495b72ac0feb5766c54", size = 610211, upload-time = "2025-12-04T14:57:43.968Z" }, + { url = "https://files.pythonhosted.org/packages/79/07/c47a82d881319ec18a4510bb30463ed6891f2ad2c1901ed5ec23d3de351f/greenlet-3.3.0-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:30a6e28487a790417d036088b3bcb3f3ac7d8babaa7d0139edbaddebf3af9492", size = 624311, upload-time = "2025-12-04T15:07:14.697Z" }, { url = "https://files.pythonhosted.org/packages/fd/8e/424b8c6e78bd9837d14ff7df01a9829fc883ba2ab4ea787d4f848435f23f/greenlet-3.3.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:087ea5e004437321508a8d6f20efc4cfec5e3c30118e1417ea96ed1d93950527", size = 612833, upload-time = "2025-12-04T14:26:03.669Z" }, { url = "https://files.pythonhosted.org/packages/b5/ba/56699ff9b7c76ca12f1cdc27a886d0f81f2189c3455ff9f65246780f713d/greenlet-3.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ab97cf74045343f6c60a39913fa59710e4bd26a536ce7ab2397adf8b27e67c39", size = 1567256, upload-time = "2025-12-04T15:04:25.276Z" }, { url = "https://files.pythonhosted.org/packages/1e/37/f31136132967982d698c71a281a8901daf1a8fbab935dce7c0cf15f942cc/greenlet-3.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5375d2e23184629112ca1ea89a53389dddbffcf417dad40125713d88eb5f96e8", size = 1636483, upload-time = "2025-12-04T14:27:30.804Z" }, @@ -879,6 +883,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d7/7c/f0a6d0ede2c7bf092d00bc83ad5bafb7e6ec9b4aab2fbdfa6f134dc73327/greenlet-3.3.0-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:60c2ef0f578afb3c8d92ea07ad327f9a062547137afe91f38408f08aacab667f", size = 275671, upload-time = "2025-12-04T14:23:05.267Z" }, { url = "https://files.pythonhosted.org/packages/44/06/dac639ae1a50f5969d82d2e3dd9767d30d6dbdbab0e1a54010c8fe90263c/greenlet-3.3.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a5d554d0712ba1de0a6c94c640f7aeba3f85b3a6e1f2899c11c2c0428da9365", size = 646360, upload-time = "2025-12-04T14:50:10.026Z" }, { url = "https://files.pythonhosted.org/packages/e0/94/0fb76fe6c5369fba9bf98529ada6f4c3a1adf19e406a47332245ef0eb357/greenlet-3.3.0-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3a898b1e9c5f7307ebbde4102908e6cbfcb9ea16284a3abe15cab996bee8b9b3", size = 658160, upload-time = "2025-12-04T14:57:45.41Z" }, + { url = "https://files.pythonhosted.org/packages/93/79/d2c70cae6e823fac36c3bbc9077962105052b7ef81db2f01ec3b9bf17e2b/greenlet-3.3.0-cp314-cp314-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:dcd2bdbd444ff340e8d6bdf54d2f206ccddbb3ccfdcd3c25bf4afaa7b8f0cf45", size = 671388, upload-time = "2025-12-04T15:07:15.789Z" }, { url = "https://files.pythonhosted.org/packages/b8/14/bab308fc2c1b5228c3224ec2bf928ce2e4d21d8046c161e44a2012b5203e/greenlet-3.3.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5773edda4dc00e173820722711d043799d3adb4f01731f40619e07ea2750b955", size = 660166, upload-time = "2025-12-04T14:26:05.099Z" }, { url = "https://files.pythonhosted.org/packages/4b/d2/91465d39164eaa0085177f61983d80ffe746c5a1860f009811d498e7259c/greenlet-3.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ac0549373982b36d5fd5d30beb8a7a33ee541ff98d2b502714a09f1169f31b55", size = 1615193, upload-time = "2025-12-04T15:04:27.041Z" }, { url = "https://files.pythonhosted.org/packages/42/1b/83d110a37044b92423084d52d5d5a3b3a73cafb51b547e6d7366ff62eff1/greenlet-3.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d198d2d977460358c3b3a4dc844f875d1adb33817f0613f663a656f463764ccc", size = 1683653, upload-time = "2025-12-04T14:27:32.366Z" }, @@ -886,6 +891,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a0/66/bd6317bc5932accf351fc19f177ffba53712a202f9df10587da8df257c7e/greenlet-3.3.0-cp314-cp314t-macosx_11_0_universal2.whl", hash = "sha256:d6ed6f85fae6cdfdb9ce04c9bf7a08d666cfcfb914e7d006f44f840b46741931", size = 282638, upload-time = "2025-12-04T14:25:20.941Z" }, { url = "https://files.pythonhosted.org/packages/30/cf/cc81cb030b40e738d6e69502ccbd0dd1bced0588e958f9e757945de24404/greenlet-3.3.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d9125050fcf24554e69c4cacb086b87b3b55dc395a8b3ebe6487b045b2614388", size = 651145, upload-time = "2025-12-04T14:50:11.039Z" }, { url = "https://files.pythonhosted.org/packages/9c/ea/1020037b5ecfe95ca7df8d8549959baceb8186031da83d5ecceff8b08cd2/greenlet-3.3.0-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:87e63ccfa13c0a0f6234ed0add552af24cc67dd886731f2261e46e241608bee3", size = 654236, upload-time = "2025-12-04T14:57:47.007Z" }, + { url = "https://files.pythonhosted.org/packages/69/cc/1e4bae2e45ca2fa55299f4e85854606a78ecc37fead20d69322f96000504/greenlet-3.3.0-cp314-cp314t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2662433acbca297c9153a4023fe2161c8dcfdcc91f10433171cf7e7d94ba2221", size = 662506, upload-time = "2025-12-04T15:07:16.906Z" }, { url = "https://files.pythonhosted.org/packages/57/b9/f8025d71a6085c441a7eaff0fd928bbb275a6633773667023d19179fe815/greenlet-3.3.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3c6e9b9c1527a78520357de498b0e709fb9e2f49c3a513afd5a249007261911b", size = 653783, upload-time = "2025-12-04T14:26:06.225Z" }, { url = "https://files.pythonhosted.org/packages/f6/c7/876a8c7a7485d5d6b5c6821201d542ef28be645aa024cfe1145b35c120c1/greenlet-3.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:286d093f95ec98fdd92fcb955003b8a3d054b4e2cab3e2707a5039e7b50520fd", size = 1614857, upload-time = "2025-12-04T15:04:28.484Z" }, { url = "https://files.pythonhosted.org/packages/4f/dc/041be1dff9f23dac5f48a43323cd0789cb798342011c19a248d9c9335536/greenlet-3.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c10513330af5b8ae16f023e8ddbfb486ab355d04467c4679c5cfe4659975dd9", size = 1676034, upload-time = "2025-12-04T14:27:33.531Z" }, @@ -1461,52 +1467,34 @@ wheels = [ [[package]] name = "mqt-core" -version = "3.3.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/69/b9/52f64b0bf94496d2b5bb59e0ebd3b185b8f962448995e3ddf33381b60c91/mqt_core-3.3.3.tar.gz", hash = "sha256:019039e3643f3e3c02bd3cd4cdc71769e1682280382a2753a7f80781991af4ab", size = 573713, upload-time = "2025-11-10T23:18:35.186Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/46/0d/1880eb0ad2e01eabebe23fae0c3c27fffbb6feba8a7cd89b92a038f8a9fe/mqt_core-3.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fde7f0082fe37af2fc00357644bf92c2c0f97b1d931ddaebbee3c238788acb46", size = 6040209, upload-time = "2025-11-10T23:17:14.024Z" }, - { url = "https://files.pythonhosted.org/packages/e8/8c/b3892f6ab7b530ffc779d1bce7cf599bf49ecf6648ea94f5d2423c2a7f8b/mqt_core-3.3.3-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:bafd36247ab70e1162f5cc855250f6ab9dcb6d3527714f76d7dcc3d57540d6b5", size = 6381139, upload-time = "2025-11-10T23:17:16.184Z" }, - { url = "https://files.pythonhosted.org/packages/b6/04/55e7527fac3c7f0764e63e69749da219109093c0af6357d3dacb5e6b381c/mqt_core-3.3.3-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b68d14e3120c1b181ab7c80794197ae58130a3f944f51487e31a7feed7bfdf73", size = 8152582, upload-time = "2025-11-10T23:17:18.431Z" }, - { url = "https://files.pythonhosted.org/packages/93/4d/51641842862ee482161c3acc4b800f846e3828f45c0df6a9ebdeed981f4f/mqt_core-3.3.3-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ab5f113b8d28063cc2b6bc37dee8f81cb29f9ee863577c9fe36bd0ff01355cab", size = 8557442, upload-time = "2025-11-10T23:17:20.249Z" }, - { url = "https://files.pythonhosted.org/packages/30/1b/d1f4dbe7423b9c3bf88f7ec1cc94bc2474c30f93074a4094dd73aa66d29f/mqt_core-3.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:c4989544d7c6e545a6976d97351d113e37526e05a1c826107965f2c74acf847d", size = 4308521, upload-time = "2025-11-10T23:17:22.173Z" }, - { url = "https://files.pythonhosted.org/packages/2c/16/329cf09d804ba211bbe1808fffb34d172f092aa53d896f3880efbafbc519/mqt_core-3.3.3-cp310-cp310-win_arm64.whl", hash = "sha256:b18b89039d5cc4f8656413af25aff33516ee90247e979832e62cb8297732a16e", size = 4432160, upload-time = "2025-11-10T23:17:24.612Z" }, - { url = "https://files.pythonhosted.org/packages/9f/df/2c342969af601ce0d58826f59681ce123c936c55e68d6b6ecd1b51c424e8/mqt_core-3.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:83154e0c739c29e48c8d999a64b3c843d92f3319518b0efeff91b554a5138021", size = 6044138, upload-time = "2025-11-10T23:17:26.45Z" }, - { url = "https://files.pythonhosted.org/packages/76/92/a1912510e6b4f5e1f6839117a3b9b265e522fa4626aaebc1e875c7439f9d/mqt_core-3.3.3-cp311-cp311-macosx_11_0_x86_64.whl", hash = "sha256:9f4016b6e24c0685acbfa2ea7284eeb2d6a527b3dfb81f08a14498ad6b9edfbe", size = 6386057, upload-time = "2025-11-10T23:17:28.433Z" }, - { url = "https://files.pythonhosted.org/packages/6f/d2/66b5b108176591cadb20f632ecfc76cb4771c6fb6528c4ecc7f20595fcd4/mqt_core-3.3.3-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:56899315ee2fc28ee66431e51258ad372384167d7046670e0d478d57bdf8f130", size = 8154908, upload-time = "2025-11-10T23:17:30.266Z" }, - { url = "https://files.pythonhosted.org/packages/ce/0b/9f317439d986f59805912ce432cab8a5dd71636a783ecd191687eb2fb51f/mqt_core-3.3.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:170a65554e2e969ac1d8868dc6d66dc9f6fa56558980001e55e98b45af72c902", size = 8559256, upload-time = "2025-11-10T23:17:32.495Z" }, - { url = "https://files.pythonhosted.org/packages/69/c7/fa22c7eead964ea35366001c48eed2d8f0321ae8e3d065a1dcc4100b4c14/mqt_core-3.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:7690ab2ae876ad53eb0fcf4679b2a8d7ac0373f9f16243f392d6d2c74b9e82f1", size = 4311202, upload-time = "2025-11-10T23:17:35.004Z" }, - { url = "https://files.pythonhosted.org/packages/0e/c2/6c17d6e0bb179281c1673ced4697b71a72b944c5248689f3260713cce9bd/mqt_core-3.3.3-cp311-cp311-win_arm64.whl", hash = "sha256:ceb462aecfc92faa8c3bb27bb668ddc2ee09d33d0315dc7b3ac5b2e8f4d6d53a", size = 4436130, upload-time = "2025-11-10T23:17:36.658Z" }, - { url = "https://files.pythonhosted.org/packages/7c/09/0499c783b008a22c6a6cc8d4b8a3c558129c1a42bb54cde08bf7432c38b6/mqt_core-3.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:95d4d75ae1f8a8d8efef859a83aa300ab3a9607ba1bc7e6ad9d3c1c5a6fa77f4", size = 6097127, upload-time = "2025-11-10T23:17:38.615Z" }, - { url = "https://files.pythonhosted.org/packages/d7/07/ed7c402ca76e63ad03fa839da989972f1d8db6bf92bfe01c7731fd7dcdd3/mqt_core-3.3.3-cp312-cp312-macosx_11_0_x86_64.whl", hash = "sha256:9b5d2b95276c2e6df67d324d0f2b23b6d3cea6be9d95535c0b1e49ffeec82d57", size = 6445438, upload-time = "2025-11-10T23:17:40.488Z" }, - { url = "https://files.pythonhosted.org/packages/29/6b/d13deb36be8f1600b107eec65ea94a039af4f135aaf414bb8fa227bae46d/mqt_core-3.3.3-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:406fc83525a1ca07a28830c3a97d243c18b74725f55bd40f0712a048be61dba4", size = 8156427, upload-time = "2025-11-10T23:17:42.329Z" }, - { url = "https://files.pythonhosted.org/packages/e3/62/b053d11b5725850f0959e5ad4b7e4234e8c97ab8a848dbce3f63371b5f3d/mqt_core-3.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4376d114dba2d74d08ca908074a307ef1e2e80b0c7b1c50f938d446eede0f116", size = 8561379, upload-time = "2025-11-10T23:17:44.718Z" }, - { url = "https://files.pythonhosted.org/packages/98/62/f62c6cca399c65096daa5b5212d76af25517012bd56d1fdc6eff25ea98c7/mqt_core-3.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:5d4af39f82efb0c29773ae4ae21a338aefc8db30dc4ef97835bc7e6f929c91d2", size = 4317083, upload-time = "2025-11-10T23:17:47.118Z" }, - { url = "https://files.pythonhosted.org/packages/1c/bd/0a7d3b40d5f4c7049ed626ec8e78c2cad01957e8bc00619ac825007205ec/mqt_core-3.3.3-cp312-cp312-win_arm64.whl", hash = "sha256:7ffb61ae1ceb12060fb1dfefb7082c63af807caf5ff23e955dc4f12089e24bee", size = 4438407, upload-time = "2025-11-10T23:17:48.937Z" }, - { url = "https://files.pythonhosted.org/packages/a9/81/2d5137461b05495392d5675e009a47040dec38d0a9fc38d3f2221393959c/mqt_core-3.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a83471adb84c1976b0e3ff15f6c8e0384972d7e313b42c66ac3a3848551d3a6f", size = 6097200, upload-time = "2025-11-10T23:17:50.951Z" }, - { url = "https://files.pythonhosted.org/packages/83/9b/0c0f34c4433f518134e32675f03d80545dcf8da37740949319ec4fe50ce0/mqt_core-3.3.3-cp313-cp313-macosx_11_0_x86_64.whl", hash = "sha256:6c4b57623ed88ec331069a7af8dcfba204868480d3e87032cc65da01e135e900", size = 6445754, upload-time = "2025-11-10T23:17:52.735Z" }, - { url = "https://files.pythonhosted.org/packages/12/1b/c46710d10df4332615c6e224db8958b042d5bd6bf81b09ec1c8fcc68770a/mqt_core-3.3.3-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3e5cb758d9919a9941ee538af6642cb8ca6cb49a692f996b895f602462821fb3", size = 8156529, upload-time = "2025-11-10T23:17:54.533Z" }, - { url = "https://files.pythonhosted.org/packages/23/e4/42690d370f232274ccb8965ef81e7aa432e4b59687da5f04224d2368a18e/mqt_core-3.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:16ebe8683b11c7cbeaed37972c4c1d740f47becee6a41586fab186e74e41c319", size = 8561593, upload-time = "2025-11-10T23:17:56.752Z" }, - { url = "https://files.pythonhosted.org/packages/83/48/39d2b7a952a063a07b575365c1575cc899a6c2d0f0ea6b7708475724db8c/mqt_core-3.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:99530d5c87623dbd9d7942578998439594a1e8230374f46b4aac2e6fc379882e", size = 4317075, upload-time = "2025-11-10T23:17:58.68Z" }, - { url = "https://files.pythonhosted.org/packages/8c/4a/2410e50861c8318698c6b65fcf2a120f2a851aaa991e286382ea80107ed9/mqt_core-3.3.3-cp313-cp313-win_arm64.whl", hash = "sha256:6190b176172e0e11259ad74e98ab3ab5b78fea710c49260f542f458e3ab1bef9", size = 4438384, upload-time = "2025-11-10T23:18:00.346Z" }, - { url = "https://files.pythonhosted.org/packages/4f/85/1618dbae0128645a6a2a18e1195eaf3c69ed1ffc2a526539cbbb59a04f55/mqt_core-3.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:94d76c9a2a2802243cda29e90ec4260715f4e971d34dba9b5e92aa03931f6f8e", size = 6115519, upload-time = "2025-11-10T23:18:02.023Z" }, - { url = "https://files.pythonhosted.org/packages/9e/78/cad40e452e3770b68bb0f0ac0f6ecbf9453e3898b1463dfffa63f5534094/mqt_core-3.3.3-cp313-cp313t-macosx_11_0_x86_64.whl", hash = "sha256:ae7fc758f209e0925378ce308de32922eadf73e1d8e9c02c05fff2be2268aca4", size = 6472221, upload-time = "2025-11-10T23:18:04.26Z" }, - { url = "https://files.pythonhosted.org/packages/82/05/820fb315976cf3b23b2bd3399f4c0f0dd36e6ea06bc4087242ba00e8cd5e/mqt_core-3.3.3-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:14cdf40be95933f26c342e7f3ecbe389a96d85875f116b8af02388a9b845697d", size = 8165519, upload-time = "2025-11-10T23:18:05.966Z" }, - { url = "https://files.pythonhosted.org/packages/23/77/bd7afbe5755870914cabd795ce6fcb1fbcbb6a24f4a81fc3b2adc2d4099f/mqt_core-3.3.3-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9b23f5845dd966315557ab9d56a249e2269bd211053bcff1f521a76ce8543adc", size = 8570617, upload-time = "2025-11-10T23:18:07.689Z" }, - { url = "https://files.pythonhosted.org/packages/5c/9b/4bfcdee654ef11345705c6b6dd909a89872685203d0d5ff4aeefd60c52d3/mqt_core-3.3.3-cp313-cp313t-win_amd64.whl", hash = "sha256:16d4aba78a246eb40e27dddd1b740d175591ee83daaea7fbe1359f5fd237fece", size = 4366876, upload-time = "2025-11-10T23:18:09.715Z" }, - { url = "https://files.pythonhosted.org/packages/b0/3a/72544dec851e0c8540998c24274933d02df2b9ab7bba000358bb27813e79/mqt_core-3.3.3-cp313-cp313t-win_arm64.whl", hash = "sha256:75ba22ba8061bd404098e4ad0b90d3cb9d866e0e7946e37c7997602632775804", size = 4464509, upload-time = "2025-11-10T23:18:11.715Z" }, - { url = "https://files.pythonhosted.org/packages/5a/02/1d94f921b6d84268b8a33095bbbff8c5220610be2ce419f5b0a6c759e7dd/mqt_core-3.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:9c08ee6253af6f56c60c23ddd907eb6abce1d9620c06b8916682038389984d86", size = 6098681, upload-time = "2025-11-10T23:18:13.733Z" }, - { url = "https://files.pythonhosted.org/packages/c4/57/967bf7c971b2820fa30924c605497502fd549e68d6ddbd5dea90784d93f8/mqt_core-3.3.3-cp314-cp314-macosx_11_0_x86_64.whl", hash = "sha256:45fa41bb2c60ebc25337631bd556360fff6ede410796048ea067d8011cff2976", size = 6448267, upload-time = "2025-11-10T23:18:15.412Z" }, - { url = "https://files.pythonhosted.org/packages/2f/25/bbd13143d2bb3b2b7ba7bfbfa7fd82e044d3df30347fc979e93c4fea163d/mqt_core-3.3.3-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f290acbb492710debf175cea0106ec1fefcad39c38575cb78ed6d3ecae658207", size = 8156649, upload-time = "2025-11-10T23:18:17.014Z" }, - { url = "https://files.pythonhosted.org/packages/c9/87/4fb270039ac3f98b17e8603e3fd1456b55c73d59f9f588fb6d24f7398494/mqt_core-3.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:084b08dca96d631db7913dbf787677bf82707756436ba21a78c0af96c50631be", size = 8561701, upload-time = "2025-11-10T23:18:19.283Z" }, - { url = "https://files.pythonhosted.org/packages/64/55/785af2b4767497104f70cb0096cc07edc870442edaa90a88fad8e57a61ea/mqt_core-3.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:6ea8d568e92d6767ca72f9ecda2f3e9c0ceb7e9c3eed18b009ac8844bdb0dd32", size = 4377634, upload-time = "2025-11-10T23:18:21.67Z" }, - { url = "https://files.pythonhosted.org/packages/8c/98/a9ff5139b674e3161a838cd4b980111ef162dbe5810d23d98c53fa35db73/mqt_core-3.3.3-cp314-cp314-win_arm64.whl", hash = "sha256:f9726936062c2dd1b975a6172e7065eed2224a814a40f5e72dc2d62dbae45730", size = 4502319, upload-time = "2025-11-10T23:18:23.301Z" }, - { url = "https://files.pythonhosted.org/packages/a3/80/36ffcd92ed7ef2bafd69e2ccef6d4856dc4585dcdd5a3a2029ea5692a86d/mqt_core-3.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:46c5cf993b77aa96fc1e58bd305bb32caeae0d3785cf40a8f5c0dde1c279d9ed", size = 6115514, upload-time = "2025-11-10T23:18:24.961Z" }, - { url = "https://files.pythonhosted.org/packages/d6/47/63a1a8550b9fd89b7f888a493a29dac3edd2aa591c3c17a41bec6f2d35e8/mqt_core-3.3.3-cp314-cp314t-macosx_11_0_x86_64.whl", hash = "sha256:b9b95fb3bb66c4d40423a4803534334e79890d481b5d4633295c9aceebf4610b", size = 6472251, upload-time = "2025-11-10T23:18:26.626Z" }, - { url = "https://files.pythonhosted.org/packages/7a/fb/3c0076d1700a2e9b3ac2d7ebc726bdb6b0b8eb767e3dc594b8de340f3417/mqt_core-3.3.3-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f1872ed53ba11c583d0e79b476c16c135cd4dda930f7c41933a198514fa790ec", size = 8165472, upload-time = "2025-11-10T23:18:28.48Z" }, - { url = "https://files.pythonhosted.org/packages/dc/5f/2e76b3e4692a804a125a3bc36bb8cc4808a2ee474d953231c2ca35960c1a/mqt_core-3.3.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b40f0caab3489aa718f9e1ad95f66f76d43c28aa8b8fa1ff0181d5bfb2dc2e85", size = 8570635, upload-time = "2025-11-10T23:18:30.209Z" }, - { url = "https://files.pythonhosted.org/packages/f8/4c/50064cb72bd8f3602090bc4fd4d4516d2c992b3a6610cb6e43a6affaa9f7/mqt_core-3.3.3-cp314-cp314t-win_amd64.whl", hash = "sha256:22277b27c865b5aceee792b7a43a4a860459df613034187948226a916426c198", size = 4440028, upload-time = "2025-11-10T23:18:32.145Z" }, - { url = "https://files.pythonhosted.org/packages/55/5f/e9f70f6ffdae5788f67d2b28bcc5f91551400a7ccb9d22bd8c8145ff5077/mqt_core-3.3.3-cp314-cp314t-win_arm64.whl", hash = "sha256:c62ccd3f1b777a846521a574d8aa85f60b484318df445147342bea4ca67af490", size = 4525130, upload-time = "2025-11-10T23:18:33.734Z" }, +version = "3.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bb/6d/c3b4f17a8e695d715379ad298d0e51790ad7e2a60f0f68f1c08703ca8beb/mqt_core-3.4.0.tar.gz", hash = "sha256:daa752050e1001cb72e7cc1fd0c0aeff8a526aefae29e414b26920739a4aa681", size = 633636, upload-time = "2026-01-08T22:08:41.588Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/16/9b/960d498f34f88df402a7b76a18eec8113c86f8c233eba7313a9e1530dff6/mqt_core-3.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c58e5d223d2f59ff9146970b8a5202e07718dd3ce2191291469b347019ced674", size = 5114257, upload-time = "2026-01-08T22:08:01.23Z" }, + { url = "https://files.pythonhosted.org/packages/b7/f0/8bbf1160a26f99799556a73a150873522ccb824cc45f3e9fdac44ecbd6a2/mqt_core-3.4.0-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:30176b938ae76544cf70be31cdddbf2de8c83d8035af7f39ce11d5dd46c77b4c", size = 5547616, upload-time = "2026-01-08T22:08:03.399Z" }, + { url = "https://files.pythonhosted.org/packages/c7/78/19b0395b9568dc2d76056a998516adeed3775f98750a7a9bd988851be194/mqt_core-3.4.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:59fcd0711f49517c612946225c3b588448f8e0683f2a7aca596e7bc0eb48ed03", size = 6572454, upload-time = "2026-01-08T22:08:06.308Z" }, + { url = "https://files.pythonhosted.org/packages/c4/08/ae8859715f9eb6c16b707064fc0ea1171f3bc7804175b642b85571e4ef01/mqt_core-3.4.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bd27347bfd1310e4496c4f79a72076bb2638425968efd0724a3a2cbf0025b9b", size = 6991090, upload-time = "2026-01-08T22:08:08.201Z" }, + { url = "https://files.pythonhosted.org/packages/68/7a/4e413df061c1fa788205abeaff27ec5f40cb786403145fc505bc5a1b8d47/mqt_core-3.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:e49fd8f7b9ef12e4ebeed98a4bf8347559e938a0caec2f0b952e8a760cc4c60b", size = 3972046, upload-time = "2026-01-08T22:08:10.118Z" }, + { url = "https://files.pythonhosted.org/packages/eb/d7/8b5b7cd47df3bd1191bc58ce78dee23f0b6ac594e499121a984643ea9b55/mqt_core-3.4.0-cp310-cp310-win_arm64.whl", hash = "sha256:e1edc694f169b0f7b2a79b397efa6268349cddf94cbc396586c2cd68457bacfa", size = 3973622, upload-time = "2026-01-08T22:08:11.665Z" }, + { url = "https://files.pythonhosted.org/packages/40/16/4a82f02632d4cc22070490399f37f5a0019d0e669c9c0f610283e0a54b29/mqt_core-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:33cf21ad638892fa2fc6913840dca1e50cc531776c7f6b2fdb3cee0bad6004f1", size = 5115319, upload-time = "2026-01-08T22:08:13.483Z" }, + { url = "https://files.pythonhosted.org/packages/60/d9/3bdb720b99764a7ab3da8f103ccdb5d20cc069c893503d11f018716b7d06/mqt_core-3.4.0-cp311-cp311-macosx_11_0_x86_64.whl", hash = "sha256:226eab23b0b53a0018a435001a5d34b362bed8f7659939155e3ec58042b333d4", size = 5548833, upload-time = "2026-01-08T22:08:15.518Z" }, + { url = "https://files.pythonhosted.org/packages/90/df/e3b6ef95b7181c9455689325da68e5befb7faa1f01cc19106435909ee9a6/mqt_core-3.4.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:31846c555f23b9f7a710f9a70fc1882bd63d3bd19430488912f543debc4e646a", size = 6573090, upload-time = "2026-01-08T22:08:16.992Z" }, + { url = "https://files.pythonhosted.org/packages/e1/2e/484b9d559263301412bb7da49b5939b15fcef27f3c6c7a743f61ed2fbeb2/mqt_core-3.4.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:10d2c477c74fc873d442df27434586011d4749a159cb388bb49daf4f89ac4ca5", size = 6991703, upload-time = "2026-01-08T22:08:18.806Z" }, + { url = "https://files.pythonhosted.org/packages/fc/67/4b7929ff1c8d7c127fd2aac0d2d51580a8c177d066d6b7288bedfdaea03e/mqt_core-3.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:d759f38cf09dfdd822f170262b395b76bdd4da2144dc5fd8a4a1d8346f5c0cc2", size = 3972643, upload-time = "2026-01-08T22:08:20.2Z" }, + { url = "https://files.pythonhosted.org/packages/d8/e4/2640e3ae0e1eab43aaf0fca2fc4fdcd098059cf1f86b9b6ddd7a3044c72a/mqt_core-3.4.0-cp311-cp311-win_arm64.whl", hash = "sha256:ba9f687a96f6e42fd019e6098a7e54867d0173727613fbce92a893dd1f8f6950", size = 3974154, upload-time = "2026-01-08T22:08:21.596Z" }, + { url = "https://files.pythonhosted.org/packages/e1/86/0973049ec3f15ae9e47bb3a5d0222110c26ef86da336932575403fe63f77/mqt_core-3.4.0-cp312-abi3-macosx_11_0_arm64.whl", hash = "sha256:df2d6cb96de949d90d5051dd8c85354cce308207d655ee2365c92f5adcea135d", size = 5111559, upload-time = "2026-01-08T22:08:23.068Z" }, + { url = "https://files.pythonhosted.org/packages/23/da/eabcece4479a59753ab51a9a259146419d5cb2a7547de7f7fde7214c5900/mqt_core-3.4.0-cp312-abi3-macosx_11_0_x86_64.whl", hash = "sha256:bad7520308ea3dc528305b5e0610bc2053b67a6c7526a69bf69bda62551c4ef9", size = 5545608, upload-time = "2026-01-08T22:08:24.578Z" }, + { url = "https://files.pythonhosted.org/packages/6e/28/39d9bf7563c48a1bb77fc1f489cc757e92fe25dffd931c909ff31dfcecaa/mqt_core-3.4.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f86da5c06dd16e90ecfed2e328e655153e0cf336a6bb75effa74071a85d16f2f", size = 6559438, upload-time = "2026-01-08T22:08:26.058Z" }, + { url = "https://files.pythonhosted.org/packages/ff/a4/c61d64b69d5801d4cd4da23bb20042828e78d4ce9274f13032a5ca838981/mqt_core-3.4.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b0b37033ac2a1e8325257d649f7014ccbbe516a2004541008cfca18f89124ff4", size = 6975946, upload-time = "2026-01-08T22:08:27.679Z" }, + { url = "https://files.pythonhosted.org/packages/a3/47/aa597c38630ddcfed4482f381bb7970c3186fe189fdd6463d2171c55554d/mqt_core-3.4.0-cp312-abi3-win_amd64.whl", hash = "sha256:3c67121831eb9a6a82fb857148220d792463893063a6145f347a73d208d2b63c", size = 3965527, upload-time = "2026-01-08T22:08:29.246Z" }, + { url = "https://files.pythonhosted.org/packages/d7/3f/b5970789acb4ac81efbf584c0e71341c61fec6a1fba8a37dffd8fdc6c37e/mqt_core-3.4.0-cp312-abi3-win_arm64.whl", hash = "sha256:dcd597ff11027bdccecb243b9bf9055e7a8bc5f92af51349bd9a3051f6bd3c89", size = 3967823, upload-time = "2026-01-08T22:08:30.593Z" }, + { url = "https://files.pythonhosted.org/packages/84/e5/5f7c5e760446ee0f820425de983c3f3476a5c6ab2fd8909f19941f808895/mqt_core-3.4.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:545b8fe227d07d9c7c80868392dc9bb5c8902734809c3dafc565fd684dd785b2", size = 5125079, upload-time = "2026-01-08T22:08:32.107Z" }, + { url = "https://files.pythonhosted.org/packages/8a/fb/bafce65cbb74013df50b8c841bcefda9ab436965f7f7257c3c90c69c0b90/mqt_core-3.4.0-cp314-cp314t-macosx_11_0_x86_64.whl", hash = "sha256:3068fadbf7512d11f9ecb18e1e1785658657cd7b00759f1bfc67948d4af311fc", size = 5560107, upload-time = "2026-01-08T22:08:33.759Z" }, + { url = "https://files.pythonhosted.org/packages/90/a7/736986cfdc0ebe3a74f2c732156484a6349a02dc389e0b6f7e997dcfbdee/mqt_core-3.4.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8dbf325a30580cf2951774b3ab7fa539b7272a5a173ba25b98c753aac4faff66", size = 6584391, upload-time = "2026-01-08T22:08:35.16Z" }, + { url = "https://files.pythonhosted.org/packages/fc/9b/d16f996c915b23d8a58d74433dc1fbee55dbe0b40515c4a8e70a3c7f64f7/mqt_core-3.4.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:485a5133698c70c02430170bab46b88d24dd4188d6c63ebb3c91bdd3ccd7f782", size = 7000710, upload-time = "2026-01-08T22:08:36.735Z" }, + { url = "https://files.pythonhosted.org/packages/b6/38/232705301ea975356e06bed18e152424b5f48919961aa862275627689b1c/mqt_core-3.4.0-cp314-cp314t-win_amd64.whl", hash = "sha256:2f51451a78b8fd4cb55c4a4d9b23f97c806305e699d313178fa3c8b9952fe558", size = 4061549, upload-time = "2026-01-08T22:08:38.884Z" }, + { url = "https://files.pythonhosted.org/packages/24/61/2b6e1ce9f3747d8cd336ff73a084ac1b5771111889467de214dbca3af8c0/mqt_core-3.4.0-cp314-cp314t-win_arm64.whl", hash = "sha256:e6f1765f3569a533af790fbaee2c7a21a0a4b34611ff914b17a6c4dfdea08120", size = 4048399, upload-time = "2026-01-08T22:08:40.279Z" }, ] [package.optional-dependencies] @@ -1525,15 +1513,15 @@ dependencies = [ [package.dev-dependencies] build = [ { name = "mqt-core" }, - { name = "pybind11" }, + { name = "nanobind" }, { name = "scikit-build-core" }, { name = "setuptools-scm" }, ] dev = [ { name = "mqt-core" }, + { name = "nanobind" }, { name = "nox" }, { name = "numpy", version = "2.4.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13'" }, - { name = "pybind11" }, { name = "pytest" }, { name = "pytest-cov" }, { name = "pytest-sugar" }, @@ -1567,23 +1555,23 @@ test = [ [package.metadata] requires-dist = [ - { name = "mqt-core", extras = ["qiskit"], specifier = "~=3.3.1" }, + { name = "mqt-core", extras = ["qiskit"], specifier = "~=3.4.0" }, { name = "qiskit", specifier = ">=1.1" }, ] [package.metadata.requires-dev] build = [ - { name = "mqt-core", specifier = "~=3.3.1" }, - { name = "pybind11", specifier = ">=3.0.1" }, + { name = "mqt-core", specifier = "~=3.4.0" }, + { name = "nanobind", specifier = ">=2.10.2" }, { name = "scikit-build-core", specifier = ">=0.11.6" }, { name = "setuptools-scm", specifier = ">=9.2.2" }, ] dev = [ - { name = "mqt-core", specifier = "~=3.3.1" }, + { name = "mqt-core", specifier = "~=3.4.0" }, + { name = "nanobind", specifier = ">=2.10.2" }, { name = "nox", specifier = ">=2025.11.12" }, { name = "numpy", marker = "python_full_version >= '3.13'", specifier = ">=2.1" }, { name = "numpy", marker = "python_full_version >= '3.14'", specifier = ">=2.3.2" }, - { name = "pybind11", specifier = ">=3.0.1" }, { name = "pytest", specifier = ">=9.0.1" }, { name = "pytest-cov", specifier = ">=7.0.0" }, { name = "pytest-sugar", specifier = ">=1.1.1" }, @@ -1657,6 +1645,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/5f/df/76d0321c3797b54b60fef9ec3bd6f4cfd124b9e422182156a1dd418722cf/myst_parser-4.0.1-py3-none-any.whl", hash = "sha256:9134e88959ec3b5780aedf8a99680ea242869d012e8821db3126d427edc9c95d", size = 84579, upload-time = "2025-02-12T10:53:02.078Z" }, ] +[[package]] +name = "nanobind" +version = "2.10.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d1/7b/818fe4f6d1fdd516a14386ba86f2cbbac1b7304930da0f029724e9001658/nanobind-2.10.2.tar.gz", hash = "sha256:08509910ce6d1fadeed69cb0880d4d4fcb77739c6af9bd8fb4419391a3ca4c6b", size = 993651, upload-time = "2025-12-10T10:55:32.335Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/14/06/cb08965f985a5e1b9cb55ed96337c1f6daaa6b9cbdaeabe6bb3f7a1a11df/nanobind-2.10.2-py3-none-any.whl", hash = "sha256:6976c1b04b90481d2612b346485a3063818c6faa5077fe9d8bbc9b5fbe29c380", size = 246514, upload-time = "2025-12-10T10:55:30.741Z" }, +] + [[package]] name = "nbclient" version = "0.10.4" @@ -2154,15 +2151,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842, upload-time = "2024-07-21T12:58:20.04Z" }, ] -[[package]] -name = "pybind11" -version = "3.0.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2f/7b/a6d8dcb83c457e24a9df1e4d8fd5fb8034d4bbc62f3c324681e8a9ba57c2/pybind11-3.0.1.tar.gz", hash = "sha256:9c0f40056a016da59bab516efb523089139fcc6f2ba7e4930854c61efb932051", size = 546914, upload-time = "2025-08-22T20:09:27.265Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/cd/8a/37362fc2b949d5f733a8b0f2ff51ba423914cabefe69f1d1b6aab710f5fe/pybind11-3.0.1-py3-none-any.whl", hash = "sha256:aa8f0aa6e0a94d3b64adfc38f560f33f15e589be2175e103c0a33c6bce55ee89", size = 293611, upload-time = "2025-08-22T20:09:25.235Z" }, -] - [[package]] name = "pybtex" version = "0.25.1"