⬆️🐍 Update dependency mqt-core to v4 - #558
Open
renovate[bot] wants to merge 1 commit into
Open
renovate[bot] wants to merge 1 commit into
renovate[bot] wants to merge 1 commit into
Conversation
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
>=3.8,<4→>=4,<5Release Notes
munich-quantum-toolkit/core (mqt-core)
v4.0.0Compare Source
MQT Core 4: a compiler foundation built on MLIR and LLVM
MQT Core 4 is a major architectural release centered on the
MQT Compiler Collection, a quantum-classical compilation framework built on
MLIR and LLVM. It replaces the classic circuit representation with a
compiler infrastructure that connects program import, optimization, hardware
mapping, program exchange, and execution through C++, Python, and
mqt-cc.The new foundation makes quantum operations and classical computation part of
the same structured program. Quantum dialects work with MLIR's classical
arithmetic, functions, and control flow, so the compiler can represent loops,
reusable functions, and measurement feedback throughout supported pipelines.
The central changes are:
frontend interoperability; QCO uses linear quantum values for transformations.
QTensor and CBit represent quantum and classical registers. Typed programs,
builders, and verifiers expose this structure to compiler users and
developers.
inspect intermediate representations, compose optimization passes, synthesize
gates, and place and route programs for a device's operations and topology.
Python, C++, and the command-line driver use the same compiler infrastructure.
jeff or emit OpenQASM and QIR. QIR lowering produces LLVM text or bitcode for
Base and Adaptive profiles; DDSIM uses LLVM JIT compilation and the DD runtime
to execute supported QIR through QDMI. QCO also supports direct DD simulation,
sampling, and unitary construction.
device-directed compilation, and six executable tutorials connect program
construction to results. Python wheels include the compiler and local
simulator; source builds enable the LLVM/MLIR compiler by default.
Upgrading from v3 requires an explicit migration. Classic circuit APIs,
including
QuantumComputation, are removed. The low-level DD and QDMI librariesremain available. Start with the v3-to-v4 upgrade guide for
the new program model, migration paths, API replacements, and build changes
relative to v3.10.0. The entries below retain the contributing PRs and authors.
Added
Compiler APIs and representations
✨ Introduce the MLIR/LLVM-based MQT Compiler Collection with typed QC, QCO,
OpenQASM, jeff, and QIR programs; shared C++ and Python compilation APIs;
inspection methods; and the
mqt-ccdriver. ([#1264], [#1470], [#1471],[#1815], [#1914], [#2149], [#2343], [#2519]) ([@burgholzer],
[@denialhaag], [@simon1hofmann], [@taminob])
✨ Add QC/QCO program builders with implicit locations, tracked qubits and
tensors, register names, gate matrices, and checked linear quantum values.
Preserve caller-owned inputs and reject invalid programs at checked
boundaries. ([#1402], [#1428], [#1430], [#1443], [#1446], [#1465], [#1472],
[#1474], [#1510], [#1542], [#1580], [#1602], [#1620], [#1623], [#1626],
[#1627], [#1728], [#1730], [#1781], [#1869], [#1872], [#2014], [#2017],
[#2136], [#2213], [#2220], [#2266], [#2295], [#2296], [#2300], [#2514])
([@burgholzer], [@denialhaag], [@li-mingbao],
[@MatthiasReumann], [@simon1hofmann], [@taminob])
✨ Represent classical registers and structured
if,for,while, andswitch control flow across QC and QCO, including
break,continue, wideregister arithmetic, and reusable quantum functions with tracked wire
correspondence. ([#1506], [#1638], [#1700], [#1717], [#1749], [#1806],
[#1808], [#1824], [#1925], [#1927], [#1935], [#1936], [#1938], [#1975],
[#1976], [#2026], [#2158], [#2181], [#2193], [#2194], [#2297], [#2307],
[#2308], [#2320], [#2322], [#2336], [#2344], [#2357], [#2369], [#2443],
[#2448], [#2464]) ([@burgholzer], [@denialhaag], [@DRovara],
[@li-mingbao], [@MatthiasReumann], [@simon1hofmann])
✨ Canonicalize quantum gates, modifiers, and static qubits while preserving
phase, wire correspondence, and side effects. Bound angle arithmetic and
reduce repeated traversal and validation work. ([#1330], [#1426], [#1436],
[#1464], [#1475], [#1550], [#1554], [#1567], [#1569], [#1603], [#1751],
[#1762], [#1782], [#1807], [#1985], [#2041], [#2210], [#2281], [#2282],
[#2290], [#2291], [#2293], [#2435], [#2477], [#2484], [#2485], [#2486],
[#2492], [#2502], [#2505], [#2516], [#2524]) ([@burgholzer],
[@denialhaag], [@DRovara], [@Ectras], [@J4MMlE],
[@simon1hofmann], [@taminob])
Compilation for devices
✨ Compile for immutable device targets through C++, Python, and
mqt-cc.Match ordered operation availability, native gates, and payload capabilities;
legalize supported control flow; and reuse compiled payloads for explicit
device submission. ([#1687], [#1993], [#1999], [#2049], [#2162], [#2211],
[#2215], [#2218], [#2219], [#2285], [#2323], [#2495], [#2497], [#2506],
[#2510]) ([@burgholzer], [@denialhaag], [@MatthiasReumann],
[@simon1hofmann])
✨ Place and route QCO programs across sparse and directional device
topologies, preserving classical feed-forward and quantum wire mappings
through branches, loops, and switches. ([#1537], [#1547], [#1581], [#1583],
[#1588], [#1600], [#1664], [#1709], [#1716], [#1748], [#1805], [#1870],
[#1904], [#1911], [#1951], [#1956], [#1997], [#2004], [#2007], [#2016],
[#2060], [#2119], [#2179], [#2184], [#2185], [#2205], [#2240], [#2301],
[#2316], [#2351], [#2436], [#2489]) ([@burgholzer], [@denialhaag],
[@MatthiasReumann], [@rturrado], [@simon1hofmann])
✨ Evaluate multiple initial layouts, including identity and greedy
candidates, with CPU-based default trial counts. Reuse routing search storage
and avoid repeated program-graph and liveness analysis. ([#1568], [#1574],
[#1930], [#2180], [#2488], [#2499], [#2500], [#2517], [#2535])
([@burgholzer], [@MatthiasReumann], [@simon1hofmann])
Optimization and synthesis
✨ Optimize single-qubit runs with Hadamard lifting, quaternion-based rotation
merging, Euler synthesis, and fusion of constant or parameterized unitaries.
([#1407], [#1605], [#1672], [#1674], [#2002], [#2038], [#2228], [#2478])
([@burgholzer], [@denialhaag], [@J4MMlE], [@lirem101],
[@MatthiasReumann], [@simon1hofmann], [@taminob])
✨ Decompose multi-controlled X, Z, phase, Pauli rotations, and SWAP
operations. Fuse two-qubit unitaries and synthesize target-native entanglers,
including RXX, RYY, RZX, RZZ, iSWAP, ECR, and optimal square-root iSWAP
circuits. ([#1774], [#1802], [#1803], [#1809], [#1810], [#1814], [#1832],
[#1850], [#1865], [#1961], [#1996], [#1998], [#2001], [#2444], [#2467],
[#2468], [#2478], [#2507], [#2531]) ([@burgholzer], [@denialhaag],
[@simon1hofmann])
✨ Normalize global phases and expand multi-operation quantum modifiers while
preserving full-unitary semantics. ([#1986], [#1995], [#2006], [#2015],
[#2189]) ([@burgholzer], [@denialhaag], [@simon1hofmann])
✨ Add measurement lifting, classical-control replacement, explicit dead-gate
elimination, quantum-loop unrolling, qubit reuse, and Pauli twirling.
([#1705], [#1718], [#1755], [#1756], [#1923], [#1924], [#2039], [#2118],
[#2216], [#2224]) ([@burgholzer], [@denialhaag], [@DRovara],
[@MatthiasReumann], [@simon1hofmann])
Program import and exchange
✨ Import OpenQASM 2 and 3 into QC and emit OpenQASM 3 with reusable gates,
structured control flow, fixed-width angles, affine qubit indices, and
dynamically bounded loops. Diagnose unsupported inputs and bound frontend and
export resource use. ([#1780], [#1910], [#1987], [#1994], [#2003], [#2050],
[#2169], [#2203], [#2304], [#2338], [#2456], [#2465], [#2482], [#2483],
[#2515]) ([@burgholzer], [@denialhaag], [@J4MMlE],
[@simon1hofmann])
✨ Import and export Qiskit circuits, reusable custom gates, captured
classical expressions, and structured control flow. Preserve measurements,
wide register comparisons, and target-aware gate definitions. ([#2031],
[#2133], [#2140], [#2175], [#2176], [#2223], [#2342], [#2348], [#2398],
[#2439], [#2452], [#2461], [#2508]) ([@burgholzer], [@denialhaag],
[@MatthiasReumann], [@simon1hofmann])
✨ Preserve symbolic Qiskit parameters and parameter-vector provenance through
supported compiler conversions. ([#2150], [#2178]) ([@burgholzer],
[@simon1hofmann])
✨ Exchange jeff programs as bytes or files, preserving supported gates,
phase, scalar control-flow state, arrays, and reusable functions. Use native
integer arithmetic and report recoverable deserialization failures. ([#1479],
[#1548], [#1565], [#1637], [#1676], [#1706], [#1776], [#1836], [#1934],
[#1939], [#2000], [#2018], [#2105], [#2212], [#2339], [#2451], [#2457],
[#2525]) ([@burgholzer], [@denialhaag], [@simon1hofmann])
✨ Generate QIR 2.1 Base and Adaptive profiles as LLVM text or bitcode. Derive
capability and resource metadata, lower reusable functions and classical
computation, preserve output order, and reject unsupported Base control flow
during conversion. ([#1446], [#1513], [#1521], [#1548], [#1567], [#1569],
[#1570], [#1572], [#1580], [#1620], [#1624], [#1626], [#1648], [#1710],
[#1751], [#1787], [#1815], [#1823], [#1933], [#1978], [#1979], [#2026],
[#2030], [#2066], [#2217], [#2294], [#2302], [#2340], [#2446], [#2447],
[#2449], [#2463], [#2526]) ([@burgholzer], [@denialhaag],
[@li-mingbao], [@MatthiasReumann], [@simon1hofmann])
Decision diagrams and execution
✨ Construct functionality, simulate, and sample QCO programs through C++ and
Python, with dense-array helpers for supported compiler inputs. Support
classical arithmetic, structured control flow, dynamic quantum data, and
statically sized entry-block registers for unitary construction. ([#1915],
[#1973], [#2077], [#2078], [#2079], [#2334], [#2455], [#2474], [#2518],
[#2526]) ([@burgholzer], [@denialhaag], [@simon1hofmann])
✨ Return ordered DDSIM QIR shots and matching histograms, including
variable-length recorded outputs. ([#2368]) ([@burgholzer])
✨ Extract statevectors from eligible Adaptive QIR with classical control
flow, dynamic allocations, and direct helpers. Retain uncollapsed states after
eligible OpenQASM and QIR terminal sampling, with lazy dense and sparse result
queries. ([#2491], [#2494], [#2512]) ([@burgholzer])
✨ Capture framed, typed QIR output records through DDSIM with
custom2=Trueand result
CUSTOM1, alongside ordinary shots and counts. ([#2526])([@burgholzer], [@simon1hofmann])
Structured benchmarks
analytic references, deterministic manifests, and C++, Python, and CLI
interfaces. Families cover BV, GHZ, Grover, QFT, QPE, multiplexers,
teleportation, QFT adders, modular multiplication, and repeat-until-success
programs. ([#2135], [#2299], [#2315], [#2324], [#2337], [#2380], [#2402],
[#2404], [#2409], [#2410], [#2493]) ([@burgholzer], [@denialhaag])
Documentation and development
📝 Connect compilation, execution, device access, and program exchange in the
user guide. Add six executable compiler tutorials and checked Python/C++
examples with downloadable notebooks. ([#1555], [#1635], [#1773], [#1899],
[#1959], [#2058], [#2165], [#2462], [#2503], [#2509], [#2526])
([@burgholzer], [@denialhaag], [@MatthiasReumann],
[@simon1hofmann], [@ystade])
📝 Consolidate development policy and agent guidance, including compiler
contracts, terminology, validation, and reproducible benchmarks. ([#1905],
[#1907], [#1908], [#1909], [#1960], [#2072], [#2120], [#2128], [#2256],
[#2272], [#2354], [#2490], [#2496], [#2498], [#2501], [#2523], [#2526])
([@burgholzer], [@denialhaag], [@simon1hofmann])
🐳 Add a dev container for local development. ([#1786]) ([@denialhaag])
Changed
Builds and supported configurations
🔧 Build the LLVM/MLIR 23.1.1 compiler infrastructure and DDSIM device by
default. Support LLVM builds without exceptions or RTTI, and use
BUILD_MQT_CORE_MLIR=OFFfor DD/QDMI builds that omit the compiler and DDSIM.([#1356], [#1549], [#1953], [#2125], [#2127], [#2284], [#2298], [#2538])
([@burgholzer], [@denialhaag], [@simon1hofmann])
💥 Require CMake 3.28 or newer for source builds and embedded projects, with
native dependency exclusions and system include handling. ([#2421])
([@burgholzer])
⚡ Reduce build, documentation, and test-discovery overhead. Share Ninja
presets and generate C++ lint prerequisites without a full build while
honoring disabled interprocedural optimization. ([#1944], [#1954], [#1988],
[#2047], [#2075], [#2083], [#2426], [#2459], [#2470]) ([@burgholzer],
[@denialhaag])
📦 Use
vcs-versioningand standard dynamic metadata for SCM-derived Pythonpackage versions, with lower bounds for build dependencies. ([#1544], [#2065],
[#2145], [#2163]) ([@burgholzer], [@denialhaag])
⬆️ Update clang-tidy to version 23 and adapt the C++ sources to its
diagnostics. Format TableGen files and align LLVM include and namespace
conventions. ([#1573], [#1673], [#1675], [#1765], [#2028], [#2328])
([@burgholzer], [@denialhaag], [@simon1hofmann])
Runtime and client behavior
💥 Align QIR execution with QIR 2.1 runtime and QIS signatures, isolated
per-job state, deterministic seeded sampling, and checked state extraction.
Optimize eligible terminal sampling and output preparation; verify Base output
records against QIR-Runner. ([#2034], [#2035], [#2036], [#2044], [#2466],
[#2513]) ([@burgholzer])
⚡ Reduce QDMI discovery, result-decoding, and Slurm overhead. Release the
Python GIL during native QDMI calls and avoid repeated capability and result
queries. ([#2440], [#2460], [#2472], [#2475], [#2481], [#2511])
([@burgholzer])
⚡ Reduce DD cache clearing, element lookup, export, and allocation overhead,
and avoid repeated QC/QCO conversion work. ([#2441], [#2453], [#2473],
[#2474], [#2479]) ([@burgholzer])
Fixed
Decision diagrams
🐛 Correct DD cache invalidation after garbage collection, compressed-matrix
entries, partial traces, Kronecker products, numeric-table reuse, and logical
Python vector indexing. Reject malformed paths and ragged dense matrices.
([#2441], [#2453], [#2479]) ([@burgholzer])
🐛 Use deterministic, collision-free DOT node IDs, define signed
complex-weight hashing, and preserve real-number collection flags during
relinking. ([#2518]) ([@burgholzer])
Device access
parameters and decoded results; and propagate execution failures through SDK
integrations. ([#2440], [#2454], [#2458], [#2511], [#2512])
([@burgholzer])
Removed
💥 Remove
qc::QuantumComputation,MQT::CoreIR,MQT::CoreQASM, classicPython circuit APIs, and circuit-taking DD helpers. Use compiler-backed QC/QCO
APIs or remain on the v3 release series. ([#2054], [#2288])
([@burgholzer], [@simon1hofmann])
💥 Remove the standalone QIR runner and make the QIR runtime and JIT internal
DDSIM implementation details. Execute QIR through QDMI. ([#2246])
([@burgholzer], [@denialhaag])
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.