mqt-core 3.3.2__cp314-cp314t-win_amd64.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 (537) hide show
  1. mqt/core/__init__.py +89 -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/bin/mqt-core-algorithms.dll +0 -0
  9. mqt/core/bin/mqt-core-circuit-optimizer.dll +0 -0
  10. mqt/core/bin/mqt-core-dd.dll +0 -0
  11. mqt/core/bin/mqt-core-ds.dll +0 -0
  12. mqt/core/bin/mqt-core-fomac.dll +0 -0
  13. mqt/core/bin/mqt-core-ir.dll +0 -0
  14. mqt/core/bin/mqt-core-na-fomac.dll +0 -0
  15. mqt/core/bin/mqt-core-na.dll +0 -0
  16. mqt/core/bin/mqt-core-qasm.dll +0 -0
  17. mqt/core/bin/mqt-core-qdmi-driver.dll +0 -0
  18. mqt/core/bin/mqt-core-qdmi-na-device.dll +0 -0
  19. mqt/core/bin/mqt-core-zx.dll +0 -0
  20. mqt/core/dd.cp314t-win_amd64.pyd +0 -0
  21. mqt/core/dd.pyi +1016 -0
  22. mqt/core/dd_evaluation.py +368 -0
  23. mqt/core/fomac.cp314t-win_amd64.pyd +0 -0
  24. mqt/core/fomac.pyi +125 -0
  25. mqt/core/include/mqt-core/algorithms/BernsteinVazirani.hpp +39 -0
  26. mqt/core/include/mqt-core/algorithms/GHZState.hpp +18 -0
  27. mqt/core/include/mqt-core/algorithms/Grover.hpp +33 -0
  28. mqt/core/include/mqt-core/algorithms/QFT.hpp +21 -0
  29. mqt/core/include/mqt-core/algorithms/QPE.hpp +30 -0
  30. mqt/core/include/mqt-core/algorithms/RandomCliffordCircuit.hpp +22 -0
  31. mqt/core/include/mqt-core/algorithms/StatePreparation.hpp +43 -0
  32. mqt/core/include/mqt-core/algorithms/WState.hpp +18 -0
  33. mqt/core/include/mqt-core/algorithms/mqt_core_algorithms_export.h +43 -0
  34. mqt/core/include/mqt-core/boost/config/abi/borland_prefix.hpp +27 -0
  35. mqt/core/include/mqt-core/boost/config/abi/borland_suffix.hpp +12 -0
  36. mqt/core/include/mqt-core/boost/config/abi/msvc_prefix.hpp +22 -0
  37. mqt/core/include/mqt-core/boost/config/abi/msvc_suffix.hpp +8 -0
  38. mqt/core/include/mqt-core/boost/config/abi_prefix.hpp +25 -0
  39. mqt/core/include/mqt-core/boost/config/abi_suffix.hpp +25 -0
  40. mqt/core/include/mqt-core/boost/config/assert_cxx03.hpp +211 -0
  41. mqt/core/include/mqt-core/boost/config/assert_cxx11.hpp +212 -0
  42. mqt/core/include/mqt-core/boost/config/assert_cxx14.hpp +47 -0
  43. mqt/core/include/mqt-core/boost/config/assert_cxx17.hpp +65 -0
  44. mqt/core/include/mqt-core/boost/config/assert_cxx20.hpp +59 -0
  45. mqt/core/include/mqt-core/boost/config/assert_cxx23.hpp +41 -0
  46. mqt/core/include/mqt-core/boost/config/assert_cxx98.hpp +23 -0
  47. mqt/core/include/mqt-core/boost/config/auto_link.hpp +525 -0
  48. mqt/core/include/mqt-core/boost/config/compiler/borland.hpp +342 -0
  49. mqt/core/include/mqt-core/boost/config/compiler/clang.hpp +370 -0
  50. mqt/core/include/mqt-core/boost/config/compiler/clang_version.hpp +89 -0
  51. mqt/core/include/mqt-core/boost/config/compiler/codegear.hpp +389 -0
  52. mqt/core/include/mqt-core/boost/config/compiler/comeau.hpp +59 -0
  53. mqt/core/include/mqt-core/boost/config/compiler/common_edg.hpp +185 -0
  54. mqt/core/include/mqt-core/boost/config/compiler/compaq_cxx.hpp +19 -0
  55. mqt/core/include/mqt-core/boost/config/compiler/cray.hpp +446 -0
  56. mqt/core/include/mqt-core/boost/config/compiler/diab.hpp +26 -0
  57. mqt/core/include/mqt-core/boost/config/compiler/digitalmars.hpp +146 -0
  58. mqt/core/include/mqt-core/boost/config/compiler/gcc.hpp +386 -0
  59. mqt/core/include/mqt-core/boost/config/compiler/gcc_xml.hpp +115 -0
  60. mqt/core/include/mqt-core/boost/config/compiler/greenhills.hpp +28 -0
  61. mqt/core/include/mqt-core/boost/config/compiler/hp_acc.hpp +153 -0
  62. mqt/core/include/mqt-core/boost/config/compiler/intel.hpp +577 -0
  63. mqt/core/include/mqt-core/boost/config/compiler/kai.hpp +33 -0
  64. mqt/core/include/mqt-core/boost/config/compiler/metrowerks.hpp +201 -0
  65. mqt/core/include/mqt-core/boost/config/compiler/mpw.hpp +143 -0
  66. mqt/core/include/mqt-core/boost/config/compiler/nvcc.hpp +64 -0
  67. mqt/core/include/mqt-core/boost/config/compiler/pathscale.hpp +141 -0
  68. mqt/core/include/mqt-core/boost/config/compiler/pgi.hpp +23 -0
  69. mqt/core/include/mqt-core/boost/config/compiler/sgi_mipspro.hpp +29 -0
  70. mqt/core/include/mqt-core/boost/config/compiler/sunpro_cc.hpp +225 -0
  71. mqt/core/include/mqt-core/boost/config/compiler/vacpp.hpp +189 -0
  72. mqt/core/include/mqt-core/boost/config/compiler/visualc.hpp +398 -0
  73. mqt/core/include/mqt-core/boost/config/compiler/xlcpp.hpp +303 -0
  74. mqt/core/include/mqt-core/boost/config/compiler/xlcpp_zos.hpp +174 -0
  75. mqt/core/include/mqt-core/boost/config/detail/cxx_composite.hpp +218 -0
  76. mqt/core/include/mqt-core/boost/config/detail/posix_features.hpp +95 -0
  77. mqt/core/include/mqt-core/boost/config/detail/select_compiler_config.hpp +157 -0
  78. mqt/core/include/mqt-core/boost/config/detail/select_platform_config.hpp +147 -0
  79. mqt/core/include/mqt-core/boost/config/detail/select_stdlib_config.hpp +121 -0
  80. mqt/core/include/mqt-core/boost/config/detail/suffix.hpp +1334 -0
  81. mqt/core/include/mqt-core/boost/config/header_deprecated.hpp +26 -0
  82. mqt/core/include/mqt-core/boost/config/helper_macros.hpp +37 -0
  83. mqt/core/include/mqt-core/boost/config/no_tr1/cmath.hpp +28 -0
  84. mqt/core/include/mqt-core/boost/config/no_tr1/complex.hpp +28 -0
  85. mqt/core/include/mqt-core/boost/config/no_tr1/functional.hpp +28 -0
  86. mqt/core/include/mqt-core/boost/config/no_tr1/memory.hpp +28 -0
  87. mqt/core/include/mqt-core/boost/config/no_tr1/utility.hpp +28 -0
  88. mqt/core/include/mqt-core/boost/config/platform/aix.hpp +33 -0
  89. mqt/core/include/mqt-core/boost/config/platform/amigaos.hpp +15 -0
  90. mqt/core/include/mqt-core/boost/config/platform/beos.hpp +26 -0
  91. mqt/core/include/mqt-core/boost/config/platform/bsd.hpp +83 -0
  92. mqt/core/include/mqt-core/boost/config/platform/cloudabi.hpp +18 -0
  93. mqt/core/include/mqt-core/boost/config/platform/cray.hpp +18 -0
  94. mqt/core/include/mqt-core/boost/config/platform/cygwin.hpp +71 -0
  95. mqt/core/include/mqt-core/boost/config/platform/haiku.hpp +31 -0
  96. mqt/core/include/mqt-core/boost/config/platform/hpux.hpp +87 -0
  97. mqt/core/include/mqt-core/boost/config/platform/irix.hpp +31 -0
  98. mqt/core/include/mqt-core/boost/config/platform/linux.hpp +106 -0
  99. mqt/core/include/mqt-core/boost/config/platform/macos.hpp +87 -0
  100. mqt/core/include/mqt-core/boost/config/platform/qnxnto.hpp +31 -0
  101. mqt/core/include/mqt-core/boost/config/platform/solaris.hpp +31 -0
  102. mqt/core/include/mqt-core/boost/config/platform/symbian.hpp +97 -0
  103. mqt/core/include/mqt-core/boost/config/platform/vms.hpp +25 -0
  104. mqt/core/include/mqt-core/boost/config/platform/vxworks.hpp +422 -0
  105. mqt/core/include/mqt-core/boost/config/platform/wasm.hpp +23 -0
  106. mqt/core/include/mqt-core/boost/config/platform/win32.hpp +90 -0
  107. mqt/core/include/mqt-core/boost/config/platform/zos.hpp +32 -0
  108. mqt/core/include/mqt-core/boost/config/pragma_message.hpp +31 -0
  109. mqt/core/include/mqt-core/boost/config/requires_threads.hpp +92 -0
  110. mqt/core/include/mqt-core/boost/config/stdlib/dinkumware.hpp +324 -0
  111. mqt/core/include/mqt-core/boost/config/stdlib/libcomo.hpp +93 -0
  112. mqt/core/include/mqt-core/boost/config/stdlib/libcpp.hpp +180 -0
  113. mqt/core/include/mqt-core/boost/config/stdlib/libstdcpp3.hpp +482 -0
  114. mqt/core/include/mqt-core/boost/config/stdlib/modena.hpp +79 -0
  115. mqt/core/include/mqt-core/boost/config/stdlib/msl.hpp +98 -0
  116. mqt/core/include/mqt-core/boost/config/stdlib/roguewave.hpp +208 -0
  117. mqt/core/include/mqt-core/boost/config/stdlib/sgi.hpp +168 -0
  118. mqt/core/include/mqt-core/boost/config/stdlib/stlport.hpp +258 -0
  119. mqt/core/include/mqt-core/boost/config/stdlib/vacpp.hpp +74 -0
  120. mqt/core/include/mqt-core/boost/config/stdlib/xlcpp_zos.hpp +61 -0
  121. mqt/core/include/mqt-core/boost/config/user.hpp +133 -0
  122. mqt/core/include/mqt-core/boost/config/warning_disable.hpp +47 -0
  123. mqt/core/include/mqt-core/boost/config/workaround.hpp +305 -0
  124. mqt/core/include/mqt-core/boost/config.hpp +67 -0
  125. mqt/core/include/mqt-core/boost/cstdint.hpp +556 -0
  126. mqt/core/include/mqt-core/boost/cxx11_char_types.hpp +70 -0
  127. mqt/core/include/mqt-core/boost/detail/workaround.hpp +10 -0
  128. mqt/core/include/mqt-core/boost/limits.hpp +146 -0
  129. mqt/core/include/mqt-core/boost/multiprecision/complex128.hpp +24 -0
  130. mqt/core/include/mqt-core/boost/multiprecision/complex_adaptor.hpp +1046 -0
  131. mqt/core/include/mqt-core/boost/multiprecision/concepts/mp_number_archetypes.hpp +257 -0
  132. mqt/core/include/mqt-core/boost/multiprecision/cpp_bin_float/io.hpp +698 -0
  133. mqt/core/include/mqt-core/boost/multiprecision/cpp_bin_float/transcendental.hpp +157 -0
  134. mqt/core/include/mqt-core/boost/multiprecision/cpp_bin_float.hpp +2297 -0
  135. mqt/core/include/mqt-core/boost/multiprecision/cpp_complex.hpp +12 -0
  136. mqt/core/include/mqt-core/boost/multiprecision/cpp_dec_float.hpp +3690 -0
  137. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/add.hpp +368 -0
  138. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/add_unsigned.hpp +387 -0
  139. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/bitwise.hpp +889 -0
  140. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/checked.hpp +178 -0
  141. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/comparison.hpp +374 -0
  142. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/cpp_int_config.hpp +161 -0
  143. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/divide.hpp +703 -0
  144. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/import_export.hpp +248 -0
  145. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/intel_intrinsics.hpp +138 -0
  146. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/limits.hpp +282 -0
  147. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/literals.hpp +295 -0
  148. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/misc.hpp +1457 -0
  149. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/multiply.hpp +848 -0
  150. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/serialize.hpp +211 -0
  151. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/value_pack.hpp +42 -0
  152. mqt/core/include/mqt-core/boost/multiprecision/cpp_int.hpp +2360 -0
  153. mqt/core/include/mqt-core/boost/multiprecision/debug_adaptor.hpp +760 -0
  154. mqt/core/include/mqt-core/boost/multiprecision/detail/assert.hpp +29 -0
  155. mqt/core/include/mqt-core/boost/multiprecision/detail/atomic.hpp +62 -0
  156. mqt/core/include/mqt-core/boost/multiprecision/detail/bitscan.hpp +317 -0
  157. mqt/core/include/mqt-core/boost/multiprecision/detail/check_cpp11_config.hpp +64 -0
  158. mqt/core/include/mqt-core/boost/multiprecision/detail/constexpr.hpp +88 -0
  159. mqt/core/include/mqt-core/boost/multiprecision/detail/default_ops.hpp +4052 -0
  160. mqt/core/include/mqt-core/boost/multiprecision/detail/digits.hpp +49 -0
  161. mqt/core/include/mqt-core/boost/multiprecision/detail/dynamic_array.hpp +44 -0
  162. mqt/core/include/mqt-core/boost/multiprecision/detail/empty_value.hpp +87 -0
  163. mqt/core/include/mqt-core/boost/multiprecision/detail/endian.hpp +35 -0
  164. mqt/core/include/mqt-core/boost/multiprecision/detail/et_ops.hpp +1831 -0
  165. mqt/core/include/mqt-core/boost/multiprecision/detail/float128_functions.hpp +95 -0
  166. mqt/core/include/mqt-core/boost/multiprecision/detail/float_string_cvt.hpp +333 -0
  167. mqt/core/include/mqt-core/boost/multiprecision/detail/fpclassify.hpp +101 -0
  168. mqt/core/include/mqt-core/boost/multiprecision/detail/functions/constants.hpp +288 -0
  169. mqt/core/include/mqt-core/boost/multiprecision/detail/functions/pow.hpp +905 -0
  170. mqt/core/include/mqt-core/boost/multiprecision/detail/functions/trig.hpp +1058 -0
  171. mqt/core/include/mqt-core/boost/multiprecision/detail/functions/trunc.hpp +82 -0
  172. mqt/core/include/mqt-core/boost/multiprecision/detail/generic_interconvert.hpp +687 -0
  173. mqt/core/include/mqt-core/boost/multiprecision/detail/hash.hpp +56 -0
  174. mqt/core/include/mqt-core/boost/multiprecision/detail/integer_ops.hpp +474 -0
  175. mqt/core/include/mqt-core/boost/multiprecision/detail/itos.hpp +39 -0
  176. mqt/core/include/mqt-core/boost/multiprecision/detail/min_max.hpp +106 -0
  177. mqt/core/include/mqt-core/boost/multiprecision/detail/no_et_ops.hpp +661 -0
  178. mqt/core/include/mqt-core/boost/multiprecision/detail/no_exceptions_support.hpp +55 -0
  179. mqt/core/include/mqt-core/boost/multiprecision/detail/number_base.hpp +1656 -0
  180. mqt/core/include/mqt-core/boost/multiprecision/detail/number_compare.hpp +848 -0
  181. mqt/core/include/mqt-core/boost/multiprecision/detail/precision.hpp +313 -0
  182. mqt/core/include/mqt-core/boost/multiprecision/detail/rebind.hpp +19 -0
  183. mqt/core/include/mqt-core/boost/multiprecision/detail/standalone_config.hpp +148 -0
  184. mqt/core/include/mqt-core/boost/multiprecision/detail/static_array.hpp +42 -0
  185. mqt/core/include/mqt-core/boost/multiprecision/detail/string_helpers.hpp +48 -0
  186. mqt/core/include/mqt-core/boost/multiprecision/detail/tables.hpp +80 -0
  187. mqt/core/include/mqt-core/boost/multiprecision/detail/ublas_interop.hpp +75 -0
  188. mqt/core/include/mqt-core/boost/multiprecision/detail/uniform_int_distribution.hpp +212 -0
  189. mqt/core/include/mqt-core/boost/multiprecision/detail/utype_helper.hpp +374 -0
  190. mqt/core/include/mqt-core/boost/multiprecision/eigen.hpp +248 -0
  191. mqt/core/include/mqt-core/boost/multiprecision/float128.hpp +920 -0
  192. mqt/core/include/mqt-core/boost/multiprecision/fwd.hpp +268 -0
  193. mqt/core/include/mqt-core/boost/multiprecision/gmp.hpp +4060 -0
  194. mqt/core/include/mqt-core/boost/multiprecision/integer.hpp +363 -0
  195. mqt/core/include/mqt-core/boost/multiprecision/logged_adaptor.hpp +834 -0
  196. mqt/core/include/mqt-core/boost/multiprecision/miller_rabin.hpp +221 -0
  197. mqt/core/include/mqt-core/boost/multiprecision/mpc.hpp +1721 -0
  198. mqt/core/include/mqt-core/boost/multiprecision/mpfi.hpp +2559 -0
  199. mqt/core/include/mqt-core/boost/multiprecision/mpfr.hpp +3644 -0
  200. mqt/core/include/mqt-core/boost/multiprecision/number.hpp +2500 -0
  201. mqt/core/include/mqt-core/boost/multiprecision/random.hpp +23 -0
  202. mqt/core/include/mqt-core/boost/multiprecision/rational_adaptor.hpp +1289 -0
  203. mqt/core/include/mqt-core/boost/multiprecision/tommath.hpp +1034 -0
  204. mqt/core/include/mqt-core/boost/multiprecision/traits/explicit_conversion.hpp +67 -0
  205. mqt/core/include/mqt-core/boost/multiprecision/traits/extract_exponent_type.hpp +28 -0
  206. mqt/core/include/mqt-core/boost/multiprecision/traits/is_backend.hpp +91 -0
  207. mqt/core/include/mqt-core/boost/multiprecision/traits/is_byte_container.hpp +51 -0
  208. mqt/core/include/mqt-core/boost/multiprecision/traits/is_complex.hpp +22 -0
  209. mqt/core/include/mqt-core/boost/multiprecision/traits/is_convertible_arithmetic.hpp +51 -0
  210. mqt/core/include/mqt-core/boost/multiprecision/traits/is_restricted_conversion.hpp +47 -0
  211. mqt/core/include/mqt-core/boost/multiprecision/traits/is_variable_precision.hpp +25 -0
  212. mqt/core/include/mqt-core/boost/multiprecision/traits/max_digits10.hpp +79 -0
  213. mqt/core/include/mqt-core/boost/multiprecision/traits/std_integer_traits.hpp +90 -0
  214. mqt/core/include/mqt-core/boost/multiprecision/traits/transcendental_reduction_type.hpp +21 -0
  215. mqt/core/include/mqt-core/boost/version.hpp +32 -0
  216. mqt/core/include/mqt-core/circuit_optimizer/CircuitOptimizer.hpp +119 -0
  217. mqt/core/include/mqt-core/circuit_optimizer/mqt_core_circuit_optimizer_export.h +43 -0
  218. mqt/core/include/mqt-core/datastructures/DirectedAcyclicGraph.hpp +117 -0
  219. mqt/core/include/mqt-core/datastructures/DirectedGraph.hpp +158 -0
  220. mqt/core/include/mqt-core/datastructures/DisjointSet.hpp +50 -0
  221. mqt/core/include/mqt-core/datastructures/Layer.hpp +172 -0
  222. mqt/core/include/mqt-core/datastructures/SymmetricMatrix.hpp +57 -0
  223. mqt/core/include/mqt-core/datastructures/UndirectedGraph.hpp +227 -0
  224. mqt/core/include/mqt-core/datastructures/mqt_core_ds_export.h +43 -0
  225. mqt/core/include/mqt-core/dd/Approximation.hpp +45 -0
  226. mqt/core/include/mqt-core/dd/CachedEdge.hpp +174 -0
  227. mqt/core/include/mqt-core/dd/Complex.hpp +165 -0
  228. mqt/core/include/mqt-core/dd/ComplexNumbers.hpp +150 -0
  229. mqt/core/include/mqt-core/dd/ComplexValue.hpp +184 -0
  230. mqt/core/include/mqt-core/dd/ComputeTable.hpp +183 -0
  231. mqt/core/include/mqt-core/dd/DDDefinitions.hpp +139 -0
  232. mqt/core/include/mqt-core/dd/DDpackageConfig.hpp +104 -0
  233. mqt/core/include/mqt-core/dd/DensityNoiseTable.hpp +114 -0
  234. mqt/core/include/mqt-core/dd/Edge.hpp +416 -0
  235. mqt/core/include/mqt-core/dd/Export.hpp +438 -0
  236. mqt/core/include/mqt-core/dd/FunctionalityConstruction.hpp +75 -0
  237. mqt/core/include/mqt-core/dd/GateMatrixDefinitions.hpp +43 -0
  238. mqt/core/include/mqt-core/dd/LinkedListBase.hpp +45 -0
  239. mqt/core/include/mqt-core/dd/MemoryManager.hpp +193 -0
  240. mqt/core/include/mqt-core/dd/Node.hpp +223 -0
  241. mqt/core/include/mqt-core/dd/NoiseFunctionality.hpp +144 -0
  242. mqt/core/include/mqt-core/dd/Operations.hpp +306 -0
  243. mqt/core/include/mqt-core/dd/Package.hpp +2036 -0
  244. mqt/core/include/mqt-core/dd/Package_fwd.hpp +22 -0
  245. mqt/core/include/mqt-core/dd/RealNumber.hpp +255 -0
  246. mqt/core/include/mqt-core/dd/RealNumberUniqueTable.hpp +217 -0
  247. mqt/core/include/mqt-core/dd/Simulation.hpp +98 -0
  248. mqt/core/include/mqt-core/dd/StateGeneration.hpp +143 -0
  249. mqt/core/include/mqt-core/dd/StochasticNoiseOperationTable.hpp +88 -0
  250. mqt/core/include/mqt-core/dd/UnaryComputeTable.hpp +121 -0
  251. mqt/core/include/mqt-core/dd/UniqueTable.hpp +243 -0
  252. mqt/core/include/mqt-core/dd/mqt_core_dd_export.h +43 -0
  253. mqt/core/include/mqt-core/dd/statistics/MemoryManagerStatistics.hpp +84 -0
  254. mqt/core/include/mqt-core/dd/statistics/PackageStatistics.hpp +55 -0
  255. mqt/core/include/mqt-core/dd/statistics/Statistics.hpp +48 -0
  256. mqt/core/include/mqt-core/dd/statistics/TableStatistics.hpp +79 -0
  257. mqt/core/include/mqt-core/dd/statistics/UniqueTableStatistics.hpp +31 -0
  258. mqt/core/include/mqt-core/fomac/FoMaC.hpp +568 -0
  259. mqt/core/include/mqt-core/ir/Definitions.hpp +108 -0
  260. mqt/core/include/mqt-core/ir/Permutation.hpp +213 -0
  261. mqt/core/include/mqt-core/ir/QuantumComputation.hpp +596 -0
  262. mqt/core/include/mqt-core/ir/Register.hpp +125 -0
  263. mqt/core/include/mqt-core/ir/mqt_core_ir_export.h +43 -0
  264. mqt/core/include/mqt-core/ir/operations/AodOperation.hpp +92 -0
  265. mqt/core/include/mqt-core/ir/operations/CompoundOperation.hpp +212 -0
  266. mqt/core/include/mqt-core/ir/operations/Control.hpp +142 -0
  267. mqt/core/include/mqt-core/ir/operations/Expression.hpp +847 -0
  268. mqt/core/include/mqt-core/ir/operations/IfElseOperation.hpp +169 -0
  269. mqt/core/include/mqt-core/ir/operations/NonUnitaryOperation.hpp +118 -0
  270. mqt/core/include/mqt-core/ir/operations/OpType.hpp +120 -0
  271. mqt/core/include/mqt-core/ir/operations/OpType.inc +76 -0
  272. mqt/core/include/mqt-core/ir/operations/Operation.hpp +247 -0
  273. mqt/core/include/mqt-core/ir/operations/StandardOperation.hpp +140 -0
  274. mqt/core/include/mqt-core/ir/operations/SymbolicOperation.hpp +144 -0
  275. mqt/core/include/mqt-core/mqt_na_qdmi/device.h +602 -0
  276. mqt/core/include/mqt-core/mqt_na_qdmi/types.h +78 -0
  277. mqt/core/include/mqt-core/na/NAComputation.hpp +185 -0
  278. mqt/core/include/mqt-core/na/device/Device.hpp +410 -0
  279. mqt/core/include/mqt-core/na/device/DeviceMemberInitializers.hpp +724 -0
  280. mqt/core/include/mqt-core/na/device/Generator.hpp +447 -0
  281. mqt/core/include/mqt-core/na/entities/Atom.hpp +62 -0
  282. mqt/core/include/mqt-core/na/entities/Location.hpp +154 -0
  283. mqt/core/include/mqt-core/na/entities/Zone.hpp +95 -0
  284. mqt/core/include/mqt-core/na/fomac/Device.hpp +169 -0
  285. mqt/core/include/mqt-core/na/mqt_core_na_export.h +43 -0
  286. mqt/core/include/mqt-core/na/operations/GlobalCZOp.hpp +38 -0
  287. mqt/core/include/mqt-core/na/operations/GlobalOp.hpp +58 -0
  288. mqt/core/include/mqt-core/na/operations/GlobalRYOp.hpp +42 -0
  289. mqt/core/include/mqt-core/na/operations/LoadOp.hpp +89 -0
  290. mqt/core/include/mqt-core/na/operations/LocalOp.hpp +56 -0
  291. mqt/core/include/mqt-core/na/operations/LocalRZOp.hpp +42 -0
  292. mqt/core/include/mqt-core/na/operations/LocalUOp.hpp +49 -0
  293. mqt/core/include/mqt-core/na/operations/MoveOp.hpp +66 -0
  294. mqt/core/include/mqt-core/na/operations/Op.hpp +62 -0
  295. mqt/core/include/mqt-core/na/operations/ShuttlingOp.hpp +51 -0
  296. mqt/core/include/mqt-core/na/operations/StoreOp.hpp +87 -0
  297. mqt/core/include/mqt-core/qasm3/Exception.hpp +85 -0
  298. mqt/core/include/mqt-core/qasm3/Gate.hpp +65 -0
  299. mqt/core/include/mqt-core/qasm3/Importer.hpp +192 -0
  300. mqt/core/include/mqt-core/qasm3/InstVisitor.hpp +145 -0
  301. mqt/core/include/mqt-core/qasm3/NestedEnvironment.hpp +41 -0
  302. mqt/core/include/mqt-core/qasm3/Parser.hpp +170 -0
  303. mqt/core/include/mqt-core/qasm3/Scanner.hpp +73 -0
  304. mqt/core/include/mqt-core/qasm3/Statement.hpp +486 -0
  305. mqt/core/include/mqt-core/qasm3/Statement_fwd.hpp +39 -0
  306. mqt/core/include/mqt-core/qasm3/StdGates.hpp +232 -0
  307. mqt/core/include/mqt-core/qasm3/Token.hpp +198 -0
  308. mqt/core/include/mqt-core/qasm3/Types.hpp +238 -0
  309. mqt/core/include/mqt-core/qasm3/Types_fwd.hpp +22 -0
  310. mqt/core/include/mqt-core/qasm3/mqt_core_qasm_export.h +43 -0
  311. mqt/core/include/mqt-core/qasm3/passes/CompilerPass.hpp +22 -0
  312. mqt/core/include/mqt-core/qasm3/passes/ConstEvalPass.hpp +102 -0
  313. mqt/core/include/mqt-core/qasm3/passes/TypeCheckPass.hpp +124 -0
  314. mqt/core/include/mqt-core/qdmi/Driver.hpp +431 -0
  315. mqt/core/include/mqt-core/zx/FunctionalityConstruction.hpp +125 -0
  316. mqt/core/include/mqt-core/zx/Rational.hpp +318 -0
  317. mqt/core/include/mqt-core/zx/Rules.hpp +132 -0
  318. mqt/core/include/mqt-core/zx/Simplify.hpp +182 -0
  319. mqt/core/include/mqt-core/zx/Utils.hpp +212 -0
  320. mqt/core/include/mqt-core/zx/ZXDefinitions.hpp +93 -0
  321. mqt/core/include/mqt-core/zx/ZXDiagram.hpp +480 -0
  322. mqt/core/include/mqt-core/zx/mqt_core_zx_export.h +43 -0
  323. mqt/core/include/nlohmann/adl_serializer.hpp +55 -0
  324. mqt/core/include/nlohmann/byte_container_with_subtype.hpp +103 -0
  325. mqt/core/include/nlohmann/detail/abi_macros.hpp +111 -0
  326. mqt/core/include/nlohmann/detail/conversions/from_json.hpp +577 -0
  327. mqt/core/include/nlohmann/detail/conversions/to_chars.hpp +1118 -0
  328. mqt/core/include/nlohmann/detail/conversions/to_json.hpp +479 -0
  329. mqt/core/include/nlohmann/detail/exceptions.hpp +291 -0
  330. mqt/core/include/nlohmann/detail/hash.hpp +129 -0
  331. mqt/core/include/nlohmann/detail/input/binary_reader.hpp +3068 -0
  332. mqt/core/include/nlohmann/detail/input/input_adapters.hpp +549 -0
  333. mqt/core/include/nlohmann/detail/input/json_sax.hpp +986 -0
  334. mqt/core/include/nlohmann/detail/input/lexer.hpp +1643 -0
  335. mqt/core/include/nlohmann/detail/input/parser.hpp +519 -0
  336. mqt/core/include/nlohmann/detail/input/position_t.hpp +37 -0
  337. mqt/core/include/nlohmann/detail/iterators/internal_iterator.hpp +35 -0
  338. mqt/core/include/nlohmann/detail/iterators/iter_impl.hpp +760 -0
  339. mqt/core/include/nlohmann/detail/iterators/iteration_proxy.hpp +235 -0
  340. mqt/core/include/nlohmann/detail/iterators/iterator_traits.hpp +61 -0
  341. mqt/core/include/nlohmann/detail/iterators/json_reverse_iterator.hpp +130 -0
  342. mqt/core/include/nlohmann/detail/iterators/primitive_iterator.hpp +132 -0
  343. mqt/core/include/nlohmann/detail/json_custom_base_class.hpp +39 -0
  344. mqt/core/include/nlohmann/detail/json_pointer.hpp +988 -0
  345. mqt/core/include/nlohmann/detail/json_ref.hpp +78 -0
  346. mqt/core/include/nlohmann/detail/macro_scope.hpp +595 -0
  347. mqt/core/include/nlohmann/detail/macro_unscope.hpp +46 -0
  348. mqt/core/include/nlohmann/detail/meta/call_std/begin.hpp +17 -0
  349. mqt/core/include/nlohmann/detail/meta/call_std/end.hpp +17 -0
  350. mqt/core/include/nlohmann/detail/meta/cpp_future.hpp +171 -0
  351. mqt/core/include/nlohmann/detail/meta/detected.hpp +70 -0
  352. mqt/core/include/nlohmann/detail/meta/identity_tag.hpp +21 -0
  353. mqt/core/include/nlohmann/detail/meta/is_sax.hpp +159 -0
  354. mqt/core/include/nlohmann/detail/meta/std_fs.hpp +29 -0
  355. mqt/core/include/nlohmann/detail/meta/type_traits.hpp +795 -0
  356. mqt/core/include/nlohmann/detail/meta/void_t.hpp +24 -0
  357. mqt/core/include/nlohmann/detail/output/binary_writer.hpp +1850 -0
  358. mqt/core/include/nlohmann/detail/output/output_adapters.hpp +147 -0
  359. mqt/core/include/nlohmann/detail/output/serializer.hpp +988 -0
  360. mqt/core/include/nlohmann/detail/string_concat.hpp +146 -0
  361. mqt/core/include/nlohmann/detail/string_escape.hpp +72 -0
  362. mqt/core/include/nlohmann/detail/string_utils.hpp +37 -0
  363. mqt/core/include/nlohmann/detail/value_t.hpp +118 -0
  364. mqt/core/include/nlohmann/json.hpp +5306 -0
  365. mqt/core/include/nlohmann/json_fwd.hpp +75 -0
  366. mqt/core/include/nlohmann/ordered_map.hpp +359 -0
  367. mqt/core/include/nlohmann/thirdparty/hedley/hedley.hpp +2045 -0
  368. mqt/core/include/nlohmann/thirdparty/hedley/hedley_undef.hpp +158 -0
  369. mqt/core/include/qdmi/qdmi/client.h +990 -0
  370. mqt/core/include/qdmi/qdmi/constants.h +1139 -0
  371. mqt/core/include/qdmi/qdmi/device.h +602 -0
  372. mqt/core/include/qdmi/qdmi/types.h +78 -0
  373. mqt/core/include/spdlog/async.h +99 -0
  374. mqt/core/include/spdlog/async_logger-inl.h +84 -0
  375. mqt/core/include/spdlog/async_logger.h +74 -0
  376. mqt/core/include/spdlog/cfg/argv.h +40 -0
  377. mqt/core/include/spdlog/cfg/env.h +36 -0
  378. mqt/core/include/spdlog/cfg/helpers-inl.h +107 -0
  379. mqt/core/include/spdlog/cfg/helpers.h +29 -0
  380. mqt/core/include/spdlog/common-inl.h +68 -0
  381. mqt/core/include/spdlog/common.h +406 -0
  382. mqt/core/include/spdlog/details/backtracer-inl.h +63 -0
  383. mqt/core/include/spdlog/details/backtracer.h +45 -0
  384. mqt/core/include/spdlog/details/circular_q.h +115 -0
  385. mqt/core/include/spdlog/details/console_globals.h +28 -0
  386. mqt/core/include/spdlog/details/file_helper-inl.h +153 -0
  387. mqt/core/include/spdlog/details/file_helper.h +61 -0
  388. mqt/core/include/spdlog/details/fmt_helper.h +141 -0
  389. mqt/core/include/spdlog/details/log_msg-inl.h +44 -0
  390. mqt/core/include/spdlog/details/log_msg.h +40 -0
  391. mqt/core/include/spdlog/details/log_msg_buffer-inl.h +54 -0
  392. mqt/core/include/spdlog/details/log_msg_buffer.h +32 -0
  393. mqt/core/include/spdlog/details/mpmc_blocking_q.h +177 -0
  394. mqt/core/include/spdlog/details/null_mutex.h +35 -0
  395. mqt/core/include/spdlog/details/os-inl.h +606 -0
  396. mqt/core/include/spdlog/details/os.h +127 -0
  397. mqt/core/include/spdlog/details/periodic_worker-inl.h +26 -0
  398. mqt/core/include/spdlog/details/periodic_worker.h +58 -0
  399. mqt/core/include/spdlog/details/registry-inl.h +270 -0
  400. mqt/core/include/spdlog/details/registry.h +131 -0
  401. mqt/core/include/spdlog/details/synchronous_factory.h +22 -0
  402. mqt/core/include/spdlog/details/tcp_client-windows.h +135 -0
  403. mqt/core/include/spdlog/details/tcp_client.h +127 -0
  404. mqt/core/include/spdlog/details/thread_pool-inl.h +126 -0
  405. mqt/core/include/spdlog/details/thread_pool.h +117 -0
  406. mqt/core/include/spdlog/details/udp_client-windows.h +98 -0
  407. mqt/core/include/spdlog/details/udp_client.h +81 -0
  408. mqt/core/include/spdlog/details/windows_include.h +11 -0
  409. mqt/core/include/spdlog/fmt/bin_to_hex.h +224 -0
  410. mqt/core/include/spdlog/fmt/bundled/args.h +220 -0
  411. mqt/core/include/spdlog/fmt/bundled/base.h +2989 -0
  412. mqt/core/include/spdlog/fmt/bundled/chrono.h +2330 -0
  413. mqt/core/include/spdlog/fmt/bundled/color.h +637 -0
  414. mqt/core/include/spdlog/fmt/bundled/compile.h +539 -0
  415. mqt/core/include/spdlog/fmt/bundled/core.h +5 -0
  416. mqt/core/include/spdlog/fmt/bundled/fmt.license.rst +27 -0
  417. mqt/core/include/spdlog/fmt/bundled/format-inl.h +1948 -0
  418. mqt/core/include/spdlog/fmt/bundled/format.h +4244 -0
  419. mqt/core/include/spdlog/fmt/bundled/os.h +427 -0
  420. mqt/core/include/spdlog/fmt/bundled/ostream.h +167 -0
  421. mqt/core/include/spdlog/fmt/bundled/printf.h +633 -0
  422. mqt/core/include/spdlog/fmt/bundled/ranges.h +850 -0
  423. mqt/core/include/spdlog/fmt/bundled/std.h +728 -0
  424. mqt/core/include/spdlog/fmt/bundled/xchar.h +369 -0
  425. mqt/core/include/spdlog/fmt/chrono.h +23 -0
  426. mqt/core/include/spdlog/fmt/compile.h +23 -0
  427. mqt/core/include/spdlog/fmt/fmt.h +30 -0
  428. mqt/core/include/spdlog/fmt/ostr.h +23 -0
  429. mqt/core/include/spdlog/fmt/ranges.h +23 -0
  430. mqt/core/include/spdlog/fmt/std.h +24 -0
  431. mqt/core/include/spdlog/fmt/xchar.h +23 -0
  432. mqt/core/include/spdlog/formatter.h +17 -0
  433. mqt/core/include/spdlog/fwd.h +18 -0
  434. mqt/core/include/spdlog/logger-inl.h +198 -0
  435. mqt/core/include/spdlog/logger.h +379 -0
  436. mqt/core/include/spdlog/mdc.h +52 -0
  437. mqt/core/include/spdlog/pattern_formatter-inl.h +1340 -0
  438. mqt/core/include/spdlog/pattern_formatter.h +118 -0
  439. mqt/core/include/spdlog/sinks/android_sink.h +137 -0
  440. mqt/core/include/spdlog/sinks/ansicolor_sink-inl.h +142 -0
  441. mqt/core/include/spdlog/sinks/ansicolor_sink.h +116 -0
  442. mqt/core/include/spdlog/sinks/base_sink-inl.h +59 -0
  443. mqt/core/include/spdlog/sinks/base_sink.h +51 -0
  444. mqt/core/include/spdlog/sinks/basic_file_sink-inl.h +48 -0
  445. mqt/core/include/spdlog/sinks/basic_file_sink.h +66 -0
  446. mqt/core/include/spdlog/sinks/callback_sink.h +56 -0
  447. mqt/core/include/spdlog/sinks/daily_file_sink.h +254 -0
  448. mqt/core/include/spdlog/sinks/dist_sink.h +81 -0
  449. mqt/core/include/spdlog/sinks/dup_filter_sink.h +91 -0
  450. mqt/core/include/spdlog/sinks/hourly_file_sink.h +193 -0
  451. mqt/core/include/spdlog/sinks/kafka_sink.h +119 -0
  452. mqt/core/include/spdlog/sinks/mongo_sink.h +108 -0
  453. mqt/core/include/spdlog/sinks/msvc_sink.h +68 -0
  454. mqt/core/include/spdlog/sinks/null_sink.h +41 -0
  455. mqt/core/include/spdlog/sinks/ostream_sink.h +43 -0
  456. mqt/core/include/spdlog/sinks/qt_sinks.h +304 -0
  457. mqt/core/include/spdlog/sinks/ringbuffer_sink.h +67 -0
  458. mqt/core/include/spdlog/sinks/rotating_file_sink-inl.h +179 -0
  459. mqt/core/include/spdlog/sinks/rotating_file_sink.h +93 -0
  460. mqt/core/include/spdlog/sinks/sink-inl.h +22 -0
  461. mqt/core/include/spdlog/sinks/sink.h +34 -0
  462. mqt/core/include/spdlog/sinks/stdout_color_sinks-inl.h +38 -0
  463. mqt/core/include/spdlog/sinks/stdout_color_sinks.h +49 -0
  464. mqt/core/include/spdlog/sinks/stdout_sinks-inl.h +127 -0
  465. mqt/core/include/spdlog/sinks/stdout_sinks.h +84 -0
  466. mqt/core/include/spdlog/sinks/syslog_sink.h +104 -0
  467. mqt/core/include/spdlog/sinks/systemd_sink.h +121 -0
  468. mqt/core/include/spdlog/sinks/tcp_sink.h +75 -0
  469. mqt/core/include/spdlog/sinks/udp_sink.h +69 -0
  470. mqt/core/include/spdlog/sinks/win_eventlog_sink.h +260 -0
  471. mqt/core/include/spdlog/sinks/wincolor_sink-inl.h +172 -0
  472. mqt/core/include/spdlog/sinks/wincolor_sink.h +82 -0
  473. mqt/core/include/spdlog/spdlog-inl.h +96 -0
  474. mqt/core/include/spdlog/spdlog.h +357 -0
  475. mqt/core/include/spdlog/stopwatch.h +66 -0
  476. mqt/core/include/spdlog/tweakme.h +148 -0
  477. mqt/core/include/spdlog/version.h +11 -0
  478. mqt/core/ir/__init__.pyi +2078 -0
  479. mqt/core/ir/operations.pyi +1011 -0
  480. mqt/core/ir/registers.pyi +91 -0
  481. mqt/core/ir/symbolic.pyi +177 -0
  482. mqt/core/ir.cp314t-win_amd64.pyd +0 -0
  483. mqt/core/lib/mqt-core-algorithms.lib +0 -0
  484. mqt/core/lib/mqt-core-circuit-optimizer.lib +0 -0
  485. mqt/core/lib/mqt-core-dd.lib +0 -0
  486. mqt/core/lib/mqt-core-ds.lib +0 -0
  487. mqt/core/lib/mqt-core-fomac.lib +0 -0
  488. mqt/core/lib/mqt-core-ir.lib +0 -0
  489. mqt/core/lib/mqt-core-na-fomac.lib +0 -0
  490. mqt/core/lib/mqt-core-na.lib +0 -0
  491. mqt/core/lib/mqt-core-qasm.lib +0 -0
  492. mqt/core/lib/mqt-core-qdmi-driver.lib +0 -0
  493. mqt/core/lib/mqt-core-qdmi-na-device-gen.lib +0 -0
  494. mqt/core/lib/mqt-core-qdmi-na-device.lib +0 -0
  495. mqt/core/lib/mqt-core-zx.lib +0 -0
  496. mqt/core/lib/pkgconfig/spdlog.pc +13 -0
  497. mqt/core/lib/spdlog.lib +0 -0
  498. mqt/core/na/__init__.py +12 -0
  499. mqt/core/na/fomac.cp314t-win_amd64.pyd +0 -0
  500. mqt/core/na/fomac.pyi +117 -0
  501. mqt/core/nlohmann_json.natvis +278 -0
  502. mqt/core/plugins/__init__.py +9 -0
  503. mqt/core/plugins/qiskit/__init__.py +19 -0
  504. mqt/core/plugins/qiskit/mqt_to_qiskit.py +420 -0
  505. mqt/core/plugins/qiskit/qiskit_to_mqt.py +562 -0
  506. mqt/core/py.typed +2 -0
  507. mqt/core/share/cmake/mqt-core/AddMQTPythonBinding.cmake +55 -0
  508. mqt/core/share/cmake/mqt-core/Cache.cmake +33 -0
  509. mqt/core/share/cmake/mqt-core/FindGMP.cmake +103 -0
  510. mqt/core/share/cmake/mqt-core/PackageAddTest.cmake +46 -0
  511. mqt/core/share/cmake/mqt-core/PreventInSourceBuilds.cmake +25 -0
  512. mqt/core/share/cmake/mqt-core/StandardProjectSettings.cmake +87 -0
  513. mqt/core/share/cmake/mqt-core/mqt-core-config-version.cmake +85 -0
  514. mqt/core/share/cmake/mqt-core/mqt-core-config.cmake +52 -0
  515. mqt/core/share/cmake/mqt-core/mqt-core-targets-release.cmake +141 -0
  516. mqt/core/share/cmake/mqt-core/mqt-core-targets.cmake +445 -0
  517. mqt/core/share/cmake/nlohmann_json/nlohmann_jsonConfig.cmake +15 -0
  518. mqt/core/share/cmake/nlohmann_json/nlohmann_jsonConfigVersion.cmake +20 -0
  519. mqt/core/share/cmake/nlohmann_json/nlohmann_jsonTargets.cmake +110 -0
  520. mqt/core/share/cmake/qdmi/Cache.cmake +44 -0
  521. mqt/core/share/cmake/qdmi/PrefixHandling.cmake +78 -0
  522. mqt/core/share/cmake/qdmi/prefix_defs.txt +26 -0
  523. mqt/core/share/cmake/qdmi/qdmi-config-version.cmake +85 -0
  524. mqt/core/share/cmake/qdmi/qdmi-config.cmake +42 -0
  525. mqt/core/share/cmake/qdmi/qdmi-targets.cmake +129 -0
  526. mqt/core/share/cmake/spdlog/spdlogConfig.cmake +44 -0
  527. mqt/core/share/cmake/spdlog/spdlogConfigTargets-release.cmake +19 -0
  528. mqt/core/share/cmake/spdlog/spdlogConfigTargets.cmake +121 -0
  529. mqt/core/share/cmake/spdlog/spdlogConfigVersion.cmake +65 -0
  530. mqt/core/share/pkgconfig/nlohmann_json.pc +7 -0
  531. mqt_core-3.3.2.dist-info/DELVEWHEEL +2 -0
  532. mqt_core-3.3.2.dist-info/METADATA +210 -0
  533. mqt_core-3.3.2.dist-info/RECORD +537 -0
  534. mqt_core-3.3.2.dist-info/WHEEL +5 -0
  535. mqt_core-3.3.2.dist-info/entry_points.txt +4 -0
  536. mqt_core-3.3.2.dist-info/licenses/LICENSE.md +22 -0
  537. mqt_core.libs/msvcp140.dll +0 -0
@@ -0,0 +1,193 @@
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/statistics/MemoryManagerStatistics.hpp"
14
+
15
+ #include <cassert>
16
+ #include <cstddef>
17
+ #include <type_traits>
18
+ #include <vector>
19
+
20
+ namespace dd {
21
+
22
+ // forward declarations
23
+ struct LLBase;
24
+
25
+ /**
26
+ * @brief A memory manager for objects of the same type that inherit from
27
+ * `LLBase`.
28
+ * @details The class manages a collection of objects. The objects are
29
+ * stored in contiguous chunks of memory. The manager supports reclaiming
30
+ * objects that are no longer in use. This is done by maintaining a linked list
31
+ * of available objects. When an object is no longer in use, it is added to the
32
+ * list. When a new object is requested, the first object from the list is
33
+ * returned. If the list is empty, an object from the current chunk is returned.
34
+ * If the current chunk is full, a new chunk is allocated. The size of chunks
35
+ * grows exponentially according to a growth factor.
36
+ * @note The main purpose of this class is to reduce the number of memory
37
+ * allocations and deallocations. This is achieved by allocating a large number
38
+ * of objects at once and reusing them. This is especially useful for objects
39
+ * that are frequently created and destroyed, such as decision diagram nodes,
40
+ * edge weights, etc.
41
+ */
42
+ class MemoryManager {
43
+ MemoryManager(size_t entrySize, std::size_t initialAllocationSize);
44
+
45
+ public:
46
+ // delete copy construction and assignment
47
+ MemoryManager(const MemoryManager&) = delete;
48
+ MemoryManager& operator=(const MemoryManager&) = delete;
49
+
50
+ /**
51
+ * @brief The number of initially allocated entries.
52
+ * @details The number of initially allocated entries is the number of entries
53
+ * that are allocated as a chunk when the manager is created. Increasing this
54
+ * number reduces the number of allocations, but increases the memory usage.
55
+ */
56
+ static constexpr std::size_t INITIAL_ALLOCATION_SIZE = 2048U;
57
+
58
+ /**
59
+ * @brief The growth factor for table entry allocation.
60
+ * @details The growth factor is used to determine the number of entries that
61
+ * are allocated when the manager runs out of entries. Per default, the number
62
+ * of entries is doubled. Increasing this number reduces the number of memory
63
+ * allocations, but increases the memory usage.
64
+ */
65
+ static constexpr double GROWTH_FACTOR = 2U;
66
+
67
+ /**
68
+ * @brief Construct a new MemoryManager object for objects of type T.
69
+ * @param initialAllocationSize The initial number of entries to allocate
70
+ * @tparam T The type of the entries
71
+ */
72
+ template <class T>
73
+ static MemoryManager
74
+ create(const std::size_t initialAllocationSize = INITIAL_ALLOCATION_SIZE) {
75
+ return {sizeof(T), initialAllocationSize};
76
+ }
77
+
78
+ /// default destructor
79
+ ~MemoryManager() = default;
80
+
81
+ /**
82
+ * @brief Get an entry from the manager.
83
+ * @details If an entry is available for reuse, it is returned. Otherwise, an
84
+ * entry from the pre-allocated chunks is returned. If no entry is available,
85
+ * a new chunk is allocated.
86
+ * @tparam T The type of the entry.
87
+ * @return A pointer to an entry.
88
+ */
89
+ template <class T> [[nodiscard]] T* get() {
90
+ static_assert(std::is_base_of_v<LLBase, T>,
91
+ "T must be derived from LLBase");
92
+ assert(sizeof(T) == entrySize_ && "Cannot get entry of different size");
93
+
94
+ return static_cast<T*>(get());
95
+ }
96
+
97
+ /**
98
+ * @brief Return an entry to the manager.
99
+ * @details The entry is added to the list of available entries. The entry
100
+ * must not be used after it has been returned to the manager.
101
+ * @param entry A reference to an entry that is no longer in use.
102
+ */
103
+ void returnEntry(LLBase& entry) noexcept;
104
+
105
+ /**
106
+ * @brief Reset the manager.
107
+ * @details Drops all but the first chunk. If `resizeToTotal` is set to true,
108
+ * the first chunk is resized to the total number of entries. This increases
109
+ * memory locality and reduces the number of allocations when the manager is
110
+ * used again. However, it might also require a huge contiguous block of
111
+ * memory to be allocated.
112
+ * @param resizeToTotal If set to true, the first chunk is resized to the
113
+ * total number of entries.
114
+ */
115
+ void reset(bool resizeToTotal = false) noexcept;
116
+
117
+ /// Get a reference to the statistics
118
+ [[nodiscard]] const auto& getStats() const noexcept { return stats; }
119
+
120
+ private:
121
+ /// Get an entry from the manager
122
+ [[nodiscard]] LLBase* get();
123
+
124
+ /**
125
+ * @brief Check whether an entry is available for reuse
126
+ * @return true if an entry is available for reuse, false otherwise
127
+ */
128
+ [[nodiscard]] bool entryAvailableForReuse() const noexcept;
129
+
130
+ /**
131
+ * @brief Get an entry from the list of available entries
132
+ * @return A pointer to an entry ready for reuse
133
+ */
134
+ [[nodiscard]] LLBase* getEntryFromAvailableList() noexcept;
135
+
136
+ /**
137
+ * @brief Check whether an entry is available in the current chunk
138
+ * @return true if an entry is available in the current chunk, false
139
+ * otherwise
140
+ */
141
+ [[nodiscard]] bool entryAvailableInChunk() const noexcept;
142
+
143
+ /// Allocate a new chunk of memory
144
+ void allocateNewChunk();
145
+
146
+ /**
147
+ * @brief Get an entry from the current chunk
148
+ * @return A pointer to an entry from the current chunk
149
+ */
150
+ [[nodiscard]] LLBase* getEntryFromChunk() noexcept;
151
+
152
+ /// The size of an entry in bytes (as reported by `sizeof`)
153
+ size_t entrySize_;
154
+
155
+ /// A chunk of memory as a vector of bytes
156
+ using Chunk = std::vector<std::byte>;
157
+
158
+ /**
159
+ * @brief A linked list of entries that are available for (re-)use
160
+ * @details The MemoryManager maintains a linked list of entries that are
161
+ * available for (re-)use. This list is implemented as a singly linked list
162
+ * using the `next()` method of the entries. The `available` member points to
163
+ * the first entry in the list. If the list is empty, `available` is
164
+ * `nullptr`.
165
+ */
166
+ LLBase* available;
167
+
168
+ /**
169
+ * @brief The storage for the entries
170
+ * @details The MemoryManager maintains a vector of chunks. Each chunk is a
171
+ * vector of entries. Entries in a chunk are allocated contiguously.
172
+ */
173
+ std::vector<Chunk> chunks;
174
+
175
+ /**
176
+ * @brief Iterator to the next available entry in the current chunk
177
+ * @details This iterator points to the next available entry in the current
178
+ * chunk. If the current chunk is full, it points to the end of the chunk.
179
+ */
180
+ Chunk::iterator chunkIt;
181
+
182
+ /**
183
+ * @brief Iterator to the end of the current chunk
184
+ * @details This iterator points to the end of the current chunk. It is used
185
+ * to determine whether the current chunk is full.
186
+ */
187
+ Chunk::iterator chunkEndIt;
188
+
189
+ /// Memory manager statistics
190
+ MemoryManagerStatistics stats;
191
+ };
192
+
193
+ } // namespace dd
@@ -0,0 +1,223 @@
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/CachedEdge.hpp"
14
+ #include "dd/DDDefinitions.hpp"
15
+ #include "dd/Edge.hpp"
16
+ #include "dd/LinkedListBase.hpp"
17
+
18
+ #include <array>
19
+ #include <cassert>
20
+ #include <cstdint>
21
+
22
+ namespace dd {
23
+
24
+ /**
25
+ * @brief Base class for all DD nodes.
26
+ * @details This class is used to store common information for all DD nodes.
27
+ * The `flags` makes the implicit padding explicit and can be used for storing
28
+ * node properties.
29
+ * Data Layout (8)|(2|2|4) = 16B.
30
+ */
31
+ struct NodeBase : LLBase {
32
+ /// Variable index
33
+ Qubit v{};
34
+
35
+ /**
36
+ * @brief Flags for node properties
37
+ * @details Not required for all node types, but padding is required either
38
+ * way.
39
+ *
40
+ * 0b10000 = mark flag used for mark-and-sweep garbage collection,
41
+ * 0b1000 = marks a reduced dm node,
42
+ * 0b100 = marks a dm (tmp flag),
43
+ * 0b10 = mark first path edge (tmp flag),
44
+ * 0b1 = mark path is conjugated (tmp flag)
45
+ */
46
+ std::uint16_t flags = 0;
47
+
48
+ /// Mark flag used for mark-and-sweep garbage collection
49
+ static constexpr std::uint16_t MARK_FLAG = 0b10000U;
50
+
51
+ /// @brief Whether a node is marked as used.
52
+ [[nodiscard]] bool isMarked() const noexcept {
53
+ return (flags & MARK_FLAG) != 0U;
54
+ }
55
+
56
+ /// @brief Mark the node as used.
57
+ void mark() noexcept { flags |= MARK_FLAG; }
58
+
59
+ /// @brief Unmark the node.
60
+ void unmark() noexcept { flags &= static_cast<uint16_t>(~MARK_FLAG); }
61
+
62
+ /// Getter for the next object.
63
+ [[nodiscard]] NodeBase* next() const noexcept {
64
+ // NOLINTNEXTLINE(cppcoreguidelines-pro-type-static-cast-downcast)
65
+ return static_cast<NodeBase*>(next_);
66
+ }
67
+
68
+ /**
69
+ * @brief Check if a node is terminal
70
+ * @details Generally, a node is terminal if it is nullptr.
71
+ * Some nodes (dNode) encode additional information in the least significant
72
+ * bits of the pointer. These bits are masked out before checking for
73
+ * terminal nodes.
74
+ * @param p The node to check
75
+ * @return true if the node is terminal, false otherwise.
76
+ */
77
+ [[nodiscard]] static bool isTerminal(const NodeBase* p) noexcept {
78
+ return (reinterpret_cast<std::uintptr_t>(p) & (~7ULL)) == 0ULL;
79
+ }
80
+ static constexpr NodeBase* getTerminal() noexcept { return nullptr; }
81
+ };
82
+
83
+ static_assert(sizeof(NodeBase) == 16);
84
+ static_assert(alignof(NodeBase) == 8);
85
+
86
+ /**
87
+ * @brief A vector DD node
88
+ * @details Data Layout (8)|(2|2|4)|(24|24) = 64B
89
+ */
90
+ struct vNode final : NodeBase { // NOLINT(readability-identifier-naming)
91
+ std::array<Edge<vNode>, RADIX> e{}; // edges out of this node
92
+
93
+ /// Getter for the next object
94
+ [[nodiscard]] vNode* next() const noexcept {
95
+ // NOLINTNEXTLINE(cppcoreguidelines-pro-type-static-cast-downcast)
96
+ return static_cast<vNode*>(next_);
97
+ }
98
+ /// Getter for the terminal object
99
+ static constexpr vNode* getTerminal() noexcept { return nullptr; }
100
+ };
101
+ using vEdge = Edge<vNode>;
102
+ using vCachedEdge = CachedEdge<vNode>;
103
+ using VectorDD = vEdge;
104
+
105
+ /**
106
+ * @brief A matrix DD node
107
+ * @details Data Layout (8)|(2|2|4)|(24|24|24|24) = 112B
108
+ */
109
+ struct mNode final : NodeBase { // NOLINT(readability-identifier-naming)
110
+ std::array<Edge<mNode>, NEDGE> e{}; // edges out of this node
111
+
112
+ /// Getter for the next object
113
+ [[nodiscard]] mNode* next() const noexcept {
114
+ // NOLINTNEXTLINE(cppcoreguidelines-pro-type-static-cast-downcast)
115
+ return static_cast<mNode*>(next_);
116
+ }
117
+ /// Getter for the terminal object
118
+ static constexpr mNode* getTerminal() noexcept { return nullptr; }
119
+ };
120
+ using mEdge = Edge<mNode>;
121
+ using mCachedEdge = CachedEdge<mNode>;
122
+ using MatrixDD = mEdge;
123
+
124
+ /**
125
+ * @brief A density matrix DD node
126
+ * @details Data Layout (8)|(2|2|4)|(24|24|24|24) = 112B
127
+ */
128
+ struct dNode final : NodeBase { // NOLINT(readability-identifier-naming)
129
+ std::array<Edge<dNode>, NEDGE> e{}; // edges out of this node
130
+
131
+ /// Getter for the next object
132
+ [[nodiscard]] dNode* next() const noexcept {
133
+ // NOLINTNEXTLINE(cppcoreguidelines-pro-type-static-cast-downcast)
134
+ return static_cast<dNode*>(next_);
135
+ }
136
+ /// Getter for the terminal object
137
+ static constexpr dNode* getTerminal() noexcept { return nullptr; }
138
+
139
+ [[nodiscard]] [[maybe_unused]] static constexpr bool
140
+ tempDensityMatrixFlagsEqual(const std::uint8_t a,
141
+ const std::uint8_t b) noexcept {
142
+ return getDensityMatrixTempFlags(a) == getDensityMatrixTempFlags(b);
143
+ }
144
+
145
+ [[nodiscard]] static constexpr bool
146
+ isConjugateTempFlagSet(const std::uintptr_t p) noexcept {
147
+ return (p & (1ULL << 0)) != 0U;
148
+ }
149
+ [[nodiscard]] static constexpr bool
150
+ isNonReduceTempFlagSet(const std::uintptr_t p) noexcept {
151
+ return (p & (1ULL << 1)) != 0U;
152
+ }
153
+ [[nodiscard]] static constexpr bool
154
+ isDensityMatrixTempFlagSet(const std::uintptr_t p) noexcept {
155
+ return (p & (1ULL << 2)) != 0U;
156
+ }
157
+ [[nodiscard]] static bool
158
+ isDensityMatrixNode(const std::uintptr_t p) noexcept {
159
+ return (p & (1ULL << 3)) != 0U;
160
+ }
161
+
162
+ [[nodiscard]] static bool isConjugateTempFlagSet(const dNode* p) noexcept {
163
+ return isConjugateTempFlagSet(reinterpret_cast<std::uintptr_t>(p));
164
+ }
165
+ [[nodiscard]] static bool isNonReduceTempFlagSet(const dNode* p) noexcept {
166
+ return isNonReduceTempFlagSet(reinterpret_cast<std::uintptr_t>(p));
167
+ }
168
+ [[nodiscard]] static bool
169
+ isDensityMatrixTempFlagSet(const dNode* p) noexcept {
170
+ return isDensityMatrixTempFlagSet(reinterpret_cast<std::uintptr_t>(p));
171
+ }
172
+ [[nodiscard]] static bool isDensityMatrixNode(const dNode* p) noexcept {
173
+ return isDensityMatrixNode(reinterpret_cast<std::uintptr_t>(p));
174
+ }
175
+
176
+ static void setConjugateTempFlagTrue(dNode*& p) noexcept {
177
+ p = reinterpret_cast<dNode*>(reinterpret_cast<std::uintptr_t>(p) |
178
+ (1ULL << 0));
179
+ }
180
+ static void setNonReduceTempFlagTrue(dNode*& p) noexcept {
181
+ p = reinterpret_cast<dNode*>(reinterpret_cast<std::uintptr_t>(p) |
182
+ (1ULL << 1));
183
+ }
184
+ static void setDensityMatTempFlagTrue(dNode*& p) noexcept {
185
+ p = reinterpret_cast<dNode*>(reinterpret_cast<std::uintptr_t>(p) |
186
+ (1ULL << 2));
187
+ }
188
+ static void alignDensityNode(dNode*& p) noexcept {
189
+ p = reinterpret_cast<dNode*>(reinterpret_cast<std::uintptr_t>(p) & (~7ULL));
190
+ }
191
+
192
+ [[nodiscard]] static std::uintptr_t
193
+ getDensityMatrixTempFlags(dNode*& p) noexcept {
194
+ return getDensityMatrixTempFlags(reinterpret_cast<std::uintptr_t>(p));
195
+ }
196
+ [[nodiscard]] static constexpr std::uintptr_t
197
+ getDensityMatrixTempFlags(const std::uintptr_t a) noexcept {
198
+ return a & (7ULL);
199
+ }
200
+
201
+ constexpr void unsetTempDensityMatrixFlags() noexcept {
202
+ flags = flags & static_cast<std::uint8_t>(~7U);
203
+ }
204
+
205
+ void setDensityMatrixNodeFlag(bool densityMatrix) noexcept;
206
+
207
+ static std::uint8_t alignDensityNodeNode(dNode*& p) noexcept;
208
+
209
+ static void getAlignedNodeRevertModificationsOnSubEdges(dNode* p) noexcept;
210
+
211
+ static void applyDmChangesToNode(dNode*& p) noexcept;
212
+
213
+ static void revertDmChangesToNode(dNode*& p) noexcept;
214
+ };
215
+ using dEdge = Edge<dNode>;
216
+ using dCachedEdge = CachedEdge<dNode>;
217
+ using DensityMatrixDD = dEdge;
218
+
219
+ static inline dEdge densityFromMatrixEdge(const mEdge& e) {
220
+ return dEdge{reinterpret_cast<dNode*>(e.p), e.w};
221
+ }
222
+
223
+ } // namespace dd
@@ -0,0 +1,144 @@
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 "dd/Node.hpp"
15
+ #include "dd/Package.hpp"
16
+ #include "ir/Definitions.hpp"
17
+ #include "ir/operations/OpType.hpp"
18
+ #include "ir/operations/Operation.hpp"
19
+
20
+ #include <array>
21
+ #include <cassert>
22
+ #include <cstddef>
23
+ #include <cstdint>
24
+ #include <memory>
25
+ #include <random>
26
+ #include <set>
27
+ #include <string>
28
+ #include <utility>
29
+ #include <vector>
30
+
31
+ namespace dd {
32
+
33
+ using NrEdges = std::tuple_size<decltype(dNode::e)>;
34
+ using ArrayOfEdges = std::array<dCachedEdge, NrEdges::value>;
35
+
36
+ // noise operations available for deterministic noise aware quantum circuit
37
+ // simulation
38
+ enum NoiseOperations : std::uint8_t {
39
+ AmplitudeDamping,
40
+ PhaseFlip,
41
+ Depolarization,
42
+ Identity
43
+ };
44
+
45
+ void sanityCheckOfNoiseProbabilities(double noiseProbability,
46
+ double amplitudeDampingProb,
47
+ double multiQubitGateFactor);
48
+
49
+ class StochasticNoiseFunctionality {
50
+ public:
51
+ StochasticNoiseFunctionality(Package& dd, std::size_t nq,
52
+ double gateNoiseProbability,
53
+ double amplitudeDampingProb,
54
+ double multiQubitGateFactor,
55
+ const std::string& cNoiseEffects);
56
+
57
+ ~StochasticNoiseFunctionality() { package->decRef(identityDD); }
58
+
59
+ protected:
60
+ Package* package;
61
+ std::size_t nQubits;
62
+ std::uniform_real_distribution<fp> dist;
63
+
64
+ double noiseProbability;
65
+ double noiseProbabilityMulti;
66
+ fp sqrtAmplitudeDampingProbability;
67
+ fp oneMinusSqrtAmplitudeDampingProbability;
68
+ fp sqrtAmplitudeDampingProbabilityMulti;
69
+ fp oneMinusSqrtAmplitudeDampingProbabilityMulti;
70
+ GateMatrix ampDampingTrue{};
71
+ GateMatrix ampDampingTrueMulti{};
72
+ GateMatrix ampDampingFalse{};
73
+ GateMatrix ampDampingFalseMulti{};
74
+ std::vector<NoiseOperations> noiseEffects;
75
+ mEdge identityDD;
76
+
77
+ [[nodiscard]] std::size_t getNumberOfQubits() const { return nQubits; }
78
+ [[nodiscard]] double getNoiseProbability(bool multiQubitNoiseFlag) const;
79
+
80
+ [[nodiscard]] static qc::OpType
81
+ getAmplitudeDampingOperationType(bool multiQubitNoiseFlag,
82
+ bool amplitudeDampingFlag);
83
+
84
+ [[nodiscard]] GateMatrix
85
+ getAmplitudeDampingOperationMatrix(bool multiQubitNoiseFlag,
86
+ bool amplitudeDampingFlag) const;
87
+
88
+ public:
89
+ void applyNoiseOperation(const std::set<qc::Qubit>& targets, mEdge operation,
90
+ vEdge& state, std::mt19937_64& generator);
91
+
92
+ protected:
93
+ [[nodiscard]] mEdge stackOperation(const mEdge& operation, qc::Qubit target,
94
+ qc::OpType noiseOperation,
95
+ const GateMatrix& matrix) const;
96
+
97
+ mEdge generateNoiseOperation(mEdge operation, qc::Qubit target,
98
+ std::mt19937_64& generator,
99
+ bool amplitudeDamping, bool multiQubitOperation);
100
+
101
+ [[nodiscard]] qc::OpType returnNoiseOperation(NoiseOperations noiseOperation,
102
+ double prob,
103
+ bool multiQubitNoiseFlag) const;
104
+ };
105
+
106
+ class DeterministicNoiseFunctionality {
107
+ public:
108
+ DeterministicNoiseFunctionality(Package& dd, std::size_t nq,
109
+ double noiseProbabilitySingleQubit,
110
+ double noiseProbabilityMultiQubit,
111
+ double ampDampProbSingleQubit,
112
+ double ampDampProbMultiQubit,
113
+ const std::string& cNoiseEffects);
114
+
115
+ protected:
116
+ Package* package;
117
+ std::size_t nQubits;
118
+
119
+ double noiseProbSingleQubit;
120
+ double noiseProbMultiQubit;
121
+ double ampDampingProbSingleQubit;
122
+ double ampDampingProbMultiQubit;
123
+
124
+ std::vector<NoiseOperations> noiseEffects;
125
+
126
+ [[nodiscard]] std::size_t getNumberOfQubits() const { return nQubits; }
127
+
128
+ public:
129
+ void applyNoiseEffects(dEdge& originalEdge,
130
+ const std::unique_ptr<qc::Operation>& qcOperation);
131
+
132
+ private:
133
+ dCachedEdge applyNoiseEffects(dEdge& originalEdge,
134
+ const std::set<qc::Qubit>& usedQubits,
135
+ bool firstPathEdge, Qubit level);
136
+
137
+ static void applyPhaseFlipToEdges(ArrayOfEdges& e, double probability);
138
+
139
+ void applyAmplitudeDampingToEdges(ArrayOfEdges& e, double probability) const;
140
+
141
+ void applyDepolarisationToEdges(ArrayOfEdges& e, double probability) const;
142
+ };
143
+
144
+ } // namespace dd