From c726f2cb7288ed24afb99b82242f7e6ceec28dac Mon Sep 17 00:00:00 2001 From: Simon Hofmann Date: Mon, 16 Mar 2026 13:16:19 +0100 Subject: [PATCH 01/11] =?UTF-8?q?=E2=9C=A8=20Canonicalize=20equivalent=20`?= =?UTF-8?q?qc.static`=20operations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mlir/include/mlir/Compiler/CompilerPipeline.h | 4 ++-- mlir/lib/Compiler/CompilerPipeline.cpp | 4 +++- mlir/lib/Support/Passes.cpp | 1 + mlir/unittests/Compiler/test_compiler_pipeline.cpp | 5 +++++ mlir/unittests/Dialect/QC/IR/test_qc_ir.cpp | 3 +++ mlir/unittests/programs/qc_programs.cpp | 10 ++++++++++ mlir/unittests/programs/qc_programs.h | 3 +++ 7 files changed, 27 insertions(+), 3 deletions(-) diff --git a/mlir/include/mlir/Compiler/CompilerPipeline.h b/mlir/include/mlir/Compiler/CompilerPipeline.h index ee7fbc9adf..ec7473a8cf 100644 --- a/mlir/include/mlir/Compiler/CompilerPipeline.h +++ b/mlir/include/mlir/Compiler/CompilerPipeline.h @@ -115,8 +115,8 @@ class QuantumCompilerPipeline { * @brief Add canonicalization and cleanup passes * * @details - * Always adds the standard MLIR canonicalization pass followed by dead - * value removal. + * Always adds the standard MLIR canonicalization pass followed by common + * sub-expression elimination and dead value removal. */ static void addCleanupPasses(PassManager& pm); diff --git a/mlir/lib/Compiler/CompilerPipeline.cpp b/mlir/lib/Compiler/CompilerPipeline.cpp index 18040d7720..119e343755 100644 --- a/mlir/lib/Compiler/CompilerPipeline.cpp +++ b/mlir/lib/Compiler/CompilerPipeline.cpp @@ -46,8 +46,10 @@ static void prettyPrintStage(ModuleOp module, const llvm::StringRef stageName, } void QuantumCompilerPipeline::addCleanupPasses(PassManager& pm) { - // Always run canonicalization and dead value removal + // Always run canonicalization, common sub-expression elimination, and dead + // value removal pm.addPass(createCanonicalizerPass()); + pm.addPass(createCSEPass()); pm.addPass(createRemoveDeadValuesPass()); } diff --git a/mlir/lib/Support/Passes.cpp b/mlir/lib/Support/Passes.cpp index 242d48b8bf..5e998761bc 100644 --- a/mlir/lib/Support/Passes.cpp +++ b/mlir/lib/Support/Passes.cpp @@ -20,6 +20,7 @@ using namespace mlir; void runCanonicalizationPasses(ModuleOp module) { PassManager pm(module.getContext()); pm.addPass(createCanonicalizerPass()); + pm.addPass(createCSEPass()); pm.addPass(createRemoveDeadValuesPass()); if (pm.run(module).failed()) { llvm::errs() << "Failed to run canonicalization passes.\n"; diff --git a/mlir/unittests/Compiler/test_compiler_pipeline.cpp b/mlir/unittests/Compiler/test_compiler_pipeline.cpp index 184bb7d677..62f2c388fc 100644 --- a/mlir/unittests/Compiler/test_compiler_pipeline.cpp +++ b/mlir/unittests/Compiler/test_compiler_pipeline.cpp @@ -198,6 +198,11 @@ INSTANTIATE_TEST_SUITE_P( MQT_NAMED_BUILDER(mlir::qc::staticQubitsWithOps), MQT_NAMED_BUILDER(mlir::qc::staticQubitsWithOps), MQT_NAMED_BUILDER(mlir::qir::staticQubitsWithOps), false}, + CompilerPipelineTestCase{ + "StaticQubitsWithDuplicates", nullptr, + MQT_NAMED_BUILDER(mlir::qc::staticQubitsWithDuplicates), + MQT_NAMED_BUILDER(mlir::qc::staticQubitsWithOps), + MQT_NAMED_BUILDER(mlir::qir::staticQubitsWithOps), false}, CompilerPipelineTestCase{ "StaticQubitsWithParametricOps", nullptr, MQT_NAMED_BUILDER(mlir::qc::staticQubitsWithParametricOps), diff --git a/mlir/unittests/Dialect/QC/IR/test_qc_ir.cpp b/mlir/unittests/Dialect/QC/IR/test_qc_ir.cpp index 2a58f028e2..5f1094298e 100644 --- a/mlir/unittests/Dialect/QC/IR/test_qc_ir.cpp +++ b/mlir/unittests/Dialect/QC/IR/test_qc_ir.cpp @@ -902,6 +902,9 @@ INSTANTIATE_TEST_SUITE_P( QCTestCase{"StaticQubitsWithOps", MQT_NAMED_BUILDER(staticQubitsWithOps), MQT_NAMED_BUILDER(staticQubitsWithOps)}, + QCTestCase{"StaticQubitsWithDuplicates", + MQT_NAMED_BUILDER(staticQubitsWithDuplicates), + MQT_NAMED_BUILDER(staticQubitsWithOps)}, QCTestCase{"StaticQubitsWithParametricOps", MQT_NAMED_BUILDER(staticQubitsWithParametricOps), MQT_NAMED_BUILDER(staticQubitsWithParametricOps)}, diff --git a/mlir/unittests/programs/qc_programs.cpp b/mlir/unittests/programs/qc_programs.cpp index 7e6acc8b90..1c8baf33b1 100644 --- a/mlir/unittests/programs/qc_programs.cpp +++ b/mlir/unittests/programs/qc_programs.cpp @@ -41,6 +41,16 @@ void staticQubitsWithOps(QCProgramBuilder& b) { b.h(q1); } +void staticQubitsWithDuplicates(QCProgramBuilder& b) { + const auto q0a = b.staticQubit(0); + const auto q1a = b.staticQubit(1); + const auto q0b = b.staticQubit(0); + const auto q1b = b.staticQubit(1); + + b.h(q0a); + b.h(q1a); +} + void staticQubitsWithParametricOps(QCProgramBuilder& b) { auto q0 = b.staticQubit(0); auto q1 = b.staticQubit(1); diff --git a/mlir/unittests/programs/qc_programs.h b/mlir/unittests/programs/qc_programs.h index e48c1c4404..7b8689a08a 100644 --- a/mlir/unittests/programs/qc_programs.h +++ b/mlir/unittests/programs/qc_programs.h @@ -36,6 +36,9 @@ void staticQubits(QCProgramBuilder& b); /// Allocates two static qubits and applies operations. void staticQubitsWithOps(QCProgramBuilder& b); +/// Allocates duplicate static qubits for the same indices and applies gates. +void staticQubitsWithDuplicates(QCProgramBuilder& b); + /// Allocates two static qubits and applies parametric gates. void staticQubitsWithParametricOps(QCProgramBuilder& b); From 0939091e0dce5144a1d470521eb6d8d8bab80089 Mon Sep 17 00:00:00 2001 From: Simon Hofmann Date: Mon, 16 Mar 2026 13:54:18 +0100 Subject: [PATCH 02/11] =?UTF-8?q?=F0=9F=93=9D=20Update=20CHANGELOG=20to=20?= =?UTF-8?q?include=20PR=20#1567?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3b180bc22b..21f6ebd1e0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,7 +15,7 @@ This project adheres to [Semantic Versioning], with the exception that minor rel - ✨ Add conversions between Jeff and QCO ([#1479], [#1548], [#1565]) ([**@denialhaag**]) - ✨ Add a `place-and-route` pass for mapping circuits to architectures with restricted topologies ([#1537], [#1547], [#1568], [#1581], [#1583], [#1588]) ([**@MatthiasReumann**]) - ✨ 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], [#1569], [#1570], [#1572], [#1573]) + ([#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]) ([**@burgholzer**], [**@denialhaag**], [**@taminob**], [**@DRovara**], [**@li-mingbao**], [**@Ectras**], [**@MatthiasReumann**], [**@simon1hofmann**]) ### Changed @@ -335,6 +335,7 @@ _📚 Refer to the [GitHub Release Notes](https://github.com/munich-quantum-tool +<<<<<<< HEAD [#1596]: https://github.com/munich-quantum-toolkit/core/pull/1596 [#1593]: https://github.com/munich-quantum-toolkit/core/pull/1593 [#1588]: https://github.com/munich-quantum-toolkit/core/pull/1588 @@ -348,6 +349,9 @@ _📚 Refer to the [GitHub Release Notes](https://github.com/munich-quantum-tool [#1568]: https://github.com/munich-quantum-toolkit/core/pull/1568 [#1565]: https://github.com/munich-quantum-toolkit/core/pull/1565 [#1564]: https://github.com/munich-quantum-toolkit/core/pull/1564 +======= +[#1567]: https://github.com/munich-quantum-toolkit/core/pull/1567 +>>>>>>> 284ce487 (📝 Update CHANGELOG to include PR #1567) [#1554]: https://github.com/munich-quantum-toolkit/core/pull/1554 [#1550]: https://github.com/munich-quantum-toolkit/core/pull/1550 [#1549]: https://github.com/munich-quantum-toolkit/core/pull/1549 From 54c40ae1bfbd5ccc7867809d0887ee0aa8af77a8 Mon Sep 17 00:00:00 2001 From: Simon Hofmann Date: Mon, 16 Mar 2026 18:11:43 +0100 Subject: [PATCH 03/11] =?UTF-8?q?=F0=9F=94=A7=20Update=20compiler=20test?= =?UTF-8?q?=20cases=20and=20QIR/QC=20program=20implementations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mlir/unittests/Compiler/test_compiler_pipeline.cpp | 8 ++++---- mlir/unittests/programs/qc_programs.cpp | 3 +++ mlir/unittests/programs/qir_programs.cpp | 1 + 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/mlir/unittests/Compiler/test_compiler_pipeline.cpp b/mlir/unittests/Compiler/test_compiler_pipeline.cpp index 62f2c388fc..03b5c117e0 100644 --- a/mlir/unittests/Compiler/test_compiler_pipeline.cpp +++ b/mlir/unittests/Compiler/test_compiler_pipeline.cpp @@ -189,10 +189,10 @@ TEST_P(CompilerPipelineTest, EndToEndPipeline) { INSTANTIATE_TEST_SUITE_P( QuantumComputationPipelineProgramsTest, CompilerPipelineTest, testing::Values( - CompilerPipelineTestCase{ - "StaticQubits", nullptr, MQT_NAMED_BUILDER(mlir::qc::staticQubits), - MQT_NAMED_BUILDER(mlir::qc::staticQubits), - MQT_NAMED_BUILDER(mlir::qir::staticQubits), false}, + CompilerPipelineTestCase{"StaticQubits", nullptr, + MQT_NAMED_BUILDER(mlir::qc::staticQubits), + MQT_NAMED_BUILDER(mlir::qc::emptyQC), + MQT_NAMED_BUILDER(mlir::qir::emptyQIR), false}, CompilerPipelineTestCase{ "StaticQubitsWithOps", nullptr, MQT_NAMED_BUILDER(mlir::qc::staticQubitsWithOps), diff --git a/mlir/unittests/programs/qc_programs.cpp b/mlir/unittests/programs/qc_programs.cpp index 1c8baf33b1..29f6c973c4 100644 --- a/mlir/unittests/programs/qc_programs.cpp +++ b/mlir/unittests/programs/qc_programs.cpp @@ -37,8 +37,10 @@ void staticQubits(QCProgramBuilder& b) { void staticQubitsWithOps(QCProgramBuilder& b) { auto q0 = b.staticQubit(0); auto q1 = b.staticQubit(1); + b.h(q0); b.h(q1); + b.ctrl(q0, [&] { b.x(q1); }); } void staticQubitsWithDuplicates(QCProgramBuilder& b) { @@ -49,6 +51,7 @@ void staticQubitsWithDuplicates(QCProgramBuilder& b) { b.h(q0a); b.h(q1a); + b.ctrl(q0b, [&] { b.x(q1b); }); } void staticQubitsWithParametricOps(QCProgramBuilder& b) { diff --git a/mlir/unittests/programs/qir_programs.cpp b/mlir/unittests/programs/qir_programs.cpp index 8674715ca7..6e1904d6f1 100644 --- a/mlir/unittests/programs/qir_programs.cpp +++ b/mlir/unittests/programs/qir_programs.cpp @@ -39,6 +39,7 @@ void staticQubitsWithOps(QIRProgramBuilder& b) { auto q1 = b.staticQubit(1); b.h(q0); b.h(q1); + b.cx(q0, q1); } void staticQubitsWithParametricOps(QIRProgramBuilder& b) { From 8192c2d892d453a56c7993d7ad38b56cd38a627a Mon Sep 17 00:00:00 2001 From: Simon Hofmann Date: Mon, 16 Mar 2026 19:22:25 +0100 Subject: [PATCH 04/11] =?UTF-8?q?=F0=9F=94=A7=20Refactor=20static=20qubits?= =?UTF-8?q?=20test=20cases=20and=20implementations=20across=20QC,=20QIR,?= =?UTF-8?q?=20and=20QCO=20programs=20to=20remove=20canonical=20versions=20?= =?UTF-8?q?and=20enhance=20functionality=20with=20controlled=20operations.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mlir/unittests/Compiler/test_compiler_pipeline.cpp | 8 ++++---- mlir/unittests/Conversion/QCToQIR/test_qc_to_qir.cpp | 3 +++ mlir/unittests/Dialect/QIR/IR/test_qir_ir.cpp | 3 +++ mlir/unittests/programs/qc_programs.cpp | 8 ++++++-- mlir/unittests/programs/qc_programs.h | 7 ++++--- mlir/unittests/programs/qco_programs.cpp | 11 +++++++++-- mlir/unittests/programs/qco_programs.h | 3 ++- mlir/unittests/programs/qir_programs.cpp | 11 ++++++++++- mlir/unittests/programs/qir_programs.h | 7 ++++++- 9 files changed, 47 insertions(+), 14 deletions(-) diff --git a/mlir/unittests/Compiler/test_compiler_pipeline.cpp b/mlir/unittests/Compiler/test_compiler_pipeline.cpp index 03b5c117e0..62f2c388fc 100644 --- a/mlir/unittests/Compiler/test_compiler_pipeline.cpp +++ b/mlir/unittests/Compiler/test_compiler_pipeline.cpp @@ -189,10 +189,10 @@ TEST_P(CompilerPipelineTest, EndToEndPipeline) { INSTANTIATE_TEST_SUITE_P( QuantumComputationPipelineProgramsTest, CompilerPipelineTest, testing::Values( - CompilerPipelineTestCase{"StaticQubits", nullptr, - MQT_NAMED_BUILDER(mlir::qc::staticQubits), - MQT_NAMED_BUILDER(mlir::qc::emptyQC), - MQT_NAMED_BUILDER(mlir::qir::emptyQIR), false}, + CompilerPipelineTestCase{ + "StaticQubits", nullptr, MQT_NAMED_BUILDER(mlir::qc::staticQubits), + MQT_NAMED_BUILDER(mlir::qc::staticQubits), + MQT_NAMED_BUILDER(mlir::qir::staticQubits), false}, CompilerPipelineTestCase{ "StaticQubitsWithOps", nullptr, MQT_NAMED_BUILDER(mlir::qc::staticQubitsWithOps), diff --git a/mlir/unittests/Conversion/QCToQIR/test_qc_to_qir.cpp b/mlir/unittests/Conversion/QCToQIR/test_qc_to_qir.cpp index ef938ce4e7..3744daea4a 100644 --- a/mlir/unittests/Conversion/QCToQIR/test_qc_to_qir.cpp +++ b/mlir/unittests/Conversion/QCToQIR/test_qc_to_qir.cpp @@ -627,6 +627,9 @@ INSTANTIATE_TEST_SUITE_P( QCToQIRTestCase{"StaticQubitsWithOps", MQT_NAMED_BUILDER(qc::staticQubitsWithOps), MQT_NAMED_BUILDER(qir::staticQubitsWithOps)}, + QCToQIRTestCase{"StaticQubitsWithDuplicates", + MQT_NAMED_BUILDER(qc::staticQubitsWithDuplicates), + MQT_NAMED_BUILDER(qir::staticQubitsWithOps)}, QCToQIRTestCase{"StaticQubitsWithParametricOps", MQT_NAMED_BUILDER(qc::staticQubitsWithParametricOps), MQT_NAMED_BUILDER(qir::staticQubitsWithParametricOps)}, diff --git a/mlir/unittests/Dialect/QIR/IR/test_qir_ir.cpp b/mlir/unittests/Dialect/QIR/IR/test_qir_ir.cpp index 66f063b069..5cf5a50ba3 100644 --- a/mlir/unittests/Dialect/QIR/IR/test_qir_ir.cpp +++ b/mlir/unittests/Dialect/QIR/IR/test_qir_ir.cpp @@ -537,6 +537,9 @@ INSTANTIATE_TEST_SUITE_P( QIRTestCase{"StaticQubitsWithOps", MQT_NAMED_BUILDER(staticQubitsWithOps), MQT_NAMED_BUILDER(staticQubitsWithOps)}, + QIRTestCase{"StaticQubitsWithDuplicates", + MQT_NAMED_BUILDER(staticQubitsWithDuplicates), + MQT_NAMED_BUILDER(staticQubitsWithOps)}, QIRTestCase{"StaticQubitsWithParametricOps", MQT_NAMED_BUILDER(staticQubitsWithParametricOps), MQT_NAMED_BUILDER(staticQubitsWithParametricOps)}, diff --git a/mlir/unittests/programs/qc_programs.cpp b/mlir/unittests/programs/qc_programs.cpp index 29f6c973c4..452b26d45e 100644 --- a/mlir/unittests/programs/qc_programs.cpp +++ b/mlir/unittests/programs/qc_programs.cpp @@ -30,8 +30,12 @@ void allocMultipleQubitRegisters(QCProgramBuilder& b) { void allocLargeRegister(QCProgramBuilder& b) { b.allocQubitRegister(100); } void staticQubits(QCProgramBuilder& b) { - b.staticQubit(0); - b.staticQubit(1); + const auto q0 = b.staticQubit(0); + const auto q1 = b.staticQubit(1); + + b.h(q0); + b.h(q1); + b.ctrl(q0, [&] { b.x(q1); }); } void staticQubitsWithOps(QCProgramBuilder& b) { diff --git a/mlir/unittests/programs/qc_programs.h b/mlir/unittests/programs/qc_programs.h index 7b8689a08a..e95e0bc24c 100644 --- a/mlir/unittests/programs/qc_programs.h +++ b/mlir/unittests/programs/qc_programs.h @@ -30,13 +30,15 @@ void allocMultipleQubitRegisters(QCProgramBuilder& b); /// Allocates a large qubit register. void allocLargeRegister(QCProgramBuilder& b); -/// Allocates two inline qubits. +/// Allocates two inline qubits and applies H on both and a controlled-X between +/// them. void staticQubits(QCProgramBuilder& b); /// Allocates two static qubits and applies operations. void staticQubitsWithOps(QCProgramBuilder& b); -/// Allocates duplicate static qubits for the same indices and applies gates. +/// Allocates duplicate static qubits and applies H on both and a controlled-X +/// between them. void staticQubitsWithDuplicates(QCProgramBuilder& b); /// Allocates two static qubits and applies parametric gates. @@ -50,7 +52,6 @@ void staticQubitsWithCtrl(QCProgramBuilder& b); /// Allocates a static qubit and applies an inverse modifier. void staticQubitsWithInv(QCProgramBuilder& b); - /// Allocates and explicitly deallocates a single qubit. void allocDeallocPair(QCProgramBuilder& b); diff --git a/mlir/unittests/programs/qco_programs.cpp b/mlir/unittests/programs/qco_programs.cpp index e7695e3cac..a7a6fecfb3 100644 --- a/mlir/unittests/programs/qco_programs.cpp +++ b/mlir/unittests/programs/qco_programs.cpp @@ -34,8 +34,15 @@ void allocMultipleQubitRegisters(QCOProgramBuilder& b) { void allocLargeRegister(QCOProgramBuilder& b) { b.allocQubitRegister(100); } void staticQubits(QCOProgramBuilder& b) { - b.staticQubit(0); - b.staticQubit(1); + auto q0 = b.staticQubit(0); + auto q1 = b.staticQubit(1); + + q0 = b.h(q0); + q1 = b.h(q1); + b.ctrl({q0}, {q1}, [&](mlir::ValueRange targets) { + auto xOut = b.x(targets[0]); + return llvm::SmallVector{xOut}; + }); } void staticQubitsWithOps(QCOProgramBuilder& b) { diff --git a/mlir/unittests/programs/qco_programs.h b/mlir/unittests/programs/qco_programs.h index a14100102c..0f3184999f 100644 --- a/mlir/unittests/programs/qco_programs.h +++ b/mlir/unittests/programs/qco_programs.h @@ -30,7 +30,8 @@ void allocMultipleQubitRegisters(QCOProgramBuilder& b); /// Allocates a large qubit register. void allocLargeRegister(QCOProgramBuilder& b); -/// Allocates two inline qubits. +/// Allocates two inline qubits and applies H on both and a controlled-X between +/// them. void staticQubits(QCOProgramBuilder& b); /// Allocates two static qubits and applies operations. diff --git a/mlir/unittests/programs/qir_programs.cpp b/mlir/unittests/programs/qir_programs.cpp index 6e1904d6f1..db45c8ae54 100644 --- a/mlir/unittests/programs/qir_programs.cpp +++ b/mlir/unittests/programs/qir_programs.cpp @@ -42,6 +42,16 @@ void staticQubitsWithOps(QIRProgramBuilder& b) { b.cx(q0, q1); } +void staticQubitsWithDuplicates(QIRProgramBuilder& b) { + auto q0a = b.staticQubit(0); + auto q1a = b.staticQubit(1); + auto q0b = b.staticQubit(0); + auto q1b = b.staticQubit(1); + b.h(q0a); + b.h(q1a); + b.cx(q0b, q1b); +} + void staticQubitsWithParametricOps(QIRProgramBuilder& b) { auto q0 = b.staticQubit(0); auto q1 = b.staticQubit(1); @@ -64,7 +74,6 @@ void staticQubitsWithCtrl(QIRProgramBuilder& b) { void staticQubitsWithInv(QIRProgramBuilder& b) { auto q0 = b.staticQubit(0); b.tdg(q0); -} void singleMeasurementToSingleBit(QIRProgramBuilder& b) { auto q = b.allocQubitRegister(1); diff --git a/mlir/unittests/programs/qir_programs.h b/mlir/unittests/programs/qir_programs.h index 927a935286..d9cf3a2774 100644 --- a/mlir/unittests/programs/qir_programs.h +++ b/mlir/unittests/programs/qir_programs.h @@ -30,12 +30,17 @@ void allocMultipleQubitRegisters(QIRProgramBuilder& b); /// Allocates a large qubit register. void allocLargeRegister(QIRProgramBuilder& b); -/// Allocates two inline qubits. +/// Allocates two inline qubits and applies H on both and a controlled-X between +/// them. void staticQubits(QIRProgramBuilder& b); /// Allocates two static qubits and applies operations. void staticQubitsWithOps(QIRProgramBuilder& b); +/// Allocates duplicate static qubits and applies H on both and a controlled-X +/// between them. +void staticQubitsWithDuplicates(QIRProgramBuilder& b); + /// Allocates two static qubits and applies parametric gates. void staticQubitsWithParametricOps(QIRProgramBuilder& b); From d2d54c1b9668da1a0d879180f93a56acb226e379 Mon Sep 17 00:00:00 2001 From: Simon Hofmann Date: Mon, 16 Mar 2026 19:30:21 +0100 Subject: [PATCH 05/11] =?UTF-8?q?=F0=9F=94=A7=20Simplify=20return=20statem?= =?UTF-8?q?ent=20in=20`staticQubits`=20function.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mlir/unittests/programs/qco_programs.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/mlir/unittests/programs/qco_programs.cpp b/mlir/unittests/programs/qco_programs.cpp index a7a6fecfb3..13e7b7612f 100644 --- a/mlir/unittests/programs/qco_programs.cpp +++ b/mlir/unittests/programs/qco_programs.cpp @@ -40,8 +40,7 @@ void staticQubits(QCOProgramBuilder& b) { q0 = b.h(q0); q1 = b.h(q1); b.ctrl({q0}, {q1}, [&](mlir::ValueRange targets) { - auto xOut = b.x(targets[0]); - return llvm::SmallVector{xOut}; + return llvm::SmallVector{b.x(targets[0])}; }); } From f35301257eb9b3c9b69d6b3f5486785438e80360 Mon Sep 17 00:00:00 2001 From: Simon Hofmann Date: Wed, 1 Apr 2026 17:15:28 +0200 Subject: [PATCH 06/11] =?UTF-8?q?=F0=9F=94=A7=20Update=20static=20qubits?= =?UTF-8?q?=20test=20cases=20and=20implementations=20across=20QC,=20QIR,?= =?UTF-8?q?=20and=20QCO=20programs.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Compiler/test_compiler_pipeline.cpp | 10 ++--- .../Conversion/QCToQCO/test_qc_to_qco.cpp | 3 ++ .../Conversion/QCToQIR/test_qc_to_qir.cpp | 6 +-- mlir/unittests/Dialect/QC/IR/test_qc_ir.cpp | 6 +-- mlir/unittests/Dialect/QCO/IR/test_qco_ir.cpp | 3 ++ mlir/unittests/Dialect/QIR/IR/test_qir_ir.cpp | 8 ++-- mlir/unittests/programs/qc_programs.cpp | 40 +++++++++++-------- mlir/unittests/programs/qc_programs.h | 15 ++++--- mlir/unittests/programs/qco_programs.cpp | 19 ++++++--- mlir/unittests/programs/qco_programs.h | 6 ++- mlir/unittests/programs/qir_programs.cpp | 34 +++++++++++----- mlir/unittests/programs/qir_programs.h | 14 ++++--- 12 files changed, 102 insertions(+), 62 deletions(-) diff --git a/mlir/unittests/Compiler/test_compiler_pipeline.cpp b/mlir/unittests/Compiler/test_compiler_pipeline.cpp index 62f2c388fc..95ad276b25 100644 --- a/mlir/unittests/Compiler/test_compiler_pipeline.cpp +++ b/mlir/unittests/Compiler/test_compiler_pipeline.cpp @@ -198,11 +198,6 @@ INSTANTIATE_TEST_SUITE_P( MQT_NAMED_BUILDER(mlir::qc::staticQubitsWithOps), MQT_NAMED_BUILDER(mlir::qc::staticQubitsWithOps), MQT_NAMED_BUILDER(mlir::qir::staticQubitsWithOps), false}, - CompilerPipelineTestCase{ - "StaticQubitsWithDuplicates", nullptr, - MQT_NAMED_BUILDER(mlir::qc::staticQubitsWithDuplicates), - MQT_NAMED_BUILDER(mlir::qc::staticQubitsWithOps), - MQT_NAMED_BUILDER(mlir::qir::staticQubitsWithOps), false}, CompilerPipelineTestCase{ "StaticQubitsWithParametricOps", nullptr, MQT_NAMED_BUILDER(mlir::qc::staticQubitsWithParametricOps), @@ -223,6 +218,11 @@ INSTANTIATE_TEST_SUITE_P( MQT_NAMED_BUILDER(mlir::qc::staticQubitsWithInv), MQT_NAMED_BUILDER(mlir::qc::staticQubitsWithInv), MQT_NAMED_BUILDER(mlir::qir::staticQubitsWithInv), false}, + CompilerPipelineTestCase{ + "StaticQubitsWithDuplicates", nullptr, + MQT_NAMED_BUILDER(mlir::qc::staticQubitsWithDuplicates), + MQT_NAMED_BUILDER(mlir::qc::staticQubitsCanonical), + MQT_NAMED_BUILDER(mlir::qir::staticQubitsCanonical), false}, CompilerPipelineTestCase{"AllocQubit", MQT_NAMED_BUILDER(qc::allocQubit), nullptr, MQT_NAMED_BUILDER(mlir::qc::allocQubit), diff --git a/mlir/unittests/Conversion/QCToQCO/test_qc_to_qco.cpp b/mlir/unittests/Conversion/QCToQCO/test_qc_to_qco.cpp index ce017e956f..16b4892e3e 100644 --- a/mlir/unittests/Conversion/QCToQCO/test_qc_to_qco.cpp +++ b/mlir/unittests/Conversion/QCToQCO/test_qc_to_qco.cpp @@ -134,6 +134,9 @@ INSTANTIATE_TEST_SUITE_P( QCToQCOTestCase{"StaticQubitsWithInv", MQT_NAMED_BUILDER(qc::staticQubitsWithInv), MQT_NAMED_BUILDER(qco::staticQubitsWithInv)}, + QCToQCOTestCase{"StaticQubitsWithDuplicates", + MQT_NAMED_BUILDER(qc::staticQubitsWithDuplicates), + MQT_NAMED_BUILDER(qco::staticQubitsCanonical)}, QCToQCOTestCase{"AllocDeallocPair", MQT_NAMED_BUILDER(qc::allocDeallocPair), MQT_NAMED_BUILDER(qco::allocSinkPair)})); diff --git a/mlir/unittests/Conversion/QCToQIR/test_qc_to_qir.cpp b/mlir/unittests/Conversion/QCToQIR/test_qc_to_qir.cpp index 3744daea4a..dca3652c51 100644 --- a/mlir/unittests/Conversion/QCToQIR/test_qc_to_qir.cpp +++ b/mlir/unittests/Conversion/QCToQIR/test_qc_to_qir.cpp @@ -627,9 +627,6 @@ INSTANTIATE_TEST_SUITE_P( QCToQIRTestCase{"StaticQubitsWithOps", MQT_NAMED_BUILDER(qc::staticQubitsWithOps), MQT_NAMED_BUILDER(qir::staticQubitsWithOps)}, - QCToQIRTestCase{"StaticQubitsWithDuplicates", - MQT_NAMED_BUILDER(qc::staticQubitsWithDuplicates), - MQT_NAMED_BUILDER(qir::staticQubitsWithOps)}, QCToQIRTestCase{"StaticQubitsWithParametricOps", MQT_NAMED_BUILDER(qc::staticQubitsWithParametricOps), MQT_NAMED_BUILDER(qir::staticQubitsWithParametricOps)}, @@ -642,6 +639,9 @@ INSTANTIATE_TEST_SUITE_P( QCToQIRTestCase{"StaticQubitsWithInv", MQT_NAMED_BUILDER(qc::staticQubitsWithInv), MQT_NAMED_BUILDER(qir::staticQubitsWithInv)}, + QCToQIRTestCase{"StaticQubitsWithDuplicates", + MQT_NAMED_BUILDER(qc::staticQubitsWithDuplicates), + MQT_NAMED_BUILDER(qir::staticQubitsCanonical)}, QCToQIRTestCase{"AllocDeallocPair", MQT_NAMED_BUILDER(qc::allocDeallocPair), MQT_NAMED_BUILDER(qir::emptyQIR)})); diff --git a/mlir/unittests/Dialect/QC/IR/test_qc_ir.cpp b/mlir/unittests/Dialect/QC/IR/test_qc_ir.cpp index 5f1094298e..d5266d35bf 100644 --- a/mlir/unittests/Dialect/QC/IR/test_qc_ir.cpp +++ b/mlir/unittests/Dialect/QC/IR/test_qc_ir.cpp @@ -902,9 +902,6 @@ INSTANTIATE_TEST_SUITE_P( QCTestCase{"StaticQubitsWithOps", MQT_NAMED_BUILDER(staticQubitsWithOps), MQT_NAMED_BUILDER(staticQubitsWithOps)}, - QCTestCase{"StaticQubitsWithDuplicates", - MQT_NAMED_BUILDER(staticQubitsWithDuplicates), - MQT_NAMED_BUILDER(staticQubitsWithOps)}, QCTestCase{"StaticQubitsWithParametricOps", MQT_NAMED_BUILDER(staticQubitsWithParametricOps), MQT_NAMED_BUILDER(staticQubitsWithParametricOps)}, @@ -917,6 +914,9 @@ INSTANTIATE_TEST_SUITE_P( QCTestCase{"StaticQubitsWithInv", MQT_NAMED_BUILDER(staticQubitsWithInv), MQT_NAMED_BUILDER(staticQubitsWithInv)}, + QCTestCase{"StaticQubitsWithDuplicates", + MQT_NAMED_BUILDER(staticQubitsWithDuplicates), + MQT_NAMED_BUILDER(staticQubitsCanonical)}, QCTestCase{"AllocDeallocPair", MQT_NAMED_BUILDER(allocDeallocPair), MQT_NAMED_BUILDER(emptyQC)})); /// @} diff --git a/mlir/unittests/Dialect/QCO/IR/test_qco_ir.cpp b/mlir/unittests/Dialect/QCO/IR/test_qco_ir.cpp index 8c0c54d2ed..fa293539f2 100644 --- a/mlir/unittests/Dialect/QCO/IR/test_qco_ir.cpp +++ b/mlir/unittests/Dialect/QCO/IR/test_qco_ir.cpp @@ -1075,6 +1075,9 @@ INSTANTIATE_TEST_SUITE_P( QCOTestCase{"StaticQubitsWithInv", MQT_NAMED_BUILDER(staticQubitsWithInv), MQT_NAMED_BUILDER(staticQubitsWithInv)}, + QCOTestCase{"StaticQubitsWithDuplicatesCanonical", + MQT_NAMED_BUILDER(staticQubitsCanonical), + MQT_NAMED_BUILDER(staticQubitsCanonical)}, QCOTestCase{"AllocSinkPair", MQT_NAMED_BUILDER(allocSinkPair), MQT_NAMED_BUILDER(emptyQCO)})); /// @} diff --git a/mlir/unittests/Dialect/QIR/IR/test_qir_ir.cpp b/mlir/unittests/Dialect/QIR/IR/test_qir_ir.cpp index 5cf5a50ba3..9d4b38f9c8 100644 --- a/mlir/unittests/Dialect/QIR/IR/test_qir_ir.cpp +++ b/mlir/unittests/Dialect/QIR/IR/test_qir_ir.cpp @@ -537,9 +537,6 @@ INSTANTIATE_TEST_SUITE_P( QIRTestCase{"StaticQubitsWithOps", MQT_NAMED_BUILDER(staticQubitsWithOps), MQT_NAMED_BUILDER(staticQubitsWithOps)}, - QIRTestCase{"StaticQubitsWithDuplicates", - MQT_NAMED_BUILDER(staticQubitsWithDuplicates), - MQT_NAMED_BUILDER(staticQubitsWithOps)}, QIRTestCase{"StaticQubitsWithParametricOps", MQT_NAMED_BUILDER(staticQubitsWithParametricOps), MQT_NAMED_BUILDER(staticQubitsWithParametricOps)}, @@ -551,5 +548,8 @@ INSTANTIATE_TEST_SUITE_P( MQT_NAMED_BUILDER(staticQubitsWithCtrl)}, QIRTestCase{"StaticQubitsWithInv", MQT_NAMED_BUILDER(staticQubitsWithInv), - MQT_NAMED_BUILDER(staticQubitsWithInv)})); + MQT_NAMED_BUILDER(staticQubitsWithInv)}, + QIRTestCase{"StaticQubitsWithDuplicates", + MQT_NAMED_BUILDER(staticQubitsWithDuplicates), + MQT_NAMED_BUILDER(staticQubitsCanonical)})); /// @} diff --git a/mlir/unittests/programs/qc_programs.cpp b/mlir/unittests/programs/qc_programs.cpp index 452b26d45e..a0cc4bdc24 100644 --- a/mlir/unittests/programs/qc_programs.cpp +++ b/mlir/unittests/programs/qc_programs.cpp @@ -32,10 +32,6 @@ void allocLargeRegister(QCProgramBuilder& b) { b.allocQubitRegister(100); } void staticQubits(QCProgramBuilder& b) { const auto q0 = b.staticQubit(0); const auto q1 = b.staticQubit(1); - - b.h(q0); - b.h(q1); - b.ctrl(q0, [&] { b.x(q1); }); } void staticQubitsWithOps(QCProgramBuilder& b) { @@ -44,18 +40,6 @@ void staticQubitsWithOps(QCProgramBuilder& b) { b.h(q0); b.h(q1); - b.ctrl(q0, [&] { b.x(q1); }); -} - -void staticQubitsWithDuplicates(QCProgramBuilder& b) { - const auto q0a = b.staticQubit(0); - const auto q1a = b.staticQubit(1); - const auto q0b = b.staticQubit(0); - const auto q1b = b.staticQubit(1); - - b.h(q0a); - b.h(q1a); - b.ctrl(q0b, [&] { b.x(q1b); }); } void staticQubitsWithParametricOps(QCProgramBuilder& b) { @@ -82,6 +66,30 @@ void staticQubitsWithInv(QCProgramBuilder& b) { b.inv([&]() { b.t(q0); }); } +void staticQubitsWithDuplicates(QCProgramBuilder& b) { + const auto q0a = b.staticQubit(0); + const auto q1a = b.staticQubit(1); + const auto q0b = b.staticQubit(0); + const auto q1b = b.staticQubit(1); + + b.rx(std::numbers::pi / 4., q0a); + b.p(std::numbers::pi / 2., q1a); + b.rzz(0.123, q0b, q1b); + b.cx(q0b, q1b); + b.inv([&]() { b.t(q0a); }); +} + +void staticQubitsCanonical(QCProgramBuilder& b) { + const auto q0 = b.staticQubit(0); + const auto q1 = b.staticQubit(1); + + b.rx(std::numbers::pi / 4., q0); + b.p(std::numbers::pi / 2., q1); + b.rzz(0.123, q0, q1); + b.cx(q0, q1); + b.inv([&]() { b.t(q0); }); +} + void allocDeallocPair(QCProgramBuilder& b) { auto q = b.allocQubit(); b.dealloc(q); diff --git a/mlir/unittests/programs/qc_programs.h b/mlir/unittests/programs/qc_programs.h index e95e0bc24c..fac185a866 100644 --- a/mlir/unittests/programs/qc_programs.h +++ b/mlir/unittests/programs/qc_programs.h @@ -30,17 +30,12 @@ void allocMultipleQubitRegisters(QCProgramBuilder& b); /// Allocates a large qubit register. void allocLargeRegister(QCProgramBuilder& b); -/// Allocates two inline qubits and applies H on both and a controlled-X between -/// them. +/// Allocates two inline qubits. void staticQubits(QCProgramBuilder& b); /// Allocates two static qubits and applies operations. void staticQubitsWithOps(QCProgramBuilder& b); -/// Allocates duplicate static qubits and applies H on both and a controlled-X -/// between them. -void staticQubitsWithDuplicates(QCProgramBuilder& b); - /// Allocates two static qubits and applies parametric gates. void staticQubitsWithParametricOps(QCProgramBuilder& b); @@ -52,6 +47,14 @@ void staticQubitsWithCtrl(QCProgramBuilder& b); /// Allocates a static qubit and applies an inverse modifier. void staticQubitsWithInv(QCProgramBuilder& b); + +/// Allocates duplicate static qubits and applies operations on both. +void staticQubitsWithDuplicates(QCProgramBuilder& b); + +/// Same as `staticQubitsWithDuplicates`, but with canonical static qubit +/// retrievals. +void staticQubitsCanonical(QCProgramBuilder& b); + /// Allocates and explicitly deallocates a single qubit. void allocDeallocPair(QCProgramBuilder& b); diff --git a/mlir/unittests/programs/qco_programs.cpp b/mlir/unittests/programs/qco_programs.cpp index 13e7b7612f..1829f7d614 100644 --- a/mlir/unittests/programs/qco_programs.cpp +++ b/mlir/unittests/programs/qco_programs.cpp @@ -36,12 +36,6 @@ void allocLargeRegister(QCOProgramBuilder& b) { b.allocQubitRegister(100); } void staticQubits(QCOProgramBuilder& b) { auto q0 = b.staticQubit(0); auto q1 = b.staticQubit(1); - - q0 = b.h(q0); - q1 = b.h(q1); - b.ctrl({q0}, {q1}, [&](mlir::ValueRange targets) { - return llvm::SmallVector{b.x(targets[0])}; - }); } void staticQubitsWithOps(QCOProgramBuilder& b) { @@ -77,6 +71,19 @@ void staticQubitsWithInv(QCOProgramBuilder& b) { })[0]; } +void staticQubitsCanonical(QCOProgramBuilder& b) { + auto q0 = b.staticQubit(0); + auto q1 = b.staticQubit(1); + + q0 = b.rx(std::numbers::pi / 4., q0); + q1 = b.p(std::numbers::pi / 2., q1); + std::tie(q0, q1) = b.rzz(0.123, q0, q1); + std::tie(q0, q1) = b.cx(q0, q1); + q0 = b.inv({q0}, [&](auto targets) -> llvm::SmallVector { + return {b.t(targets[0])}; + })[0]; +} + void allocSinkPair(QCOProgramBuilder& b) { auto q = b.allocQubit(); b.sink(q); diff --git a/mlir/unittests/programs/qco_programs.h b/mlir/unittests/programs/qco_programs.h index 0f3184999f..7b55771448 100644 --- a/mlir/unittests/programs/qco_programs.h +++ b/mlir/unittests/programs/qco_programs.h @@ -30,8 +30,7 @@ void allocMultipleQubitRegisters(QCOProgramBuilder& b); /// Allocates a large qubit register. void allocLargeRegister(QCOProgramBuilder& b); -/// Allocates two inline qubits and applies H on both and a controlled-X between -/// them. +/// Allocates two inline qubits. void staticQubits(QCOProgramBuilder& b); /// Allocates two static qubits and applies operations. @@ -49,6 +48,9 @@ void staticQubitsWithCtrl(QCOProgramBuilder& b); /// Allocates a static qubit and applies an inverse modifier. void staticQubitsWithInv(QCOProgramBuilder& b); +/// Same as `staticQubitsCanonical` in `qc_programs.cpp` and `qir_programs.cpp`. +void staticQubitsCanonical(QCOProgramBuilder& b); + /// Allocates and explicitly sinks a single qubit. void allocSinkPair(QCOProgramBuilder& b); diff --git a/mlir/unittests/programs/qir_programs.cpp b/mlir/unittests/programs/qir_programs.cpp index db45c8ae54..82bc0e6d2c 100644 --- a/mlir/unittests/programs/qir_programs.cpp +++ b/mlir/unittests/programs/qir_programs.cpp @@ -39,17 +39,6 @@ void staticQubitsWithOps(QIRProgramBuilder& b) { auto q1 = b.staticQubit(1); b.h(q0); b.h(q1); - b.cx(q0, q1); -} - -void staticQubitsWithDuplicates(QIRProgramBuilder& b) { - auto q0a = b.staticQubit(0); - auto q1a = b.staticQubit(1); - auto q0b = b.staticQubit(0); - auto q1b = b.staticQubit(1); - b.h(q0a); - b.h(q1a); - b.cx(q0b, q1b); } void staticQubitsWithParametricOps(QIRProgramBuilder& b) { @@ -74,6 +63,29 @@ void staticQubitsWithCtrl(QIRProgramBuilder& b) { void staticQubitsWithInv(QIRProgramBuilder& b) { auto q0 = b.staticQubit(0); b.tdg(q0); +} + +void staticQubitsWithDuplicates(QIRProgramBuilder& b) { + auto q0a = b.staticQubit(0); + auto q1a = b.staticQubit(1); + auto q0b = b.staticQubit(0); + auto q1b = b.staticQubit(1); + b.rx(std::numbers::pi / 4., q0a); + b.p(std::numbers::pi / 2., q1a); + b.rzz(0.123, q0b, q1b); + b.cx(q0b, q1b); + b.tdg(q0a); +} + +void staticQubitsCanonical(QIRProgramBuilder& b) { + auto q0 = b.staticQubit(0); + auto q1 = b.staticQubit(1); + b.rx(std::numbers::pi / 4., q0); + b.p(std::numbers::pi / 2., q1); + b.rzz(0.123, q0, q1); + b.cx(q0, q1); + b.tdg(q0); +} void singleMeasurementToSingleBit(QIRProgramBuilder& b) { auto q = b.allocQubitRegister(1); diff --git a/mlir/unittests/programs/qir_programs.h b/mlir/unittests/programs/qir_programs.h index d9cf3a2774..2b9e591432 100644 --- a/mlir/unittests/programs/qir_programs.h +++ b/mlir/unittests/programs/qir_programs.h @@ -30,17 +30,12 @@ void allocMultipleQubitRegisters(QIRProgramBuilder& b); /// Allocates a large qubit register. void allocLargeRegister(QIRProgramBuilder& b); -/// Allocates two inline qubits and applies H on both and a controlled-X between -/// them. +/// Allocates two inline qubits. void staticQubits(QIRProgramBuilder& b); /// Allocates two static qubits and applies operations. void staticQubitsWithOps(QIRProgramBuilder& b); -/// Allocates duplicate static qubits and applies H on both and a controlled-X -/// between them. -void staticQubitsWithDuplicates(QIRProgramBuilder& b); - /// Allocates two static qubits and applies parametric gates. void staticQubitsWithParametricOps(QIRProgramBuilder& b); @@ -53,6 +48,13 @@ void staticQubitsWithCtrl(QIRProgramBuilder& b); /// Allocates a static qubit and applies the inverse of a T gate (Tdg). void staticQubitsWithInv(QIRProgramBuilder& b); +/// Allocates duplicate static qubits and applies operations on both. +void staticQubitsWithDuplicates(QIRProgramBuilder& b); + +/// Same as `staticQubitsWithDuplicates`, but with canonical static qubit +/// retrievals. +void staticQubitsCanonical(QIRProgramBuilder& b); + // --- MeasureOp ------------------------------------------------------------ // /// Measures a single qubit into a single classical bit. From 7b789ef2fc218dd7fcd49c4aa0d305a80d7d0dda Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 1 Apr 2026 15:19:15 +0000 Subject: [PATCH 07/11] =?UTF-8?q?=F0=9F=8E=A8=20pre-commit=20fixes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 343 ++++++++++++++++++++++++++------------------------- 1 file changed, 172 insertions(+), 171 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 21f6ebd1e0..a6211c3fcb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -351,177 +351,178 @@ _📚 Refer to the [GitHub Release Notes](https://github.com/munich-quantum-tool [#1564]: https://github.com/munich-quantum-toolkit/core/pull/1564 ======= [#1567]: https://github.com/munich-quantum-toolkit/core/pull/1567 ->>>>>>> 284ce487 (📝 Update CHANGELOG to include PR #1567) -[#1554]: https://github.com/munich-quantum-toolkit/core/pull/1554 -[#1550]: https://github.com/munich-quantum-toolkit/core/pull/1550 -[#1549]: https://github.com/munich-quantum-toolkit/core/pull/1549 -[#1548]: https://github.com/munich-quantum-toolkit/core/pull/1548 -[#1547]: https://github.com/munich-quantum-toolkit/core/pull/1547 -[#1542]: https://github.com/munich-quantum-toolkit/core/pull/1542 -[#1537]: https://github.com/munich-quantum-toolkit/core/pull/1537 -[#1521]: https://github.com/munich-quantum-toolkit/core/pull/1521 -[#1513]: https://github.com/munich-quantum-toolkit/core/pull/1513 -[#1510]: https://github.com/munich-quantum-toolkit/core/pull/1510 -[#1507]: https://github.com/munich-quantum-toolkit/core/pull/1507 -[#1506]: https://github.com/munich-quantum-toolkit/core/pull/1506 -[#1481]: https://github.com/munich-quantum-toolkit/core/pull/1481 -[#1479]: https://github.com/munich-quantum-toolkit/core/pull/1479 -[#1475]: https://github.com/munich-quantum-toolkit/core/pull/1475 -[#1474]: https://github.com/munich-quantum-toolkit/core/pull/1474 -[#1472]: https://github.com/munich-quantum-toolkit/core/pull/1472 -[#1471]: https://github.com/munich-quantum-toolkit/core/pull/1471 -[#1470]: https://github.com/munich-quantum-toolkit/core/pull/1470 -[#1466]: https://github.com/munich-quantum-toolkit/core/pull/1466 -[#1465]: https://github.com/munich-quantum-toolkit/core/pull/1465 -[#1464]: https://github.com/munich-quantum-toolkit/core/pull/1464 -[#1458]: https://github.com/munich-quantum-toolkit/core/pull/1458 -[#1453]: https://github.com/munich-quantum-toolkit/core/pull/1453 -[#1447]: https://github.com/munich-quantum-toolkit/core/pull/1447 -[#1446]: https://github.com/munich-quantum-toolkit/core/pull/1446 -[#1444]: https://github.com/munich-quantum-toolkit/core/pull/1444 -[#1443]: https://github.com/munich-quantum-toolkit/core/pull/1443 -[#1437]: https://github.com/munich-quantum-toolkit/core/pull/1437 -[#1436]: https://github.com/munich-quantum-toolkit/core/pull/1436 -[#1430]: https://github.com/munich-quantum-toolkit/core/pull/1430 -[#1428]: https://github.com/munich-quantum-toolkit/core/pull/1428 -[#1415]: https://github.com/munich-quantum-toolkit/core/pull/1415 -[#1414]: https://github.com/munich-quantum-toolkit/core/pull/1414 -[#1413]: https://github.com/munich-quantum-toolkit/core/pull/1413 -[#1412]: https://github.com/munich-quantum-toolkit/core/pull/1412 -[#1411]: https://github.com/munich-quantum-toolkit/core/pull/1411 -[#1406]: https://github.com/munich-quantum-toolkit/core/pull/1406 -[#1403]: https://github.com/munich-quantum-toolkit/core/pull/1403 -[#1402]: https://github.com/munich-quantum-toolkit/core/pull/1402 -[#1385]: https://github.com/munich-quantum-toolkit/core/pull/1385 -[#1384]: https://github.com/munich-quantum-toolkit/core/pull/1384 -[#1383]: https://github.com/munich-quantum-toolkit/core/pull/1383 -[#1382]: https://github.com/munich-quantum-toolkit/core/pull/1382 -[#1381]: https://github.com/munich-quantum-toolkit/core/pull/1381 -[#1378]: https://github.com/munich-quantum-toolkit/core/pull/1378 -[#1375]: https://github.com/munich-quantum-toolkit/core/pull/1375 -[#1371]: https://github.com/munich-quantum-toolkit/core/pull/1371 -[#1359]: https://github.com/munich-quantum-toolkit/core/pull/1359 -[#1356]: https://github.com/munich-quantum-toolkit/core/pull/1356 -[#1355]: https://github.com/munich-quantum-toolkit/core/pull/1355 -[#1338]: https://github.com/munich-quantum-toolkit/core/pull/1338 -[#1336]: https://github.com/munich-quantum-toolkit/core/pull/1336 -[#1330]: https://github.com/munich-quantum-toolkit/core/pull/1330 -[#1328]: https://github.com/munich-quantum-toolkit/core/pull/1328 -[#1327]: https://github.com/munich-quantum-toolkit/core/pull/1327 -[#1310]: https://github.com/munich-quantum-toolkit/core/pull/1310 -[#1301]: https://github.com/munich-quantum-toolkit/core/pull/1301 -[#1300]: https://github.com/munich-quantum-toolkit/core/pull/1300 -[#1299]: https://github.com/munich-quantum-toolkit/core/pull/1299 -[#1294]: https://github.com/munich-quantum-toolkit/core/pull/1294 -[#1293]: https://github.com/munich-quantum-toolkit/core/pull/1293 -[#1287]: https://github.com/munich-quantum-toolkit/core/pull/1287 -[#1283]: https://github.com/munich-quantum-toolkit/core/pull/1283 -[#1279]: https://github.com/munich-quantum-toolkit/core/pull/1279 -[#1276]: https://github.com/munich-quantum-toolkit/core/pull/1276 -[#1271]: https://github.com/munich-quantum-toolkit/core/pull/1271 -[#1269]: https://github.com/munich-quantum-toolkit/core/pull/1269 -[#1264]: https://github.com/munich-quantum-toolkit/core/pull/1264 -[#1263]: https://github.com/munich-quantum-toolkit/core/pull/1263 -[#1247]: https://github.com/munich-quantum-toolkit/core/pull/1247 -[#1246]: https://github.com/munich-quantum-toolkit/core/pull/1246 -[#1243]: https://github.com/munich-quantum-toolkit/core/pull/1243 -[#1237]: https://github.com/munich-quantum-toolkit/core/pull/1237 -[#1236]: https://github.com/munich-quantum-toolkit/core/pull/1236 -[#1235]: https://github.com/munich-quantum-toolkit/core/pull/1235 -[#1232]: https://github.com/munich-quantum-toolkit/core/pull/1232 -[#1224]: https://github.com/munich-quantum-toolkit/core/pull/1224 -[#1223]: https://github.com/munich-quantum-toolkit/core/pull/1223 -[#1211]: https://github.com/munich-quantum-toolkit/core/pull/1211 -[#1210]: https://github.com/munich-quantum-toolkit/core/pull/1210 -[#1209]: https://github.com/munich-quantum-toolkit/core/pull/1209 -[#1207]: https://github.com/munich-quantum-toolkit/core/pull/1207 -[#1186]: https://github.com/munich-quantum-toolkit/core/pull/1186 -[#1181]: https://github.com/munich-quantum-toolkit/core/pull/1181 -[#1180]: https://github.com/munich-quantum-toolkit/core/pull/1180 -[#1165]: https://github.com/munich-quantum-toolkit/core/pull/1165 -[#1164]: https://github.com/munich-quantum-toolkit/core/pull/1164 -[#1157]: https://github.com/munich-quantum-toolkit/core/pull/1157 -[#1151]: https://github.com/munich-quantum-toolkit/core/pull/1151 -[#1148]: https://github.com/munich-quantum-toolkit/core/pull/1148 -[#1147]: https://github.com/munich-quantum-toolkit/core/pull/1147 -[#1140]: https://github.com/munich-quantum-toolkit/core/pull/1140 -[#1139]: https://github.com/munich-quantum-toolkit/core/pull/1139 -[#1117]: https://github.com/munich-quantum-toolkit/core/pull/1117 -[#1116]: https://github.com/munich-quantum-toolkit/core/pull/1116 -[#1108]: https://github.com/munich-quantum-toolkit/core/pull/1108 -[#1106]: https://github.com/munich-quantum-toolkit/core/pull/1106 -[#1100]: https://github.com/munich-quantum-toolkit/core/pull/1100 -[#1099]: https://github.com/munich-quantum-toolkit/core/pull/1099 -[#1098]: https://github.com/munich-quantum-toolkit/core/pull/1098 -[#1091]: https://github.com/munich-quantum-toolkit/core/pull/1091 -[#1089]: https://github.com/munich-quantum-toolkit/core/pull/1089 -[#1088]: https://github.com/munich-quantum-toolkit/core/pull/1088 -[#1076]: https://github.com/munich-quantum-toolkit/core/pull/1076 -[#1075]: https://github.com/munich-quantum-toolkit/core/pull/1075 -[#1071]: https://github.com/munich-quantum-toolkit/core/pull/1071 -[#1047]: https://github.com/munich-quantum-toolkit/core/pull/1047 -[#1042]: https://github.com/munich-quantum-toolkit/core/pull/1042 -[#1020]: https://github.com/munich-quantum-toolkit/core/pull/1020 -[#1019]: https://github.com/munich-quantum-toolkit/core/pull/1019 -[#1010]: https://github.com/munich-quantum-toolkit/core/pull/1010 -[#1001]: https://github.com/munich-quantum-toolkit/core/pull/1001 -[#996]: https://github.com/munich-quantum-toolkit/core/pull/996 -[#984]: https://github.com/munich-quantum-toolkit/core/pull/984 -[#982]: https://github.com/munich-quantum-toolkit/core/pull/982 -[#975]: https://github.com/munich-quantum-toolkit/core/pull/975 -[#973]: https://github.com/munich-quantum-toolkit/core/pull/973 -[#964]: https://github.com/munich-quantum-toolkit/core/pull/964 -[#959]: https://github.com/munich-quantum-toolkit/core/pull/959 -[#934]: https://github.com/munich-quantum-toolkit/core/pull/934 -[#933]: https://github.com/munich-quantum-toolkit/core/pull/933 -[#932]: https://github.com/munich-quantum-toolkit/core/pull/932 -[#931]: https://github.com/munich-quantum-toolkit/core/pull/931 -[#930]: https://github.com/munich-quantum-toolkit/core/pull/930 -[#926]: https://github.com/munich-quantum-toolkit/core/pull/926 -[#921]: https://github.com/munich-quantum-toolkit/core/pull/921 -[#913]: https://github.com/munich-quantum-toolkit/core/pull/913 -[#912]: https://github.com/munich-quantum-toolkit/core/pull/912 -[#911]: https://github.com/munich-quantum-toolkit/core/pull/911 -[#908]: https://github.com/munich-quantum-toolkit/core/pull/908 -[#900]: https://github.com/munich-quantum-toolkit/core/pull/900 -[#897]: https://github.com/munich-quantum-toolkit/core/pull/897 -[#895]: https://github.com/munich-quantum-toolkit/core/pull/895 -[#893]: https://github.com/munich-quantum-toolkit/core/pull/893 -[#892]: https://github.com/munich-quantum-toolkit/core/pull/892 -[#886]: https://github.com/munich-quantum-toolkit/core/pull/886 -[#885]: https://github.com/munich-quantum-toolkit/core/pull/885 -[#883]: https://github.com/munich-quantum-toolkit/core/pull/883 -[#882]: https://github.com/munich-quantum-toolkit/core/pull/882 -[#879]: https://github.com/munich-quantum-toolkit/core/pull/879 -[#878]: https://github.com/munich-quantum-toolkit/core/pull/878 -[#877]: https://github.com/munich-quantum-toolkit/core/pull/877 -[#866]: https://github.com/munich-quantum-toolkit/core/pull/866 -[#860]: https://github.com/munich-quantum-toolkit/core/pull/860 -[#859]: https://github.com/munich-quantum-toolkit/core/pull/859 -[#858]: https://github.com/munich-quantum-toolkit/core/pull/858 -[#849]: https://github.com/munich-quantum-toolkit/core/pull/849 -[#847]: https://github.com/munich-quantum-toolkit/core/pull/847 -[#846]: https://github.com/munich-quantum-toolkit/core/pull/846 -[#842]: https://github.com/munich-quantum-toolkit/core/pull/842 -[#839]: https://github.com/munich-quantum-toolkit/core/pull/839 -[#838]: https://github.com/munich-quantum-toolkit/core/pull/838 -[#832]: https://github.com/munich-quantum-toolkit/core/pull/832 -[#831]: https://github.com/munich-quantum-toolkit/core/pull/831 -[#822]: https://github.com/munich-quantum-toolkit/core/pull/822 -[#817]: https://github.com/munich-quantum-toolkit/core/pull/817 -[#810]: https://github.com/munich-quantum-toolkit/core/pull/810 -[#807]: https://github.com/munich-quantum-toolkit/core/pull/807 -[#802]: https://github.com/munich-quantum-toolkit/core/pull/802 -[#798]: https://github.com/munich-quantum-toolkit/core/pull/798 -[#789]: https://github.com/munich-quantum-toolkit/core/pull/789 -[#763]: https://github.com/munich-quantum-toolkit/core/pull/763 -[#762]: https://github.com/munich-quantum-toolkit/core/pull/762 -[#758]: https://github.com/munich-quantum-toolkit/core/pull/758 -[#741]: https://github.com/munich-quantum-toolkit/core/pull/741 -[#724]: https://github.com/munich-quantum-toolkit/core/pull/724 -[#662]: https://github.com/munich-quantum-toolkit/core/pull/662 -[#543]: https://github.com/munich-quantum-toolkit/core/pull/543 -[**@a9b7e70**]: https://github.com/munich-quantum-toolkit/core/pull/798/commits/a9b7e70aaeb532fe8e1e31a7decca86d81eb523f + +> > > > > > > 284ce487 (📝 Update CHANGELOG to include PR #1567) +> > > > > > > [#1554]: https://github.com/munich-quantum-toolkit/core/pull/1554 +> > > > > > > [#1550]: https://github.com/munich-quantum-toolkit/core/pull/1550 +> > > > > > > [#1549]: https://github.com/munich-quantum-toolkit/core/pull/1549 +> > > > > > > [#1548]: https://github.com/munich-quantum-toolkit/core/pull/1548 +> > > > > > > [#1547]: https://github.com/munich-quantum-toolkit/core/pull/1547 +> > > > > > > [#1542]: https://github.com/munich-quantum-toolkit/core/pull/1542 +> > > > > > > [#1537]: https://github.com/munich-quantum-toolkit/core/pull/1537 +> > > > > > > [#1521]: https://github.com/munich-quantum-toolkit/core/pull/1521 +> > > > > > > [#1513]: https://github.com/munich-quantum-toolkit/core/pull/1513 +> > > > > > > [#1510]: https://github.com/munich-quantum-toolkit/core/pull/1510 +> > > > > > > [#1507]: https://github.com/munich-quantum-toolkit/core/pull/1507 +> > > > > > > [#1506]: https://github.com/munich-quantum-toolkit/core/pull/1506 +> > > > > > > [#1481]: https://github.com/munich-quantum-toolkit/core/pull/1481 +> > > > > > > [#1479]: https://github.com/munich-quantum-toolkit/core/pull/1479 +> > > > > > > [#1475]: https://github.com/munich-quantum-toolkit/core/pull/1475 +> > > > > > > [#1474]: https://github.com/munich-quantum-toolkit/core/pull/1474 +> > > > > > > [#1472]: https://github.com/munich-quantum-toolkit/core/pull/1472 +> > > > > > > [#1471]: https://github.com/munich-quantum-toolkit/core/pull/1471 +> > > > > > > [#1470]: https://github.com/munich-quantum-toolkit/core/pull/1470 +> > > > > > > [#1466]: https://github.com/munich-quantum-toolkit/core/pull/1466 +> > > > > > > [#1465]: https://github.com/munich-quantum-toolkit/core/pull/1465 +> > > > > > > [#1464]: https://github.com/munich-quantum-toolkit/core/pull/1464 +> > > > > > > [#1458]: https://github.com/munich-quantum-toolkit/core/pull/1458 +> > > > > > > [#1453]: https://github.com/munich-quantum-toolkit/core/pull/1453 +> > > > > > > [#1447]: https://github.com/munich-quantum-toolkit/core/pull/1447 +> > > > > > > [#1446]: https://github.com/munich-quantum-toolkit/core/pull/1446 +> > > > > > > [#1444]: https://github.com/munich-quantum-toolkit/core/pull/1444 +> > > > > > > [#1443]: https://github.com/munich-quantum-toolkit/core/pull/1443 +> > > > > > > [#1437]: https://github.com/munich-quantum-toolkit/core/pull/1437 +> > > > > > > [#1436]: https://github.com/munich-quantum-toolkit/core/pull/1436 +> > > > > > > [#1430]: https://github.com/munich-quantum-toolkit/core/pull/1430 +> > > > > > > [#1428]: https://github.com/munich-quantum-toolkit/core/pull/1428 +> > > > > > > [#1415]: https://github.com/munich-quantum-toolkit/core/pull/1415 +> > > > > > > [#1414]: https://github.com/munich-quantum-toolkit/core/pull/1414 +> > > > > > > [#1413]: https://github.com/munich-quantum-toolkit/core/pull/1413 +> > > > > > > [#1412]: https://github.com/munich-quantum-toolkit/core/pull/1412 +> > > > > > > [#1411]: https://github.com/munich-quantum-toolkit/core/pull/1411 +> > > > > > > [#1406]: https://github.com/munich-quantum-toolkit/core/pull/1406 +> > > > > > > [#1403]: https://github.com/munich-quantum-toolkit/core/pull/1403 +> > > > > > > [#1402]: https://github.com/munich-quantum-toolkit/core/pull/1402 +> > > > > > > [#1385]: https://github.com/munich-quantum-toolkit/core/pull/1385 +> > > > > > > [#1384]: https://github.com/munich-quantum-toolkit/core/pull/1384 +> > > > > > > [#1383]: https://github.com/munich-quantum-toolkit/core/pull/1383 +> > > > > > > [#1382]: https://github.com/munich-quantum-toolkit/core/pull/1382 +> > > > > > > [#1381]: https://github.com/munich-quantum-toolkit/core/pull/1381 +> > > > > > > [#1378]: https://github.com/munich-quantum-toolkit/core/pull/1378 +> > > > > > > [#1375]: https://github.com/munich-quantum-toolkit/core/pull/1375 +> > > > > > > [#1371]: https://github.com/munich-quantum-toolkit/core/pull/1371 +> > > > > > > [#1359]: https://github.com/munich-quantum-toolkit/core/pull/1359 +> > > > > > > [#1356]: https://github.com/munich-quantum-toolkit/core/pull/1356 +> > > > > > > [#1355]: https://github.com/munich-quantum-toolkit/core/pull/1355 +> > > > > > > [#1338]: https://github.com/munich-quantum-toolkit/core/pull/1338 +> > > > > > > [#1336]: https://github.com/munich-quantum-toolkit/core/pull/1336 +> > > > > > > [#1330]: https://github.com/munich-quantum-toolkit/core/pull/1330 +> > > > > > > [#1328]: https://github.com/munich-quantum-toolkit/core/pull/1328 +> > > > > > > [#1327]: https://github.com/munich-quantum-toolkit/core/pull/1327 +> > > > > > > [#1310]: https://github.com/munich-quantum-toolkit/core/pull/1310 +> > > > > > > [#1301]: https://github.com/munich-quantum-toolkit/core/pull/1301 +> > > > > > > [#1300]: https://github.com/munich-quantum-toolkit/core/pull/1300 +> > > > > > > [#1299]: https://github.com/munich-quantum-toolkit/core/pull/1299 +> > > > > > > [#1294]: https://github.com/munich-quantum-toolkit/core/pull/1294 +> > > > > > > [#1293]: https://github.com/munich-quantum-toolkit/core/pull/1293 +> > > > > > > [#1287]: https://github.com/munich-quantum-toolkit/core/pull/1287 +> > > > > > > [#1283]: https://github.com/munich-quantum-toolkit/core/pull/1283 +> > > > > > > [#1279]: https://github.com/munich-quantum-toolkit/core/pull/1279 +> > > > > > > [#1276]: https://github.com/munich-quantum-toolkit/core/pull/1276 +> > > > > > > [#1271]: https://github.com/munich-quantum-toolkit/core/pull/1271 +> > > > > > > [#1269]: https://github.com/munich-quantum-toolkit/core/pull/1269 +> > > > > > > [#1264]: https://github.com/munich-quantum-toolkit/core/pull/1264 +> > > > > > > [#1263]: https://github.com/munich-quantum-toolkit/core/pull/1263 +> > > > > > > [#1247]: https://github.com/munich-quantum-toolkit/core/pull/1247 +> > > > > > > [#1246]: https://github.com/munich-quantum-toolkit/core/pull/1246 +> > > > > > > [#1243]: https://github.com/munich-quantum-toolkit/core/pull/1243 +> > > > > > > [#1237]: https://github.com/munich-quantum-toolkit/core/pull/1237 +> > > > > > > [#1236]: https://github.com/munich-quantum-toolkit/core/pull/1236 +> > > > > > > [#1235]: https://github.com/munich-quantum-toolkit/core/pull/1235 +> > > > > > > [#1232]: https://github.com/munich-quantum-toolkit/core/pull/1232 +> > > > > > > [#1224]: https://github.com/munich-quantum-toolkit/core/pull/1224 +> > > > > > > [#1223]: https://github.com/munich-quantum-toolkit/core/pull/1223 +> > > > > > > [#1211]: https://github.com/munich-quantum-toolkit/core/pull/1211 +> > > > > > > [#1210]: https://github.com/munich-quantum-toolkit/core/pull/1210 +> > > > > > > [#1209]: https://github.com/munich-quantum-toolkit/core/pull/1209 +> > > > > > > [#1207]: https://github.com/munich-quantum-toolkit/core/pull/1207 +> > > > > > > [#1186]: https://github.com/munich-quantum-toolkit/core/pull/1186 +> > > > > > > [#1181]: https://github.com/munich-quantum-toolkit/core/pull/1181 +> > > > > > > [#1180]: https://github.com/munich-quantum-toolkit/core/pull/1180 +> > > > > > > [#1165]: https://github.com/munich-quantum-toolkit/core/pull/1165 +> > > > > > > [#1164]: https://github.com/munich-quantum-toolkit/core/pull/1164 +> > > > > > > [#1157]: https://github.com/munich-quantum-toolkit/core/pull/1157 +> > > > > > > [#1151]: https://github.com/munich-quantum-toolkit/core/pull/1151 +> > > > > > > [#1148]: https://github.com/munich-quantum-toolkit/core/pull/1148 +> > > > > > > [#1147]: https://github.com/munich-quantum-toolkit/core/pull/1147 +> > > > > > > [#1140]: https://github.com/munich-quantum-toolkit/core/pull/1140 +> > > > > > > [#1139]: https://github.com/munich-quantum-toolkit/core/pull/1139 +> > > > > > > [#1117]: https://github.com/munich-quantum-toolkit/core/pull/1117 +> > > > > > > [#1116]: https://github.com/munich-quantum-toolkit/core/pull/1116 +> > > > > > > [#1108]: https://github.com/munich-quantum-toolkit/core/pull/1108 +> > > > > > > [#1106]: https://github.com/munich-quantum-toolkit/core/pull/1106 +> > > > > > > [#1100]: https://github.com/munich-quantum-toolkit/core/pull/1100 +> > > > > > > [#1099]: https://github.com/munich-quantum-toolkit/core/pull/1099 +> > > > > > > [#1098]: https://github.com/munich-quantum-toolkit/core/pull/1098 +> > > > > > > [#1091]: https://github.com/munich-quantum-toolkit/core/pull/1091 +> > > > > > > [#1089]: https://github.com/munich-quantum-toolkit/core/pull/1089 +> > > > > > > [#1088]: https://github.com/munich-quantum-toolkit/core/pull/1088 +> > > > > > > [#1076]: https://github.com/munich-quantum-toolkit/core/pull/1076 +> > > > > > > [#1075]: https://github.com/munich-quantum-toolkit/core/pull/1075 +> > > > > > > [#1071]: https://github.com/munich-quantum-toolkit/core/pull/1071 +> > > > > > > [#1047]: https://github.com/munich-quantum-toolkit/core/pull/1047 +> > > > > > > [#1042]: https://github.com/munich-quantum-toolkit/core/pull/1042 +> > > > > > > [#1020]: https://github.com/munich-quantum-toolkit/core/pull/1020 +> > > > > > > [#1019]: https://github.com/munich-quantum-toolkit/core/pull/1019 +> > > > > > > [#1010]: https://github.com/munich-quantum-toolkit/core/pull/1010 +> > > > > > > [#1001]: https://github.com/munich-quantum-toolkit/core/pull/1001 +> > > > > > > [#996]: https://github.com/munich-quantum-toolkit/core/pull/996 +> > > > > > > [#984]: https://github.com/munich-quantum-toolkit/core/pull/984 +> > > > > > > [#982]: https://github.com/munich-quantum-toolkit/core/pull/982 +> > > > > > > [#975]: https://github.com/munich-quantum-toolkit/core/pull/975 +> > > > > > > [#973]: https://github.com/munich-quantum-toolkit/core/pull/973 +> > > > > > > [#964]: https://github.com/munich-quantum-toolkit/core/pull/964 +> > > > > > > [#959]: https://github.com/munich-quantum-toolkit/core/pull/959 +> > > > > > > [#934]: https://github.com/munich-quantum-toolkit/core/pull/934 +> > > > > > > [#933]: https://github.com/munich-quantum-toolkit/core/pull/933 +> > > > > > > [#932]: https://github.com/munich-quantum-toolkit/core/pull/932 +> > > > > > > [#931]: https://github.com/munich-quantum-toolkit/core/pull/931 +> > > > > > > [#930]: https://github.com/munich-quantum-toolkit/core/pull/930 +> > > > > > > [#926]: https://github.com/munich-quantum-toolkit/core/pull/926 +> > > > > > > [#921]: https://github.com/munich-quantum-toolkit/core/pull/921 +> > > > > > > [#913]: https://github.com/munich-quantum-toolkit/core/pull/913 +> > > > > > > [#912]: https://github.com/munich-quantum-toolkit/core/pull/912 +> > > > > > > [#911]: https://github.com/munich-quantum-toolkit/core/pull/911 +> > > > > > > [#908]: https://github.com/munich-quantum-toolkit/core/pull/908 +> > > > > > > [#900]: https://github.com/munich-quantum-toolkit/core/pull/900 +> > > > > > > [#897]: https://github.com/munich-quantum-toolkit/core/pull/897 +> > > > > > > [#895]: https://github.com/munich-quantum-toolkit/core/pull/895 +> > > > > > > [#893]: https://github.com/munich-quantum-toolkit/core/pull/893 +> > > > > > > [#892]: https://github.com/munich-quantum-toolkit/core/pull/892 +> > > > > > > [#886]: https://github.com/munich-quantum-toolkit/core/pull/886 +> > > > > > > [#885]: https://github.com/munich-quantum-toolkit/core/pull/885 +> > > > > > > [#883]: https://github.com/munich-quantum-toolkit/core/pull/883 +> > > > > > > [#882]: https://github.com/munich-quantum-toolkit/core/pull/882 +> > > > > > > [#879]: https://github.com/munich-quantum-toolkit/core/pull/879 +> > > > > > > [#878]: https://github.com/munich-quantum-toolkit/core/pull/878 +> > > > > > > [#877]: https://github.com/munich-quantum-toolkit/core/pull/877 +> > > > > > > [#866]: https://github.com/munich-quantum-toolkit/core/pull/866 +> > > > > > > [#860]: https://github.com/munich-quantum-toolkit/core/pull/860 +> > > > > > > [#859]: https://github.com/munich-quantum-toolkit/core/pull/859 +> > > > > > > [#858]: https://github.com/munich-quantum-toolkit/core/pull/858 +> > > > > > > [#849]: https://github.com/munich-quantum-toolkit/core/pull/849 +> > > > > > > [#847]: https://github.com/munich-quantum-toolkit/core/pull/847 +> > > > > > > [#846]: https://github.com/munich-quantum-toolkit/core/pull/846 +> > > > > > > [#842]: https://github.com/munich-quantum-toolkit/core/pull/842 +> > > > > > > [#839]: https://github.com/munich-quantum-toolkit/core/pull/839 +> > > > > > > [#838]: https://github.com/munich-quantum-toolkit/core/pull/838 +> > > > > > > [#832]: https://github.com/munich-quantum-toolkit/core/pull/832 +> > > > > > > [#831]: https://github.com/munich-quantum-toolkit/core/pull/831 +> > > > > > > [#822]: https://github.com/munich-quantum-toolkit/core/pull/822 +> > > > > > > [#817]: https://github.com/munich-quantum-toolkit/core/pull/817 +> > > > > > > [#810]: https://github.com/munich-quantum-toolkit/core/pull/810 +> > > > > > > [#807]: https://github.com/munich-quantum-toolkit/core/pull/807 +> > > > > > > [#802]: https://github.com/munich-quantum-toolkit/core/pull/802 +> > > > > > > [#798]: https://github.com/munich-quantum-toolkit/core/pull/798 +> > > > > > > [#789]: https://github.com/munich-quantum-toolkit/core/pull/789 +> > > > > > > [#763]: https://github.com/munich-quantum-toolkit/core/pull/763 +> > > > > > > [#762]: https://github.com/munich-quantum-toolkit/core/pull/762 +> > > > > > > [#758]: https://github.com/munich-quantum-toolkit/core/pull/758 +> > > > > > > [#741]: https://github.com/munich-quantum-toolkit/core/pull/741 +> > > > > > > [#724]: https://github.com/munich-quantum-toolkit/core/pull/724 +> > > > > > > [#662]: https://github.com/munich-quantum-toolkit/core/pull/662 +> > > > > > > [#543]: https://github.com/munich-quantum-toolkit/core/pull/543 +> > > > > > > [**@a9b7e70**]: https://github.com/munich-quantum-toolkit/core/pull/798/commits/a9b7e70aaeb532fe8e1e31a7decca86d81eb523f From cac195c63f7ae0263bb55ad98c769fe6b0a13a61 Mon Sep 17 00:00:00 2001 From: Simon Hofmann Date: Wed, 1 Apr 2026 17:21:40 +0200 Subject: [PATCH 08/11] =?UTF-8?q?=F0=9F=93=9D=20Update=20CHANGELOG=20to=20?= =?UTF-8?q?remove=20merge=20conflict=20markers=20and=20ensure=20proper=20f?= =?UTF-8?q?ormatting?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 346 +++++++++++++++++++++++++-------------------------- 1 file changed, 171 insertions(+), 175 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a6211c3fcb..2bcb7a0e52 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -335,7 +335,6 @@ _📚 Refer to the [GitHub Release Notes](https://github.com/munich-quantum-tool -<<<<<<< HEAD [#1596]: https://github.com/munich-quantum-toolkit/core/pull/1596 [#1593]: https://github.com/munich-quantum-toolkit/core/pull/1593 [#1588]: https://github.com/munich-quantum-toolkit/core/pull/1588 @@ -347,182 +346,179 @@ _📚 Refer to the [GitHub Release Notes](https://github.com/munich-quantum-tool [#1570]: https://github.com/munich-quantum-toolkit/core/pull/1570 [#1569]: https://github.com/munich-quantum-toolkit/core/pull/1569 [#1568]: https://github.com/munich-quantum-toolkit/core/pull/1568 +[#1567]: https://github.com/munich-quantum-toolkit/core/pull/1567 [#1565]: https://github.com/munich-quantum-toolkit/core/pull/1565 [#1564]: https://github.com/munich-quantum-toolkit/core/pull/1564 -======= -[#1567]: https://github.com/munich-quantum-toolkit/core/pull/1567 - -> > > > > > > 284ce487 (📝 Update CHANGELOG to include PR #1567) -> > > > > > > [#1554]: https://github.com/munich-quantum-toolkit/core/pull/1554 -> > > > > > > [#1550]: https://github.com/munich-quantum-toolkit/core/pull/1550 -> > > > > > > [#1549]: https://github.com/munich-quantum-toolkit/core/pull/1549 -> > > > > > > [#1548]: https://github.com/munich-quantum-toolkit/core/pull/1548 -> > > > > > > [#1547]: https://github.com/munich-quantum-toolkit/core/pull/1547 -> > > > > > > [#1542]: https://github.com/munich-quantum-toolkit/core/pull/1542 -> > > > > > > [#1537]: https://github.com/munich-quantum-toolkit/core/pull/1537 -> > > > > > > [#1521]: https://github.com/munich-quantum-toolkit/core/pull/1521 -> > > > > > > [#1513]: https://github.com/munich-quantum-toolkit/core/pull/1513 -> > > > > > > [#1510]: https://github.com/munich-quantum-toolkit/core/pull/1510 -> > > > > > > [#1507]: https://github.com/munich-quantum-toolkit/core/pull/1507 -> > > > > > > [#1506]: https://github.com/munich-quantum-toolkit/core/pull/1506 -> > > > > > > [#1481]: https://github.com/munich-quantum-toolkit/core/pull/1481 -> > > > > > > [#1479]: https://github.com/munich-quantum-toolkit/core/pull/1479 -> > > > > > > [#1475]: https://github.com/munich-quantum-toolkit/core/pull/1475 -> > > > > > > [#1474]: https://github.com/munich-quantum-toolkit/core/pull/1474 -> > > > > > > [#1472]: https://github.com/munich-quantum-toolkit/core/pull/1472 -> > > > > > > [#1471]: https://github.com/munich-quantum-toolkit/core/pull/1471 -> > > > > > > [#1470]: https://github.com/munich-quantum-toolkit/core/pull/1470 -> > > > > > > [#1466]: https://github.com/munich-quantum-toolkit/core/pull/1466 -> > > > > > > [#1465]: https://github.com/munich-quantum-toolkit/core/pull/1465 -> > > > > > > [#1464]: https://github.com/munich-quantum-toolkit/core/pull/1464 -> > > > > > > [#1458]: https://github.com/munich-quantum-toolkit/core/pull/1458 -> > > > > > > [#1453]: https://github.com/munich-quantum-toolkit/core/pull/1453 -> > > > > > > [#1447]: https://github.com/munich-quantum-toolkit/core/pull/1447 -> > > > > > > [#1446]: https://github.com/munich-quantum-toolkit/core/pull/1446 -> > > > > > > [#1444]: https://github.com/munich-quantum-toolkit/core/pull/1444 -> > > > > > > [#1443]: https://github.com/munich-quantum-toolkit/core/pull/1443 -> > > > > > > [#1437]: https://github.com/munich-quantum-toolkit/core/pull/1437 -> > > > > > > [#1436]: https://github.com/munich-quantum-toolkit/core/pull/1436 -> > > > > > > [#1430]: https://github.com/munich-quantum-toolkit/core/pull/1430 -> > > > > > > [#1428]: https://github.com/munich-quantum-toolkit/core/pull/1428 -> > > > > > > [#1415]: https://github.com/munich-quantum-toolkit/core/pull/1415 -> > > > > > > [#1414]: https://github.com/munich-quantum-toolkit/core/pull/1414 -> > > > > > > [#1413]: https://github.com/munich-quantum-toolkit/core/pull/1413 -> > > > > > > [#1412]: https://github.com/munich-quantum-toolkit/core/pull/1412 -> > > > > > > [#1411]: https://github.com/munich-quantum-toolkit/core/pull/1411 -> > > > > > > [#1406]: https://github.com/munich-quantum-toolkit/core/pull/1406 -> > > > > > > [#1403]: https://github.com/munich-quantum-toolkit/core/pull/1403 -> > > > > > > [#1402]: https://github.com/munich-quantum-toolkit/core/pull/1402 -> > > > > > > [#1385]: https://github.com/munich-quantum-toolkit/core/pull/1385 -> > > > > > > [#1384]: https://github.com/munich-quantum-toolkit/core/pull/1384 -> > > > > > > [#1383]: https://github.com/munich-quantum-toolkit/core/pull/1383 -> > > > > > > [#1382]: https://github.com/munich-quantum-toolkit/core/pull/1382 -> > > > > > > [#1381]: https://github.com/munich-quantum-toolkit/core/pull/1381 -> > > > > > > [#1378]: https://github.com/munich-quantum-toolkit/core/pull/1378 -> > > > > > > [#1375]: https://github.com/munich-quantum-toolkit/core/pull/1375 -> > > > > > > [#1371]: https://github.com/munich-quantum-toolkit/core/pull/1371 -> > > > > > > [#1359]: https://github.com/munich-quantum-toolkit/core/pull/1359 -> > > > > > > [#1356]: https://github.com/munich-quantum-toolkit/core/pull/1356 -> > > > > > > [#1355]: https://github.com/munich-quantum-toolkit/core/pull/1355 -> > > > > > > [#1338]: https://github.com/munich-quantum-toolkit/core/pull/1338 -> > > > > > > [#1336]: https://github.com/munich-quantum-toolkit/core/pull/1336 -> > > > > > > [#1330]: https://github.com/munich-quantum-toolkit/core/pull/1330 -> > > > > > > [#1328]: https://github.com/munich-quantum-toolkit/core/pull/1328 -> > > > > > > [#1327]: https://github.com/munich-quantum-toolkit/core/pull/1327 -> > > > > > > [#1310]: https://github.com/munich-quantum-toolkit/core/pull/1310 -> > > > > > > [#1301]: https://github.com/munich-quantum-toolkit/core/pull/1301 -> > > > > > > [#1300]: https://github.com/munich-quantum-toolkit/core/pull/1300 -> > > > > > > [#1299]: https://github.com/munich-quantum-toolkit/core/pull/1299 -> > > > > > > [#1294]: https://github.com/munich-quantum-toolkit/core/pull/1294 -> > > > > > > [#1293]: https://github.com/munich-quantum-toolkit/core/pull/1293 -> > > > > > > [#1287]: https://github.com/munich-quantum-toolkit/core/pull/1287 -> > > > > > > [#1283]: https://github.com/munich-quantum-toolkit/core/pull/1283 -> > > > > > > [#1279]: https://github.com/munich-quantum-toolkit/core/pull/1279 -> > > > > > > [#1276]: https://github.com/munich-quantum-toolkit/core/pull/1276 -> > > > > > > [#1271]: https://github.com/munich-quantum-toolkit/core/pull/1271 -> > > > > > > [#1269]: https://github.com/munich-quantum-toolkit/core/pull/1269 -> > > > > > > [#1264]: https://github.com/munich-quantum-toolkit/core/pull/1264 -> > > > > > > [#1263]: https://github.com/munich-quantum-toolkit/core/pull/1263 -> > > > > > > [#1247]: https://github.com/munich-quantum-toolkit/core/pull/1247 -> > > > > > > [#1246]: https://github.com/munich-quantum-toolkit/core/pull/1246 -> > > > > > > [#1243]: https://github.com/munich-quantum-toolkit/core/pull/1243 -> > > > > > > [#1237]: https://github.com/munich-quantum-toolkit/core/pull/1237 -> > > > > > > [#1236]: https://github.com/munich-quantum-toolkit/core/pull/1236 -> > > > > > > [#1235]: https://github.com/munich-quantum-toolkit/core/pull/1235 -> > > > > > > [#1232]: https://github.com/munich-quantum-toolkit/core/pull/1232 -> > > > > > > [#1224]: https://github.com/munich-quantum-toolkit/core/pull/1224 -> > > > > > > [#1223]: https://github.com/munich-quantum-toolkit/core/pull/1223 -> > > > > > > [#1211]: https://github.com/munich-quantum-toolkit/core/pull/1211 -> > > > > > > [#1210]: https://github.com/munich-quantum-toolkit/core/pull/1210 -> > > > > > > [#1209]: https://github.com/munich-quantum-toolkit/core/pull/1209 -> > > > > > > [#1207]: https://github.com/munich-quantum-toolkit/core/pull/1207 -> > > > > > > [#1186]: https://github.com/munich-quantum-toolkit/core/pull/1186 -> > > > > > > [#1181]: https://github.com/munich-quantum-toolkit/core/pull/1181 -> > > > > > > [#1180]: https://github.com/munich-quantum-toolkit/core/pull/1180 -> > > > > > > [#1165]: https://github.com/munich-quantum-toolkit/core/pull/1165 -> > > > > > > [#1164]: https://github.com/munich-quantum-toolkit/core/pull/1164 -> > > > > > > [#1157]: https://github.com/munich-quantum-toolkit/core/pull/1157 -> > > > > > > [#1151]: https://github.com/munich-quantum-toolkit/core/pull/1151 -> > > > > > > [#1148]: https://github.com/munich-quantum-toolkit/core/pull/1148 -> > > > > > > [#1147]: https://github.com/munich-quantum-toolkit/core/pull/1147 -> > > > > > > [#1140]: https://github.com/munich-quantum-toolkit/core/pull/1140 -> > > > > > > [#1139]: https://github.com/munich-quantum-toolkit/core/pull/1139 -> > > > > > > [#1117]: https://github.com/munich-quantum-toolkit/core/pull/1117 -> > > > > > > [#1116]: https://github.com/munich-quantum-toolkit/core/pull/1116 -> > > > > > > [#1108]: https://github.com/munich-quantum-toolkit/core/pull/1108 -> > > > > > > [#1106]: https://github.com/munich-quantum-toolkit/core/pull/1106 -> > > > > > > [#1100]: https://github.com/munich-quantum-toolkit/core/pull/1100 -> > > > > > > [#1099]: https://github.com/munich-quantum-toolkit/core/pull/1099 -> > > > > > > [#1098]: https://github.com/munich-quantum-toolkit/core/pull/1098 -> > > > > > > [#1091]: https://github.com/munich-quantum-toolkit/core/pull/1091 -> > > > > > > [#1089]: https://github.com/munich-quantum-toolkit/core/pull/1089 -> > > > > > > [#1088]: https://github.com/munich-quantum-toolkit/core/pull/1088 -> > > > > > > [#1076]: https://github.com/munich-quantum-toolkit/core/pull/1076 -> > > > > > > [#1075]: https://github.com/munich-quantum-toolkit/core/pull/1075 -> > > > > > > [#1071]: https://github.com/munich-quantum-toolkit/core/pull/1071 -> > > > > > > [#1047]: https://github.com/munich-quantum-toolkit/core/pull/1047 -> > > > > > > [#1042]: https://github.com/munich-quantum-toolkit/core/pull/1042 -> > > > > > > [#1020]: https://github.com/munich-quantum-toolkit/core/pull/1020 -> > > > > > > [#1019]: https://github.com/munich-quantum-toolkit/core/pull/1019 -> > > > > > > [#1010]: https://github.com/munich-quantum-toolkit/core/pull/1010 -> > > > > > > [#1001]: https://github.com/munich-quantum-toolkit/core/pull/1001 -> > > > > > > [#996]: https://github.com/munich-quantum-toolkit/core/pull/996 -> > > > > > > [#984]: https://github.com/munich-quantum-toolkit/core/pull/984 -> > > > > > > [#982]: https://github.com/munich-quantum-toolkit/core/pull/982 -> > > > > > > [#975]: https://github.com/munich-quantum-toolkit/core/pull/975 -> > > > > > > [#973]: https://github.com/munich-quantum-toolkit/core/pull/973 -> > > > > > > [#964]: https://github.com/munich-quantum-toolkit/core/pull/964 -> > > > > > > [#959]: https://github.com/munich-quantum-toolkit/core/pull/959 -> > > > > > > [#934]: https://github.com/munich-quantum-toolkit/core/pull/934 -> > > > > > > [#933]: https://github.com/munich-quantum-toolkit/core/pull/933 -> > > > > > > [#932]: https://github.com/munich-quantum-toolkit/core/pull/932 -> > > > > > > [#931]: https://github.com/munich-quantum-toolkit/core/pull/931 -> > > > > > > [#930]: https://github.com/munich-quantum-toolkit/core/pull/930 -> > > > > > > [#926]: https://github.com/munich-quantum-toolkit/core/pull/926 -> > > > > > > [#921]: https://github.com/munich-quantum-toolkit/core/pull/921 -> > > > > > > [#913]: https://github.com/munich-quantum-toolkit/core/pull/913 -> > > > > > > [#912]: https://github.com/munich-quantum-toolkit/core/pull/912 -> > > > > > > [#911]: https://github.com/munich-quantum-toolkit/core/pull/911 -> > > > > > > [#908]: https://github.com/munich-quantum-toolkit/core/pull/908 -> > > > > > > [#900]: https://github.com/munich-quantum-toolkit/core/pull/900 -> > > > > > > [#897]: https://github.com/munich-quantum-toolkit/core/pull/897 -> > > > > > > [#895]: https://github.com/munich-quantum-toolkit/core/pull/895 -> > > > > > > [#893]: https://github.com/munich-quantum-toolkit/core/pull/893 -> > > > > > > [#892]: https://github.com/munich-quantum-toolkit/core/pull/892 -> > > > > > > [#886]: https://github.com/munich-quantum-toolkit/core/pull/886 -> > > > > > > [#885]: https://github.com/munich-quantum-toolkit/core/pull/885 -> > > > > > > [#883]: https://github.com/munich-quantum-toolkit/core/pull/883 -> > > > > > > [#882]: https://github.com/munich-quantum-toolkit/core/pull/882 -> > > > > > > [#879]: https://github.com/munich-quantum-toolkit/core/pull/879 -> > > > > > > [#878]: https://github.com/munich-quantum-toolkit/core/pull/878 -> > > > > > > [#877]: https://github.com/munich-quantum-toolkit/core/pull/877 -> > > > > > > [#866]: https://github.com/munich-quantum-toolkit/core/pull/866 -> > > > > > > [#860]: https://github.com/munich-quantum-toolkit/core/pull/860 -> > > > > > > [#859]: https://github.com/munich-quantum-toolkit/core/pull/859 -> > > > > > > [#858]: https://github.com/munich-quantum-toolkit/core/pull/858 -> > > > > > > [#849]: https://github.com/munich-quantum-toolkit/core/pull/849 -> > > > > > > [#847]: https://github.com/munich-quantum-toolkit/core/pull/847 -> > > > > > > [#846]: https://github.com/munich-quantum-toolkit/core/pull/846 -> > > > > > > [#842]: https://github.com/munich-quantum-toolkit/core/pull/842 -> > > > > > > [#839]: https://github.com/munich-quantum-toolkit/core/pull/839 -> > > > > > > [#838]: https://github.com/munich-quantum-toolkit/core/pull/838 -> > > > > > > [#832]: https://github.com/munich-quantum-toolkit/core/pull/832 -> > > > > > > [#831]: https://github.com/munich-quantum-toolkit/core/pull/831 -> > > > > > > [#822]: https://github.com/munich-quantum-toolkit/core/pull/822 -> > > > > > > [#817]: https://github.com/munich-quantum-toolkit/core/pull/817 -> > > > > > > [#810]: https://github.com/munich-quantum-toolkit/core/pull/810 -> > > > > > > [#807]: https://github.com/munich-quantum-toolkit/core/pull/807 -> > > > > > > [#802]: https://github.com/munich-quantum-toolkit/core/pull/802 -> > > > > > > [#798]: https://github.com/munich-quantum-toolkit/core/pull/798 -> > > > > > > [#789]: https://github.com/munich-quantum-toolkit/core/pull/789 -> > > > > > > [#763]: https://github.com/munich-quantum-toolkit/core/pull/763 -> > > > > > > [#762]: https://github.com/munich-quantum-toolkit/core/pull/762 -> > > > > > > [#758]: https://github.com/munich-quantum-toolkit/core/pull/758 -> > > > > > > [#741]: https://github.com/munich-quantum-toolkit/core/pull/741 -> > > > > > > [#724]: https://github.com/munich-quantum-toolkit/core/pull/724 -> > > > > > > [#662]: https://github.com/munich-quantum-toolkit/core/pull/662 -> > > > > > > [#543]: https://github.com/munich-quantum-toolkit/core/pull/543 -> > > > > > > [**@a9b7e70**]: https://github.com/munich-quantum-toolkit/core/pull/798/commits/a9b7e70aaeb532fe8e1e31a7decca86d81eb523f +[#1554]: https://github.com/munich-quantum-toolkit/core/pull/1554 +[#1550]: https://github.com/munich-quantum-toolkit/core/pull/1550 +[#1549]: https://github.com/munich-quantum-toolkit/core/pull/1549 +[#1548]: https://github.com/munich-quantum-toolkit/core/pull/1548 +[#1547]: https://github.com/munich-quantum-toolkit/core/pull/1547 +[#1542]: https://github.com/munich-quantum-toolkit/core/pull/1542 +[#1537]: https://github.com/munich-quantum-toolkit/core/pull/1537 +[#1521]: https://github.com/munich-quantum-toolkit/core/pull/1521 +[#1513]: https://github.com/munich-quantum-toolkit/core/pull/1513 +[#1510]: https://github.com/munich-quantum-toolkit/core/pull/1510 +[#1507]: https://github.com/munich-quantum-toolkit/core/pull/1507 +[#1506]: https://github.com/munich-quantum-toolkit/core/pull/1506 +[#1481]: https://github.com/munich-quantum-toolkit/core/pull/1481 +[#1479]: https://github.com/munich-quantum-toolkit/core/pull/1479 +[#1475]: https://github.com/munich-quantum-toolkit/core/pull/1475 +[#1474]: https://github.com/munich-quantum-toolkit/core/pull/1474 +[#1472]: https://github.com/munich-quantum-toolkit/core/pull/1472 +[#1471]: https://github.com/munich-quantum-toolkit/core/pull/1471 +[#1470]: https://github.com/munich-quantum-toolkit/core/pull/1470 +[#1466]: https://github.com/munich-quantum-toolkit/core/pull/1466 +[#1465]: https://github.com/munich-quantum-toolkit/core/pull/1465 +[#1464]: https://github.com/munich-quantum-toolkit/core/pull/1464 +[#1458]: https://github.com/munich-quantum-toolkit/core/pull/1458 +[#1453]: https://github.com/munich-quantum-toolkit/core/pull/1453 +[#1447]: https://github.com/munich-quantum-toolkit/core/pull/1447 +[#1446]: https://github.com/munich-quantum-toolkit/core/pull/1446 +[#1444]: https://github.com/munich-quantum-toolkit/core/pull/1444 +[#1443]: https://github.com/munich-quantum-toolkit/core/pull/1443 +[#1437]: https://github.com/munich-quantum-toolkit/core/pull/1437 +[#1436]: https://github.com/munich-quantum-toolkit/core/pull/1436 +[#1430]: https://github.com/munich-quantum-toolkit/core/pull/1430 +[#1428]: https://github.com/munich-quantum-toolkit/core/pull/1428 +[#1415]: https://github.com/munich-quantum-toolkit/core/pull/1415 +[#1414]: https://github.com/munich-quantum-toolkit/core/pull/1414 +[#1413]: https://github.com/munich-quantum-toolkit/core/pull/1413 +[#1412]: https://github.com/munich-quantum-toolkit/core/pull/1412 +[#1411]: https://github.com/munich-quantum-toolkit/core/pull/1411 +[#1406]: https://github.com/munich-quantum-toolkit/core/pull/1406 +[#1403]: https://github.com/munich-quantum-toolkit/core/pull/1403 +[#1402]: https://github.com/munich-quantum-toolkit/core/pull/1402 +[#1385]: https://github.com/munich-quantum-toolkit/core/pull/1385 +[#1384]: https://github.com/munich-quantum-toolkit/core/pull/1384 +[#1383]: https://github.com/munich-quantum-toolkit/core/pull/1383 +[#1382]: https://github.com/munich-quantum-toolkit/core/pull/1382 +[#1381]: https://github.com/munich-quantum-toolkit/core/pull/1381 +[#1378]: https://github.com/munich-quantum-toolkit/core/pull/1378 +[#1375]: https://github.com/munich-quantum-toolkit/core/pull/1375 +[#1371]: https://github.com/munich-quantum-toolkit/core/pull/1371 +[#1359]: https://github.com/munich-quantum-toolkit/core/pull/1359 +[#1356]: https://github.com/munich-quantum-toolkit/core/pull/1356 +[#1355]: https://github.com/munich-quantum-toolkit/core/pull/1355 +[#1338]: https://github.com/munich-quantum-toolkit/core/pull/1338 +[#1336]: https://github.com/munich-quantum-toolkit/core/pull/1336 +[#1330]: https://github.com/munich-quantum-toolkit/core/pull/1330 +[#1328]: https://github.com/munich-quantum-toolkit/core/pull/1328 +[#1327]: https://github.com/munich-quantum-toolkit/core/pull/1327 +[#1310]: https://github.com/munich-quantum-toolkit/core/pull/1310 +[#1301]: https://github.com/munich-quantum-toolkit/core/pull/1301 +[#1300]: https://github.com/munich-quantum-toolkit/core/pull/1300 +[#1299]: https://github.com/munich-quantum-toolkit/core/pull/1299 +[#1294]: https://github.com/munich-quantum-toolkit/core/pull/1294 +[#1293]: https://github.com/munich-quantum-toolkit/core/pull/1293 +[#1287]: https://github.com/munich-quantum-toolkit/core/pull/1287 +[#1283]: https://github.com/munich-quantum-toolkit/core/pull/1283 +[#1279]: https://github.com/munich-quantum-toolkit/core/pull/1279 +[#1276]: https://github.com/munich-quantum-toolkit/core/pull/1276 +[#1271]: https://github.com/munich-quantum-toolkit/core/pull/1271 +[#1269]: https://github.com/munich-quantum-toolkit/core/pull/1269 +[#1264]: https://github.com/munich-quantum-toolkit/core/pull/1264 +[#1263]: https://github.com/munich-quantum-toolkit/core/pull/1263 +[#1247]: https://github.com/munich-quantum-toolkit/core/pull/1247 +[#1246]: https://github.com/munich-quantum-toolkit/core/pull/1246 +[#1243]: https://github.com/munich-quantum-toolkit/core/pull/1243 +[#1237]: https://github.com/munich-quantum-toolkit/core/pull/1237 +[#1236]: https://github.com/munich-quantum-toolkit/core/pull/1236 +[#1235]: https://github.com/munich-quantum-toolkit/core/pull/1235 +[#1232]: https://github.com/munich-quantum-toolkit/core/pull/1232 +[#1224]: https://github.com/munich-quantum-toolkit/core/pull/1224 +[#1223]: https://github.com/munich-quantum-toolkit/core/pull/1223 +[#1211]: https://github.com/munich-quantum-toolkit/core/pull/1211 +[#1210]: https://github.com/munich-quantum-toolkit/core/pull/1210 +[#1209]: https://github.com/munich-quantum-toolkit/core/pull/1209 +[#1207]: https://github.com/munich-quantum-toolkit/core/pull/1207 +[#1186]: https://github.com/munich-quantum-toolkit/core/pull/1186 +[#1181]: https://github.com/munich-quantum-toolkit/core/pull/1181 +[#1180]: https://github.com/munich-quantum-toolkit/core/pull/1180 +[#1165]: https://github.com/munich-quantum-toolkit/core/pull/1165 +[#1164]: https://github.com/munich-quantum-toolkit/core/pull/1164 +[#1157]: https://github.com/munich-quantum-toolkit/core/pull/1157 +[#1151]: https://github.com/munich-quantum-toolkit/core/pull/1151 +[#1148]: https://github.com/munich-quantum-toolkit/core/pull/1148 +[#1147]: https://github.com/munich-quantum-toolkit/core/pull/1147 +[#1140]: https://github.com/munich-quantum-toolkit/core/pull/1140 +[#1139]: https://github.com/munich-quantum-toolkit/core/pull/1139 +[#1117]: https://github.com/munich-quantum-toolkit/core/pull/1117 +[#1116]: https://github.com/munich-quantum-toolkit/core/pull/1116 +[#1108]: https://github.com/munich-quantum-toolkit/core/pull/1108 +[#1106]: https://github.com/munich-quantum-toolkit/core/pull/1106 +[#1100]: https://github.com/munich-quantum-toolkit/core/pull/1100 +[#1099]: https://github.com/munich-quantum-toolkit/core/pull/1099 +[#1098]: https://github.com/munich-quantum-toolkit/core/pull/1098 +[#1091]: https://github.com/munich-quantum-toolkit/core/pull/1091 +[#1089]: https://github.com/munich-quantum-toolkit/core/pull/1089 +[#1088]: https://github.com/munich-quantum-toolkit/core/pull/1088 +[#1076]: https://github.com/munich-quantum-toolkit/core/pull/1076 +[#1075]: https://github.com/munich-quantum-toolkit/core/pull/1075 +[#1071]: https://github.com/munich-quantum-toolkit/core/pull/1071 +[#1047]: https://github.com/munich-quantum-toolkit/core/pull/1047 +[#1042]: https://github.com/munich-quantum-toolkit/core/pull/1042 +[#1020]: https://github.com/munich-quantum-toolkit/core/pull/1020 +[#1019]: https://github.com/munich-quantum-toolkit/core/pull/1019 +[#1010]: https://github.com/munich-quantum-toolkit/core/pull/1010 +[#1001]: https://github.com/munich-quantum-toolkit/core/pull/1001 +[#996]: https://github.com/munich-quantum-toolkit/core/pull/996 +[#984]: https://github.com/munich-quantum-toolkit/core/pull/984 +[#982]: https://github.com/munich-quantum-toolkit/core/pull/982 +[#975]: https://github.com/munich-quantum-toolkit/core/pull/975 +[#973]: https://github.com/munich-quantum-toolkit/core/pull/973 +[#964]: https://github.com/munich-quantum-toolkit/core/pull/964 +[#959]: https://github.com/munich-quantum-toolkit/core/pull/959 +[#934]: https://github.com/munich-quantum-toolkit/core/pull/934 +[#933]: https://github.com/munich-quantum-toolkit/core/pull/933 +[#932]: https://github.com/munich-quantum-toolkit/core/pull/932 +[#931]: https://github.com/munich-quantum-toolkit/core/pull/931 +[#930]: https://github.com/munich-quantum-toolkit/core/pull/930 +[#926]: https://github.com/munich-quantum-toolkit/core/pull/926 +[#921]: https://github.com/munich-quantum-toolkit/core/pull/921 +[#913]: https://github.com/munich-quantum-toolkit/core/pull/913 +[#912]: https://github.com/munich-quantum-toolkit/core/pull/912 +[#911]: https://github.com/munich-quantum-toolkit/core/pull/911 +[#908]: https://github.com/munich-quantum-toolkit/core/pull/908 +[#900]: https://github.com/munich-quantum-toolkit/core/pull/900 +[#897]: https://github.com/munich-quantum-toolkit/core/pull/897 +[#895]: https://github.com/munich-quantum-toolkit/core/pull/895 +[#893]: https://github.com/munich-quantum-toolkit/core/pull/893 +[#892]: https://github.com/munich-quantum-toolkit/core/pull/892 +[#886]: https://github.com/munich-quantum-toolkit/core/pull/886 +[#885]: https://github.com/munich-quantum-toolkit/core/pull/885 +[#883]: https://github.com/munich-quantum-toolkit/core/pull/883 +[#882]: https://github.com/munich-quantum-toolkit/core/pull/882 +[#879]: https://github.com/munich-quantum-toolkit/core/pull/879 +[#878]: https://github.com/munich-quantum-toolkit/core/pull/878 +[#877]: https://github.com/munich-quantum-toolkit/core/pull/877 +[#866]: https://github.com/munich-quantum-toolkit/core/pull/866 +[#860]: https://github.com/munich-quantum-toolkit/core/pull/860 +[#859]: https://github.com/munich-quantum-toolkit/core/pull/859 +[#858]: https://github.com/munich-quantum-toolkit/core/pull/858 +[#849]: https://github.com/munich-quantum-toolkit/core/pull/849 +[#847]: https://github.com/munich-quantum-toolkit/core/pull/847 +[#846]: https://github.com/munich-quantum-toolkit/core/pull/846 +[#842]: https://github.com/munich-quantum-toolkit/core/pull/842 +[#839]: https://github.com/munich-quantum-toolkit/core/pull/839 +[#838]: https://github.com/munich-quantum-toolkit/core/pull/838 +[#832]: https://github.com/munich-quantum-toolkit/core/pull/832 +[#831]: https://github.com/munich-quantum-toolkit/core/pull/831 +[#822]: https://github.com/munich-quantum-toolkit/core/pull/822 +[#817]: https://github.com/munich-quantum-toolkit/core/pull/817 +[#810]: https://github.com/munich-quantum-toolkit/core/pull/810 +[#807]: https://github.com/munich-quantum-toolkit/core/pull/807 +[#802]: https://github.com/munich-quantum-toolkit/core/pull/802 +[#798]: https://github.com/munich-quantum-toolkit/core/pull/798 +[#789]: https://github.com/munich-quantum-toolkit/core/pull/789 +[#763]: https://github.com/munich-quantum-toolkit/core/pull/763 +[#762]: https://github.com/munich-quantum-toolkit/core/pull/762 +[#758]: https://github.com/munich-quantum-toolkit/core/pull/758 +[#741]: https://github.com/munich-quantum-toolkit/core/pull/741 +[#724]: https://github.com/munich-quantum-toolkit/core/pull/724 +[#662]: https://github.com/munich-quantum-toolkit/core/pull/662 +[#543]: https://github.com/munich-quantum-toolkit/core/pull/543 +[**@a9b7e70**]: https://github.com/munich-quantum-toolkit/core/pull/798/commits/a9b7e70aaeb532fe8e1e31a7decca86d81eb523f From b550c38984857a56aede5d8e5edde92171efc281 Mon Sep 17 00:00:00 2001 From: Simon Hofmann Date: Wed, 1 Apr 2026 17:24:54 +0200 Subject: [PATCH 09/11] =?UTF-8?q?=F0=9F=94=A7=20Refactor=20`staticQubits`?= =?UTF-8?q?=20function=20in=20QC=20and=20QCO=20programs=20to=20remove=20un?= =?UTF-8?q?necessary=20variable=20assignments.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mlir/unittests/programs/qc_programs.cpp | 5 ++--- mlir/unittests/programs/qco_programs.cpp | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/mlir/unittests/programs/qc_programs.cpp b/mlir/unittests/programs/qc_programs.cpp index a0cc4bdc24..6b55fbe957 100644 --- a/mlir/unittests/programs/qc_programs.cpp +++ b/mlir/unittests/programs/qc_programs.cpp @@ -30,14 +30,13 @@ void allocMultipleQubitRegisters(QCProgramBuilder& b) { void allocLargeRegister(QCProgramBuilder& b) { b.allocQubitRegister(100); } void staticQubits(QCProgramBuilder& b) { - const auto q0 = b.staticQubit(0); - const auto q1 = b.staticQubit(1); + b.staticQubit(0); + b.staticQubit(1); } void staticQubitsWithOps(QCProgramBuilder& b) { auto q0 = b.staticQubit(0); auto q1 = b.staticQubit(1); - b.h(q0); b.h(q1); } diff --git a/mlir/unittests/programs/qco_programs.cpp b/mlir/unittests/programs/qco_programs.cpp index 1829f7d614..ee7d7860eb 100644 --- a/mlir/unittests/programs/qco_programs.cpp +++ b/mlir/unittests/programs/qco_programs.cpp @@ -34,8 +34,8 @@ void allocMultipleQubitRegisters(QCOProgramBuilder& b) { void allocLargeRegister(QCOProgramBuilder& b) { b.allocQubitRegister(100); } void staticQubits(QCOProgramBuilder& b) { - auto q0 = b.staticQubit(0); - auto q1 = b.staticQubit(1); + b.staticQubit(0); + b.staticQubit(1); } void staticQubitsWithOps(QCOProgramBuilder& b) { From 14aa2d1b47db7dc1e695e43527ef0a87a7a18267 Mon Sep 17 00:00:00 2001 From: Simon Hofmann Date: Wed, 1 Apr 2026 17:43:04 +0200 Subject: [PATCH 10/11] =?UTF-8?q?=F0=9F=94=A7=20Rename=20test=20case=20for?= =?UTF-8?q?=20static=20qubits=20to=20improve=20clarity=20and=20consistency?= =?UTF-8?q?=20in=20QCO=20unit=20tests.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mlir/unittests/Dialect/QCO/IR/test_qco_ir.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mlir/unittests/Dialect/QCO/IR/test_qco_ir.cpp b/mlir/unittests/Dialect/QCO/IR/test_qco_ir.cpp index fa293539f2..6b1cec700a 100644 --- a/mlir/unittests/Dialect/QCO/IR/test_qco_ir.cpp +++ b/mlir/unittests/Dialect/QCO/IR/test_qco_ir.cpp @@ -1075,7 +1075,7 @@ INSTANTIATE_TEST_SUITE_P( QCOTestCase{"StaticQubitsWithInv", MQT_NAMED_BUILDER(staticQubitsWithInv), MQT_NAMED_BUILDER(staticQubitsWithInv)}, - QCOTestCase{"StaticQubitsWithDuplicatesCanonical", + QCOTestCase{"StaticQubitsCanonical", MQT_NAMED_BUILDER(staticQubitsCanonical), MQT_NAMED_BUILDER(staticQubitsCanonical)}, QCOTestCase{"AllocSinkPair", MQT_NAMED_BUILDER(allocSinkPair), From e9c30e7457f1caf5dfef719c8fc00aed29293257 Mon Sep 17 00:00:00 2001 From: burgholzer Date: Wed, 1 Apr 2026 19:45:11 +0200 Subject: [PATCH 11/11] =?UTF-8?q?=F0=9F=94=A5=20Remove=20tests=20that=20do?= =?UTF-8?q?=20not=20really=20test=20anything?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: burgholzer --- mlir/unittests/Compiler/test_compiler_pipeline.cpp | 5 ----- .../unittests/Conversion/QCToQCO/test_qc_to_qco.cpp | 3 --- .../unittests/Conversion/QCToQIR/test_qc_to_qir.cpp | 3 --- mlir/unittests/Dialect/QCO/IR/test_qco_ir.cpp | 3 --- mlir/unittests/programs/qco_programs.cpp | 13 ------------- mlir/unittests/programs/qco_programs.h | 3 --- 6 files changed, 30 deletions(-) diff --git a/mlir/unittests/Compiler/test_compiler_pipeline.cpp b/mlir/unittests/Compiler/test_compiler_pipeline.cpp index 95ad276b25..184bb7d677 100644 --- a/mlir/unittests/Compiler/test_compiler_pipeline.cpp +++ b/mlir/unittests/Compiler/test_compiler_pipeline.cpp @@ -218,11 +218,6 @@ INSTANTIATE_TEST_SUITE_P( MQT_NAMED_BUILDER(mlir::qc::staticQubitsWithInv), MQT_NAMED_BUILDER(mlir::qc::staticQubitsWithInv), MQT_NAMED_BUILDER(mlir::qir::staticQubitsWithInv), false}, - CompilerPipelineTestCase{ - "StaticQubitsWithDuplicates", nullptr, - MQT_NAMED_BUILDER(mlir::qc::staticQubitsWithDuplicates), - MQT_NAMED_BUILDER(mlir::qc::staticQubitsCanonical), - MQT_NAMED_BUILDER(mlir::qir::staticQubitsCanonical), false}, CompilerPipelineTestCase{"AllocQubit", MQT_NAMED_BUILDER(qc::allocQubit), nullptr, MQT_NAMED_BUILDER(mlir::qc::allocQubit), diff --git a/mlir/unittests/Conversion/QCToQCO/test_qc_to_qco.cpp b/mlir/unittests/Conversion/QCToQCO/test_qc_to_qco.cpp index 16b4892e3e..ce017e956f 100644 --- a/mlir/unittests/Conversion/QCToQCO/test_qc_to_qco.cpp +++ b/mlir/unittests/Conversion/QCToQCO/test_qc_to_qco.cpp @@ -134,9 +134,6 @@ INSTANTIATE_TEST_SUITE_P( QCToQCOTestCase{"StaticQubitsWithInv", MQT_NAMED_BUILDER(qc::staticQubitsWithInv), MQT_NAMED_BUILDER(qco::staticQubitsWithInv)}, - QCToQCOTestCase{"StaticQubitsWithDuplicates", - MQT_NAMED_BUILDER(qc::staticQubitsWithDuplicates), - MQT_NAMED_BUILDER(qco::staticQubitsCanonical)}, QCToQCOTestCase{"AllocDeallocPair", MQT_NAMED_BUILDER(qc::allocDeallocPair), MQT_NAMED_BUILDER(qco::allocSinkPair)})); diff --git a/mlir/unittests/Conversion/QCToQIR/test_qc_to_qir.cpp b/mlir/unittests/Conversion/QCToQIR/test_qc_to_qir.cpp index dca3652c51..ef938ce4e7 100644 --- a/mlir/unittests/Conversion/QCToQIR/test_qc_to_qir.cpp +++ b/mlir/unittests/Conversion/QCToQIR/test_qc_to_qir.cpp @@ -639,9 +639,6 @@ INSTANTIATE_TEST_SUITE_P( QCToQIRTestCase{"StaticQubitsWithInv", MQT_NAMED_BUILDER(qc::staticQubitsWithInv), MQT_NAMED_BUILDER(qir::staticQubitsWithInv)}, - QCToQIRTestCase{"StaticQubitsWithDuplicates", - MQT_NAMED_BUILDER(qc::staticQubitsWithDuplicates), - MQT_NAMED_BUILDER(qir::staticQubitsCanonical)}, QCToQIRTestCase{"AllocDeallocPair", MQT_NAMED_BUILDER(qc::allocDeallocPair), MQT_NAMED_BUILDER(qir::emptyQIR)})); diff --git a/mlir/unittests/Dialect/QCO/IR/test_qco_ir.cpp b/mlir/unittests/Dialect/QCO/IR/test_qco_ir.cpp index 6b1cec700a..8c0c54d2ed 100644 --- a/mlir/unittests/Dialect/QCO/IR/test_qco_ir.cpp +++ b/mlir/unittests/Dialect/QCO/IR/test_qco_ir.cpp @@ -1075,9 +1075,6 @@ INSTANTIATE_TEST_SUITE_P( QCOTestCase{"StaticQubitsWithInv", MQT_NAMED_BUILDER(staticQubitsWithInv), MQT_NAMED_BUILDER(staticQubitsWithInv)}, - QCOTestCase{"StaticQubitsCanonical", - MQT_NAMED_BUILDER(staticQubitsCanonical), - MQT_NAMED_BUILDER(staticQubitsCanonical)}, QCOTestCase{"AllocSinkPair", MQT_NAMED_BUILDER(allocSinkPair), MQT_NAMED_BUILDER(emptyQCO)})); /// @} diff --git a/mlir/unittests/programs/qco_programs.cpp b/mlir/unittests/programs/qco_programs.cpp index ee7d7860eb..e7695e3cac 100644 --- a/mlir/unittests/programs/qco_programs.cpp +++ b/mlir/unittests/programs/qco_programs.cpp @@ -71,19 +71,6 @@ void staticQubitsWithInv(QCOProgramBuilder& b) { })[0]; } -void staticQubitsCanonical(QCOProgramBuilder& b) { - auto q0 = b.staticQubit(0); - auto q1 = b.staticQubit(1); - - q0 = b.rx(std::numbers::pi / 4., q0); - q1 = b.p(std::numbers::pi / 2., q1); - std::tie(q0, q1) = b.rzz(0.123, q0, q1); - std::tie(q0, q1) = b.cx(q0, q1); - q0 = b.inv({q0}, [&](auto targets) -> llvm::SmallVector { - return {b.t(targets[0])}; - })[0]; -} - void allocSinkPair(QCOProgramBuilder& b) { auto q = b.allocQubit(); b.sink(q); diff --git a/mlir/unittests/programs/qco_programs.h b/mlir/unittests/programs/qco_programs.h index 7b55771448..a14100102c 100644 --- a/mlir/unittests/programs/qco_programs.h +++ b/mlir/unittests/programs/qco_programs.h @@ -48,9 +48,6 @@ void staticQubitsWithCtrl(QCOProgramBuilder& b); /// Allocates a static qubit and applies an inverse modifier. void staticQubitsWithInv(QCOProgramBuilder& b); -/// Same as `staticQubitsCanonical` in `qc_programs.cpp` and `qir_programs.cpp`. -void staticQubitsCanonical(QCOProgramBuilder& b); - /// Allocates and explicitly sinks a single qubit. void allocSinkPair(QCOProgramBuilder& b);