mqt-core 3.1.0__tar.gz → 3.2.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of mqt-core might be problematic. Click here for more details.

Files changed (289) hide show
  1. {mqt_core-3.1.0 → mqt_core-3.2.1}/.clang-format +1 -0
  2. {mqt_core-3.1.0 → mqt_core-3.2.1}/.clang-tidy +1 -0
  3. {mqt_core-3.1.0 → mqt_core-3.2.1}/.pre-commit-config.yaml +4 -4
  4. {mqt_core-3.1.0 → mqt_core-3.2.1}/CHANGELOG.md +40 -7
  5. {mqt_core-3.1.0 → mqt_core-3.2.1}/PKG-INFO +5 -4
  6. {mqt_core-3.1.0 → mqt_core-3.2.1}/README.md +3 -3
  7. {mqt_core-3.1.0 → mqt_core-3.2.1}/UPGRADING.md +16 -2
  8. {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/dd/register_dd.cpp +0 -1
  9. {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/dd/register_dd_package.cpp +5 -2
  10. {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/dd/register_matrix_dds.cpp +3 -3
  11. {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/dd/register_vector_dds.cpp +1 -1
  12. {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/ir/operations/register_classic_controlled_operation.cpp +5 -5
  13. {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/ir/operations/register_compound_operation.cpp +1 -1
  14. {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/ir/operations/register_control.cpp +7 -20
  15. {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/ir/operations/register_optype.cpp +4 -10
  16. {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/ir/register_quantum_computation.cpp +2 -1
  17. {mqt_core-3.1.0 → mqt_core-3.2.1}/cmake/CompilerOptions.cmake +1 -1
  18. {mqt_core-3.1.0 → mqt_core-3.2.1}/cmake/ExternalDependencies.cmake +1 -1
  19. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/datastructures/DirectedAcyclicGraph.hpp +4 -4
  20. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/datastructures/DirectedGraph.hpp +8 -8
  21. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/datastructures/UndirectedGraph.hpp +9 -9
  22. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/Node.hpp +1 -1
  23. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/Package.hpp +3 -3
  24. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/ir/operations/Expression.hpp +1 -1
  25. {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/CMakeLists.txt +6 -1
  26. {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/CMakeLists.txt +1 -0
  27. mqt_core-3.2.1/mlir/include/mlir/Conversion/CMakeLists.txt +10 -0
  28. mqt_core-3.2.1/mlir/include/mlir/Conversion/MQTDynToMQTOpt/CMakeLists.txt +13 -0
  29. mqt_core-3.2.1/mlir/include/mlir/Conversion/MQTDynToMQTOpt/MQTDynToMQTOpt.h +23 -0
  30. mqt_core-3.2.1/mlir/include/mlir/Conversion/MQTDynToMQTOpt/MQTDynToMQTOpt.td +28 -0
  31. mqt_core-3.2.1/mlir/include/mlir/Conversion/MQTOptToMQTDyn/CMakeLists.txt +13 -0
  32. mqt_core-3.2.1/mlir/include/mlir/Conversion/MQTOptToMQTDyn/MQTOptToMQTDyn.h +23 -0
  33. mqt_core-3.2.1/mlir/include/mlir/Conversion/MQTOptToMQTDyn/MQTOptToMQTDyn.td +28 -0
  34. {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/MQTOpt/IR/MQTOptDialect.h +13 -0
  35. {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/MQTOpt/IR/MQTOptOps.td +2 -2
  36. {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/tools/quantum-opt/CMakeLists.txt +3 -1
  37. {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/tools/quantum-opt/quantum-opt.cpp +8 -4
  38. {mqt_core-3.1.0 → mqt_core-3.2.1}/noxfile.py +2 -0
  39. {mqt_core-3.1.0 → mqt_core-3.2.1}/pyproject.toml +6 -2
  40. {mqt_core-3.1.0 → mqt_core-3.2.1}/python/mqt/core/_version.py +2 -2
  41. {mqt_core-3.1.0 → mqt_core-3.2.1}/python/mqt/core/dd.pyi +9 -22
  42. {mqt_core-3.1.0 → mqt_core-3.2.1}/python/mqt/core/ir/operations.pyi +58 -86
  43. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/algorithms/BernsteinVazirani.cpp +2 -2
  44. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/algorithms/Grover.cpp +4 -3
  45. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/circuit_optimizer/CircuitOptimizer.cpp +15 -18
  46. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/Approximation.cpp +5 -3
  47. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/ComplexNumbers.cpp +5 -4
  48. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/ComplexValue.cpp +2 -3
  49. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/Edge.cpp +1 -1
  50. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/Export.cpp +4 -4
  51. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/NoiseFunctionality.cpp +3 -3
  52. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/Package.cpp +20 -20
  53. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/Simulation.cpp +1 -2
  54. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/StateGeneration.cpp +13 -12
  55. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/UniqueTable.cpp +3 -4
  56. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/ir/CMakeLists.txt +1 -1
  57. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/ir/Permutation.cpp +2 -2
  58. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/ir/QuantumComputation.cpp +37 -37
  59. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/ir/operations/AodOperation.cpp +1 -1
  60. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/ir/operations/CompoundOperation.cpp +23 -25
  61. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/ir/operations/NonUnitaryOperation.cpp +2 -3
  62. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/ir/operations/Operation.cpp +2 -4
  63. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/ir/operations/StandardOperation.cpp +5 -6
  64. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/ir/operations/SymbolicOperation.cpp +4 -5
  65. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/na/NAComputation.cpp +8 -11
  66. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/qasm3/Importer.cpp +10 -11
  67. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/qasm3/Scanner.cpp +4 -6
  68. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/zx/FunctionalityConstruction.cpp +8 -9
  69. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/zx/Rules.cpp +12 -12
  70. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/zx/ZXDiagram.cpp +21 -19
  71. {mqt_core-3.1.0 → mqt_core-3.2.1}/uv.lock +506 -346
  72. {mqt_core-3.1.0 → mqt_core-3.2.1}/.cmake-format.yaml +0 -0
  73. {mqt_core-3.1.0 → mqt_core-3.2.1}/.editorconfig +0 -0
  74. {mqt_core-3.1.0 → mqt_core-3.2.1}/.git_archival.txt +0 -0
  75. {mqt_core-3.1.0 → mqt_core-3.2.1}/.gitattributes +0 -0
  76. {mqt_core-3.1.0 → mqt_core-3.2.1}/.gitignore +0 -0
  77. {mqt_core-3.1.0 → mqt_core-3.2.1}/.license-tools-config.json +0 -0
  78. {mqt_core-3.1.0 → mqt_core-3.2.1}/.python_version +0 -0
  79. {mqt_core-3.1.0 → mqt_core-3.2.1}/.readthedocs.yaml +0 -0
  80. {mqt_core-3.1.0 → mqt_core-3.2.1}/CITATION.cff +0 -0
  81. {mqt_core-3.1.0 → mqt_core-3.2.1}/CMakeLists.txt +0 -0
  82. {mqt_core-3.1.0 → mqt_core-3.2.1}/LICENSE.md +0 -0
  83. {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/CMakeLists.txt +0 -0
  84. {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/dd/CMakeLists.txt +0 -0
  85. {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/ir/CMakeLists.txt +0 -0
  86. {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/ir/operations/register_non_unitary_operation.cpp +0 -0
  87. {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/ir/operations/register_operation.cpp +0 -0
  88. {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/ir/operations/register_standard_operation.cpp +0 -0
  89. {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/ir/operations/register_symbolic_operation.cpp +0 -0
  90. {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/ir/register_ir.cpp +0 -0
  91. {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/ir/register_operations.cpp +0 -0
  92. {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/ir/register_permutation.cpp +0 -0
  93. {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/ir/register_registers.cpp +0 -0
  94. {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/ir/register_symbolic.cpp +0 -0
  95. {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/ir/symbolic/register_expression.cpp +0 -0
  96. {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/ir/symbolic/register_term.cpp +0 -0
  97. {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/ir/symbolic/register_variable.cpp +0 -0
  98. {mqt_core-3.1.0 → mqt_core-3.2.1}/cmake/AddMQTCoreLibrary.cmake +0 -0
  99. {mqt_core-3.1.0 → mqt_core-3.2.1}/cmake/AddMQTPythonBinding.cmake +0 -0
  100. {mqt_core-3.1.0 → mqt_core-3.2.1}/cmake/Cache.cmake +0 -0
  101. {mqt_core-3.1.0 → mqt_core-3.2.1}/cmake/CompilerWarnings.cmake +0 -0
  102. {mqt_core-3.1.0 → mqt_core-3.2.1}/cmake/FindGMP.cmake +0 -0
  103. {mqt_core-3.1.0 → mqt_core-3.2.1}/cmake/GetVersion.cmake +0 -0
  104. {mqt_core-3.1.0 → mqt_core-3.2.1}/cmake/PackageAddTest.cmake +0 -0
  105. {mqt_core-3.1.0 → mqt_core-3.2.1}/cmake/PreventInSourceBuilds.cmake +0 -0
  106. {mqt_core-3.1.0 → mqt_core-3.2.1}/cmake/Sanitizers.cmake +0 -0
  107. {mqt_core-3.1.0 → mqt_core-3.2.1}/cmake/SetupMLIR.cmake +0 -0
  108. {mqt_core-3.1.0 → mqt_core-3.2.1}/cmake/StandardProjectSettings.cmake +0 -0
  109. {mqt_core-3.1.0 → mqt_core-3.2.1}/cmake/cmake_uninstall.cmake.in +0 -0
  110. {mqt_core-3.1.0 → mqt_core-3.2.1}/cmake/mqt-core-config.cmake.in +0 -0
  111. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/algorithms/BernsteinVazirani.hpp +0 -0
  112. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/algorithms/GHZState.hpp +0 -0
  113. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/algorithms/Grover.hpp +0 -0
  114. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/algorithms/QFT.hpp +0 -0
  115. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/algorithms/QPE.hpp +0 -0
  116. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/algorithms/RandomCliffordCircuit.hpp +0 -0
  117. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/algorithms/StatePreparation.hpp +0 -0
  118. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/algorithms/WState.hpp +0 -0
  119. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/circuit_optimizer/CircuitOptimizer.hpp +0 -0
  120. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/datastructures/DisjointSet.hpp +0 -0
  121. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/datastructures/Layer.hpp +0 -0
  122. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/datastructures/SymmetricMatrix.hpp +0 -0
  123. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/Approximation.hpp +0 -0
  124. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/CachedEdge.hpp +0 -0
  125. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/Complex.hpp +0 -0
  126. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/ComplexNumbers.hpp +0 -0
  127. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/ComplexValue.hpp +0 -0
  128. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/ComputeTable.hpp +0 -0
  129. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/DDDefinitions.hpp +0 -0
  130. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/DDpackageConfig.hpp +0 -0
  131. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/DensityNoiseTable.hpp +0 -0
  132. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/Edge.hpp +0 -0
  133. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/Export.hpp +0 -0
  134. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/FunctionalityConstruction.hpp +0 -0
  135. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/GateMatrixDefinitions.hpp +0 -0
  136. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/LinkedListBase.hpp +0 -0
  137. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/MemoryManager.hpp +0 -0
  138. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/NoiseFunctionality.hpp +0 -0
  139. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/Operations.hpp +0 -0
  140. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/Package_fwd.hpp +0 -0
  141. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/RealNumber.hpp +0 -0
  142. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/RealNumberUniqueTable.hpp +0 -0
  143. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/Simulation.hpp +0 -0
  144. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/StateGeneration.hpp +0 -0
  145. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/StochasticNoiseOperationTable.hpp +0 -0
  146. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/UnaryComputeTable.hpp +0 -0
  147. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/UniqueTable.hpp +0 -0
  148. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/statistics/MemoryManagerStatistics.hpp +0 -0
  149. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/statistics/PackageStatistics.hpp +0 -0
  150. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/statistics/Statistics.hpp +0 -0
  151. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/statistics/TableStatistics.hpp +0 -0
  152. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/statistics/UniqueTableStatistics.hpp +0 -0
  153. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/ir/Definitions.hpp +0 -0
  154. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/ir/Permutation.hpp +0 -0
  155. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/ir/QuantumComputation.hpp +0 -0
  156. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/ir/Register.hpp +0 -0
  157. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/ir/operations/AodOperation.hpp +0 -0
  158. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/ir/operations/ClassicControlledOperation.hpp +0 -0
  159. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/ir/operations/CompoundOperation.hpp +0 -0
  160. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/ir/operations/Control.hpp +0 -0
  161. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/ir/operations/NonUnitaryOperation.hpp +0 -0
  162. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/ir/operations/OpType.hpp +0 -0
  163. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/ir/operations/OpType.inc +0 -0
  164. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/ir/operations/Operation.hpp +0 -0
  165. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/ir/operations/StandardOperation.hpp +0 -0
  166. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/ir/operations/SymbolicOperation.hpp +0 -0
  167. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/na/NAComputation.hpp +0 -0
  168. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/na/entities/Atom.hpp +0 -0
  169. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/na/entities/Location.hpp +0 -0
  170. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/na/entities/Zone.hpp +0 -0
  171. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/na/operations/GlobalCZOp.hpp +0 -0
  172. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/na/operations/GlobalOp.hpp +0 -0
  173. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/na/operations/GlobalRYOp.hpp +0 -0
  174. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/na/operations/LoadOp.hpp +0 -0
  175. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/na/operations/LocalOp.hpp +0 -0
  176. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/na/operations/LocalRZOp.hpp +0 -0
  177. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/na/operations/LocalUOp.hpp +0 -0
  178. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/na/operations/MoveOp.hpp +0 -0
  179. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/na/operations/Op.hpp +0 -0
  180. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/na/operations/ShuttlingOp.hpp +0 -0
  181. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/na/operations/StoreOp.hpp +0 -0
  182. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/qasm3/Exception.hpp +0 -0
  183. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/qasm3/Gate.hpp +0 -0
  184. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/qasm3/Importer.hpp +0 -0
  185. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/qasm3/InstVisitor.hpp +0 -0
  186. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/qasm3/NestedEnvironment.hpp +0 -0
  187. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/qasm3/Parser.hpp +0 -0
  188. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/qasm3/Scanner.hpp +0 -0
  189. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/qasm3/Statement.hpp +0 -0
  190. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/qasm3/Statement_fwd.hpp +0 -0
  191. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/qasm3/StdGates.hpp +0 -0
  192. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/qasm3/Token.hpp +0 -0
  193. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/qasm3/Types.hpp +0 -0
  194. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/qasm3/Types_fwd.hpp +0 -0
  195. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/qasm3/passes/CompilerPass.hpp +0 -0
  196. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/qasm3/passes/ConstEvalPass.hpp +0 -0
  197. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/qasm3/passes/TypeCheckPass.hpp +0 -0
  198. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/zx/FunctionalityConstruction.hpp +0 -0
  199. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/zx/Rational.hpp +0 -0
  200. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/zx/Rules.hpp +0 -0
  201. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/zx/Simplify.hpp +0 -0
  202. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/zx/Utils.hpp +0 -0
  203. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/zx/ZXDefinitions.hpp +0 -0
  204. {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/zx/ZXDiagram.hpp +0 -0
  205. {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/.gitignore +0 -0
  206. {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/CMakeLists.txt +0 -0
  207. {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/CMakeLists.txt +0 -0
  208. {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/Common/Compat.h +0 -0
  209. {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/Common/IR/CommonTraits.h +0 -0
  210. {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/Common/IR/CommonTraits.td +0 -0
  211. {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/Common/IR/StdOps.td.inc +0 -0
  212. {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/MQTDyn/CMakeLists.txt +0 -0
  213. {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/MQTDyn/IR/CMakeLists.txt +0 -0
  214. {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/MQTDyn/IR/MQTDynDialect.h +0 -0
  215. {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/MQTDyn/IR/MQTDynInterfaces.td +0 -0
  216. {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/MQTDyn/IR/MQTDynOps.td +0 -0
  217. {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/MQTDyn/Transforms/CMakeLists.txt +0 -0
  218. {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/MQTDyn/Transforms/Passes.h +0 -0
  219. {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/MQTDyn/Transforms/Passes.td +0 -0
  220. {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/MQTOpt/CMakeLists.txt +0 -0
  221. {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/MQTOpt/IR/CMakeLists.txt +0 -0
  222. {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/MQTOpt/IR/MQTOptInterfaces.td +0 -0
  223. {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/MQTOpt/Transforms/CMakeLists.txt +0 -0
  224. {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/MQTOpt/Transforms/Passes.h +0 -0
  225. {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/MQTOpt/Transforms/Passes.td +0 -0
  226. {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/tools/CMakeLists.txt +0 -0
  227. {mqt_core-3.1.0 → mqt_core-3.2.1}/python/mqt/core/__init__.py +0 -0
  228. {mqt_core-3.1.0 → mqt_core-3.2.1}/python/mqt/core/__main__.py +0 -0
  229. {mqt_core-3.1.0 → mqt_core-3.2.1}/python/mqt/core/_commands.py +0 -0
  230. {mqt_core-3.1.0 → mqt_core-3.2.1}/python/mqt/core/_compat/__init__.py +0 -0
  231. {mqt_core-3.1.0 → mqt_core-3.2.1}/python/mqt/core/_compat/typing.py +0 -0
  232. {mqt_core-3.1.0 → mqt_core-3.2.1}/python/mqt/core/_version.pyi +0 -0
  233. {mqt_core-3.1.0 → mqt_core-3.2.1}/python/mqt/core/dd_evaluation.py +0 -0
  234. {mqt_core-3.1.0 → mqt_core-3.2.1}/python/mqt/core/ir/__init__.pyi +0 -0
  235. {mqt_core-3.1.0 → mqt_core-3.2.1}/python/mqt/core/ir/registers.pyi +0 -0
  236. {mqt_core-3.1.0 → mqt_core-3.2.1}/python/mqt/core/ir/symbolic.pyi +0 -0
  237. {mqt_core-3.1.0 → mqt_core-3.2.1}/python/mqt/core/plugins/__init__.py +0 -0
  238. {mqt_core-3.1.0 → mqt_core-3.2.1}/python/mqt/core/plugins/qiskit/__init__.py +0 -0
  239. {mqt_core-3.1.0 → mqt_core-3.2.1}/python/mqt/core/plugins/qiskit/mqt_to_qiskit.py +0 -0
  240. {mqt_core-3.1.0 → mqt_core-3.2.1}/python/mqt/core/plugins/qiskit/qiskit_to_mqt.py +0 -0
  241. {mqt_core-3.1.0 → mqt_core-3.2.1}/python/mqt/core/py.typed +0 -0
  242. {mqt_core-3.1.0 → mqt_core-3.2.1}/sitecustomize.py +0 -0
  243. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/CMakeLists.txt +0 -0
  244. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/algorithms/CMakeLists.txt +0 -0
  245. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/algorithms/GHZState.cpp +0 -0
  246. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/algorithms/QFT.cpp +0 -0
  247. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/algorithms/QPE.cpp +0 -0
  248. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/algorithms/RandomCliffordCircuit.cpp +0 -0
  249. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/algorithms/StatePreparation.cpp +0 -0
  250. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/algorithms/WState.cpp +0 -0
  251. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/circuit_optimizer/CMakeLists.txt +0 -0
  252. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/datastructures/CMakeLists.txt +0 -0
  253. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/datastructures/Layer.cpp +0 -0
  254. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/CMakeLists.txt +0 -0
  255. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/CachedEdge.cpp +0 -0
  256. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/Complex.cpp +0 -0
  257. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/FunctionalityConstruction.cpp +0 -0
  258. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/GateMatrixDefinitions.cpp +0 -0
  259. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/MemoryManager.cpp +0 -0
  260. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/Node.cpp +0 -0
  261. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/Operations.cpp +0 -0
  262. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/RealNumber.cpp +0 -0
  263. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/RealNumberUniqueTable.cpp +0 -0
  264. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/statistics/MemoryManagerStatistics.cpp +0 -0
  265. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/statistics/PackageStatistics.cpp +0 -0
  266. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/statistics/Statistics.cpp +0 -0
  267. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/statistics/TableStatistics.cpp +0 -0
  268. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/statistics/UniqueTableStatistics.cpp +0 -0
  269. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/ir/operations/ClassicControlledOperation.cpp +0 -0
  270. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/ir/operations/Expression.cpp +0 -0
  271. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/ir/operations/OpType.cpp +0 -0
  272. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/na/CMakeLists.txt +0 -0
  273. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/na/entities/Zone.cpp +0 -0
  274. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/na/operations/GlobalOp.cpp +0 -0
  275. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/na/operations/LoadOp.cpp +0 -0
  276. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/na/operations/LocalOp.cpp +0 -0
  277. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/na/operations/MoveOp.cpp +0 -0
  278. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/na/operations/StoreOp.cpp +0 -0
  279. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/qasm3/CMakeLists.txt +0 -0
  280. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/qasm3/Parser.cpp +0 -0
  281. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/qasm3/Statement.cpp +0 -0
  282. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/qasm3/Token.cpp +0 -0
  283. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/qasm3/Types.cpp +0 -0
  284. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/qasm3/passes/ConstEvalPass.cpp +0 -0
  285. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/qasm3/passes/TypeCheckPass.cpp +0 -0
  286. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/zx/CMakeLists.txt +0 -0
  287. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/zx/Rational.cpp +0 -0
  288. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/zx/Simplify.cpp +0 -0
  289. {mqt_core-3.1.0 → mqt_core-3.2.1}/src/zx/Utils.cpp +0 -0
@@ -1,3 +1,4 @@
1
1
  BasedOnStyle: LLVM
2
2
  IncludeBlocks: Regroup
3
3
  PointerAlignment: Left
4
+ Standard: c++20
@@ -3,6 +3,7 @@ FormatStyle: file
3
3
  Checks: |
4
4
  bugprone-*,
5
5
  -bugprone-easily-swappable-parameters,
6
+ -bugprone-unchecked-optional-access,
6
7
  clang-analyzer-*,
7
8
  -clang-analyzer-core.NullDereference,
8
9
  clang-diagnostic-*,
@@ -51,7 +51,7 @@ repos:
51
51
 
52
52
  # Handling unwanted unicode characters
53
53
  - repo: https://github.com/sirosen/texthooks
54
- rev: 0.6.8
54
+ rev: 0.7.1
55
55
  hooks:
56
56
  - id: fix-ligatures
57
57
  - id: fix-smartquotes
@@ -66,7 +66,7 @@ repos:
66
66
 
67
67
  # Python linting using ruff
68
68
  - repo: https://github.com/astral-sh/ruff-pre-commit
69
- rev: v0.12.2
69
+ rev: v0.12.5
70
70
  hooks:
71
71
  - id: ruff
72
72
  args: ["--fix", "--show-fixes"]
@@ -74,7 +74,7 @@ repos:
74
74
 
75
75
  # Static type checking using mypy
76
76
  - repo: https://github.com/pre-commit/mirrors-mypy
77
- rev: v1.16.1
77
+ rev: v1.17.0
78
78
  hooks:
79
79
  - id: mypy
80
80
  files: ^(python/mqt|test/python|noxfile.py)
@@ -99,7 +99,7 @@ repos:
99
99
 
100
100
  # Clang-format the C++ part of the code base automatically
101
101
  - repo: https://github.com/pre-commit/mirrors-clang-format
102
- rev: v20.1.7
102
+ rev: v20.1.8
103
103
  hooks:
104
104
  - id: clang-format
105
105
  types_or: [c++, c, cuda]
@@ -9,7 +9,28 @@ This project adheres to [Semantic Versioning], with the exception that minor rel
9
9
 
10
10
  ## [Unreleased]
11
11
 
12
- ## [3.1.0]
12
+ ## [3.2.1] - 2025-08-01
13
+
14
+ ### Fixed
15
+
16
+ - 🐛 Fix bug where lambda passed to `std::accumulate` incorrectly took the accumulator by reference instead of by value ([#1089]) ([**@denialhaag**])
17
+ - 🐛 Fix bug in DD package ([#1088]) ([**@denialhaag**])
18
+
19
+ you need to .
20
+
21
+ ## [3.2.0] - 2025-07-31
22
+
23
+ ### Added
24
+
25
+ - 🐍 Build Python 3.14 wheels ([#1076]) ([**@denialhaag**])
26
+ - ✨ Add MQT-internal MLIR dialect conversions ([#1001]) ([**@li-mingbao**])
27
+
28
+ ### Changed
29
+
30
+ - ✨ Expose enums to Python via `pybind11`'s new (`enum.Enum`-compatible) `py::native_enum` ([#1075]) ([**@denialhaag**])
31
+ - ⬆️ Require C++20 ([#897]) ([**@burgholzer**], [**@denialhaag**])
32
+
33
+ ## [3.1.0] - 2025-07-11
13
34
 
14
35
  _If you are upgrading: please see [`UPGRADING.md`](UPGRADING.md#310)._
15
36
 
@@ -28,10 +49,11 @@ _If you are upgrading: please see [`UPGRADING.md`](UPGRADING.md#310)._
28
49
  - 🐛 Add missing support for `sxdg` gates in Qiskit circuit import ([#930]) ([**@burgholzer**])
29
50
  - 🐛 Fix bug related to initialization of operations with duplicate operands ([#964]) ([**@ystade**])
30
51
  - 🐛 Open issue for Qiskit upstream test only when the test is actually failing not when it was cancelled ([#973]) ([**@ystade**])
52
+ - 🐛 Fix parsing of `GPhase` in the `MQTOpt` MLIR dialect ([#1042]) ([**@ystade**], [**@DRovara**])
31
53
 
32
54
  ### Changed
33
55
 
34
- - ⬆️ Bump shared library ABI version from `3.0` to `3.1`.
56
+ - ⬆️ Bump shared library ABI version from `3.0` to `3.1` ([#1047]) ([**@denialhaag**])
35
57
  - ♻️ Switch from reference counting to mark-and-sweep garbage collection in decision diagram package ([#1020]) ([**@MatthiasReumann**], [**burgholzer**], [**q-inho**])
36
58
  - ♻️ Move the C++ code for the Python bindings to the top-level `bindings` directory ([#982]) ([**@denialhaag**])
37
59
  - ♻️ Move all Python code (no tests) to the top-level `python` directory ([#982]) ([**@denialhaag**])
@@ -116,17 +138,26 @@ _📚 Refer to the [GitHub Release Notes](https://github.com/munich-quantum-tool
116
138
 
117
139
  <!-- Version links -->
118
140
 
119
- [unreleased]: https://github.com/munich-quantum-toolkit/core/compare/v3.1.0...HEAD
120
- [3.1.0]: https://github.com/munich-quantum-toolkit/core/compare/v3.0.2...v3.1.0
121
- [3.0.2]: https://github.com/munich-quantum-toolkit/core/compare/v3.0.1...v3.0.2
122
- [3.0.1]: https://github.com/munich-quantum-toolkit/core/compare/v3.0.0...v3.0.1
123
- [3.0.0]: https://github.com/munich-quantum-toolkit/core/compare/v2.7.0...v3.0.0
141
+ [unreleased]: https://github.com/munich-quantum-toolkit/core/compare/v3.2.1...HEAD
142
+ [3.2.1]: https://github.com/munich-quantum-toolkit/core/releases/tag/v3.2.1
143
+ [3.2.0]: https://github.com/munich-quantum-toolkit/core/releases/tag/v3.2.0
144
+ [3.1.0]: https://github.com/munich-quantum-toolkit/core/releases/tag/v3.1.0
145
+ [3.0.2]: https://github.com/munich-quantum-toolkit/core/releases/tag/v3.0.2
146
+ [3.0.1]: https://github.com/munich-quantum-toolkit/core/releases/tag/v3.0.1
147
+ [3.0.0]: https://github.com/munich-quantum-toolkit/core/releases/tag/v3.0.0
124
148
  [2.7.0]: https://github.com/munich-quantum-toolkit/core/releases/tag/v2.7.0
125
149
 
126
150
  <!-- PR links -->
127
151
 
152
+ [#1089]: https://github.com/munich-quantum-toolkit/core/pull/1089
153
+ [#1088]: https://github.com/munich-quantum-toolkit/core/pull/1088
154
+ [#1076]: https://github.com/munich-quantum-toolkit/core/pull/1076
155
+ [#1075]: https://github.com/munich-quantum-toolkit/core/pull/1075
156
+ [#1047]: https://github.com/munich-quantum-toolkit/core/pull/1047
157
+ [#1042]: https://github.com/munich-quantum-toolkit/core/pull/1042
128
158
  [#1020]: https://github.com/munich-quantum-toolkit/core/pull/1020
129
159
  [#1019]: https://github.com/munich-quantum-toolkit/core/pull/1019
160
+ [#1001]: https://github.com/munich-quantum-toolkit/core/pull/1001
130
161
  [#984]: https://github.com/munich-quantum-toolkit/core/pull/984
131
162
  [#982]: https://github.com/munich-quantum-toolkit/core/pull/982
132
163
  [#975]: https://github.com/munich-quantum-toolkit/core/pull/975
@@ -145,6 +176,7 @@ _📚 Refer to the [GitHub Release Notes](https://github.com/munich-quantum-tool
145
176
  [#911]: https://github.com/munich-quantum-toolkit/core/pull/911
146
177
  [#908]: https://github.com/munich-quantum-toolkit/core/pull/908
147
178
  [#900]: https://github.com/munich-quantum-toolkit/core/pull/900
179
+ [#897]: https://github.com/munich-quantum-toolkit/core/pull/897
148
180
  [#895]: https://github.com/munich-quantum-toolkit/core/pull/895
149
181
  [#893]: https://github.com/munich-quantum-toolkit/core/pull/893
150
182
  [#892]: https://github.com/munich-quantum-toolkit/core/pull/892
@@ -195,6 +227,7 @@ _📚 Refer to the [GitHub Release Notes](https://github.com/munich-quantum-tool
195
227
  [**@MatthiasReumann**]: https://github.com/MatthiasReumann
196
228
  [**@denialhaag**]: https://github.com/denialhaag
197
229
  [**q-inho**]: https://github.com/q-inho
230
+ [**@li-mingbao**]: https://github.com/li-mingbao
198
231
 
199
232
  <!-- General links -->
200
233
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mqt-core
3
- Version: 3.1.0
3
+ Version: 3.2.1
4
4
  Summary: The Backbone of the Munich Quantum Toolkit
5
5
  Keywords: MQT,quantum-computing,design-automation,decision-diagrams,zx-calculus
6
6
  Author-Email: Lukas Burgholzer <burgholzer@me.com>
@@ -20,6 +20,7 @@ Classifier: Programming Language :: Python :: 3.10
20
20
  Classifier: Programming Language :: Python :: 3.11
21
21
  Classifier: Programming Language :: Python :: 3.12
22
22
  Classifier: Programming Language :: Python :: 3.13
23
+ Classifier: Programming Language :: Python :: 3.14
23
24
  Classifier: Topic :: Scientific/Engineering :: Electronic Design Automation (EDA)
24
25
  Classifier: Typing :: Typed
25
26
  Project-URL: Homepage, https://github.com/munich-quantum-toolkit/core
@@ -55,7 +56,7 @@ Description-Content-Type: text/markdown
55
56
 
56
57
  # MQT Core - The Backbone of the Munich Quantum Toolkit (MQT)
57
58
 
58
- MQT Core is an open-source C++17 and Python library for quantum computing that forms the backbone of the quantum software tools developed as part of the [_Munich Quantum Toolkit (MQT)_](https://mqt.readthedocs.io).
59
+ MQT Core is an open-source C++20 and Python library for quantum computing that forms the backbone of the quantum software tools developed as part of the [_Munich Quantum Toolkit (MQT)_](https://mqt.readthedocs.io).
59
60
 
60
61
  <p align="center">
61
62
  <a href="https://mqt.readthedocs.io/projects/core">
@@ -93,7 +94,7 @@ Thank you to all the contributors who have helped make MQT Core a reality!
93
94
 
94
95
  ## Getting Started
95
96
 
96
- `mqt.core` is available via [PyPI](https://pypi.org/project/mqt.core/) for all major operating systems and supports Python 3.9 to 3.13.
97
+ `mqt.core` is available via [PyPI](https://pypi.org/project/mqt.core/) for all major operating systems and supports Python 3.9 to 3.14.
97
98
 
98
99
  ```console
99
100
  (.venv) $ pip install mqt.core
@@ -117,7 +118,7 @@ print(qc)
117
118
  ## System Requirements
118
119
 
119
120
  Building (and running) is continuously tested under Linux, MacOS, and Windows using the [latest available system versions for GitHub Actions](https://github.com/actions/runner-images).
120
- However, the implementation should be compatible with any current C++ compiler supporting C++17 and a minimum CMake version of 3.24.
121
+ However, the implementation should be compatible with any current C++ compiler supporting C++20 and a minimum CMake version of 3.24.
121
122
 
122
123
  MQT Core relies on some external dependencies:
123
124
 
@@ -18,7 +18,7 @@
18
18
 
19
19
  # MQT Core - The Backbone of the Munich Quantum Toolkit (MQT)
20
20
 
21
- MQT Core is an open-source C++17 and Python library for quantum computing that forms the backbone of the quantum software tools developed as part of the [_Munich Quantum Toolkit (MQT)_](https://mqt.readthedocs.io).
21
+ MQT Core is an open-source C++20 and Python library for quantum computing that forms the backbone of the quantum software tools developed as part of the [_Munich Quantum Toolkit (MQT)_](https://mqt.readthedocs.io).
22
22
 
23
23
  <p align="center">
24
24
  <a href="https://mqt.readthedocs.io/projects/core">
@@ -56,7 +56,7 @@ Thank you to all the contributors who have helped make MQT Core a reality!
56
56
 
57
57
  ## Getting Started
58
58
 
59
- `mqt.core` is available via [PyPI](https://pypi.org/project/mqt.core/) for all major operating systems and supports Python 3.9 to 3.13.
59
+ `mqt.core` is available via [PyPI](https://pypi.org/project/mqt.core/) for all major operating systems and supports Python 3.9 to 3.14.
60
60
 
61
61
  ```console
62
62
  (.venv) $ pip install mqt.core
@@ -80,7 +80,7 @@ print(qc)
80
80
  ## System Requirements
81
81
 
82
82
  Building (and running) is continuously tested under Linux, MacOS, and Windows using the [latest available system versions for GitHub Actions](https://github.com/actions/runner-images).
83
- However, the implementation should be compatible with any current C++ compiler supporting C++17 and a minimum CMake version of 3.24.
83
+ However, the implementation should be compatible with any current C++ compiler supporting C++20 and a minimum CMake version of 3.24.
84
84
 
85
85
  MQT Core relies on some external dependencies:
86
86
 
@@ -4,10 +4,23 @@ This document describes breaking changes and how to upgrade. For a complete list
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [3.2.0]
8
+
9
+ The shared library ABI version (`SOVERSION`) is increased from `3.1` to `3.2`.
10
+ Thus, consuming libraries need to update their wheel repair configuration for `cibuildwheel` to ensure the `mqt-core` libraries are properly skipped in the wheel repair step.
11
+
12
+ With this release, the minimum required C++ version has been raised from C++17 to C++20.
13
+ The default compilers of our test systems support all relevant features of the standard.
14
+ Some frameworks we plan to integrate with even require C++20 by now.
15
+
16
+ The `dd.BasisStates`, `ir.operations.ComparisonKind`, `ir.operations.Control.Type`, and `ir.operations.OpType` enums are now exposed via `pybind11`'s new `py::native_enum`, which makes them compatible with Python's `enum.Enum` class (PEP 435).
17
+ As a result, the enums can no longer be initialized using a string.
18
+ Instead of `OpType("x")`, use `OpType.x`.
19
+
7
20
  ## [3.1.0]
8
21
 
9
22
  The shared library ABI version (`SOVERSION`) is increased from `3.0` to `3.1`.
10
- Thus, consuming libraries need to update their wheel repair configuration for cibuildwheel to ensure the mqt-core libraries are properly skipped in the wheel repair step.
23
+ Thus, consuming libraries need to update their wheel repair configuration for `cibuildwheel` to ensure the `mqt-core` libraries are properly skipped in the wheel repair step.
11
24
 
12
25
  Even tough this is not a breaking change, it is worth mentioning to developers of MQT Core that all Python code (except tests) has been moved to the top-level `python` directory.
13
26
  Furthermore, the C++ code for the Python bindings has been moved to the top-level `bindings` directory.
@@ -70,7 +83,8 @@ It also requires the `uv` library version 0.5.20 or higher.
70
83
 
71
84
  <!-- Version links -->
72
85
 
73
- [unreleased]: https://github.com/munich-quantum-toolkit/core/compare/v3.1.0...HEAD
86
+ [unreleased]: https://github.com/munich-quantum-toolkit/core/compare/v3.2.0...HEAD
87
+ [3.2.0]: https://github.com/munich-quantum-toolkit/core/compare/v3.1.0...v3.2.0
74
88
  [3.1.0]: https://github.com/munich-quantum-toolkit/core/compare/v3.0.0...v3.1.0
75
89
  [3.0.0]: https://github.com/munich-quantum-toolkit/core/compare/v2.7.0...v3.0.0
76
90
 
@@ -22,7 +22,6 @@
22
22
  #include <pybind11/stl.h> // NOLINT(misc-include-cleaner)
23
23
 
24
24
  #include <pybind11/cast.h>
25
- #include <pybind11/numpy.h>
26
25
  // clang-format on
27
26
 
28
27
  #include <complex>
@@ -27,6 +27,7 @@
27
27
 
28
28
  #include <pybind11/attr.h>
29
29
  #include <pybind11/cast.h>
30
+ #include <pybind11/native_enum.h>
30
31
  #include <pybind11/numpy.h>
31
32
  // clang-format on
32
33
 
@@ -131,13 +132,15 @@ void registerDDPackage(const py::module& mod) {
131
132
  // keep the DD package alive while the returned vector DD is alive.
132
133
  py::keep_alive<0, 1>());
133
134
 
134
- py::enum_<dd::BasisStates>(mod, "BasisStates")
135
+ py::native_enum<dd::BasisStates>(mod, "BasisStates", "enum.Enum",
136
+ "Enumeration of basis states.")
135
137
  .value("zero", dd::BasisStates::zero)
136
138
  .value("one", dd::BasisStates::one)
137
139
  .value("plus", dd::BasisStates::plus)
138
140
  .value("minus", dd::BasisStates::minus)
139
141
  .value("right", dd::BasisStates::right)
140
- .value("left", dd::BasisStates::left);
142
+ .value("left", dd::BasisStates::left)
143
+ .finalize();
141
144
 
142
145
  dd.def(
143
146
  "basis_state",
@@ -20,7 +20,7 @@
20
20
 
21
21
  #include <pybind11/buffer_info.h>
22
22
  #include <pybind11/cast.h>
23
- #include <pybind11/numpy.h>
23
+ #include <pybind11/numpy.h> // NOLINT(misc-include-cleaner)
24
24
  // clang-format on
25
25
 
26
26
  #include <cmath>
@@ -44,7 +44,7 @@ struct Matrix {
44
44
  Matrix getMatrix(const dd::mEdge& m, const size_t numQubits,
45
45
  const dd::fp threshold = 0.) {
46
46
  if (numQubits == 0U) {
47
- return Matrix{{static_cast<std::complex<dd::fp>>(m.w)}, 1};
47
+ return Matrix{.data = {static_cast<std::complex<dd::fp>>(m.w)}, .n = 1};
48
48
  }
49
49
  const size_t dim = 1ULL << numQubits;
50
50
  auto data = std::vector<std::complex<dd::fp>>(dim * dim);
@@ -53,7 +53,7 @@ Matrix getMatrix(const dd::mEdge& m, const size_t numQubits,
53
53
  [&data, dim](const std::size_t i, const std::size_t j,
54
54
  const std::complex<dd::fp>& c) { data[(i * dim) + j] = c; },
55
55
  numQubits, threshold);
56
- return Matrix{data, dim};
56
+ return Matrix{.data = data, .n = dim};
57
57
  }
58
58
 
59
59
  // NOLINTNEXTLINE(misc-use-internal-linkage)
@@ -20,7 +20,7 @@
20
20
 
21
21
  #include <pybind11/buffer_info.h>
22
22
  #include <pybind11/cast.h>
23
- #include <pybind11/numpy.h>
23
+ #include <pybind11/numpy.h> // NOLINT(misc-include-cleaner)
24
24
  // clang-format on
25
25
 
26
26
  #include <cmath>
@@ -19,6 +19,7 @@
19
19
  #include <pybind11/stl.h> // NOLINT(misc-include-cleaner)
20
20
 
21
21
  #include <pybind11/cast.h>
22
+ #include <pybind11/native_enum.h>
22
23
  // clang-format on
23
24
 
24
25
  #include <cstdint>
@@ -32,7 +33,9 @@ using namespace pybind11::literals;
32
33
 
33
34
  // NOLINTNEXTLINE(misc-use-internal-linkage)
34
35
  void registerClassicControlledOperation(const py::module& m) {
35
- py::enum_<qc::ComparisonKind>(m, "ComparisonKind")
36
+ py::native_enum<qc::ComparisonKind>(
37
+ m, "ComparisonKind", "enum.Enum",
38
+ "Enumeration of comparison types for classic-controlled operations.")
36
39
  .value("eq", qc::ComparisonKind::Eq)
37
40
  .value("neq", qc::ComparisonKind::Neq)
38
41
  .value("lt", qc::ComparisonKind::Lt)
@@ -40,10 +43,7 @@ void registerClassicControlledOperation(const py::module& m) {
40
43
  .value("gt", qc::ComparisonKind::Gt)
41
44
  .value("geq", qc::ComparisonKind::Geq)
42
45
  .export_values()
43
- .def("__str__",
44
- [](const qc::ComparisonKind& cmp) { return qc::toString(cmp); })
45
- .def("__repr__",
46
- [](const qc::ComparisonKind& cmp) { return qc::toString(cmp); });
46
+ .finalize();
47
47
 
48
48
  auto ccop = py::class_<qc::ClassicControlledOperation, qc::Operation>(
49
49
  m, "ClassicControlledOperation");
@@ -42,7 +42,7 @@ void registerCompoundOperation(const py::module& m) {
42
42
  if (i < 0) {
43
43
  i += static_cast<DiffType>(size);
44
44
  }
45
- if (i < 0 || static_cast<SizeType>(i) >= size) {
45
+ if (i < 0 || std::cmp_greater_equal(i, size)) {
46
46
  throw py::index_error();
47
47
  }
48
48
  return i;
@@ -17,6 +17,7 @@
17
17
  #include <pybind11/stl.h> // NOLINT(misc-include-cleaner)
18
18
 
19
19
  #include <pybind11/cast.h>
20
+ #include <pybind11/native_enum.h>
20
21
  #include <pybind11/operators.h>
21
22
  #include <pybind11/pytypes.h>
22
23
  // clang-format on
@@ -30,26 +31,12 @@ using namespace pybind11::literals;
30
31
  void registerControl(const py::module& m) {
31
32
 
32
33
  auto control = py::class_<qc::Control>(m, "Control");
33
- auto controlType = py::enum_<qc::Control::Type>(control, "Type");
34
- controlType.value("Pos", qc::Control::Type::Pos);
35
- controlType.value("Neg", qc::Control::Type::Neg);
36
- controlType.def(
37
- "__str__",
38
- [](const qc::Control::Type& type) {
39
- return type == qc::Control::Type::Pos ? "Pos" : "Neg";
40
- },
41
- py::prepend());
42
- controlType.def(
43
- "__repr__",
44
- [](const qc::Control::Type& type) {
45
- return type == qc::Control::Type::Pos ? "Pos" : "Neg";
46
- },
47
- py::prepend());
48
- controlType.def("__bool__", [](const qc::Control::Type& type) {
49
- return type == qc::Control::Type::Pos;
50
- });
51
- py::implicitly_convertible<py::bool_, qc::Control::Type>();
52
- py::implicitly_convertible<py::str, qc::Control::Type>();
34
+
35
+ py::native_enum<qc::Control::Type>(control, "Type", "enum.Enum",
36
+ "Enumeration of control types.")
37
+ .value("Pos", qc::Control::Type::Pos)
38
+ .value("Neg", qc::Control::Type::Neg)
39
+ .finalize();
53
40
 
54
41
  control.def(py::init<qc::Qubit, qc::Control::Type>(), "qubit"_a,
55
42
  "type_"_a = qc::Control::Type::Pos);
@@ -15,11 +15,9 @@
15
15
  #include <pybind11/pybind11.h>
16
16
  #include <pybind11/stl.h> // NOLINT(misc-include-cleaner)
17
17
 
18
- #include <pybind11/pytypes.h>
18
+ #include <pybind11/native_enum.h>
19
19
  // clang-format on
20
20
 
21
- #include <string>
22
-
23
21
  namespace mqt {
24
22
 
25
23
  namespace py = pybind11;
@@ -27,7 +25,8 @@ using namespace pybind11::literals;
27
25
 
28
26
  // NOLINTNEXTLINE(misc-use-internal-linkage)
29
27
  void registerOptype(const py::module& m) {
30
- py::enum_<qc::OpType>(m, "OpType")
28
+ py::native_enum<qc::OpType>(m, "OpType", "enum.Enum",
29
+ "Enumeration of operation types.")
31
30
  .value("none", qc::OpType::None)
32
31
  .value("gphase", qc::OpType::GPhase)
33
32
  .value("i", qc::OpType::I)
@@ -68,12 +67,7 @@ void registerOptype(const py::module& m) {
68
67
  .value("barrier", qc::OpType::Barrier)
69
68
  .value("classic_controlled", qc::OpType::ClassicControlled)
70
69
  .export_values()
71
- .def("__str__", [](const qc::OpType& op) { return qc::toString(op); })
72
- .def("__repr__", [](const qc::OpType& op) { return qc::toString(op); })
73
- .def(py::init([](const std::string& str) -> qc::OpType {
74
- return qc::opTypeFromString(str);
75
- }));
76
- py::implicitly_convertible<py::str, qc::OpType>();
70
+ .finalize();
77
71
  }
78
72
 
79
73
  } // namespace mqt
@@ -31,6 +31,7 @@
31
31
  #include <memory>
32
32
  #include <stdexcept>
33
33
  #include <string>
34
+ #include <utility>
34
35
  #include <vector>
35
36
 
36
37
  namespace mqt {
@@ -47,7 +48,7 @@ void registerQuantumComputation(py::module& m) {
47
48
  if (i < 0) {
48
49
  i += static_cast<DiffType>(size);
49
50
  }
50
- if (i < 0 || static_cast<SizeType>(i) >= size) {
51
+ if (i < 0 || std::cmp_greater_equal(i, size)) {
51
52
  throw py::index_error();
52
53
  }
53
54
  return i;
@@ -29,7 +29,7 @@ function(enable_project_options target_name)
29
29
  option(ENABLE_COVERAGE "Enable coverage reporting for gcc/clang" FALSE)
30
30
  if(ENABLE_COVERAGE)
31
31
  target_compile_options(${target_name} INTERFACE --coverage -fprofile-arcs -ftest-coverage -O0)
32
- target_link_libraries(${target_name} INTERFACE gcov --coverage)
32
+ target_link_libraries(${target_name} INTERFACE --coverage)
33
33
  endif()
34
34
 
35
35
  if(NOT DEPLOY)
@@ -25,7 +25,7 @@ if(BUILD_MQT_CORE_BINDINGS)
25
25
  message(STATUS "Python executable: ${Python_EXECUTABLE}")
26
26
 
27
27
  # add pybind11 library
28
- find_package(pybind11 2.13.6 CONFIG REQUIRED)
28
+ find_package(pybind11 3.0.0 CONFIG REQUIRED)
29
29
  endif()
30
30
 
31
31
  set(JSON_VERSION
@@ -38,10 +38,10 @@ public:
38
38
  closureMatrix[i][i] = true;
39
39
  }
40
40
  auto addEdge(const V& u, const V& v) -> void override {
41
- if (this->mapping.find(u) == this->mapping.end()) {
41
+ if (!this->mapping.contains(u)) {
42
42
  addVertex(u);
43
43
  }
44
- if (this->mapping.find(v) == this->mapping.end()) {
44
+ if (!this->mapping.contains(v)) {
45
45
  addVertex(v);
46
46
  }
47
47
  std::size_t const i = this->mapping.at(u);
@@ -62,10 +62,10 @@ public:
62
62
  }
63
63
  }
64
64
  [[nodiscard]] auto isReachable(const V& u, const V& v) const -> bool {
65
- if (this->mapping.find(u) == this->mapping.end()) {
65
+ if (!this->mapping.contains(u)) {
66
66
  throw std::invalid_argument("Vertex u not in graph.");
67
67
  }
68
- if (this->mapping.find(v) == this->mapping.end()) {
68
+ if (!this->mapping.contains(v)) {
69
69
  throw std::invalid_argument("Vertex v not in graph.");
70
70
  }
71
71
  return closureMatrix[this->mapping.at(u)][this->mapping.at(v)];
@@ -59,7 +59,7 @@ public:
59
59
  virtual ~DirectedGraph() = default;
60
60
  virtual auto addVertex(const V& v) -> void {
61
61
  // check whether the vertex is already in the graph, if so do nothing
62
- if (mapping.find(v) != mapping.end()) {
62
+ if (mapping.contains(v)) {
63
63
  std::stringstream ss;
64
64
  ss << "The vertex " << v << " is already in the graph.";
65
65
  throw std::invalid_argument(ss.str());
@@ -75,10 +75,10 @@ public:
75
75
  outDegrees.emplace_back(0);
76
76
  }
77
77
  virtual auto addEdge(const V& u, const V& v) -> void {
78
- if (mapping.find(u) == mapping.end()) {
78
+ if (!mapping.contains(u)) {
79
79
  addVertex(u);
80
80
  }
81
- if (mapping.find(v) == mapping.end()) {
81
+ if (!mapping.contains(v)) {
82
82
  addVertex(v);
83
83
  }
84
84
  const auto i = mapping.at(u);
@@ -93,7 +93,7 @@ public:
93
93
  [[nodiscard]] auto getNVertices() const -> std::size_t { return nVertices; }
94
94
  [[nodiscard]] auto getNEdges() const -> std::size_t { return nEdges; }
95
95
  [[nodiscard]] auto getInDegree(const V& v) const -> std::size_t {
96
- if (mapping.find(v) == mapping.end()) {
96
+ if (!mapping.contains(v)) {
97
97
  std::stringstream ss;
98
98
  ss << "The vertex " << v << " is not in the graph.";
99
99
  throw std::invalid_argument(ss.str());
@@ -102,7 +102,7 @@ public:
102
102
  return inDegrees[i];
103
103
  }
104
104
  [[nodiscard]] auto getOutDegree(const V& v) const -> std::size_t {
105
- if (mapping.find(v) == mapping.end()) {
105
+ if (!mapping.contains(v)) {
106
106
  std::stringstream ss;
107
107
  ss << "The vertex " << v << " is not in the graph.";
108
108
  throw std::invalid_argument(ss.str());
@@ -113,18 +113,18 @@ public:
113
113
  [[nodiscard]] auto getVertices() const -> std::unordered_set<V> {
114
114
  return std::accumulate(mapping.cbegin(), mapping.cend(),
115
115
  std::unordered_set<V>(),
116
- [](auto& acc, const auto& v) {
116
+ [](auto acc, const auto& v) {
117
117
  acc.emplace(v.first);
118
118
  return acc;
119
119
  });
120
120
  }
121
121
  [[nodiscard]] auto isEdge(const V& u, const V& v) const -> bool {
122
- if (mapping.find(u) == mapping.end()) {
122
+ if (!mapping.contains(u)) {
123
123
  std::stringstream ss;
124
124
  ss << "The vertex " << u << " is not in the graph.";
125
125
  throw std::invalid_argument(ss.str());
126
126
  }
127
- if (mapping.find(v) == mapping.end()) {
127
+ if (!mapping.contains(v)) {
128
128
  std::stringstream ss;
129
129
  ss << "The vertex " << v << " is not in the graph.";
130
130
  throw std::invalid_argument(ss.str());
@@ -62,7 +62,7 @@ protected:
62
62
  public:
63
63
  auto addVertex(const V& v) -> void {
64
64
  // check whether the vertex is already in the graph, if so do nothing
65
- if (mapping.find(v) == mapping.end()) {
65
+ if (!mapping.contains(v)) {
66
66
  mapping[v] = nVertices;
67
67
  invMapping.emplace_back(v);
68
68
  ++nVertices;
@@ -80,10 +80,10 @@ public:
80
80
  }
81
81
  }
82
82
  auto addEdge(const V& u, const V& v, const E& e) -> void {
83
- if (mapping.find(u) == mapping.end()) {
83
+ if (!mapping.contains(u)) {
84
84
  addVertex(u);
85
85
  }
86
- if (mapping.find(v) == mapping.end()) {
86
+ if (!mapping.contains(v)) {
87
87
  addVertex(v);
88
88
  }
89
89
  const auto i = mapping.at(u);
@@ -132,7 +132,7 @@ public:
132
132
  }
133
133
  [[nodiscard]] auto getAdjacentEdges(const V& v) const
134
134
  -> std::unordered_set<std::pair<V, V>, PairHash<V, V>> {
135
- if (mapping.find(v) == mapping.end()) {
135
+ if (!mapping.contains(v)) {
136
136
  std::stringstream ss;
137
137
  ss << "The vertex " << v << " is not in the graph.";
138
138
  throw std::invalid_argument(ss.str());
@@ -149,7 +149,7 @@ public:
149
149
  return result;
150
150
  }
151
151
  [[nodiscard]] auto getNeighbours(const V& v) const -> std::unordered_set<V> {
152
- if (mapping.find(v) == mapping.end()) {
152
+ if (!mapping.contains(v)) {
153
153
  std::stringstream ss;
154
154
  ss << "The vertex " << v << " is not in the graph.";
155
155
  throw std::invalid_argument(ss.str());
@@ -165,7 +165,7 @@ public:
165
165
  return result;
166
166
  }
167
167
  [[nodiscard]] auto getDegree(const V& v) const -> std::size_t {
168
- if (mapping.find(v) == mapping.end()) {
168
+ if (!mapping.contains(v)) {
169
169
  std::stringstream ss;
170
170
  ss << "The vertex " << v << " is not in the graph.";
171
171
  throw std::invalid_argument(ss.str());
@@ -176,18 +176,18 @@ public:
176
176
  [[nodiscard]] auto getVertices() const -> std::unordered_set<V> {
177
177
  return std::accumulate(mapping.cbegin(), mapping.cend(),
178
178
  std::unordered_set<V>(),
179
- [](auto& acc, const auto& v) {
179
+ [](auto acc, const auto& v) {
180
180
  acc.emplace(v.first);
181
181
  return acc;
182
182
  });
183
183
  }
184
184
  [[nodiscard]] auto isAdjacent(const V& u, const V& v) const -> bool {
185
- if (mapping.find(u) == mapping.end()) {
185
+ if (!mapping.contains(u)) {
186
186
  std::stringstream ss;
187
187
  ss << "The vertex " << u << " is not in the graph.";
188
188
  throw std::invalid_argument(ss.str());
189
189
  }
190
- if (mapping.find(v) == mapping.end()) {
190
+ if (!mapping.contains(v)) {
191
191
  std::stringstream ss;
192
192
  ss << "The vertex " << v << " is not in the graph.";
193
193
  throw std::invalid_argument(ss.str());
@@ -57,7 +57,7 @@ struct NodeBase : LLBase {
57
57
  void mark() noexcept { flags |= MARK_FLAG; }
58
58
 
59
59
  /// @brief Unmark the node.
60
- void unmark() noexcept { flags &= ~MARK_FLAG; }
60
+ void unmark() noexcept { flags &= static_cast<uint16_t>(~MARK_FLAG); }
61
61
 
62
62
  /// Getter for the next object.
63
63
  [[nodiscard]] NodeBase* next() const noexcept {