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.
- ✨ 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) (@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)
- 🚚 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)
- 🐛 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)
- 🔥 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
- 🐛 Revert change to
opTypeFromString()signature made in #1283 (#1300) (@denialhaag)
3.3.2 - 2025-11-04
- ✨ 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)
- 🐛 Fix edge-case in validation of
NAComputation(#1276) (@ystade) - 🐛 Allow integer QASM version declarations (#1269) (@denialhaag)
3.3.1 - 2025-10-14
- 🐛 Ensure
spdlogdependency can be found frommqt-coreinstall (#1263) (@burgholzer)
3.3.0 - 2025-10-13
If you are upgrading: please see UPGRADING.md.
- 👷 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)
- ♻️ 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)
- 🔥 Drop support for Python 3.9 (#1181) (@denialhaag)
- 🔥 Remove
ClassicControlledOperationfrom C++ library and Python package (#1117) (@denialhaag)
- 🐛 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
- 🐛 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
- 🐍 Build Python 3.14 wheels (#1076) (@denialhaag)
- ✨ Add MQT-internal MLIR dialect conversions (#1001) (@li-mingbao)
- ✨ 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.
- ✨ 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)
- 📝 Add documentation page for MLIR (#931) (@ystade)
- ✨ Initial implementation of the mqtdyn Dialect (#900) (@DRovara, @ystade)
- 🐛 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)
- ⬆️ 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
- 📝 Add JOSS journal reference and citation information (#913) (@burgholzer)
- 📝 Add new links to Python package metadata (#911) (@burgholzer)
- 📝 Fix old links in Python package metadata (#911) (@burgholzer)
3.0.1 - 2025-04-07
- 🐛 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.
- ✨ 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 documentation for the ZX package (#817) (@pehamTom)
- 📝 Add C++ API docs setup (#817) (@pehamTom, @burgholzer)
- 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)
- 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)
- 🐛 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.