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 an
unroll-modifierspass for unrolling multi-operation modifiers (#2015) (@denialhaag) - ✨ Add generic C++ and Python FoMaC support for custom device properties that contain operation handles (#2042) (@burgholzer)
- ✨ Support retrieving existing jobs by ID through the QDMI client API and C++ and Python FoMaC APIs, and expose optional device queue length and job queue position (#2008, #2010) (@burgholzer)
- 🐍 Start building CPython 3.15 wheels (#2011) (@denialhaag)
- ✨ Add PennyLane support for gate-based QDMI devices (#2005) (@burgholzer)
- ✨ Integrate QDMI devices as MLIR compiler targets across C++, Python, and
mqt-cc(#1687) (@MatthiasReumann, @burgholzer) - ✨ Add structured OpenQASM emission from the QC dialect to the C++ and Python
compiler APIs and
mqt-cc(#2003) (@burgholzer) - ✨ Add immutable MLIR compiler targets and a canonical target compilation pipeline for decomposition, optimization, mapping, native synthesis, and conformance (#1993, #1999) (@simon1hofmann, @burgholzer)
- ✨ Bundle reusable IQM Garnet and Emerald superconducting device models with stable QDMI registry IDs (#1992) (@burgholzer)
- ✨ Add compiler-wide scoped global-phase normalization with exact modifier semantics and synthesis integration (#1986, #1995) (@burgholzer)
- ✨ Expose compressed vector and matrix DD serialization through bytes-based Python APIs (#1983) (@burgholzer)
- ✨ Make superconducting QDMI devices runtime configurable with session-owned topology, operations, and calibration data (#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)
- ✨ Add and improve QIR generation support in the MQT Compiler Collection (#1264, #1446, #1513, #1521, #1548, #1567, #1569, #1570, #1572, #1580, #1620, #1624, #1626, #1648, #1710, #1751, #1755, #1787, #1815, #1823, #1830, #1886, #1933, #1978, #1979, #2007, #2026, #2030) (@burgholzer, @denialhaag, @simon1hofmann, @li-mingbao, @DRovara, @MatthiasReumann)
- ✨ Add decision diagram-based construction and simulation of static unitary QCO functions (#1915) (@simon1hofmann)
- ✨ Add target-independent two-qubit gate fusion, target-native post-routing synthesis, and operation-capability and static-site conformance (#1865, #1961, #1998) (@simon1hofmann, @burgholzer)
- ✨ Add a
decompose-multi-controlledpass for decomposing controlled X, Z, SWAP, RCCX, and constant-angle phase gates with a configurablemin-qubitsthreshold (default 3: wider than two-qubit) (#1810, #1996, #2001) (@simon1hofmann) - ✨ Add an LLVM-native staged OpenQASM frontend with typed semantic analysis and direct QC emission, including lexical scope, assignment, inclusive ranges, structured control flow, and alias-safe qubit-register access (#1910, #1987, #1994, #2026) (@burgholzer, @denialhaag)
- ✨ Add Python bindings for the MQT Compiler Collection (#1815) (@burgholzer, @denialhaag)
- ✨ 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 dev container configuration for consistent local development environment (#1786) (@denialhaag)
- ✨ Add two-qubit Weyl (KAK) decomposition and native-gateset synthesis support (#1803, #1832) (@simon1hofmann, @burgholzer)
- ✨ Extend the QCO unitary matrix library (#1774, #1802, #1809, #1814, #1850) (@simon1hofmann, @burgholzer)
- ✨ Add a
fuse-single-qubit-unitary-runspass for fusing compile-time single-qubit unitary runs via Euler resynthesis (#1672) (@simon1hofmann, @burgholzer) - ✨ Add a
quantum-loop-unrollpass for unrolling for-loop operations containing quantum operations (#1718) (@MatthiasReumann) - ✨ Add a
hadamard-liftingpass for lifting Hadamard gates above Pauli gates (#1605) (@lirem101, @burgholzer) - ✨ Add a
merge-single-qubit-rotation-gatespass for merging consecutive fixed and parameterized single-qubit gates using quaternions with global-phase correction (#1407, #1674, #2002, #2038) (@J4MMlE, @denialhaag, @MatthiasReumann, @simon1hofmann) - ✨ Add conversions between
jeffand QCO (#1479, #1548, #1565, #1637, #1676, #1706, #1776, #1836, #1934, #2000) (@denialhaag, @burgholzer) - ✨ Add a
place-and-routepass for mapping scalar- and tensor-allocated circuits to compiler-target topologies while preserving target site IDs and materializing routing workspace on demand (#1537, #1547, #1568, #1581, #1583, #1588, #1600, #1664, #1709, #1716, #1748, #1805, #1870, #1904, #1911, #1951, #1997, #2016) (@MatthiasReumann, @burgholzer) - ✨ Add a pass for qubit reuse in quantum programs, as well as related auxiliary passes and patterns (#1705, #1755, #1756, #1923, #1924) (@DRovara, @burgholzer)
- ✨ Add initial infrastructure for new QC and QCO MLIR dialects (#1264, #1330, #1402, #1428, #1430, #1436, #1443, #1446, #1464, #1465, #1470, #1471, #1472, #1474, #1475, #1506, #1510, #1513, #1521, #1542, #1548, #1550, #1554, #1567, #1569, #1570, #1572, #1573, #1580, #1602, #1603, #1620, #1623, #1626, #1627, #1635, #1638, #1673, #1675, #1700, #1717, #1728, #1730, #1749, #1751, #1762, #1765, #1780, #1781, #1782, #1806, #1807, #1815, #1808, #1824, #1869, #1872, #1886, #1914, #1925, #1927, #1935, #1936, #1938, #1975, #1976, #2006, #2014, #2017, #2026, #2028) (@burgholzer, @denialhaag, @taminob, @DRovara, @li-mingbao, @Ectras, @MatthiasReumann, @simon1hofmann, @J4MMlE)
- 🛡️ Isolate DDSIM QIR job execution and restrict statevector extraction to
terminal
irreversibleregions of Base-profile programs (#2036) (@burgholzer) - 💥 Update the QIR runner for QIR 2.1 entry points and resource management, with entry-point selection and reproducible multi-shot execution (#2035) (@burgholzer)
- 🚀 Reduce ZX diagram growth for multi-controlled X gates with an exact ancilla-free quadratic decomposition (#1984) (@burgholzer)
- 💥 Require LLVM/MLIR and QIR support in every MQT Core build and remove the corresponding build options (#1953) (@burgholzer)
- ⬆️ Require LLVM 22.1 for C++ library builds (#1549) (@burgholzer, @denialhaag)
- 📦 Build MLIR by default for C++ library builds (#1356) (@burgholzer, @denialhaag)
- 🔥 Remove the density matrix support from the MQT Core DD package (#1466) (@burgholzer)
- 🔥 Remove
datastructures(ds) (sub)library from MQT Core (#1458) (@burgholzer)
3.8.0 - 2026-07-30
If you are upgrading: please see UPGRADING.md.
- ✨ 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)
- ⬆️ Raise the minimum supported QDMI version to 1.3.2 (#1897) (@burgholzer)
- 🔥 Replace the unstable C++
Driver::addDynamicDeviceLibraryand Pythonadd_dynamic_device_libraryAPIs with definition registration and stable-ID opening (#1912) (@burgholzer)
- 🐛 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)
3.7.0 - 2026-07-09
If you are upgrading: please see UPGRADING.md.
- ✨ 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)
- ⬆️ 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)
- 📝 Remove support for generating LaTeX documentation (#1828) (@denialhaag)
- 🐛 Fix invalid
prop_typeforQDMI_DEVICE_PROPERTY_COUPLINGMAPin QDMI SC Device (#1842) (@MatthiasReumann)
3.6.1 - 2026-05-20
- 🚸 Improve native gate support for the Qiskit-to-OpenQASM3 conversion in the QDMI-Qiskit interface (#1719) (@burgholzer)
- 🏁 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.
- 🚸 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)
- ♻️ Build all built-in QDMI devices as shared libraries (#1694) (@burgholzer)
- ⬆️ Update minimum supported Qiskit version to 1.1.0 (#1694) (@burgholzer)
- 🐛 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)
- 🔥 Remove shared library wrappers for QDMI devices (#1694) (@burgholzer)
3.5.1 - 2026-04-23
If you are upgrading: please see UPGRADING.md.
- 🐛 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.
- ✨ Add support for multi-controlled gates to ZX package (#1380) (@keefehuang, @denialhaag)
- ✨ Add Sampler and Estimator primitives to the QDMI-Qiskit interface (#1507) (@marcelwa)
- ⬆️ Update
nanobindto version 2.12.0 (#1528) - ⬆️ Update QDMI to version 1.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
- ⬆️ 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)
- 🔥 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.
- ✨ 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)
- 📦🏁 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)
- 🔧 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)
- 🔥 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
If you are upgrading: please see UPGRADING.md.
- 🐍 Start building CPython 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.