mqt-core 3.3.2__cp314-cp314t-macosx_11_0_arm64.whl

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.
Files changed (546) hide show
  1. mqt/core/__init__.py +77 -0
  2. mqt/core/__main__.py +55 -0
  3. mqt/core/_commands.py +52 -0
  4. mqt/core/_compat/__init__.py +11 -0
  5. mqt/core/_compat/typing.py +29 -0
  6. mqt/core/_version.py +34 -0
  7. mqt/core/_version.pyi +12 -0
  8. mqt/core/dd.cpython-314t-darwin.so +0 -0
  9. mqt/core/dd.pyi +1016 -0
  10. mqt/core/dd_evaluation.py +368 -0
  11. mqt/core/fomac.cpython-314t-darwin.so +0 -0
  12. mqt/core/fomac.pyi +125 -0
  13. mqt/core/include/mqt-core/algorithms/BernsteinVazirani.hpp +39 -0
  14. mqt/core/include/mqt-core/algorithms/GHZState.hpp +18 -0
  15. mqt/core/include/mqt-core/algorithms/Grover.hpp +33 -0
  16. mqt/core/include/mqt-core/algorithms/QFT.hpp +21 -0
  17. mqt/core/include/mqt-core/algorithms/QPE.hpp +30 -0
  18. mqt/core/include/mqt-core/algorithms/RandomCliffordCircuit.hpp +22 -0
  19. mqt/core/include/mqt-core/algorithms/StatePreparation.hpp +43 -0
  20. mqt/core/include/mqt-core/algorithms/WState.hpp +18 -0
  21. mqt/core/include/mqt-core/algorithms/mqt_core_algorithms_export.h +43 -0
  22. mqt/core/include/mqt-core/boost/config/abi/borland_prefix.hpp +27 -0
  23. mqt/core/include/mqt-core/boost/config/abi/borland_suffix.hpp +12 -0
  24. mqt/core/include/mqt-core/boost/config/abi/msvc_prefix.hpp +22 -0
  25. mqt/core/include/mqt-core/boost/config/abi/msvc_suffix.hpp +8 -0
  26. mqt/core/include/mqt-core/boost/config/abi_prefix.hpp +25 -0
  27. mqt/core/include/mqt-core/boost/config/abi_suffix.hpp +25 -0
  28. mqt/core/include/mqt-core/boost/config/assert_cxx03.hpp +211 -0
  29. mqt/core/include/mqt-core/boost/config/assert_cxx11.hpp +212 -0
  30. mqt/core/include/mqt-core/boost/config/assert_cxx14.hpp +47 -0
  31. mqt/core/include/mqt-core/boost/config/assert_cxx17.hpp +65 -0
  32. mqt/core/include/mqt-core/boost/config/assert_cxx20.hpp +59 -0
  33. mqt/core/include/mqt-core/boost/config/assert_cxx23.hpp +41 -0
  34. mqt/core/include/mqt-core/boost/config/assert_cxx98.hpp +23 -0
  35. mqt/core/include/mqt-core/boost/config/auto_link.hpp +525 -0
  36. mqt/core/include/mqt-core/boost/config/compiler/borland.hpp +342 -0
  37. mqt/core/include/mqt-core/boost/config/compiler/clang.hpp +370 -0
  38. mqt/core/include/mqt-core/boost/config/compiler/clang_version.hpp +89 -0
  39. mqt/core/include/mqt-core/boost/config/compiler/codegear.hpp +389 -0
  40. mqt/core/include/mqt-core/boost/config/compiler/comeau.hpp +59 -0
  41. mqt/core/include/mqt-core/boost/config/compiler/common_edg.hpp +185 -0
  42. mqt/core/include/mqt-core/boost/config/compiler/compaq_cxx.hpp +19 -0
  43. mqt/core/include/mqt-core/boost/config/compiler/cray.hpp +446 -0
  44. mqt/core/include/mqt-core/boost/config/compiler/diab.hpp +26 -0
  45. mqt/core/include/mqt-core/boost/config/compiler/digitalmars.hpp +146 -0
  46. mqt/core/include/mqt-core/boost/config/compiler/gcc.hpp +386 -0
  47. mqt/core/include/mqt-core/boost/config/compiler/gcc_xml.hpp +115 -0
  48. mqt/core/include/mqt-core/boost/config/compiler/greenhills.hpp +28 -0
  49. mqt/core/include/mqt-core/boost/config/compiler/hp_acc.hpp +153 -0
  50. mqt/core/include/mqt-core/boost/config/compiler/intel.hpp +577 -0
  51. mqt/core/include/mqt-core/boost/config/compiler/kai.hpp +33 -0
  52. mqt/core/include/mqt-core/boost/config/compiler/metrowerks.hpp +201 -0
  53. mqt/core/include/mqt-core/boost/config/compiler/mpw.hpp +143 -0
  54. mqt/core/include/mqt-core/boost/config/compiler/nvcc.hpp +64 -0
  55. mqt/core/include/mqt-core/boost/config/compiler/pathscale.hpp +141 -0
  56. mqt/core/include/mqt-core/boost/config/compiler/pgi.hpp +23 -0
  57. mqt/core/include/mqt-core/boost/config/compiler/sgi_mipspro.hpp +29 -0
  58. mqt/core/include/mqt-core/boost/config/compiler/sunpro_cc.hpp +225 -0
  59. mqt/core/include/mqt-core/boost/config/compiler/vacpp.hpp +189 -0
  60. mqt/core/include/mqt-core/boost/config/compiler/visualc.hpp +398 -0
  61. mqt/core/include/mqt-core/boost/config/compiler/xlcpp.hpp +303 -0
  62. mqt/core/include/mqt-core/boost/config/compiler/xlcpp_zos.hpp +174 -0
  63. mqt/core/include/mqt-core/boost/config/detail/cxx_composite.hpp +218 -0
  64. mqt/core/include/mqt-core/boost/config/detail/posix_features.hpp +95 -0
  65. mqt/core/include/mqt-core/boost/config/detail/select_compiler_config.hpp +157 -0
  66. mqt/core/include/mqt-core/boost/config/detail/select_platform_config.hpp +147 -0
  67. mqt/core/include/mqt-core/boost/config/detail/select_stdlib_config.hpp +121 -0
  68. mqt/core/include/mqt-core/boost/config/detail/suffix.hpp +1334 -0
  69. mqt/core/include/mqt-core/boost/config/header_deprecated.hpp +26 -0
  70. mqt/core/include/mqt-core/boost/config/helper_macros.hpp +37 -0
  71. mqt/core/include/mqt-core/boost/config/no_tr1/cmath.hpp +28 -0
  72. mqt/core/include/mqt-core/boost/config/no_tr1/complex.hpp +28 -0
  73. mqt/core/include/mqt-core/boost/config/no_tr1/functional.hpp +28 -0
  74. mqt/core/include/mqt-core/boost/config/no_tr1/memory.hpp +28 -0
  75. mqt/core/include/mqt-core/boost/config/no_tr1/utility.hpp +28 -0
  76. mqt/core/include/mqt-core/boost/config/platform/aix.hpp +33 -0
  77. mqt/core/include/mqt-core/boost/config/platform/amigaos.hpp +15 -0
  78. mqt/core/include/mqt-core/boost/config/platform/beos.hpp +26 -0
  79. mqt/core/include/mqt-core/boost/config/platform/bsd.hpp +83 -0
  80. mqt/core/include/mqt-core/boost/config/platform/cloudabi.hpp +18 -0
  81. mqt/core/include/mqt-core/boost/config/platform/cray.hpp +18 -0
  82. mqt/core/include/mqt-core/boost/config/platform/cygwin.hpp +71 -0
  83. mqt/core/include/mqt-core/boost/config/platform/haiku.hpp +31 -0
  84. mqt/core/include/mqt-core/boost/config/platform/hpux.hpp +87 -0
  85. mqt/core/include/mqt-core/boost/config/platform/irix.hpp +31 -0
  86. mqt/core/include/mqt-core/boost/config/platform/linux.hpp +106 -0
  87. mqt/core/include/mqt-core/boost/config/platform/macos.hpp +87 -0
  88. mqt/core/include/mqt-core/boost/config/platform/qnxnto.hpp +31 -0
  89. mqt/core/include/mqt-core/boost/config/platform/solaris.hpp +31 -0
  90. mqt/core/include/mqt-core/boost/config/platform/symbian.hpp +97 -0
  91. mqt/core/include/mqt-core/boost/config/platform/vms.hpp +25 -0
  92. mqt/core/include/mqt-core/boost/config/platform/vxworks.hpp +422 -0
  93. mqt/core/include/mqt-core/boost/config/platform/wasm.hpp +23 -0
  94. mqt/core/include/mqt-core/boost/config/platform/win32.hpp +90 -0
  95. mqt/core/include/mqt-core/boost/config/platform/zos.hpp +32 -0
  96. mqt/core/include/mqt-core/boost/config/pragma_message.hpp +31 -0
  97. mqt/core/include/mqt-core/boost/config/requires_threads.hpp +92 -0
  98. mqt/core/include/mqt-core/boost/config/stdlib/dinkumware.hpp +324 -0
  99. mqt/core/include/mqt-core/boost/config/stdlib/libcomo.hpp +93 -0
  100. mqt/core/include/mqt-core/boost/config/stdlib/libcpp.hpp +180 -0
  101. mqt/core/include/mqt-core/boost/config/stdlib/libstdcpp3.hpp +482 -0
  102. mqt/core/include/mqt-core/boost/config/stdlib/modena.hpp +79 -0
  103. mqt/core/include/mqt-core/boost/config/stdlib/msl.hpp +98 -0
  104. mqt/core/include/mqt-core/boost/config/stdlib/roguewave.hpp +208 -0
  105. mqt/core/include/mqt-core/boost/config/stdlib/sgi.hpp +168 -0
  106. mqt/core/include/mqt-core/boost/config/stdlib/stlport.hpp +258 -0
  107. mqt/core/include/mqt-core/boost/config/stdlib/vacpp.hpp +74 -0
  108. mqt/core/include/mqt-core/boost/config/stdlib/xlcpp_zos.hpp +61 -0
  109. mqt/core/include/mqt-core/boost/config/user.hpp +133 -0
  110. mqt/core/include/mqt-core/boost/config/warning_disable.hpp +47 -0
  111. mqt/core/include/mqt-core/boost/config/workaround.hpp +305 -0
  112. mqt/core/include/mqt-core/boost/config.hpp +67 -0
  113. mqt/core/include/mqt-core/boost/cstdint.hpp +556 -0
  114. mqt/core/include/mqt-core/boost/cxx11_char_types.hpp +70 -0
  115. mqt/core/include/mqt-core/boost/detail/workaround.hpp +10 -0
  116. mqt/core/include/mqt-core/boost/limits.hpp +146 -0
  117. mqt/core/include/mqt-core/boost/multiprecision/complex128.hpp +24 -0
  118. mqt/core/include/mqt-core/boost/multiprecision/complex_adaptor.hpp +1046 -0
  119. mqt/core/include/mqt-core/boost/multiprecision/concepts/mp_number_archetypes.hpp +257 -0
  120. mqt/core/include/mqt-core/boost/multiprecision/cpp_bin_float/io.hpp +698 -0
  121. mqt/core/include/mqt-core/boost/multiprecision/cpp_bin_float/transcendental.hpp +157 -0
  122. mqt/core/include/mqt-core/boost/multiprecision/cpp_bin_float.hpp +2297 -0
  123. mqt/core/include/mqt-core/boost/multiprecision/cpp_complex.hpp +12 -0
  124. mqt/core/include/mqt-core/boost/multiprecision/cpp_dec_float.hpp +3690 -0
  125. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/add.hpp +368 -0
  126. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/add_unsigned.hpp +387 -0
  127. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/bitwise.hpp +889 -0
  128. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/checked.hpp +178 -0
  129. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/comparison.hpp +374 -0
  130. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/cpp_int_config.hpp +161 -0
  131. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/divide.hpp +703 -0
  132. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/import_export.hpp +248 -0
  133. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/intel_intrinsics.hpp +138 -0
  134. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/limits.hpp +282 -0
  135. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/literals.hpp +295 -0
  136. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/misc.hpp +1457 -0
  137. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/multiply.hpp +848 -0
  138. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/serialize.hpp +211 -0
  139. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/value_pack.hpp +42 -0
  140. mqt/core/include/mqt-core/boost/multiprecision/cpp_int.hpp +2360 -0
  141. mqt/core/include/mqt-core/boost/multiprecision/debug_adaptor.hpp +760 -0
  142. mqt/core/include/mqt-core/boost/multiprecision/detail/assert.hpp +29 -0
  143. mqt/core/include/mqt-core/boost/multiprecision/detail/atomic.hpp +62 -0
  144. mqt/core/include/mqt-core/boost/multiprecision/detail/bitscan.hpp +317 -0
  145. mqt/core/include/mqt-core/boost/multiprecision/detail/check_cpp11_config.hpp +64 -0
  146. mqt/core/include/mqt-core/boost/multiprecision/detail/constexpr.hpp +88 -0
  147. mqt/core/include/mqt-core/boost/multiprecision/detail/default_ops.hpp +4052 -0
  148. mqt/core/include/mqt-core/boost/multiprecision/detail/digits.hpp +49 -0
  149. mqt/core/include/mqt-core/boost/multiprecision/detail/dynamic_array.hpp +44 -0
  150. mqt/core/include/mqt-core/boost/multiprecision/detail/empty_value.hpp +87 -0
  151. mqt/core/include/mqt-core/boost/multiprecision/detail/endian.hpp +35 -0
  152. mqt/core/include/mqt-core/boost/multiprecision/detail/et_ops.hpp +1831 -0
  153. mqt/core/include/mqt-core/boost/multiprecision/detail/float128_functions.hpp +95 -0
  154. mqt/core/include/mqt-core/boost/multiprecision/detail/float_string_cvt.hpp +333 -0
  155. mqt/core/include/mqt-core/boost/multiprecision/detail/fpclassify.hpp +101 -0
  156. mqt/core/include/mqt-core/boost/multiprecision/detail/functions/constants.hpp +288 -0
  157. mqt/core/include/mqt-core/boost/multiprecision/detail/functions/pow.hpp +905 -0
  158. mqt/core/include/mqt-core/boost/multiprecision/detail/functions/trig.hpp +1058 -0
  159. mqt/core/include/mqt-core/boost/multiprecision/detail/functions/trunc.hpp +82 -0
  160. mqt/core/include/mqt-core/boost/multiprecision/detail/generic_interconvert.hpp +687 -0
  161. mqt/core/include/mqt-core/boost/multiprecision/detail/hash.hpp +56 -0
  162. mqt/core/include/mqt-core/boost/multiprecision/detail/integer_ops.hpp +474 -0
  163. mqt/core/include/mqt-core/boost/multiprecision/detail/itos.hpp +39 -0
  164. mqt/core/include/mqt-core/boost/multiprecision/detail/min_max.hpp +106 -0
  165. mqt/core/include/mqt-core/boost/multiprecision/detail/no_et_ops.hpp +661 -0
  166. mqt/core/include/mqt-core/boost/multiprecision/detail/no_exceptions_support.hpp +55 -0
  167. mqt/core/include/mqt-core/boost/multiprecision/detail/number_base.hpp +1656 -0
  168. mqt/core/include/mqt-core/boost/multiprecision/detail/number_compare.hpp +848 -0
  169. mqt/core/include/mqt-core/boost/multiprecision/detail/precision.hpp +313 -0
  170. mqt/core/include/mqt-core/boost/multiprecision/detail/rebind.hpp +19 -0
  171. mqt/core/include/mqt-core/boost/multiprecision/detail/standalone_config.hpp +148 -0
  172. mqt/core/include/mqt-core/boost/multiprecision/detail/static_array.hpp +42 -0
  173. mqt/core/include/mqt-core/boost/multiprecision/detail/string_helpers.hpp +48 -0
  174. mqt/core/include/mqt-core/boost/multiprecision/detail/tables.hpp +80 -0
  175. mqt/core/include/mqt-core/boost/multiprecision/detail/ublas_interop.hpp +75 -0
  176. mqt/core/include/mqt-core/boost/multiprecision/detail/uniform_int_distribution.hpp +212 -0
  177. mqt/core/include/mqt-core/boost/multiprecision/detail/utype_helper.hpp +374 -0
  178. mqt/core/include/mqt-core/boost/multiprecision/eigen.hpp +248 -0
  179. mqt/core/include/mqt-core/boost/multiprecision/float128.hpp +920 -0
  180. mqt/core/include/mqt-core/boost/multiprecision/fwd.hpp +268 -0
  181. mqt/core/include/mqt-core/boost/multiprecision/gmp.hpp +4060 -0
  182. mqt/core/include/mqt-core/boost/multiprecision/integer.hpp +363 -0
  183. mqt/core/include/mqt-core/boost/multiprecision/logged_adaptor.hpp +834 -0
  184. mqt/core/include/mqt-core/boost/multiprecision/miller_rabin.hpp +221 -0
  185. mqt/core/include/mqt-core/boost/multiprecision/mpc.hpp +1721 -0
  186. mqt/core/include/mqt-core/boost/multiprecision/mpfi.hpp +2559 -0
  187. mqt/core/include/mqt-core/boost/multiprecision/mpfr.hpp +3644 -0
  188. mqt/core/include/mqt-core/boost/multiprecision/number.hpp +2500 -0
  189. mqt/core/include/mqt-core/boost/multiprecision/random.hpp +23 -0
  190. mqt/core/include/mqt-core/boost/multiprecision/rational_adaptor.hpp +1289 -0
  191. mqt/core/include/mqt-core/boost/multiprecision/tommath.hpp +1034 -0
  192. mqt/core/include/mqt-core/boost/multiprecision/traits/explicit_conversion.hpp +67 -0
  193. mqt/core/include/mqt-core/boost/multiprecision/traits/extract_exponent_type.hpp +28 -0
  194. mqt/core/include/mqt-core/boost/multiprecision/traits/is_backend.hpp +91 -0
  195. mqt/core/include/mqt-core/boost/multiprecision/traits/is_byte_container.hpp +51 -0
  196. mqt/core/include/mqt-core/boost/multiprecision/traits/is_complex.hpp +22 -0
  197. mqt/core/include/mqt-core/boost/multiprecision/traits/is_convertible_arithmetic.hpp +51 -0
  198. mqt/core/include/mqt-core/boost/multiprecision/traits/is_restricted_conversion.hpp +47 -0
  199. mqt/core/include/mqt-core/boost/multiprecision/traits/is_variable_precision.hpp +25 -0
  200. mqt/core/include/mqt-core/boost/multiprecision/traits/max_digits10.hpp +79 -0
  201. mqt/core/include/mqt-core/boost/multiprecision/traits/std_integer_traits.hpp +90 -0
  202. mqt/core/include/mqt-core/boost/multiprecision/traits/transcendental_reduction_type.hpp +21 -0
  203. mqt/core/include/mqt-core/boost/version.hpp +32 -0
  204. mqt/core/include/mqt-core/circuit_optimizer/CircuitOptimizer.hpp +119 -0
  205. mqt/core/include/mqt-core/circuit_optimizer/mqt_core_circuit_optimizer_export.h +43 -0
  206. mqt/core/include/mqt-core/datastructures/DirectedAcyclicGraph.hpp +117 -0
  207. mqt/core/include/mqt-core/datastructures/DirectedGraph.hpp +158 -0
  208. mqt/core/include/mqt-core/datastructures/DisjointSet.hpp +50 -0
  209. mqt/core/include/mqt-core/datastructures/Layer.hpp +172 -0
  210. mqt/core/include/mqt-core/datastructures/SymmetricMatrix.hpp +57 -0
  211. mqt/core/include/mqt-core/datastructures/UndirectedGraph.hpp +227 -0
  212. mqt/core/include/mqt-core/datastructures/mqt_core_ds_export.h +43 -0
  213. mqt/core/include/mqt-core/dd/Approximation.hpp +45 -0
  214. mqt/core/include/mqt-core/dd/CachedEdge.hpp +174 -0
  215. mqt/core/include/mqt-core/dd/Complex.hpp +165 -0
  216. mqt/core/include/mqt-core/dd/ComplexNumbers.hpp +150 -0
  217. mqt/core/include/mqt-core/dd/ComplexValue.hpp +184 -0
  218. mqt/core/include/mqt-core/dd/ComputeTable.hpp +183 -0
  219. mqt/core/include/mqt-core/dd/DDDefinitions.hpp +139 -0
  220. mqt/core/include/mqt-core/dd/DDpackageConfig.hpp +104 -0
  221. mqt/core/include/mqt-core/dd/DensityNoiseTable.hpp +114 -0
  222. mqt/core/include/mqt-core/dd/Edge.hpp +416 -0
  223. mqt/core/include/mqt-core/dd/Export.hpp +438 -0
  224. mqt/core/include/mqt-core/dd/FunctionalityConstruction.hpp +75 -0
  225. mqt/core/include/mqt-core/dd/GateMatrixDefinitions.hpp +43 -0
  226. mqt/core/include/mqt-core/dd/LinkedListBase.hpp +45 -0
  227. mqt/core/include/mqt-core/dd/MemoryManager.hpp +193 -0
  228. mqt/core/include/mqt-core/dd/Node.hpp +223 -0
  229. mqt/core/include/mqt-core/dd/NoiseFunctionality.hpp +144 -0
  230. mqt/core/include/mqt-core/dd/Operations.hpp +306 -0
  231. mqt/core/include/mqt-core/dd/Package.hpp +2036 -0
  232. mqt/core/include/mqt-core/dd/Package_fwd.hpp +22 -0
  233. mqt/core/include/mqt-core/dd/RealNumber.hpp +255 -0
  234. mqt/core/include/mqt-core/dd/RealNumberUniqueTable.hpp +217 -0
  235. mqt/core/include/mqt-core/dd/Simulation.hpp +98 -0
  236. mqt/core/include/mqt-core/dd/StateGeneration.hpp +143 -0
  237. mqt/core/include/mqt-core/dd/StochasticNoiseOperationTable.hpp +88 -0
  238. mqt/core/include/mqt-core/dd/UnaryComputeTable.hpp +121 -0
  239. mqt/core/include/mqt-core/dd/UniqueTable.hpp +243 -0
  240. mqt/core/include/mqt-core/dd/mqt_core_dd_export.h +43 -0
  241. mqt/core/include/mqt-core/dd/statistics/MemoryManagerStatistics.hpp +84 -0
  242. mqt/core/include/mqt-core/dd/statistics/PackageStatistics.hpp +55 -0
  243. mqt/core/include/mqt-core/dd/statistics/Statistics.hpp +48 -0
  244. mqt/core/include/mqt-core/dd/statistics/TableStatistics.hpp +79 -0
  245. mqt/core/include/mqt-core/dd/statistics/UniqueTableStatistics.hpp +31 -0
  246. mqt/core/include/mqt-core/fomac/FoMaC.hpp +568 -0
  247. mqt/core/include/mqt-core/ir/Definitions.hpp +108 -0
  248. mqt/core/include/mqt-core/ir/Permutation.hpp +213 -0
  249. mqt/core/include/mqt-core/ir/QuantumComputation.hpp +596 -0
  250. mqt/core/include/mqt-core/ir/Register.hpp +125 -0
  251. mqt/core/include/mqt-core/ir/mqt_core_ir_export.h +43 -0
  252. mqt/core/include/mqt-core/ir/operations/AodOperation.hpp +92 -0
  253. mqt/core/include/mqt-core/ir/operations/CompoundOperation.hpp +212 -0
  254. mqt/core/include/mqt-core/ir/operations/Control.hpp +142 -0
  255. mqt/core/include/mqt-core/ir/operations/Expression.hpp +847 -0
  256. mqt/core/include/mqt-core/ir/operations/IfElseOperation.hpp +169 -0
  257. mqt/core/include/mqt-core/ir/operations/NonUnitaryOperation.hpp +118 -0
  258. mqt/core/include/mqt-core/ir/operations/OpType.hpp +120 -0
  259. mqt/core/include/mqt-core/ir/operations/OpType.inc +76 -0
  260. mqt/core/include/mqt-core/ir/operations/Operation.hpp +247 -0
  261. mqt/core/include/mqt-core/ir/operations/StandardOperation.hpp +140 -0
  262. mqt/core/include/mqt-core/ir/operations/SymbolicOperation.hpp +144 -0
  263. mqt/core/include/mqt-core/mqt_na_qdmi/device.h +602 -0
  264. mqt/core/include/mqt-core/mqt_na_qdmi/types.h +78 -0
  265. mqt/core/include/mqt-core/na/NAComputation.hpp +185 -0
  266. mqt/core/include/mqt-core/na/device/Device.hpp +410 -0
  267. mqt/core/include/mqt-core/na/device/DeviceMemberInitializers.hpp +724 -0
  268. mqt/core/include/mqt-core/na/device/Generator.hpp +447 -0
  269. mqt/core/include/mqt-core/na/entities/Atom.hpp +62 -0
  270. mqt/core/include/mqt-core/na/entities/Location.hpp +154 -0
  271. mqt/core/include/mqt-core/na/entities/Zone.hpp +95 -0
  272. mqt/core/include/mqt-core/na/fomac/Device.hpp +169 -0
  273. mqt/core/include/mqt-core/na/mqt_core_na_export.h +43 -0
  274. mqt/core/include/mqt-core/na/operations/GlobalCZOp.hpp +38 -0
  275. mqt/core/include/mqt-core/na/operations/GlobalOp.hpp +58 -0
  276. mqt/core/include/mqt-core/na/operations/GlobalRYOp.hpp +42 -0
  277. mqt/core/include/mqt-core/na/operations/LoadOp.hpp +89 -0
  278. mqt/core/include/mqt-core/na/operations/LocalOp.hpp +56 -0
  279. mqt/core/include/mqt-core/na/operations/LocalRZOp.hpp +42 -0
  280. mqt/core/include/mqt-core/na/operations/LocalUOp.hpp +49 -0
  281. mqt/core/include/mqt-core/na/operations/MoveOp.hpp +66 -0
  282. mqt/core/include/mqt-core/na/operations/Op.hpp +62 -0
  283. mqt/core/include/mqt-core/na/operations/ShuttlingOp.hpp +51 -0
  284. mqt/core/include/mqt-core/na/operations/StoreOp.hpp +87 -0
  285. mqt/core/include/mqt-core/qasm3/Exception.hpp +85 -0
  286. mqt/core/include/mqt-core/qasm3/Gate.hpp +65 -0
  287. mqt/core/include/mqt-core/qasm3/Importer.hpp +192 -0
  288. mqt/core/include/mqt-core/qasm3/InstVisitor.hpp +145 -0
  289. mqt/core/include/mqt-core/qasm3/NestedEnvironment.hpp +41 -0
  290. mqt/core/include/mqt-core/qasm3/Parser.hpp +170 -0
  291. mqt/core/include/mqt-core/qasm3/Scanner.hpp +73 -0
  292. mqt/core/include/mqt-core/qasm3/Statement.hpp +486 -0
  293. mqt/core/include/mqt-core/qasm3/Statement_fwd.hpp +39 -0
  294. mqt/core/include/mqt-core/qasm3/StdGates.hpp +232 -0
  295. mqt/core/include/mqt-core/qasm3/Token.hpp +198 -0
  296. mqt/core/include/mqt-core/qasm3/Types.hpp +238 -0
  297. mqt/core/include/mqt-core/qasm3/Types_fwd.hpp +22 -0
  298. mqt/core/include/mqt-core/qasm3/mqt_core_qasm_export.h +43 -0
  299. mqt/core/include/mqt-core/qasm3/passes/CompilerPass.hpp +22 -0
  300. mqt/core/include/mqt-core/qasm3/passes/ConstEvalPass.hpp +102 -0
  301. mqt/core/include/mqt-core/qasm3/passes/TypeCheckPass.hpp +124 -0
  302. mqt/core/include/mqt-core/qdmi/Driver.hpp +431 -0
  303. mqt/core/include/mqt-core/zx/FunctionalityConstruction.hpp +125 -0
  304. mqt/core/include/mqt-core/zx/Rational.hpp +318 -0
  305. mqt/core/include/mqt-core/zx/Rules.hpp +132 -0
  306. mqt/core/include/mqt-core/zx/Simplify.hpp +182 -0
  307. mqt/core/include/mqt-core/zx/Utils.hpp +212 -0
  308. mqt/core/include/mqt-core/zx/ZXDefinitions.hpp +93 -0
  309. mqt/core/include/mqt-core/zx/ZXDiagram.hpp +480 -0
  310. mqt/core/include/mqt-core/zx/mqt_core_zx_export.h +43 -0
  311. mqt/core/include/nlohmann/adl_serializer.hpp +55 -0
  312. mqt/core/include/nlohmann/byte_container_with_subtype.hpp +103 -0
  313. mqt/core/include/nlohmann/detail/abi_macros.hpp +111 -0
  314. mqt/core/include/nlohmann/detail/conversions/from_json.hpp +577 -0
  315. mqt/core/include/nlohmann/detail/conversions/to_chars.hpp +1118 -0
  316. mqt/core/include/nlohmann/detail/conversions/to_json.hpp +479 -0
  317. mqt/core/include/nlohmann/detail/exceptions.hpp +291 -0
  318. mqt/core/include/nlohmann/detail/hash.hpp +129 -0
  319. mqt/core/include/nlohmann/detail/input/binary_reader.hpp +3068 -0
  320. mqt/core/include/nlohmann/detail/input/input_adapters.hpp +549 -0
  321. mqt/core/include/nlohmann/detail/input/json_sax.hpp +986 -0
  322. mqt/core/include/nlohmann/detail/input/lexer.hpp +1643 -0
  323. mqt/core/include/nlohmann/detail/input/parser.hpp +519 -0
  324. mqt/core/include/nlohmann/detail/input/position_t.hpp +37 -0
  325. mqt/core/include/nlohmann/detail/iterators/internal_iterator.hpp +35 -0
  326. mqt/core/include/nlohmann/detail/iterators/iter_impl.hpp +760 -0
  327. mqt/core/include/nlohmann/detail/iterators/iteration_proxy.hpp +235 -0
  328. mqt/core/include/nlohmann/detail/iterators/iterator_traits.hpp +61 -0
  329. mqt/core/include/nlohmann/detail/iterators/json_reverse_iterator.hpp +130 -0
  330. mqt/core/include/nlohmann/detail/iterators/primitive_iterator.hpp +132 -0
  331. mqt/core/include/nlohmann/detail/json_custom_base_class.hpp +39 -0
  332. mqt/core/include/nlohmann/detail/json_pointer.hpp +988 -0
  333. mqt/core/include/nlohmann/detail/json_ref.hpp +78 -0
  334. mqt/core/include/nlohmann/detail/macro_scope.hpp +595 -0
  335. mqt/core/include/nlohmann/detail/macro_unscope.hpp +46 -0
  336. mqt/core/include/nlohmann/detail/meta/call_std/begin.hpp +17 -0
  337. mqt/core/include/nlohmann/detail/meta/call_std/end.hpp +17 -0
  338. mqt/core/include/nlohmann/detail/meta/cpp_future.hpp +171 -0
  339. mqt/core/include/nlohmann/detail/meta/detected.hpp +70 -0
  340. mqt/core/include/nlohmann/detail/meta/identity_tag.hpp +21 -0
  341. mqt/core/include/nlohmann/detail/meta/is_sax.hpp +159 -0
  342. mqt/core/include/nlohmann/detail/meta/std_fs.hpp +29 -0
  343. mqt/core/include/nlohmann/detail/meta/type_traits.hpp +795 -0
  344. mqt/core/include/nlohmann/detail/meta/void_t.hpp +24 -0
  345. mqt/core/include/nlohmann/detail/output/binary_writer.hpp +1850 -0
  346. mqt/core/include/nlohmann/detail/output/output_adapters.hpp +147 -0
  347. mqt/core/include/nlohmann/detail/output/serializer.hpp +988 -0
  348. mqt/core/include/nlohmann/detail/string_concat.hpp +146 -0
  349. mqt/core/include/nlohmann/detail/string_escape.hpp +72 -0
  350. mqt/core/include/nlohmann/detail/string_utils.hpp +37 -0
  351. mqt/core/include/nlohmann/detail/value_t.hpp +118 -0
  352. mqt/core/include/nlohmann/json.hpp +5306 -0
  353. mqt/core/include/nlohmann/json_fwd.hpp +75 -0
  354. mqt/core/include/nlohmann/ordered_map.hpp +359 -0
  355. mqt/core/include/nlohmann/thirdparty/hedley/hedley.hpp +2045 -0
  356. mqt/core/include/nlohmann/thirdparty/hedley/hedley_undef.hpp +158 -0
  357. mqt/core/include/qdmi/qdmi/client.h +990 -0
  358. mqt/core/include/qdmi/qdmi/constants.h +1139 -0
  359. mqt/core/include/qdmi/qdmi/device.h +602 -0
  360. mqt/core/include/qdmi/qdmi/types.h +78 -0
  361. mqt/core/include/spdlog/async.h +99 -0
  362. mqt/core/include/spdlog/async_logger-inl.h +84 -0
  363. mqt/core/include/spdlog/async_logger.h +74 -0
  364. mqt/core/include/spdlog/cfg/argv.h +40 -0
  365. mqt/core/include/spdlog/cfg/env.h +36 -0
  366. mqt/core/include/spdlog/cfg/helpers-inl.h +107 -0
  367. mqt/core/include/spdlog/cfg/helpers.h +29 -0
  368. mqt/core/include/spdlog/common-inl.h +68 -0
  369. mqt/core/include/spdlog/common.h +406 -0
  370. mqt/core/include/spdlog/details/backtracer-inl.h +63 -0
  371. mqt/core/include/spdlog/details/backtracer.h +45 -0
  372. mqt/core/include/spdlog/details/circular_q.h +115 -0
  373. mqt/core/include/spdlog/details/console_globals.h +28 -0
  374. mqt/core/include/spdlog/details/file_helper-inl.h +153 -0
  375. mqt/core/include/spdlog/details/file_helper.h +61 -0
  376. mqt/core/include/spdlog/details/fmt_helper.h +141 -0
  377. mqt/core/include/spdlog/details/log_msg-inl.h +44 -0
  378. mqt/core/include/spdlog/details/log_msg.h +40 -0
  379. mqt/core/include/spdlog/details/log_msg_buffer-inl.h +54 -0
  380. mqt/core/include/spdlog/details/log_msg_buffer.h +32 -0
  381. mqt/core/include/spdlog/details/mpmc_blocking_q.h +177 -0
  382. mqt/core/include/spdlog/details/null_mutex.h +35 -0
  383. mqt/core/include/spdlog/details/os-inl.h +606 -0
  384. mqt/core/include/spdlog/details/os.h +127 -0
  385. mqt/core/include/spdlog/details/periodic_worker-inl.h +26 -0
  386. mqt/core/include/spdlog/details/periodic_worker.h +58 -0
  387. mqt/core/include/spdlog/details/registry-inl.h +270 -0
  388. mqt/core/include/spdlog/details/registry.h +131 -0
  389. mqt/core/include/spdlog/details/synchronous_factory.h +22 -0
  390. mqt/core/include/spdlog/details/tcp_client-windows.h +135 -0
  391. mqt/core/include/spdlog/details/tcp_client.h +127 -0
  392. mqt/core/include/spdlog/details/thread_pool-inl.h +126 -0
  393. mqt/core/include/spdlog/details/thread_pool.h +117 -0
  394. mqt/core/include/spdlog/details/udp_client-windows.h +98 -0
  395. mqt/core/include/spdlog/details/udp_client.h +81 -0
  396. mqt/core/include/spdlog/details/windows_include.h +11 -0
  397. mqt/core/include/spdlog/fmt/bin_to_hex.h +224 -0
  398. mqt/core/include/spdlog/fmt/bundled/args.h +220 -0
  399. mqt/core/include/spdlog/fmt/bundled/base.h +2989 -0
  400. mqt/core/include/spdlog/fmt/bundled/chrono.h +2330 -0
  401. mqt/core/include/spdlog/fmt/bundled/color.h +637 -0
  402. mqt/core/include/spdlog/fmt/bundled/compile.h +539 -0
  403. mqt/core/include/spdlog/fmt/bundled/core.h +5 -0
  404. mqt/core/include/spdlog/fmt/bundled/fmt.license.rst +27 -0
  405. mqt/core/include/spdlog/fmt/bundled/format-inl.h +1948 -0
  406. mqt/core/include/spdlog/fmt/bundled/format.h +4244 -0
  407. mqt/core/include/spdlog/fmt/bundled/os.h +427 -0
  408. mqt/core/include/spdlog/fmt/bundled/ostream.h +167 -0
  409. mqt/core/include/spdlog/fmt/bundled/printf.h +633 -0
  410. mqt/core/include/spdlog/fmt/bundled/ranges.h +850 -0
  411. mqt/core/include/spdlog/fmt/bundled/std.h +728 -0
  412. mqt/core/include/spdlog/fmt/bundled/xchar.h +369 -0
  413. mqt/core/include/spdlog/fmt/chrono.h +23 -0
  414. mqt/core/include/spdlog/fmt/compile.h +23 -0
  415. mqt/core/include/spdlog/fmt/fmt.h +30 -0
  416. mqt/core/include/spdlog/fmt/ostr.h +23 -0
  417. mqt/core/include/spdlog/fmt/ranges.h +23 -0
  418. mqt/core/include/spdlog/fmt/std.h +24 -0
  419. mqt/core/include/spdlog/fmt/xchar.h +23 -0
  420. mqt/core/include/spdlog/formatter.h +17 -0
  421. mqt/core/include/spdlog/fwd.h +18 -0
  422. mqt/core/include/spdlog/logger-inl.h +198 -0
  423. mqt/core/include/spdlog/logger.h +379 -0
  424. mqt/core/include/spdlog/mdc.h +52 -0
  425. mqt/core/include/spdlog/pattern_formatter-inl.h +1340 -0
  426. mqt/core/include/spdlog/pattern_formatter.h +118 -0
  427. mqt/core/include/spdlog/sinks/android_sink.h +137 -0
  428. mqt/core/include/spdlog/sinks/ansicolor_sink-inl.h +142 -0
  429. mqt/core/include/spdlog/sinks/ansicolor_sink.h +116 -0
  430. mqt/core/include/spdlog/sinks/base_sink-inl.h +59 -0
  431. mqt/core/include/spdlog/sinks/base_sink.h +51 -0
  432. mqt/core/include/spdlog/sinks/basic_file_sink-inl.h +48 -0
  433. mqt/core/include/spdlog/sinks/basic_file_sink.h +66 -0
  434. mqt/core/include/spdlog/sinks/callback_sink.h +56 -0
  435. mqt/core/include/spdlog/sinks/daily_file_sink.h +254 -0
  436. mqt/core/include/spdlog/sinks/dist_sink.h +81 -0
  437. mqt/core/include/spdlog/sinks/dup_filter_sink.h +91 -0
  438. mqt/core/include/spdlog/sinks/hourly_file_sink.h +193 -0
  439. mqt/core/include/spdlog/sinks/kafka_sink.h +119 -0
  440. mqt/core/include/spdlog/sinks/mongo_sink.h +108 -0
  441. mqt/core/include/spdlog/sinks/msvc_sink.h +68 -0
  442. mqt/core/include/spdlog/sinks/null_sink.h +41 -0
  443. mqt/core/include/spdlog/sinks/ostream_sink.h +43 -0
  444. mqt/core/include/spdlog/sinks/qt_sinks.h +304 -0
  445. mqt/core/include/spdlog/sinks/ringbuffer_sink.h +67 -0
  446. mqt/core/include/spdlog/sinks/rotating_file_sink-inl.h +179 -0
  447. mqt/core/include/spdlog/sinks/rotating_file_sink.h +93 -0
  448. mqt/core/include/spdlog/sinks/sink-inl.h +22 -0
  449. mqt/core/include/spdlog/sinks/sink.h +34 -0
  450. mqt/core/include/spdlog/sinks/stdout_color_sinks-inl.h +38 -0
  451. mqt/core/include/spdlog/sinks/stdout_color_sinks.h +49 -0
  452. mqt/core/include/spdlog/sinks/stdout_sinks-inl.h +127 -0
  453. mqt/core/include/spdlog/sinks/stdout_sinks.h +84 -0
  454. mqt/core/include/spdlog/sinks/syslog_sink.h +104 -0
  455. mqt/core/include/spdlog/sinks/systemd_sink.h +121 -0
  456. mqt/core/include/spdlog/sinks/tcp_sink.h +75 -0
  457. mqt/core/include/spdlog/sinks/udp_sink.h +69 -0
  458. mqt/core/include/spdlog/sinks/win_eventlog_sink.h +260 -0
  459. mqt/core/include/spdlog/sinks/wincolor_sink-inl.h +172 -0
  460. mqt/core/include/spdlog/sinks/wincolor_sink.h +82 -0
  461. mqt/core/include/spdlog/spdlog-inl.h +96 -0
  462. mqt/core/include/spdlog/spdlog.h +357 -0
  463. mqt/core/include/spdlog/stopwatch.h +66 -0
  464. mqt/core/include/spdlog/tweakme.h +148 -0
  465. mqt/core/include/spdlog/version.h +11 -0
  466. mqt/core/ir/__init__.pyi +2078 -0
  467. mqt/core/ir/operations.pyi +1011 -0
  468. mqt/core/ir/registers.pyi +91 -0
  469. mqt/core/ir/symbolic.pyi +177 -0
  470. mqt/core/ir.cpython-314t-darwin.so +0 -0
  471. mqt/core/lib/libmqt-core-algorithms.3.3.2.dylib +0 -0
  472. mqt/core/lib/libmqt-core-algorithms.3.3.dylib +0 -0
  473. mqt/core/lib/libmqt-core-algorithms.dylib +0 -0
  474. mqt/core/lib/libmqt-core-circuit-optimizer.3.3.2.dylib +0 -0
  475. mqt/core/lib/libmqt-core-circuit-optimizer.3.3.dylib +0 -0
  476. mqt/core/lib/libmqt-core-circuit-optimizer.dylib +0 -0
  477. mqt/core/lib/libmqt-core-dd.3.3.2.dylib +0 -0
  478. mqt/core/lib/libmqt-core-dd.3.3.dylib +0 -0
  479. mqt/core/lib/libmqt-core-dd.dylib +0 -0
  480. mqt/core/lib/libmqt-core-ds.3.3.2.dylib +0 -0
  481. mqt/core/lib/libmqt-core-ds.3.3.dylib +0 -0
  482. mqt/core/lib/libmqt-core-ds.dylib +0 -0
  483. mqt/core/lib/libmqt-core-fomac.3.3.2.dylib +0 -0
  484. mqt/core/lib/libmqt-core-fomac.3.3.dylib +0 -0
  485. mqt/core/lib/libmqt-core-fomac.dylib +0 -0
  486. mqt/core/lib/libmqt-core-ir.3.3.2.dylib +0 -0
  487. mqt/core/lib/libmqt-core-ir.3.3.dylib +0 -0
  488. mqt/core/lib/libmqt-core-ir.dylib +0 -0
  489. mqt/core/lib/libmqt-core-na-fomac.3.3.2.dylib +0 -0
  490. mqt/core/lib/libmqt-core-na-fomac.3.3.dylib +0 -0
  491. mqt/core/lib/libmqt-core-na-fomac.dylib +0 -0
  492. mqt/core/lib/libmqt-core-na.3.3.2.dylib +0 -0
  493. mqt/core/lib/libmqt-core-na.3.3.dylib +0 -0
  494. mqt/core/lib/libmqt-core-na.dylib +0 -0
  495. mqt/core/lib/libmqt-core-qasm.3.3.2.dylib +0 -0
  496. mqt/core/lib/libmqt-core-qasm.3.3.dylib +0 -0
  497. mqt/core/lib/libmqt-core-qasm.dylib +0 -0
  498. mqt/core/lib/libmqt-core-qdmi-driver.3.3.2.dylib +0 -0
  499. mqt/core/lib/libmqt-core-qdmi-driver.3.3.dylib +0 -0
  500. mqt/core/lib/libmqt-core-qdmi-driver.dylib +0 -0
  501. mqt/core/lib/libmqt-core-qdmi-na-device-gen.a +0 -0
  502. mqt/core/lib/libmqt-core-qdmi-na-device.3.3.2.dylib +0 -0
  503. mqt/core/lib/libmqt-core-qdmi-na-device.3.3.dylib +0 -0
  504. mqt/core/lib/libmqt-core-qdmi-na-device.dylib +0 -0
  505. mqt/core/lib/libmqt-core-zx.3.3.2.dylib +0 -0
  506. mqt/core/lib/libmqt-core-zx.3.3.dylib +0 -0
  507. mqt/core/lib/libmqt-core-zx.dylib +0 -0
  508. mqt/core/lib/libspdlog.a +0 -0
  509. mqt/core/lib/pkgconfig/spdlog.pc +13 -0
  510. mqt/core/na/__init__.py +12 -0
  511. mqt/core/na/fomac.cpython-314t-darwin.so +0 -0
  512. mqt/core/na/fomac.pyi +117 -0
  513. mqt/core/plugins/__init__.py +9 -0
  514. mqt/core/plugins/qiskit/__init__.py +19 -0
  515. mqt/core/plugins/qiskit/mqt_to_qiskit.py +420 -0
  516. mqt/core/plugins/qiskit/qiskit_to_mqt.py +562 -0
  517. mqt/core/py.typed +2 -0
  518. mqt/core/share/cmake/mqt-core/AddMQTPythonBinding.cmake +55 -0
  519. mqt/core/share/cmake/mqt-core/Cache.cmake +33 -0
  520. mqt/core/share/cmake/mqt-core/FindGMP.cmake +103 -0
  521. mqt/core/share/cmake/mqt-core/PackageAddTest.cmake +46 -0
  522. mqt/core/share/cmake/mqt-core/PreventInSourceBuilds.cmake +25 -0
  523. mqt/core/share/cmake/mqt-core/StandardProjectSettings.cmake +87 -0
  524. mqt/core/share/cmake/mqt-core/mqt-core-config-version.cmake +85 -0
  525. mqt/core/share/cmake/mqt-core/mqt-core-config.cmake +52 -0
  526. mqt/core/share/cmake/mqt-core/mqt-core-targets-release.cmake +141 -0
  527. mqt/core/share/cmake/mqt-core/mqt-core-targets.cmake +446 -0
  528. mqt/core/share/cmake/nlohmann_json/nlohmann_jsonConfig.cmake +15 -0
  529. mqt/core/share/cmake/nlohmann_json/nlohmann_jsonConfigVersion.cmake +20 -0
  530. mqt/core/share/cmake/nlohmann_json/nlohmann_jsonTargets.cmake +109 -0
  531. mqt/core/share/cmake/qdmi/Cache.cmake +44 -0
  532. mqt/core/share/cmake/qdmi/PrefixHandling.cmake +78 -0
  533. mqt/core/share/cmake/qdmi/prefix_defs.txt +26 -0
  534. mqt/core/share/cmake/qdmi/qdmi-config-version.cmake +85 -0
  535. mqt/core/share/cmake/qdmi/qdmi-config.cmake +42 -0
  536. mqt/core/share/cmake/qdmi/qdmi-targets.cmake +129 -0
  537. mqt/core/share/cmake/spdlog/spdlogConfig.cmake +44 -0
  538. mqt/core/share/cmake/spdlog/spdlogConfigTargets-release.cmake +19 -0
  539. mqt/core/share/cmake/spdlog/spdlogConfigTargets.cmake +118 -0
  540. mqt/core/share/cmake/spdlog/spdlogConfigVersion.cmake +65 -0
  541. mqt/core/share/pkgconfig/nlohmann_json.pc +7 -0
  542. mqt_core-3.3.2.dist-info/METADATA +210 -0
  543. mqt_core-3.3.2.dist-info/RECORD +546 -0
  544. mqt_core-3.3.2.dist-info/WHEEL +6 -0
  545. mqt_core-3.3.2.dist-info/entry_points.txt +4 -0
  546. mqt_core-3.3.2.dist-info/licenses/LICENSE.md +22 -0
@@ -0,0 +1,438 @@
1
+ /*
2
+ * Copyright (c) 2023 - 2025 Chair for Design Automation, TUM
3
+ * Copyright (c) 2025 Munich Quantum Software Company GmbH
4
+ * All rights reserved.
5
+ *
6
+ * SPDX-License-Identifier: MIT
7
+ *
8
+ * Licensed under the MIT License
9
+ */
10
+
11
+ #pragma once
12
+
13
+ #include "dd/Complex.hpp"
14
+ #include "dd/DDDefinitions.hpp"
15
+ #include "dd/Edge.hpp"
16
+ #include "dd/Node.hpp"
17
+ #include "dd/RealNumber.hpp"
18
+
19
+ #include <cstdint>
20
+ #include <cstdlib>
21
+ #include <fstream>
22
+ #include <iostream>
23
+ #include <queue>
24
+ #include <sstream>
25
+ #include <stdexcept>
26
+ #include <string>
27
+ #include <unordered_map>
28
+ #include <unordered_set>
29
+ #include <vector>
30
+
31
+ namespace dd {
32
+
33
+ std::string colorFromPhase(const Complex& a);
34
+
35
+ fp thicknessFromMagnitude(const Complex& a);
36
+
37
+ void printPhaseFormatted(std::ostream& os, fp r);
38
+
39
+ std::string conditionalFormat(const Complex& a, bool formatAsPolar = true);
40
+
41
+ template <class Node>
42
+ static std::ostream& header(const Edge<Node>& e, std::ostream& os,
43
+ bool edgeLabels, bool formatAsPolar = true) {
44
+ os << "digraph \"DD\" {graph[];node[shape=plain];edge[arrowhead=none]\n";
45
+ os << "root [label=\"\",shape=point,style=invis]\n";
46
+ os << "t [label=<<font "
47
+ "point-size=\"20\">1</"
48
+ "font>>,shape=box,tooltip=\"1\",width=0.3,height=0.3]\n";
49
+ auto toplabel = (reinterpret_cast<std::uintptr_t>(e.p) & 0x001fffffU) >> 1U;
50
+ os << "root->";
51
+ if (e.isTerminal()) {
52
+ os << "t";
53
+ } else {
54
+ os << toplabel;
55
+ }
56
+ os << "[penwidth=\"" << thicknessFromMagnitude(e.w) << "\",tooltip=\""
57
+ << conditionalFormat(e.w, formatAsPolar) << "\"";
58
+ if (!e.w.exactlyOne()) {
59
+ os << ",style=dashed";
60
+ }
61
+ if (edgeLabels) {
62
+ os << ",label=<<font point-size=\"8\">&nbsp;"
63
+ << conditionalFormat(e.w, formatAsPolar) << "</font>>";
64
+ }
65
+
66
+ os << "]\n";
67
+
68
+ return os;
69
+ }
70
+ template <class Node>
71
+ static std::ostream& coloredHeader(const Edge<Node>& e, std::ostream& os,
72
+ bool edgeLabels, bool formatAsPolar = true) {
73
+ os << "digraph \"DD\" {graph[];node[shape=plain];edge[arrowhead=none]\n";
74
+ os << "root [label=\"\",shape=point,style=invis]\n";
75
+ os << "t [label=<<font "
76
+ "point-size=\"20\">1</"
77
+ "font>>,shape=box,tooltip=\"1\",width=0.3,height=0.3]\n";
78
+
79
+ auto toplabel = (reinterpret_cast<std::uintptr_t>(e.p) & 0x001fffffU) >> 1U;
80
+ auto mag = thicknessFromMagnitude(e.w);
81
+ auto color = colorFromPhase(e.w);
82
+ os << "root->";
83
+ if (e.isTerminal()) {
84
+ os << "t";
85
+ } else {
86
+ os << toplabel;
87
+ }
88
+ os << "[penwidth=\"" << mag << "\",tooltip=\""
89
+ << conditionalFormat(e.w, formatAsPolar) << "\",color=\"" << color << "\"";
90
+ if (edgeLabels) {
91
+ os << ",label=<<font point-size=\"8\">&nbsp;"
92
+ << conditionalFormat(e.w, formatAsPolar) << "</font>>";
93
+ }
94
+ os << "]\n";
95
+ return os;
96
+ }
97
+ template <class Node>
98
+ static std::ostream& memoryHeader(const Edge<Node>& e, std::ostream& os,
99
+ bool edgeLabels) {
100
+ os << "digraph \"DD\" {graph[];node[shape=plain];edge[arrowhead=none]\n";
101
+ os << "root [label=\"\",shape=point,style=invis]\n";
102
+ os << "t [label=<<font "
103
+ "point-size=\"20\">1</"
104
+ "font>>,shape=box,tooltip=\"1\",width=0.3,height=0.3]\n";
105
+
106
+ auto toplabel = (reinterpret_cast<std::uintptr_t>(e.p) & 0x001fffffU) >> 1U;
107
+ auto mag = thicknessFromMagnitude(e.w);
108
+ auto color = colorFromPhase(e.w);
109
+ os << "root->";
110
+ if (e.isTerminal()) {
111
+ os << "t";
112
+ } else {
113
+ os << toplabel;
114
+ }
115
+ os << "[penwidth=\"" << mag << "\",tooltip=\"" << e.w.toString(false, 4)
116
+ << "\" color=\"" << color << "\"";
117
+ if (edgeLabels) {
118
+ os << ",label=<<font point-size=\"8\">&nbsp;[";
119
+ if (e.w.exactlyZero()) {
120
+ os << "0";
121
+ } else if (e.w.exactlyOne()) {
122
+ os << "1";
123
+ } else {
124
+ if (RealNumber::exactlyZero(e.w.r)) {
125
+ os << "0";
126
+ } else if (RealNumber::exactlySqrt2over2(e.w.r)) {
127
+ os << "\xe2\x88\x9a\xc2\xbd";
128
+ } else if (RealNumber::exactlyOne(e.w.r)) {
129
+ os << "1";
130
+ } else {
131
+ os << std::hex << reinterpret_cast<std::uintptr_t>(e.w.r) << std::dec;
132
+ }
133
+ os << " ";
134
+ if (RealNumber::exactlyZero(e.w.i)) {
135
+ os << "0";
136
+ } else if (RealNumber::exactlySqrt2over2(e.w.i)) {
137
+ os << "\xe2\x88\x9a\xc2\xbd";
138
+ } else if (RealNumber::exactlyOne(e.w.i)) {
139
+ os << "1";
140
+ } else {
141
+ os << std::hex << reinterpret_cast<std::uintptr_t>(e.w.i) << std::dec;
142
+ }
143
+ }
144
+ os << "]</font>>";
145
+ }
146
+ os << "]\n";
147
+ return os;
148
+ }
149
+
150
+ std::ostream& modernNode(const mEdge& e, std::ostream& os,
151
+ bool formatAsPolar = true);
152
+ std::ostream& modernNode(const vEdge& e, std::ostream& os,
153
+ bool formatAsPolar = true);
154
+ std::ostream& classicNode(const mEdge& e, std::ostream& os,
155
+ bool formatAsPolar = true);
156
+ std::ostream& classicNode(const vEdge& e, std::ostream& os,
157
+ bool formatAsPolar = true);
158
+ template <class Node>
159
+ static std::ostream& memoryNode(const Edge<Node>& e, std::ostream& os) {
160
+ constexpr std::size_t n = std::tuple_size_v<decltype(e.p->e)>;
161
+ auto nodelabel = (reinterpret_cast<std::uintptr_t>(e.p) & 0x001fffffU) >>
162
+ 1U; // this allows for 2^20 (roughly 1e6) unique nodes
163
+ os << nodelabel << "[label=<";
164
+ os << R"(<font point-size="10"><table border="1" cellspacing="0" cellpadding="2" style="rounded">)";
165
+ os << R"(<tr><td colspan=")" << n << R"(" border="1" sides="B">)" << std::hex
166
+ << reinterpret_cast<std::uintptr_t>(e.p) << std::dec << "</td></tr>";
167
+ os << "<tr>";
168
+ for (std::size_t i = 0; i < n; ++i) {
169
+ os << "<td port=\"" << i << R"(" href="javascript:;" border="0" tooltip=")"
170
+ << e.p->e[i].w.toString(false, 4) << "\">";
171
+ if (e.p->e[i].isZeroTerminal()) {
172
+ os << "&nbsp;0 "
173
+ "";
174
+ } else {
175
+ os << "<font color=\"white\">&nbsp;0 </font>";
176
+ }
177
+ os << "</td>";
178
+ }
179
+ os << "</tr>";
180
+ os << "</table></font>>,tooltip=\"" << std::hex
181
+ << reinterpret_cast<std::uintptr_t>(e.p) << "\"]\n"
182
+ << std::dec;
183
+ return os;
184
+ }
185
+
186
+ std::ostream& bwEdge(const mEdge& from, const mEdge& to, std::uint16_t idx,
187
+ std::ostream& os, bool edgeLabels = false,
188
+ bool classic = false, bool formatAsPolar = true);
189
+ std::ostream& bwEdge(const vEdge& from, const vEdge& to, std::uint16_t idx,
190
+ std::ostream& os, bool edgeLabels = false,
191
+ bool classic = false, bool formatAsPolar = true);
192
+ std::ostream& coloredEdge(const mEdge& from, const mEdge& to, std::uint16_t idx,
193
+ std::ostream& os, bool edgeLabels = false,
194
+ bool classic = false, bool formatAsPolar = true);
195
+ std::ostream& coloredEdge(const vEdge& from, const vEdge& to, std::uint16_t idx,
196
+ std::ostream& os, bool edgeLabels = false,
197
+ bool classic = false, bool formatAsPolar = true);
198
+ template <class Node>
199
+ static std::ostream& memoryEdge(const Edge<Node>& from, const Edge<Node>& to,
200
+ std::uint16_t idx, std::ostream& os,
201
+ bool edgeLabels = false) {
202
+ auto fromlabel =
203
+ (reinterpret_cast<std::uintptr_t>(from.p) & 0x001fffffU) >> 1U;
204
+ auto tolabel = (reinterpret_cast<std::uintptr_t>(to.p) & 0x001fffffU) >> 1U;
205
+
206
+ os << fromlabel << ":" << idx << ":s->";
207
+ if (to.isTerminal()) {
208
+ os << "t";
209
+ } else {
210
+ os << tolabel;
211
+ }
212
+
213
+ auto mag = thicknessFromMagnitude(to.w);
214
+ auto color = colorFromPhase(to.w);
215
+ os << "[penwidth=\"" << mag << "\",tooltip=\"" << to.w.toString(false, 4)
216
+ << "\" color=\"" << color << "\"";
217
+ if (edgeLabels) {
218
+ os << ",label=<<font point-size=\"8\">&nbsp;[";
219
+ if (to.w.exactlyOne()) {
220
+ os << "1";
221
+ } else {
222
+ if (RealNumber::exactlyZero(to.w.r)) {
223
+ os << "0";
224
+ } else if (RealNumber::exactlySqrt2over2(to.w.r)) {
225
+ os << "\xe2\x88\x9a\xc2\xbd";
226
+ } else if (RealNumber::exactlyOne(to.w.r)) {
227
+ os << "1";
228
+ } else {
229
+ os << std::hex << reinterpret_cast<std::uintptr_t>(to.w.r) << std::dec;
230
+ }
231
+ os << " ";
232
+ if (RealNumber::exactlyZero(to.w.i)) {
233
+ os << "0";
234
+ } else if (RealNumber::exactlySqrt2over2(to.w.i)) {
235
+ os << "\xe2\x88\x9a\xc2\xbd";
236
+ } else if (RealNumber::exactlyOne(to.w.i)) {
237
+ os << "1";
238
+ } else {
239
+ os << std::hex << reinterpret_cast<std::uintptr_t>(to.w.i) << std::dec;
240
+ }
241
+ }
242
+ os << "]</font>>";
243
+ }
244
+ os << "]\n";
245
+
246
+ return os;
247
+ }
248
+
249
+ template <class Node>
250
+ static void toDot(const Edge<Node>& e, std::ostream& os, bool colored = true,
251
+ bool edgeLabels = false, bool classic = false,
252
+ bool memory = false, bool formatAsPolar = true) {
253
+ std::ostringstream oss{};
254
+ // header, root and terminal declaration
255
+
256
+ if (memory) {
257
+ memoryHeader(e, oss, edgeLabels);
258
+ } else if (colored) {
259
+ coloredHeader(e, oss, edgeLabels, formatAsPolar);
260
+ } else {
261
+ header(e, oss, edgeLabels, formatAsPolar);
262
+ }
263
+
264
+ std::unordered_set<decltype(e.p)> nodes{};
265
+
266
+ auto priocmp = [](const Edge<Node>* left, const Edge<Node>* right) {
267
+ if (left->p == nullptr) {
268
+ return right->p != nullptr;
269
+ }
270
+ if (right->p == nullptr) {
271
+ return false;
272
+ }
273
+ return left->p->v < right->p->v;
274
+ };
275
+
276
+ std::priority_queue<const Edge<Node>*, std::vector<const Edge<Node>*>,
277
+ decltype(priocmp)>
278
+ q(priocmp);
279
+ q.push(&e);
280
+
281
+ // bfs until finished
282
+ while (!q.empty()) {
283
+ auto node = q.top();
284
+ q.pop();
285
+
286
+ // base case
287
+ if (node->isTerminal()) {
288
+ continue;
289
+ }
290
+
291
+ // check if node has already been processed
292
+ auto ret = nodes.emplace(node->p);
293
+ if (!ret.second) {
294
+ continue;
295
+ }
296
+
297
+ // node definition as HTML-like label (href="javascript:;" is used as
298
+ // workaround to make tooltips work)
299
+ if (memory) {
300
+ memoryNode(*node, oss);
301
+ } else if (classic) {
302
+ classicNode(*node, oss, formatAsPolar);
303
+ } else {
304
+ modernNode(*node, oss, formatAsPolar);
305
+ }
306
+
307
+ // iterate over edges in reverse to guarantee correct processing order
308
+ for (auto i = static_cast<std::int16_t>(node->p->e.size() - 1); i >= 0;
309
+ --i) {
310
+ auto& edge = node->p->e[static_cast<std::size_t>(i)];
311
+ if ((!memory && edge.w.approximatelyZero()) || edge.w.exactlyZero()) {
312
+ // potentially add zero stubs here
313
+ continue;
314
+ }
315
+
316
+ // non-zero edge to be included
317
+ q.push(&edge);
318
+
319
+ if (memory) {
320
+ memoryEdge(*node, edge, static_cast<std::uint16_t>(i), oss, edgeLabels);
321
+ } else if (colored) {
322
+ coloredEdge(*node, edge, static_cast<std::uint16_t>(i), oss, edgeLabels,
323
+ classic, formatAsPolar);
324
+ } else {
325
+ bwEdge(*node, edge, static_cast<std::uint16_t>(i), oss, edgeLabels,
326
+ classic, formatAsPolar);
327
+ }
328
+ }
329
+ }
330
+ oss << "}\n";
331
+
332
+ os << oss.str() << std::flush;
333
+ }
334
+
335
+ template <class Node>
336
+ [[maybe_unused]] static void
337
+ export2Dot(Edge<Node> basic, const std::string& outputFilename,
338
+ bool colored = true, bool edgeLabels = false, bool classic = false,
339
+ bool memory = false, bool show = true, bool formatAsPolar = true) {
340
+ std::ofstream init(outputFilename);
341
+ toDot(basic, init, colored, edgeLabels, classic, memory, formatAsPolar);
342
+ init.close();
343
+
344
+ if (show) {
345
+ std::ostringstream oss;
346
+ oss << "dot -Tsvg " << outputFilename << " -o "
347
+ << outputFilename.substr(0, outputFilename.find_last_of('.')) << ".svg";
348
+ const auto str =
349
+ oss.str(); // required to avoid immediate deallocation of temporary
350
+ const auto exitCode = std::system(str.c_str());
351
+ if (exitCode != 0) {
352
+ std::cerr << "Error: dot returned with exit code " << exitCode << "\n";
353
+ }
354
+ }
355
+ }
356
+
357
+ ///
358
+ /// Serialization
359
+ /// Note: do not rely on the binary format being portable across different
360
+ /// architectures/platforms
361
+ ///
362
+
363
+ void serialize(const vEdge& basic, std::ostream& os, bool writeBinary = false);
364
+
365
+ void serializeMatrix(const mEdge& basic, std::int64_t& idx,
366
+ std::unordered_map<mNode*, std::int64_t>& nodeIndex,
367
+ std::unordered_set<mNode*>& visited, std::ostream& os,
368
+ bool writeBinary = false);
369
+ void serialize(const mEdge& basic, std::ostream& os, bool writeBinary = false);
370
+ template <class Node>
371
+ static void serialize(const Edge<Node>& basic,
372
+ const std::string& outputFilename,
373
+ bool writeBinary = false) {
374
+ std::ofstream ofs = std::ofstream(outputFilename, std::ios::binary);
375
+
376
+ if (!ofs.good()) {
377
+ throw std::invalid_argument("Cannot open file: " + outputFilename);
378
+ }
379
+
380
+ serialize(basic, ofs, writeBinary);
381
+ }
382
+
383
+ template <typename Node>
384
+ static void exportEdgeWeights(const Edge<Node>& edge, std::ostream& stream) {
385
+ struct Priocmp {
386
+ bool operator()(const Edge<Node>* left, const Edge<Node>* right) {
387
+ if (left->p == nullptr) {
388
+ return right->p != nullptr;
389
+ }
390
+ if (right->p == nullptr) {
391
+ return false;
392
+ }
393
+ return left->p->v < right->p->v;
394
+ }
395
+ };
396
+ stream << std::showpos << RealNumber::val(edge.w.r)
397
+ << RealNumber::val(edge.w.i) << std::noshowpos << "i\n";
398
+
399
+ std::unordered_set<decltype(edge.p)> nodes{};
400
+
401
+ std::priority_queue<const Edge<Node>*, std::vector<const Edge<Node>*>,
402
+ Priocmp>
403
+ q;
404
+ q.push(&edge);
405
+
406
+ // bfs until finished
407
+ while (!q.empty()) {
408
+ auto edgePtr = q.top();
409
+ q.pop();
410
+
411
+ // base case
412
+ if (edgePtr->isTerminal()) {
413
+ continue;
414
+ }
415
+
416
+ // check if edgePtr has already been processed
417
+ if (auto ret = nodes.emplace(edgePtr->p); !ret.second) {
418
+ continue;
419
+ }
420
+
421
+ // iterate over edges in reverse to guarantee correct processing order
422
+ for (auto i = static_cast<std::int16_t>(edgePtr->p->e.size() - 1); i >= 0;
423
+ --i) {
424
+ auto& child = edgePtr->p->e[static_cast<std::size_t>(i)];
425
+ if (child.w.approximatelyZero()) {
426
+ // potentially add zero stubs here
427
+ continue;
428
+ }
429
+
430
+ // non-zero child to be included
431
+ q.push(&child);
432
+ stream << std::showpos << RealNumber::val(child.w.r)
433
+ << RealNumber::val(child.w.i) << std::noshowpos << "i\n";
434
+ }
435
+ }
436
+ }
437
+
438
+ } // namespace dd
@@ -0,0 +1,75 @@
1
+ /*
2
+ * Copyright (c) 2023 - 2025 Chair for Design Automation, TUM
3
+ * Copyright (c) 2025 Munich Quantum Software Company GmbH
4
+ * All rights reserved.
5
+ *
6
+ * SPDX-License-Identifier: MIT
7
+ *
8
+ * Licensed under the MIT License
9
+ */
10
+
11
+ #pragma once
12
+
13
+ #include "dd/Package_fwd.hpp"
14
+
15
+ namespace qc {
16
+ class QuantumComputation;
17
+ }
18
+
19
+ namespace dd {
20
+ /**
21
+ * @brief Sequentially build a decision diagram representation for the
22
+ * functionality of a purely-quantum @ref qc::QuantumComputation.
23
+ *
24
+ * @details For a circuit \f$G\f$ with \f$|G|\f$ gates
25
+ * \f$g_0, g_1, \ldots, g_{|G|-1}\f$, the functionality of \f$G\f$ is defined as
26
+ * the unitary matrix \f$U\f$ such that
27
+ * \f[
28
+ * U = U_{|G|-1}) \cdot U_{|G|-2} \cdot \ldots \cdot U_1 \cdot U_0,
29
+ * \f]
30
+ * where \f$U_i\f$ is the unitary matrix corresponding to gate \f$g_i\f$.
31
+ * For an \f$n\f$-qubit quantum computation, \f$U\f$ is a \f$2^n \times 2^n\f$
32
+ * matrix.
33
+ *
34
+ * By representing every single operation in the circuit as a decision diagram
35
+ * instead of a unitary matrix and performing the matrix multiplication directly
36
+ * using decision diagrams, a representation of the functionality of a quantum
37
+ * computation can oftentimes be computed more efficiently in terms of memory
38
+ * and runtime.
39
+ *
40
+ * This function effectively computes
41
+ * \f[
42
+ * DD(U) = DD(g_{|G|-1}) \otimes DD(g_{|G|-2}) \otimes \ldots \otimes DD(g_0)
43
+ * \f]
44
+ * by sequentially applying the decision diagrams of the gates in the circuit to
45
+ * the current decision diagram representing the functionality of the quantum
46
+ * computation.
47
+ *
48
+ * @param qc The quantum computation to construct the functionality for
49
+ * @param dd The DD package to use for the construction
50
+ * @return The matrix diagram representing the functionality of the quantum
51
+ * computation
52
+ */
53
+ MatrixDD buildFunctionality(const qc::QuantumComputation& qc, Package& dd);
54
+
55
+ /**
56
+ * @brief Recursively build a decision diagram representation for the
57
+ * functionality of a purely-quantum @ref qc::QuantumComputation.
58
+ *
59
+ * @see buildFunctionality
60
+ * @details Instead of sequentially applying the decision diagrams of the gates
61
+ * in the circuit, this function builds a binary computation tree out of the
62
+ * decision diagrams of the gates in the circuit.
63
+ * This results in a recursive pairwise grouping that can be more memory and
64
+ * runtime efficient compared to the sequential approach.
65
+ * @see https://arxiv.org/abs/2103.08281
66
+ *
67
+ * @param qc The quantum computation to construct the functionality for
68
+ * @param dd The DD package to use for the construction
69
+ * @return The matrix diagram representing the functionality of the quantum
70
+ * computation
71
+ */
72
+ MatrixDD buildFunctionalityRecursive(const qc::QuantumComputation& qc,
73
+ Package& dd);
74
+
75
+ } // namespace dd
@@ -0,0 +1,43 @@
1
+ /*
2
+ * Copyright (c) 2023 - 2025 Chair for Design Automation, TUM
3
+ * Copyright (c) 2025 Munich Quantum Software Company GmbH
4
+ * All rights reserved.
5
+ *
6
+ * SPDX-License-Identifier: MIT
7
+ *
8
+ * Licensed under the MIT License
9
+ */
10
+
11
+ #pragma once
12
+
13
+ #include "dd/DDDefinitions.hpp"
14
+ #include "ir/operations/OpType.hpp"
15
+
16
+ #include <vector>
17
+
18
+ namespace dd {
19
+
20
+ /// Single-qubit gate matrix for collapsing a qubit to the |0> state
21
+ constexpr GateMatrix MEAS_ZERO_MAT{1, 0, 0, 0};
22
+ /// Single-qubit gate matrix for collapsing a qubit to the |1> state
23
+ constexpr GateMatrix MEAS_ONE_MAT{0, 0, 0, 1};
24
+
25
+ /**
26
+ * @brief Converts a given quantum operation to a single-qubit gate matrix
27
+ * @param t The quantum operation to convert
28
+ * @param params The parameters of the quantum operation
29
+ * @return The single-qubit gate matrix representation of the quantum operation
30
+ */
31
+ GateMatrix opToSingleQubitGateMatrix(qc::OpType t,
32
+ const std::vector<fp>& params = {});
33
+
34
+ /**
35
+ * @brief Converts a given quantum operation to a two-qubit gate matrix
36
+ * @param t The quantum operation to convert
37
+ * @param params The parameters of the quantum operation
38
+ * @return The two-qubit gate matrix representation of the quantum operation
39
+ */
40
+ TwoQubitGateMatrix opToTwoQubitGateMatrix(qc::OpType t,
41
+ const std::vector<fp>& params = {});
42
+
43
+ } // namespace dd
@@ -0,0 +1,45 @@
1
+ /*
2
+ * Copyright (c) 2023 - 2025 Chair for Design Automation, TUM
3
+ * Copyright (c) 2025 Munich Quantum Software Company GmbH
4
+ * All rights reserved.
5
+ *
6
+ * SPDX-License-Identifier: MIT
7
+ *
8
+ * Licensed under the MIT License
9
+ */
10
+
11
+ /** @file
12
+ * @brief Linked list functionality required for UniqueTable and MemoryManager.
13
+ */
14
+
15
+ #pragma once
16
+
17
+ namespace dd {
18
+
19
+ /**
20
+ * @brief A class to provide a base for linked list objects
21
+ */
22
+ struct LLBase {
23
+ /**
24
+ * @brief The pointer to the next object
25
+ * @details The next pointer is used to form linked lists of objects.
26
+ * Classes used in a linked list must solely inherit from this class.
27
+ * Other code in mqt-core relies on the assumption that all objects in a
28
+ * linked list are of the same type.
29
+ */
30
+ LLBase* next_ = nullptr;
31
+
32
+ /**
33
+ * @brief Default getter for the next object
34
+ * @details Classes that inherit from LLBase should implement their own next()
35
+ * method to return the next object in the list with a specialized return
36
+ * type.
37
+ * @return LLBase*
38
+ */
39
+ [[nodiscard]] LLBase* next() const noexcept { return next_; }
40
+
41
+ /// Setter for the next object
42
+ void setNext(LLBase* n) noexcept { next_ = n; }
43
+ };
44
+
45
+ } // namespace dd