Changelog¶
All notable changes to this project will be documented in this file.
The format is based on a mixture of Keep a Changelog and Common Changelog. This project adheres to Semantic Versioning, with the exception that minor releases may include breaking changes.
Unreleased¶
3.6.1 - 2026-05-20¶
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)
3.6.0 - 2026-05-13¶
If you are upgrading: please see UPGRADING.md.
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)
3.5.1 - 2026-04-23¶
If you are upgrading: please see UPGRADING.md.
Fixed¶
🐛 Fix malformed include directories in exported
nlohmann_jsonCMake targets for component-based installs (#1662) (@burgholzer)
3.5.0 - 2026-04-21¶
If you are upgrading: please see UPGRADING.md.
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 (#1528)⬆️ 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)
3.4.1 - 2026-02-01¶
Changed¶
⬆️ Update
nanobindto version 2.11.0 (#1481) (@denialhaag)⬆️ Update Boost to version 1.89.0 (#1453) (@burgholzer)
⬆️ Update QDMI to latest version from stable
v1.2.xbranch (#1453) (@burgholzer)⬆️ Update
spdlogto version 1.17.0 (#1453) (@burgholzer)♻️ Use
llcinstead of randomclangfor compiling QIR test circuits to improve robustness and handle opaque pointers correctly across LLVM versions (#1447) (@burgholzer)♻️ Extract singleton pattern into reusable template base class for QDMI devices and driver (#1444) (@ystade, @burgholzer)
🚚 Reorganize QDMI code structure by moving devices into dedicated subdirectories and separating driver and common utilities (#1444) (@ystade)
Removed¶
🔥 No longer actively type check Python code with
mypyand solely rely onty(#1437) (@burgholzer)
3.4.0 - 2026-01-08¶
If you are upgrading: please see UPGRADING.md.
Added¶
✨ Return device handle from
add_dynamic_device_libraryfor direct backend creation (#1381) (@marcelwa)✨ Add IQM JSON support for job submission in Qiskit-QDMI Backend (#1375, #1382) (@marcelwa, @burgholzer)
✨ Add authentication support for QDMI sessions with token, username/password, auth file, auth URL, and project ID parameters (#1355) (@marcelwa)
✨ Add a new QDMI device that represents a superconducting architecture featuring a coupling map (#1328) (@ystade)
✨ Add bi-directional iterator that traverses the def-use chain of a qubit value (#1310) (@MatthiasReumann)
✨ Add
OptionalDependencyTesterto lazily handle optional Python dependencies like Qiskit (#1243) (@marcelwa, @burgholzer)✨ Expose the QDMI job interface through FoMaC (#1243) (@marcelwa, @burgholzer)
✨ Add Qiskit backend wrapper with job submission support for QDMI devices through a provider interface (#1243, #1385) (@marcelwa, @burgholzer)
✨ Support
QDMI_DEVICE_PROPERTY_SUPPORTEDPROGRAMFORMATSin the NA QDMI Device and the DDSIM QDMI Device (#1243) (@marcelwa, @burgholzer)✨ Support
QDMI_DEVICE_JOB_PROPERTY_PROGRAMin the NA QDMI Device (#1243) (@marcelwa, @burgholzer)
Changed¶
📦🏁 Build Windows x86 wheels on
windows-2025runner for newer compiler (#1415) (@burgholzer)👷 Build on
macos-15/windows-2025by default andmacos-14/windows-2022for extensive tests (#1414) (@burgholzer)📦🍎 Build macOS arm64 wheels on macos-15 runner for newer compiler (#1413) (@burgholzer)
⚡ Improve uv build caching by removing unconditional
reinstall-packageand configuring dedicatedcache-keys(#1412) (@burgholzer)👨💻📦 Build
spdlogand QDMI generators as shared libraries in Python package builds (#1411, #1403) (@burgholzer)♻️🏁 Remove Windows-specific restrictions for dynamic QDMI device library handling (#1406) (@burgholzer)
♻️ Migrate Python bindings from
pybind11tonanobind(#1383) (@denialhaag, @burgholzer)📦️ Provide Stable ABI wheels for Python 3.12+ (#1383) (@burgholzer, @denialhaag)
🚚 Create dedicated
mqt.core.nasubmodule to closely follow the structure of other submodules (#1383) (@burgholzer)✨ Add common definitions and utilities for QDMI (#1355) (@burgholzer)
🚚 Move
NAQDMI device in its right place next to other QDMI devices (#1355) (@burgholzer)♻️ Allow repeated loading of QDMI device library with potentially different session configurations (#1355) (@burgholzer)
♻️ Enable thread-safe reference counting for QDMI devices singletons (#1355) (@burgholzer)
♻️ Refactor
FoMaCsingleton to instantiableSessionclass with configurable authentication parameters (#1355) (@marcelwa)👷 Stop testing on
ubuntu-22.04andubuntu-22.04-armrunners (#1359) (@denialhaag, @burgholzer)👷 Stop testing with
clang-19and start testing withclang-21(#1359) (@denialhaag, @burgholzer)👷 Fix macOS tests with Homebrew Clang via new
munich-quantum-toolkit/workflowsversion (#1359) (@denialhaag, @burgholzer)👷 Re-enable macOS tests with GCC by disabling module scanning (#1359) (@denialhaag, @burgholzer)
♻️ Group circuit operations into scheduling units for MLIR routing (#1301) (@MatthiasReumann)
👷 Use
munich-quantum-software/setup-mlirto set up MLIR (#1294) (@denialhaag)♻️ Preserve tuple structure and improve site type clarity of the MQT NA Default QDMI Device (#1299) (@marcelwa)
♻️ Move DD package evaluation module to standalone script (#1327) (@burgholzer)
⬆️ Bump QDMI version to 1.2.0 (#1243) (@marcelwa, @burgholzer)
Fixed¶
🔧 Install all available QDMI device targets in Python package builds (#1403) (@burgholzer)
🐛 Fix operation validation in Qiskit backend to handle device-specific gate naming conventions (#1384) (@marcelwa)
🐛 Fix conditional branch handling when importing MLIR from
QuantumComputation(#1378) (@lirem101)🐛 Fix custom QDMI property and parameter handling in SC and NA devices (#1355) (@burgholzer)
🚨 Fix argument naming of
QuantumComputationandCompoundOperationdunder methods for properly implementing theMutableSequenceprotocol (#1338) (@burgholzer)🐛 Fix memory management in dynamic QDMI device by making it explicit (#1336) (@ystade)
Removed¶
🔥 Remove wheel builds for Python 3.13t (#1371) (@burgholzer)
🔥 Remove the
evaluationextra from the MQT Core Python package (#1327) (@burgholzer)🔥 Remove the
mqt-core-dd-compareentry point from the MQT Core Python package (#1327) (@burgholzer)
3.3.3 - 2025-11-10¶
Added¶
Fixed¶
🐛 Revert change to
opTypeFromString()signature made in #1283 (#1300) (@denialhaag)
3.3.2 - 2025-11-04¶
Added¶
✨ Add DD-based simulator QDMI device (#1287) (@burgholzer)
✨ A
--reuse-qubitspass implementing an advanced form of qubit reuse to reduce the qubit count of quantum circuits (#1108) (@DRovara)✨ A
--lift-measurementspass that attempts to move measurements up as much as possible, used for instance to enable better qubit reuse (#1108) (@DRovara)✨ Add native support for
R(theta, phi)gate (#1283) (@burgholzer)✨ Add A*-search-based routing algorithm to MLIR transpilation routines (#1237, #1271, #1279) (@MatthiasReumann)
Fixed¶
🐛 Fix edge-case in validation of
NAComputation(#1276) (@ystade)🐛 Allow integer QASM version declarations (#1269) (@denialhaag)
3.3.1 - 2025-10-14¶
Fixed¶
🐛 Ensure
spdlogdependency can be found frommqt-coreinstall (#1263) (@burgholzer)
3.3.0 - 2025-10-13¶
If you are upgrading: please see UPGRADING.md.
Added¶
👷 Enable testing on Python 3.14 (#1246) (@denialhaag)
✨ Add dedicated
PlacementPassto MLIR transpilation routines (#1232) (@MatthiasReumann)✨ Add an NA-specific FoMaC implementation (#1223, #1236) (@ystade, @burgholzer)
✨ Enable import of BarrierOp into MQTRef (#1224) (@denialhaag)
✨ Add naive quantum program routing MLIR pass (#1148) (@MatthiasReumann)
✨ Add QIR runtime using DD-based simulation (#1210) (@ystade, @burgholzer)
✨ Add SWAP reconstruction patterns to the newly-named
SwapReconstructionAndElisionMLIR pass (#1207) (@taminob, @burgholzer)✨ Add two-way conversions between MQTRef and QIR (#1091) (@li-mingbao)
🚸 Define custom assembly formats for MLIR operations (#1209) (@denialhaag)
✨ Add support for translating
IfElseOperations to theMQTRefMLIR dialect (#1164) (@denialhaag, @burgholzer)✨ Add MQT’s implementation of a generic FoMaC with Python bindings ([#1150], #1186, #1223) (@ystade)
✨ Add new MLIR pass
ElidePermutationsfor SWAP gate elimination (#1151) (@taminob)✨ Add new pattern to MLIR pass
GateEliminationfor identity gate removal (#1140) (@taminob)✨ Add Clifford block collection pass to
CircuitOptimizermodule (#885) ([jannikpflieger], @burgholzer)✨ Add
isControlled()method to theUnitaryInterfaceMLIR class (#1157) (@taminob, @burgholzer)📝 Integrate generated MLIR documentation (#1147) (@denialhaag, @burgholzer)
✨ Add
IfElseOperationto C++ library and Python package to support Qiskit’sIfElseOp(#1117) (@denialhaag, @burgholzer, @lavanya-m-k)✨ Add
allocQubitanddeallocQubitoperations for dynamically working with single qubits to the MLIR dialects (#1139) (@DRovara, @burgholzer)✨ Add
qubitoperation for static qubit addressing to the MLIR dialects (#1098, #1116) (@MatthiasReumann)✨ Add MQT’s implementation of a QDMI Driver (#1010) (@ystade)
✨ Add MQT’s implementation of a QDMI Device for neutral atom-based quantum computing (#996, #1010, #1100) (@ystade, @burgholzer)
✨ Add translation from
QuantumComputationto theMQTRefMLIR dialect (#1099) (@denialhaag, @burgholzer)✨ Add
resetoperations to the MLIR dialects (#1106) (@DRovara)
Changed¶
♻️ Replace custom
AllocOp,DeallocOp,ExtractOp, andInsertOpwith MLIR-nativememrefoperations (#1211) (@denialhaag)🚚 Rename MLIR pass
ElidePermutationstoSwapReconstructionAndElision(#1207) (@taminob)⬆️ Require LLVM 21 for building the MLIR library (#1180) (@denialhaag)
⬆️ Update to version 21 of
clang-tidy(#1180) (@denialhaag)🚚 Rename MLIR pass
CancelConsecutiveInversestoGateElimination(#1140) (@taminob)🚚 Rename
xxminusyytoxx_minus_yyandxxplusyytoxx_plus_yyin MLIR dialects (#1071) (@BertiFlorea, @denialhaag)🚸 Add custom assembly format for operations in the MLIR dialects (#1139) (@burgholzer)
🚸 Enable
InferTypeOpInterfacein the MLIR dialects to reduce explicit type information (#1139) (@burgholzer)🚚 Rename
check-quantum-opttest target tomqt-core-mlir-lit-test(#1139) (@burgholzer)♻️ Update the
measureoperations in the MLIR dialects to no longer support more than one qubit being measured at once (#1106) (@DRovara)🚚 Rename
XXminusYYtoXXminusYYOpandXXplusYYtoXXplusYYOpin MLIR dialects (#1099) (@denialhaag)🚚 Rename
MQTDynMLIR dialect toMQTRef(#1098) (@MatthiasReumann)
Removed¶
🔥 Drop support for Python 3.9 (#1181) (@denialhaag)
🔥 Remove
ClassicControlledOperationfrom C++ library and Python package (#1117) (@denialhaag)
Fixed¶
🐛 Fix CMake installation to make
find_package(mqt-core CONFIG)succeed (#1247) (@burgholzer, @denialhaag)🏁 Fix stack overflows in OpenQASM layout parsing on Windows for large circuits (#1235) (@burgholzer)
✨ Add missing
StandardOperationconversions in MLIR roundtrip pass (#1071) (@BertiFlorea, @denialhaag)
3.2.1 - 2025-08-01¶
Fixed¶
🐛 Fix usage of
std::accumulateby changing accumulator parameter from reference to value (#1089) (@denialhaag)🐛 Fix erroneous
containscheck in DD package (#1088) (@denialhaag)
3.2.0 - 2025-07-31¶
If you are upgrading: please see UPGRADING.md.
Added¶
🐍 Build Python 3.14 wheels (#1076) (@denialhaag)
✨ Add MQT-internal MLIR dialect conversions (#1001) (@li-mingbao)
Changed¶
✨ Expose enums to Python via
pybind11’s new (enum.Enum-compatible)py::native_enum(#1075) (@denialhaag)⬆️ Require C++20 (#897) (@burgholzer, @denialhaag)
3.1.0 - 2025-07-11¶
If you are upgrading: please see UPGRADING.md.
Added¶
✨ Add MLIR pass for merging rotation gates (#1019) (@denialhaag)
✨ Add functions to generate random vector DDs (#975) (@MatthiasReumann)
✨ Add function to approximate decision diagrams (#908) (@MatthiasReumann)
📦 Add Windows ARM64 wheels (#926) (@burgholzer)
✨ Initial implementation of the mqtdyn Dialect (#900) (@DRovara, @ystade)
Fixed¶
🐛 Fix bug in MLIR roundtrip passes caused by accessing an invalidated iterator after erasure in a loop (#932) (@flowerthrower)
🐛 Add missing support for
sxdggates in Qiskit circuit import (#930) (@burgholzer)🐛 Fix bug related to initialization of operations with duplicate operands (#964) (@ystade)
🐛 Open issue for Qiskit upstream test only when the test is actually failing not when it was cancelled (#973) (@ystade)
🐛 Fix parsing of
GPhasein theMQTOptMLIR dialect (#1042) (@ystade, @DRovara)
Changed¶
⬆️ Bump shared library ABI version from
3.0to3.1(#1047) (@denialhaag)♻️ Switch from reference counting to mark-and-sweep garbage collection in decision diagram package (#1020) (@MatthiasReumann, [burgholzer], q-inho)
♻️ Move the C++ code for the Python bindings to the top-level
bindingsdirectory (#982) (@denialhaag)♻️ Move all Python code (no tests) to the top-level
pythondirectory (#982) (@denialhaag)⚡ Improve performance of getNqubits for StandardOperations (#959) (@ystade)
♻️ Move Make-State Functionality To StateGeneration (#984) (@MatthiasReumann)
♻️ Outsource definition of standard operations from MLIR dialects to reduce redundancy (#933) (@ystade)
♻️ Unify operands and results in MLIR dialects (#931) (@ystade)
⏪️ Restore support for (MLIR and) LLVM v19 (#934) (@flowerthrower, @ystade)
⬆️ Update nlohmann_json to
v3.12.0(#921) (@burgholzer)
3.0.2 - 2025-04-07¶
Added¶
📝 Add JOSS journal reference and citation information (#913) (@burgholzer)
📝 Add new links to Python package metadata (#911) (@burgholzer)
Fixed¶
📝 Fix old links in Python package metadata (#911) (@burgholzer)
3.0.1 - 2025-04-07¶
Fixed¶
🐛 Fix doxygen build on RtD to include C++ API docs (#912) (@burgholzer)
3.0.0 - 2025-04-06¶
If you are upgrading: please see UPGRADING.md.
Added¶
✨ Ship shared C++ libraries with
mqt-corePython package (#662) (@burgholzer)✨ Add Python bindings for the DD package (#838) (@burgholzer)
✨ Add direct MQT
QuantumComputationto QiskitQuantumCircuitexport (#859) (@burgholzer)✨ Support for Qiskit 2.0+ (#860) (@burgholzer)
✨ Add initial infrastructure for MLIR within the MQT (#878, #879, #892, #893, #895) (@burgholzer, @ystade, @DRovara, @flowerthrower, @BertiFlorea)
✨ Add State Preparation Algorithm (#543) (@M-J-Hochreiter)
🚸 Add support for indexed identifiers to OpenQASM 3 parser (#832) (@burgholzer)
🚸 Allow indexed registers as operation arguments (#839) (@burgholzer)
📝 Add documentation for the DD package (#831) (@burgholzer)
📝 Add C++ API docs setup (#817) (@pehamTom, @burgholzer)
Changed¶
Breaking: 🚚 MQT Core has moved to the munich-quantum-toolkit GitHub organization
Breaking: ✨ Adopt PEP 735 dependency groups (#762) (@burgholzer)
Breaking: ♻️ Encapsulate the OpenQASM parser in its own library (#822) (@burgholzer)
Breaking: ♻️ Replace
Configtemplate from DD package with constructor argument (#886) (@burgholzer)Breaking: ♻️ Remove template parameters from
MemoryManagerand adjacent classes (#866) (@rotmanjanez)Breaking: ♻️ Refactor algorithms to use factory functions instead of inheritance (@a9b7e70) (@burgholzer)
Breaking: ♻️ Change pointer parameters to references in DD package (#798) (@burgholzer)
Breaking: ♻️ Change registers from typedef to actual type (#807) (@burgholzer)
Breaking: ♻️ Refactor
NAComputationclass hierarchy (#846, #877) (@ystade)Breaking: ⬆️ Bump minimum required CMake version to
3.24.0(#879) (@burgholzer)Breaking: ⬆️ Bump minimum required
uvversion to0.5.20(#802) (@burgholzer)📝 Rework existing project documentation (#789, #842) (@burgholzer)
📄 Use PEP 639 license expressions (#847) (@burgholzer)
Removed¶
Breaking: 🔥 Remove the
Teleportationgate from the IR (#882) (@burgholzer)Breaking: 🔥 Remove parsers for
.real,.qc,.tfc, andGRCSfiles (#822) (@burgholzer)Breaking: 🔥 Remove tensor dump functionality (#798) (@burgholzer)
Breaking: 🔥 Remove
extract_probability_vectorfunctionality (#883) (@burgholzer)
Fixed¶
🐛 Fix Qiskit layout import and handling (#849, #858) (@burgholzer)
🐛 Properly handle timing literals in QASM parser (#724) (@burgholzer)
🐛 Fix stripping of idle qubits (#763) (@burgholzer)
🐛 Fix permutation handling in OpenQASM dump (#810) (@burgholzer)
🐛 Fix out-of-bounds error in ZX
EdgeIterator(#758) (@burgholzer)🐛 Fix endianness in DCX and XX_minus_YY gate matrix definition (#741) (@burgholzer)
🐛 Fix needless dummy register in empty circuit construction (#758) (@burgholzer)
2.7.0 - 2024-10-08¶
📚 Refer to the GitHub Release Notes for previous changelogs.