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¶
Added¶
🚸 Add typed stable-ID construction for Qiskit backends and compiler targets, fluent Qiskit primitives, and lazy provider discovery (#2084) (@burgholzer)
🧪 Test static Slurm license admission and QDMI execution with DDSIM and SC, and document the cluster setup (#2043) (@burgholzer)
✨ Add C++ and Python adapters that open the QDMI device named by one local Slurm license environment value (#2025) (@burgholzer)
✨ Add an
unroll-modifierspass for unrolling multi-operation modifiers (#2015) (@denialhaag, @burgholzer)✨ Add Qiskit circuit import and export to the compiler collection (#2031) (@burgholzer)
✨ 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, #2049) (@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, #2066) (@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, #2018, #2105) (@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, #2060) (@MatthiasReumann, @burgholzer)✨ Add a pass for qubit reuse in quantum programs, as well as related auxiliary passes and patterns (#1705, #1755, #1756, #1923, #1924, #2039) (@DRovara, @burgholzer, @simon1hofmann)
✨ 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, #2015, #2017, #2026, #2028, #2058) (@burgholzer, @denialhaag, @taminob, @DRovara, @li-mingbao, @Ectras, @MatthiasReumann, @simon1hofmann, @J4MMlE)
Changed¶
💥 Prune dead and misleading CoreIR APIs, including renaming the non-garbage logical output count to
getNoutputQubits()andnum_output_qubits(#2112) (@simon1hofmann)♻️ 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)💥 Replace the MQT-specific QDMI primitive
optionsmappings with explicit shot and precision defaults (#2084) (@burgholzer)💥 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)⬆️ Update
nanobindto version 2.14.0 (#2073) (@denialhaag)🛡️ 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)
💥 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)
Removed¶
💥 Remove QDMI device configuration through
[tool.qdmi]inpyproject.tomland the vendored toml++ header (#2116) (@denialhaag)💥 Remove the FoMaC compatibility name from the C++ and Python QDMI APIs. Use the
qdmiC++ namespace, headers, libraries, and CMake targets; themqt.core.qdmiandmqt.core.na.qdmiPython modules; and the module-level Python driver functions (#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.🔥 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.
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)
3.7.0 - 2026-07-09¶
If you are upgrading: please see UPGRADING.md.
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)
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 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¶
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¶
🐍 Start building CPython 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.