Releases: munich-quantum-toolkit/core
Release list
MQT Core 3.10.0 Release
👀 What Changed
Please refer to the changelog and the upgrade guide for a structured overview of the changes.
Added
- ✨ Expose ordered shots from DDSIM QDMI OpenQASM jobs, with matching histograms (#2368) (@burgholzer)
Changed
- ⚡ Run PennyLane QDMI jobs concurrently and release the GIL during waits and result retrieval (#2349) (@burgholzer)
- 💥 Raise the minimum Qiskit version from 1.1.0 to 2.1.0 (#2358) (@burgholzer)
- 💥 Replace the QDMI-specific primitives with native Qiskit primitives and typed backend factories. Sampler and
memory=Truerequire genuine QDMISHOTS(#2358) (@burgholzer) - ⬆️ Update
nanobindto version 3.0.1 (#2209, #2283) (@denialhaag, @burgholzer) - 💥 Move circuit IR OpenQASM serialization from operation subclasses to
qasm3::Serializerinqasm3/Serializer.hpp(#2249) (@simon1hofmann) - 💥 Drop support for x86 macOS and stop publishing the respective wheels (#2259) (@denialhaag)
- ⬆️ Raise the macOS deployment target to 13.3 to enable
std::formatin libc++ (#2259) (@denialhaag) - 💥 Require Python 3.11 or newer (#2209) (@denialhaag, @burgholzer)
- 📦 Publish one split-mode
cp311-abi3wheel for GIL-enabled CPython 3.11 and newer (#2209) (@denialhaag, @burgholzer) - 📦 Publish one
cp315-abi3twheel for free-threaded CPython 3.15 and newer (#2209) (@denialhaag, @burgholzer) - ⚡ Remove an extra dense copy from
VectorDD.get_vector(#2209) (@burgholzer) - 🐛 Protect process-wide DD, IR, and QDMI state for free-threaded Python (#2209) (@burgholzer)
- 💥 Prune dead and misleading CoreIR APIs, including renaming the non-garbage logical output count to
getNoutputQubits()andnum_output_qubits(#2112) (@simon1hofmann)
Removed
- 💥 Remove test-only DD state generators, recursive functionality construction, and DD-specific named-gate helpers (#2257, #2335) (@simon1hofmann)
- 💥 Remove the optional MLIR stack, including its dialects, conversions, passes, tools, build integration, tests, documentation, and dependency on LLVM (#2314) (@denialhaag, @burgholzer)
- 💥 Remove the entire QIR stack, including its runtime, JIT, standalone runner, DDSIM integration, build integration, tests, and documentation (#2314) (@denialhaag, @burgholzer)
- 💥 Remove the
spdlogdependency from source builds, installed CMake packages, and Python wheels. QDMI diagnostics continue to be written to standard error (#2270) (@denialhaag) - 💥 Remove
CircuitOptimizer. Move circuit flattening and final-measurement removal toQuantumComputation, equivalence-checking transformations to MQT QCEC, and mapping transformations to MQT QMAP. Move single-qubit gate fusion to both downstream packages. Remove the public circuit dependency graph and transformations without production consumers (#2262) (@simon1hofmann) - 💥 Remove
MQT::CoreAlgorithms, its fixed-circuit factories, and the legacy DD package evaluation. MQT Core provides no direct replacement (#2214) (@burgholzer) - 💥 Remove the unused decision-diagram approximation algorithm, including the
dd/Approximation.hppheader,dd::ApproximationMetadata, anddd::approximate. No replacement is provided (#2154) (@burgholzer) - 💥 Remove
nlohmann_jsonfrom the public package contract. MQT Core no longer installs or exports the library, no installed header exposes anlohmanntype, and the decision-diagram statistics report through strings and streams (#2138) (@denialhaag) - 💥 Remove the neutral-atom stack, which moves to MQT QMAP. This drops the neutral-atom computation model, the neutral-atom FoMaC device session, the neutral-atom QDMI device and its configuration, the
mqt.core.naPython module,AodOperation, and theMove,Bridge,AodActivate,AodDeactivate, andAodMoveoperation kinds (#2137) (@denialhaag) - 💥 Remove the random-number generator, seed, and
getGenerator()method fromQuantumComputation; randomized algorithms now own generators initialized from their seed arguments (#2111) (@simon1hofmann) - 💥 Remove the FoMaC compatibility name from the C++ and Python QDMI APIs. Use the
qdmiC++ namespace, headers, library, and CMake target; themqt.core.qdmiPython module; and module-level functions inmqt.core.qdmi.driver(#2115) (@burgholzer) - 💥 Remove the ZX-calculus library, including the
mqt-core-zxtarget,MQT::CoreZXalias,zxheaders and namespace, and its Boost.Multiprecision and GMP build support. Equivalence-checking users should use MQT QCEC; its ZX implementation is internal and does not provide a replacement public API (#2082) (@burgholzer) - 🔥 Remove density matrix support from the DD package (#1466) (@burgholzer)
- 🔥 Remove
datastructures(ds) (sub)library (#1458) (@burgholzer)
Fixed
- 🐛 Initialize Qiskit classical bits before OpenQASM 3 serialization so partially measured circuits preserve their zero values (#2399) (@burgholzer)
- 🐛 Handle empty DDSIM results and NUL-terminated QDMI result buffers (#2288) (@simon1hofmann)
- 🐛 Validate output permutations before I/O mapping initialization (#2278) (@denialhaag)
Full Changelog: v3.9.2...v3.10.0
MQT Core 3.9.2 Release
👀 What Changed
Please refer to the changelog and the upgrade guide for a structured overview of the changes.
Added
- ✨ Allow C++ and Python QDMI job submissions to omit the shot count, leaving repetition semantics to the program and device (#2258) (@burgholzer)
Full Changelog: v3.9.1...v3.9.2
MQT Core 3.9.1 Release
👀 What Changed
Please refer to the changelog and the upgrade guide for a structured overview of the changes.
Added
- 🚸 Let PennyLane QDMI devices reuse an already-open session, including a device selected from a Slurm license (#2232) (@burgholzer)
- ✨ Let a package register a program serializer for a program format through the
mqt.core.qiskit.program_serializersentry point group (#2114) (@marcelwa, @burgholzer) - ✨ Add
mqt.core.qdmi.is_binary_program_format, which states whether a program format requires exact-byte submission (#2114) (@marcelwa, @burgholzer)
Removed
- 💥 Remove the IQM JSON converter
qiskit_to_iqm_jsonand theMoveGatefrom the Qiskit plugin, which QDMI-on-IQM now owns (#2114) (@marcelwa, @burgholzer)
Full Changelog: v3.9.0...v3.9.1
MQT Core 3.9.0 Release
👀 What Changed
Please refer to the changelog and the upgrade guide for a structured overview of the changes.
Added
- ✨ Add PennyLane support for gate-based QDMI devices (#2005, #2147) (@burgholzer, @marcelwa)
- ✨ Add
Device::submitCalibrationJobandmqt.core.qdmi.Device.submit_calibration_jobfor triggering a calibration run (#2148) (@marcelwa, @burgholzer) - ✨ Add SpecAudits, a method and probe script for auditing tests that pin behavior the project never specified (#2124) (@marcelwa)
- 🚸 Add typed stable-ID construction for Qiskit backends, lazy provider discovery, and sampler and estimator factories with explicit shot and precision defaults (#2084) (@burgholzer)
- 🧪 Test static Slurm license admission and QDMI execution with DDSIM and the superconducting device, and document the cluster setup (#2043) (@burgholzer)
- ✨ Add C++ FoMaC and Python QDMI adapters that open the device named by one local Slurm license environment value (#2025) (@burgholzer)
- ✨ Add generic C++ FoMaC and Python QDMI support for custom device properties that contain operation handles (#2042) (@burgholzer)
- 📝 Generate
llms.txtdocumentation indexes with Sphinx-LLM (#1989, #2046) (@denialhaag, @burgholzer) - ✨ Support retrieving existing jobs by ID through the QDMI client API, C++ FoMaC API, and Python QDMI API, and expose optional device queue length and job queue position (#2008, #2010) (@burgholzer)
- 🐍 Build CPython 3.15 wheels. Their post-build tests remain disabled until test dependency wheels are available (#2011) (@denialhaag)
- ✨ Bundle reusable IQM Garnet and Emerald superconducting device models with stable QDMI registry IDs (#1992) (@burgholzer)
- ✨ Expose compressed vector and matrix DD serialization through bytes-based Python APIs (#1983) (@burgholzer)
- ✨ Make the neutral-atom and superconducting QDMI devices runtime configurable with session-owned topology, operations, and calibration data (#1974, #1980) (@burgholzer)
- ✨ Expose registered QDMI device IDs without loading device libraries (#1972) (@burgholzer)
- ✨ Add typed runtime configuration transport and relocatable assets for QDMI device descriptions (#1967) (@burgholzer)
Changed
- ⬆️ Update QDMI to version 1.3.3 (#2168) (@denialhaag)
- ⬆️ Update
nanobindto version 2.15.0 (#2141) (@denialhaag) - 💥 Replace the MQT-specific QDMI primitive
optionsmappings with explicit shot and precision defaults (#2084) (@burgholzer) - ♻️ Simplify Python optional-dependency checks while preserving the Qiskit and PennyLane availability flags (#2108) (@simon1hofmann)
- 💥 Remove the unused
pybind11CMake helper and renameadd_mqt_python_binding_nanobindtoadd_mqt_python_binding(#2106) (@denialhaag) - 💥 Move Python QDMI entities and the neutral-atom specialization to QDMI namespaces, expose device registration and opening through
mqt.core.qdmi.driver, retain v3 FoMaC compatibility aliases, and let the Qiskit adapter open stable device IDs directly (#2074) (@burgholzer) - 🚀 Reduce ZX diagram growth for multi-controlled X gates with an exact ancilla-free quadratic decomposition (#1984) (@burgholzer)
Fixed
- 🐛 Distinguish scalar OpenQASM qubits from one-element qubit registers and reject indexing scalar qubits (#2157) (@DRovara, @burgholzer)
- 🐛 Preserve the original OpenQASM type error when an assignment's right-hand expression cannot be typed (#2156) (@DRovara, @burgholzer)
Removed
- 💥 Remove batch job submission from the QDMI client.
Device::submitJobnow states that MQT Core does not support batch jobs (#2148) (@marcelwa, @burgholzer) - 💥 Remove QDMI device configuration through
[tool.qdmi]inpyproject.tomland the vendored toml++ header (#2116) (@denialhaag)
Full Changelog: v3.8.0...v3.9.0
MQT Core 3.8.0 Release
👀 What Changed
Please refer to the changelog and the upgrade guide for a structured overview of the changes.
Added
- ✨ Add binary-safe QDMI program submission and retrieval to FoMaC, including explicit text and exact-byte APIs and all standard QDMI program formats (#1957) (@burgholzer)
- ✨ Add versioned, relocatable configuration and stable-ID registration for QDMI device libraries, including disabled-ID reservations, fresh device sessions, idempotent registration, and external-device target metadata (#1912) (@burgholzer)
- ✨ Add native relative-phase CCX (
rccx) support across the IR, DD package, ZX diagrams, OpenQASM import/export, and Python/Qiskit bindings (#1886, #1950) (@simon1hofmann) - ✨ Add support for QDMI child devices to the driver and FoMaC libraries (#1897, #1952) (@burgholzer)
- ✨ Add typed custom property and result queries to the C++ and Python FoMaC libraries (#1895) (@burgholzer)
- ✨ Add support for custom job parameters to C++ and Python FoMaC library (#1887) (@flowerthrower, @burgholzer)
- ✨ Add labeled and ordered output schemas to the QIR runtime (#1877) (@rturrado)
- ✨ Add boolean, integer, floating-point, tuple, and array record output functions to the QIR runtime (#1799) (@rturrado)
- ✨ Add the reusable in-process
MQT::CoreQIRJITlibrary and QIR program format support to the DDSIM QDMI device (#1766) (@rturrado)
Changed
- ⬆️ Raise the minimum supported QDMI version to 1.3.2 (#1897) (@burgholzer)
Removed
- 🔥 Replace the unstable C++
Driver::addDynamicDeviceLibraryand Pythonadd_dynamic_device_libraryAPIs with definition registration and stable-ID opening (#1912) (@burgholzer)
Fixed
- 🐛 Allow MQT Core to be embedded as a CMake subproject without target collisions and make its bundled QDMI devices individually configurable (#1965) (@burgholzer)
- 🐛 Fix QIR function names for adjoint gates (#1830) (@denialhaag)
Full Changelog: v3.7.0...v3.8.0
MQT Core 3.7.0 Release
👀 What Changed
Please refer to the changelog and the upgrade guide for a structured overview of the changes.
Added
- ✨ Add support for IQM's
movegate in the QDMI Qiskit backend converter (#1844, #1848) (@burgholzer, @marcelwa) - 🚸 Add
constversion of theCompoundOperation'sgetOps()function (#1826) (@ystade) - 🚸 Add CMake presets to provide a standardized and reproducible way to configure builds (#1660) (@denialhaag)
Changed
- ⬆️ Update QDMI to version 1.3.2 (#1873) (@denialhaag)
- ♻️ Improve implementation and usability of FoMaC classes (#1849) (@MatthiasReumann)
- ⬆️ Update
nanobindto version 2.13.0 (#1817) - ⬆️ Update munich-quantum-toolkit/workflows to version
v2.0.1(#1660, #1737) (@denialhaag)
Removed
- 📝 Remove support for generating LaTeX documentation (#1828) (@denialhaag)
Fixed
- 🐛 Fix invalid
prop_typeforQDMI_DEVICE_PROPERTY_COUPLINGMAPin QDMI SC Device (#1842) (@MatthiasReumann)
Full Changelog: v3.6.1...v3.7.0
MQT Core 3.6.1 Release
👀 What Changed
Please refer to the changelog and the upgrade guide for a structured overview of the changes.
Changed
- 🚸 Improve native gate support for the Qiskit-to-OpenQASM3 conversion in the QDMI-Qiskit interface (#1719) (@burgholzer)
Fixed
- 🏁 Fix dynamic loading of QDMI device DLLs on Windows when an absolute path is provided (#1720) (@burgholzer)
Full Changelog: v3.6.0...v3.6.1
MQT Core 3.6.0 Release
👀 What Changed
Please refer to the changelog and the upgrade guide for a structured overview of the changes.
Added
- 🚸 Add a measurement instruction to the default SC QDMI device (#1694) (@burgholzer)
- ✨ Add support for multi-controlled gates to the QDMI Qiskit backend converter (#1694) (@burgholzer)
Changed
- ♻️ Build all built-in QDMI devices as shared libraries (#1694) (@burgholzer)
- ⬆️ Update minimum supported Qiskit version to 1.1.0 (#1694) (@burgholzer)
Fixed
- 🐛 Fix missing
nlohmann_json.natvisin Windows component-based CMake installs (#1702) (@burgholzer) - 🐛 Fix segfault in DD
samplemethod when idle classical bits are present (#1694) (@burgholzer)
Removed
- 🔥 Remove shared library wrappers for QDMI devices (#1694) (@burgholzer)
Full Changelog: v3.5.1...v3.6.0
MQT Core 3.5.1 Release
👀 What Changed
Please refer to the changelog and the upgrade guide for a structured overview of the changes.
Fixed
- 🐛 Fix malformed include directories in exported
nlohmann_jsonCMake targets for component-based installs (#1662) (@burgholzer)
Full Changelog: v3.5.0...v3.5.1
MQT Core 3.5.0 Release
👀 What Changed
Please refer to the changelog and the upgrade guide for a structured overview of the changes.
Added
- ✨ Add support for multi-controlled gates to ZX package (#1380) (@keefehuang, @denialhaag)
- ✨ Add Sampler and Estimator Primitives to the QDMI-Qiskit Interface (#1507) (@marcelwa)
Changed
- ⬆️ Update
nanobindto version 2.12.0 (#1654) (@burgholzer) - ⬆️ Update QDMI to v1.3.0 (#1652) (@burgholzer)
- 📦 Switch to component-based installation for the MQT Core Python package (#1596) (@burgholzer)
- ⬆️ Update QDMI to latest version from stable
v1.2.xbranch (#1593) (@burgholzer) - ⬆️ Update
clang-tidyto version 22 (#1564) (@denialhaag, @burgholzer) - 👷 Build on
macos-26/macos-26-intelby default andmacos-15/macos-15-intelfor extensive tests (#1571) (@denialhaag)
Full Changelog: v3.4.1...v3.5.0