mqt-core 3.3.2__cp312-cp312-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.cp312-win_amd64.pyd +0 -0
  21. mqt/core/dd.pyi +1016 -0
  22. mqt/core/dd_evaluation.py +368 -0
  23. mqt/core/fomac.cp312-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.cp312-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.cp312-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,143 @@
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/Node.hpp"
14
+ #include "dd/Package.hpp"
15
+
16
+ #include <cstddef>
17
+ #include <cstdint>
18
+ #include <vector>
19
+
20
+ namespace dd {
21
+ /**
22
+ * @brief Construct the all-zero state \f$|0...0\rangle\f$
23
+ * @param n The number of qubits.
24
+ * @param dd The DD package to use for making the vector DD.
25
+ * @param start The starting qubit index. Default is 0.
26
+ * @throws `std::invalid_argument`, if `dd.qubits() < n`.
27
+ * @return A vector DD for the all-zero state.
28
+ */
29
+ VectorDD makeZeroState(std::size_t n, Package& dd, std::size_t start = 0);
30
+
31
+ /**
32
+ * @brief Construct a computational basis state \f$|b_{n-1}...b_0\rangle\f$
33
+ * @param n The number of qubits.
34
+ * @param state The state to construct.
35
+ * @param dd The DD package to use for making the vector DD.
36
+ * @param start The starting qubit index. Default is 0.
37
+ * @throws `std::invalid_argument`, if `dd.qubits() < n` or `size(state) < n`.
38
+ * @return A vector DD for the computational basis state.
39
+ */
40
+ VectorDD makeBasisState(std::size_t n, const std::vector<bool>& state,
41
+ Package& dd, std::size_t start = 0);
42
+
43
+ /**
44
+ * @brief Construct a product state out of
45
+ * \f$\{0, 1, +, -, R, L\}^{\otimes n}\f$.
46
+ * @param n The number of qubits
47
+ * @param state The state to construct.
48
+ * @param dd The DD package to use for making the vector DD.
49
+ * @param start The starting qubit index. Default is 0.
50
+ * @throws `std::invalid_argument`, if `dd.qubits() < n` or `size(state) < n`.
51
+ * @return A vector DD for the product state.
52
+ */
53
+ VectorDD makeBasisState(std::size_t n, const std::vector<BasisStates>& state,
54
+ Package& dd, std::size_t start = 0);
55
+
56
+ /**
57
+ * @brief Construct a GHZ state \f$|0...0\rangle + |1...1\rangle\f$.
58
+ * @param n The number of qubits.
59
+ * @param dd The DD package to use for making the vector DD.
60
+ * @throws `std::invalid_argument`, if `dd.qubits() < n`.
61
+ * @return A vector DD for the GHZ state.
62
+ */
63
+ VectorDD makeGHZState(std::size_t n, Package& dd);
64
+
65
+ /**
66
+ * @brief Construct a W state.
67
+ * @details The W state is defined as
68
+ * \f[
69
+ * |0...01\rangle + |0...10\rangle + |10...0\rangle
70
+ * \f]
71
+ * @param n The number of qubits.
72
+ * @param dd The DD package to use for making the vector DD.
73
+ * @throws `std::invalid_argument`, if `dd.qubits() < n` or the number of qubits
74
+ * and currently set tolerance would lead to an underflow.
75
+ * @return A vector DD for the W state.
76
+ */
77
+ VectorDD makeWState(std::size_t n, Package& dd);
78
+
79
+ /**
80
+ * @brief Construct a decision diagram from an arbitrary state vector.
81
+ * @param vec The state vector to convert to a DD.
82
+ * @param dd The DD package to use for making the vector DD.
83
+ * @throws `std::invalid_argument`, if `vec.size()` is not a power of two or
84
+ * `dd.qubits() < log2(vec.size()) - 1`.
85
+ * @return A vector DD representing the state.
86
+ */
87
+ VectorDD makeStateFromVector(const CVec& vec, Package& dd);
88
+
89
+ /// @brief The strategy to wire two layers.
90
+ enum GenerationWireStrategy : std::uint8_t {
91
+ ROUNDROBIN, // Choose nodes in the next layer in a round-robin fashion.
92
+ RANDOM // Randomly choose nodes in the next layer.
93
+ };
94
+
95
+ /**
96
+ * @brief Generate exponentially large vector DD.
97
+ * @param levels The number of levels in the vector DD.
98
+ * @param dd The DD package to use for generating the vector DD.
99
+ * @throws `std::invalid_argument`, if `dd.qubits() < levels`.
100
+ * @return The exponentially large vector DD.
101
+ */
102
+ VectorDD generateExponentialState(std::size_t levels, Package& dd);
103
+
104
+ /**
105
+ * @brief Generate exponentially large vector DD. Use @p seed for randomization.
106
+ * @param levels The number of levels in the vector DD.
107
+ * @param dd The DD package to use for generating the vector DD.
108
+ * @param seed The seed used for randomization.
109
+ * @throws `std::invalid_argument`, if `dd.qubits() < levels`.
110
+ * @return The exponentially large vector DD.
111
+ */
112
+ VectorDD generateExponentialState(std::size_t levels, Package& dd,
113
+ std::size_t seed);
114
+
115
+ /**
116
+ * @brief Generate random vector DD.
117
+ * @param levels The number of levels in the vector DD.
118
+ * @param nodesPerLevel The number of nodes per level.
119
+ * @param strategy The strategy to wire two layers.
120
+ * @param dd The DD package to use for generating the vector DD.
121
+ * @throws `std::invalid_argument`, if `dd.qubits() < levels`.
122
+ * @return The random vector DD.
123
+ */
124
+ VectorDD generateRandomState(std::size_t levels,
125
+ const std::vector<std::size_t>& nodesPerLevel,
126
+ GenerationWireStrategy strategy, Package& dd);
127
+
128
+ /**
129
+ * @brief Generate random vector DD. Use @p seed for randomization.
130
+ * @param levels The number of levels in the vector DD.
131
+ * @param nodesPerLevel The number of nodes per level.
132
+ * @param strategy The strategy to wire two layers.
133
+ * @param dd The DD package to use for generating the vector DD.
134
+ * @param seed The seed used for randomization.
135
+ * @throws `std::invalid_argument`, if `dd.qubits() < levels`, `levels <= 0`, or
136
+ * `nodesPerLevel.size() != levels`.
137
+ * @return The random vector DD.
138
+ */
139
+ VectorDD generateRandomState(std::size_t levels,
140
+ const std::vector<std::size_t>& nodesPerLevel,
141
+ GenerationWireStrategy strategy, Package& dd,
142
+ std::size_t seed);
143
+ }; // namespace dd
@@ -0,0 +1,88 @@
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
+ /**
12
+ * @file StochasticNoiseOperationTable.hpp
13
+ * @brief Data structure for caching computed results of stochastic operations
14
+ */
15
+
16
+ #pragma once
17
+
18
+ #include "dd/statistics/TableStatistics.hpp"
19
+ #include "ir/Definitions.hpp"
20
+ #include "ir/operations/OpType.hpp"
21
+
22
+ #include <cassert>
23
+ #include <cstddef>
24
+ #include <cstdint>
25
+ #include <vector>
26
+
27
+ namespace dd {
28
+ template <class Edge> class StochasticNoiseOperationTable {
29
+ public:
30
+ explicit StochasticNoiseOperationTable(
31
+ const std::size_t nv,
32
+ const size_t numberOfStochasticOperations = qc::OpType::OpTypeEnd)
33
+ : nvars(nv), numberOfStochasticOperations_(numberOfStochasticOperations),
34
+ table(nv, std::vector<Edge>(numberOfStochasticOperations)) {
35
+ stats.entrySize = sizeof(Edge);
36
+ stats.numBuckets = nv * numberOfStochasticOperations;
37
+ }
38
+
39
+ /// Get a reference to the table
40
+ [[nodiscard]] const auto& getTable() const { return table; }
41
+
42
+ /// Get a reference to the statistics
43
+ [[nodiscard]] const auto& getStats() const noexcept { return stats; }
44
+
45
+ void resize(const std::size_t nq) {
46
+ nvars = nq;
47
+ table.resize(nvars, std::vector<Edge>(numberOfStochasticOperations_));
48
+ }
49
+
50
+ void insert(std::uint8_t kind, qc::Qubit target, const Edge& r) {
51
+ assert(kind <
52
+ numberOfStochasticOperations_); // There are new operations in
53
+ // OpType. Increase the value of
54
+ // numberOfOperations accordingly
55
+ table.at(target).at(kind) = r;
56
+ stats.trackInsert();
57
+ }
58
+
59
+ Edge* lookup(std::uint8_t kind, qc::Qubit target) {
60
+ assert(kind <
61
+ numberOfStochasticOperations_); // There are new operations in
62
+ // OpType. Increase the value of
63
+ // numberOfOperations accordingly
64
+ ++stats.lookups;
65
+ auto& entry = table.at(target).at(kind);
66
+ if (entry.w.r == nullptr) {
67
+ return nullptr;
68
+ }
69
+ ++stats.hits;
70
+ return &entry;
71
+ }
72
+
73
+ void clear() {
74
+ if (stats.numEntries > 0) {
75
+ for (auto& t : table) {
76
+ std::fill(t.begin(), t.end(), Edge{});
77
+ }
78
+ stats.numEntries = 0;
79
+ }
80
+ }
81
+
82
+ private:
83
+ std::size_t nvars;
84
+ size_t numberOfStochasticOperations_;
85
+ std::vector<std::vector<Edge>> table;
86
+ TableStatistics stats{};
87
+ };
88
+ } // namespace dd
@@ -0,0 +1,121 @@
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
+ /**
12
+ * @file UnaryComputeTable.hpp
13
+ * @brief Data structure for caching computed results of unary operations
14
+ */
15
+
16
+ #pragma once
17
+
18
+ #include "dd/statistics/TableStatistics.hpp"
19
+
20
+ #include <cstddef>
21
+ #include <functional>
22
+ #include <stdexcept>
23
+ #include <vector>
24
+
25
+ namespace dd {
26
+
27
+ /**
28
+ * @brief Data structure for caching computed results of unary operations
29
+ * @tparam OperandType type of the operation's operand
30
+ * @tparam ResultType type of the operation's result
31
+ */
32
+ template <class OperandType, class ResultType> class UnaryComputeTable {
33
+ public:
34
+ /// Default number of buckets for the compute table
35
+ static constexpr std::size_t DEFAULT_NUM_BUCKETS = 32768U;
36
+
37
+ /// Default constructor
38
+ explicit UnaryComputeTable(const size_t numBuckets = DEFAULT_NUM_BUCKETS) {
39
+ // numBuckets must be a power of two
40
+ if ((numBuckets & (numBuckets - 1)) != 0) {
41
+ throw std::invalid_argument("Number of buckets must be a power of two.");
42
+ }
43
+ stats.entrySize = sizeof(Entry);
44
+ stats.numBuckets = numBuckets;
45
+ valid = std::vector(numBuckets, false);
46
+ table = std::vector<Entry>(numBuckets);
47
+ }
48
+
49
+ /// An entry in the compute table
50
+ struct Entry {
51
+ OperandType operand;
52
+ ResultType result;
53
+ };
54
+
55
+ /// Get a reference to the underlying table
56
+ [[nodiscard]] const auto& getTable() const { return table; }
57
+
58
+ /// Get a reference to the statistics
59
+ [[nodiscard]] const auto& getStats() const noexcept { return stats; }
60
+
61
+ /// Compute the hash value for a given operand
62
+ [[nodiscard]] std::size_t hash(const OperandType& a) const {
63
+ const auto mask = stats.numBuckets - 1;
64
+ return std::hash<OperandType>{}(a)&mask;
65
+ }
66
+
67
+ /**
68
+ * @brief Insert a new entry into the compute table
69
+ * @details Any existing entry for the resulting hash value will be replaced.
70
+ * @param operand The operand
71
+ * @param result The result of the operation
72
+ */
73
+ void insert(const OperandType& operand, const ResultType& result) {
74
+ const auto key = hash(operand);
75
+ if (valid[key]) {
76
+ ++stats.collisions;
77
+ } else {
78
+ stats.trackInsert();
79
+ valid[key] = true;
80
+ }
81
+ table[key] = {operand, result};
82
+ }
83
+
84
+ /**
85
+ * @brief Look up a result in the compute table
86
+ * @param operand The operand
87
+ * @return A pointer to the result if it is found, otherwise nullptr.
88
+ */
89
+ ResultType* lookup(const OperandType& operand) {
90
+ ResultType* result = nullptr;
91
+ ++stats.lookups;
92
+ const auto key = hash(operand);
93
+
94
+ if (!valid[key]) {
95
+ return result;
96
+ }
97
+
98
+ auto& entry = table[key];
99
+ if (entry.operand != operand) {
100
+ return result;
101
+ }
102
+
103
+ ++stats.hits;
104
+ return &entry.result;
105
+ }
106
+
107
+ /**
108
+ * @brief Clear the compute table
109
+ * @details Sets all entries to invalid.
110
+ */
111
+ void clear() { valid = std::vector(stats.numBuckets, false); }
112
+
113
+ private:
114
+ /// The actual table storing the entries
115
+ std::vector<Entry> table;
116
+ /// Dynamic bitset to mark valid entries
117
+ std::vector<bool> valid;
118
+ /// Statistics of the compute table
119
+ TableStatistics stats{};
120
+ };
121
+ } // namespace dd
@@ -0,0 +1,243 @@
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
+ /**
12
+ * @file UniqueTable.hpp
13
+ * @brief Data structure for uniquely storing DD nodes
14
+ */
15
+
16
+ #pragma once
17
+
18
+ #include "dd/Edge.hpp"
19
+ #include "dd/MemoryManager.hpp"
20
+ #include "dd/Node.hpp"
21
+ #include "dd/statistics/UniqueTableStatistics.hpp"
22
+ #include "ir/Definitions.hpp"
23
+
24
+ #include <cstddef>
25
+ #include <cstdint>
26
+ #include <functional>
27
+ #include <iostream>
28
+ #include <nlohmann/json.hpp>
29
+ #include <type_traits>
30
+ #include <vector>
31
+
32
+ namespace dd {
33
+
34
+ /**
35
+ * @brief Data structure for uniquely storing DD nodes
36
+ */
37
+ class UniqueTable {
38
+ public:
39
+ /**
40
+ * @brief The initial garbage collection limit.
41
+ * @details The initial garbage collection limit is the number of entries that
42
+ * must be present in the table before garbage collection is triggered.
43
+ * Increasing this number reduces the number of garbage collections, but
44
+ * increases the memory usage.
45
+ */
46
+ static constexpr std::size_t INITIAL_GC_LIMIT = 131072U;
47
+
48
+ struct UniqueTableConfig {
49
+ /// The number of variables
50
+ std::size_t nVars = 0U;
51
+
52
+ /// The number of hash buckets to use (has to be a power of two)
53
+ std::size_t nBuckets = 32768;
54
+
55
+ /// The initial garbage collection limit
56
+ std::size_t initialGCLimit = INITIAL_GC_LIMIT;
57
+ };
58
+
59
+ /**
60
+ * @brief The default constructor
61
+ * @param manager The memory manager to use
62
+ * @param config The configuration for the unique table
63
+ * @details The MemoryManager shall be constructed from the same type that the
64
+ * unique table is then used for in the lookup method.
65
+ */
66
+ UniqueTable(MemoryManager& manager, const UniqueTableConfig& config);
67
+
68
+ void resize(std::size_t nVars);
69
+
70
+ /**
71
+ * @brief The hash function for the hash table.
72
+ * @details The hash function just combines the hashes of the edges of the
73
+ * node. The hash value is masked to ensure that it is in the range
74
+ * [0, nBuckets - 1].
75
+ * @param p The node to hash.
76
+ * @returns The hash value of the node.
77
+ */
78
+ template <class Node> [[nodiscard]] std::size_t hash(const Node& p) const {
79
+ static_assert(std::is_base_of_v<NodeBase, Node>,
80
+ "Node must be derived from NodeBase");
81
+ const std::size_t mask = cfg.nBuckets - 1;
82
+ std::size_t key = 0U;
83
+ for (const auto& succ : p.e) {
84
+ qc::hashCombine(key, std::hash<Edge<Node>>{}(succ));
85
+ }
86
+ key &= mask;
87
+ return key;
88
+ }
89
+
90
+ template <class Node>
91
+ [[nodiscard]] static bool nodesAreEqual(const Node& p, const Node& q) {
92
+ if constexpr (std::is_same_v<Node, dNode>) {
93
+ return (p.e == q.e && (p.flags == q.flags));
94
+ } else {
95
+ return p.e == q.e;
96
+ }
97
+ }
98
+
99
+ // Lookup a node in the unique table for the appropriate variable and insert
100
+ // it if it has not been found. Only normalized nodes shall be stored.
101
+ template <class Node> [[nodiscard]] Node* lookup(Node* p) {
102
+ static_assert(std::is_base_of_v<NodeBase, Node>,
103
+ "Node must be derived from NodeBase");
104
+ // there are unique terminal nodes
105
+ if (NodeBase::isTerminal(p)) {
106
+ return p;
107
+ }
108
+
109
+ const auto key = hash(*p);
110
+ const auto v = p->v;
111
+ ++stats[v].lookups;
112
+
113
+ // search bucket in table corresponding to hashed value for the given node
114
+ // and return it if found.
115
+ if (auto* hashedNode = searchTable(*p, key);
116
+ !Node::isTerminal(hashedNode)) {
117
+ return hashedNode;
118
+ }
119
+
120
+ // if node not found -> add it to front of unique table bucket
121
+ p->setNext(tables[v][key]);
122
+ tables[v][key] = p;
123
+ stats[v].trackInsert();
124
+
125
+ return p;
126
+ }
127
+
128
+ /// Get a reference to the table
129
+ [[nodiscard]] const auto& getTables() const { return tables; }
130
+
131
+ /// Get a reference to the statistics
132
+ [[nodiscard]] const auto& getStats() const noexcept { return stats; }
133
+
134
+ /// Get a reference to individual statistics
135
+ [[nodiscard]] const UniqueTableStatistics&
136
+ getStats(std::size_t idx) const noexcept;
137
+
138
+ /// Get a JSON object with the statistics
139
+ [[nodiscard]] nlohmann::basic_json<>
140
+ getStatsJson(bool includeIndividualTables = false) const;
141
+
142
+ /// Get the total number of entries
143
+ [[nodiscard]] std::size_t getNumEntries() const noexcept;
144
+
145
+ /// Count the number of marked entries
146
+ [[nodiscard]] std::size_t countMarkedEntries() const noexcept;
147
+
148
+ /**
149
+ * @brief Determine whether the table possibly requires garbage collection.
150
+ */
151
+ [[nodiscard]] bool possiblyNeedsCollection() const;
152
+
153
+ std::size_t garbageCollect(bool force = false);
154
+
155
+ void clear();
156
+
157
+ template <class Node> void print() const {
158
+ static_assert(std::is_base_of_v<NodeBase, Node>,
159
+ "Node must be derived from NodeBase");
160
+ auto q = cfg.nVars - 1U;
161
+ for (auto it = tables.rbegin(); it != tables.rend(); ++it) {
162
+ auto& table = *it;
163
+ std::cout << "\tq" << q << ":"
164
+ << "\n";
165
+ for (std::size_t key = 0; key < table.size(); ++key) {
166
+ auto* p = static_cast<Node*>(table[key]);
167
+ if (p != nullptr) {
168
+ std::cout << "\tkey=" << key << ": ";
169
+ }
170
+
171
+ while (p != nullptr) {
172
+ std::cout << "\t\t" << std::hex
173
+ << reinterpret_cast<std::uintptr_t>(p);
174
+ for (const auto& e : p->e) {
175
+ std::cout << " p" << reinterpret_cast<std::uintptr_t>(e.p) << "(r"
176
+ << reinterpret_cast<std::uintptr_t>(e.w.r) << " i"
177
+ << reinterpret_cast<std::uintptr_t>(e.w.i) << ")";
178
+ }
179
+ std::cout << std::dec << "\n";
180
+ p = p->next();
181
+ }
182
+ }
183
+ --q;
184
+ }
185
+ }
186
+
187
+ private:
188
+ /// Typedef for a bucket in the table
189
+ using Bucket = NodeBase*;
190
+ /// Typedef for the table
191
+ using Table = std::vector<Bucket>;
192
+
193
+ UniqueTableConfig cfg;
194
+
195
+ /// The current garbage collection limit
196
+ std::size_t gcLimit;
197
+
198
+ /// A pointer to the memory manager for the nodes stored in the table.
199
+ MemoryManager* memoryManager;
200
+
201
+ /**
202
+ * @brief The actual tables (one for each variable)
203
+ * @details Each hash table is an array of buckets. Each bucket is a linked
204
+ * list of entries. The linked list is implemented by using the next pointer
205
+ * of the entries.
206
+ */
207
+ std::vector<Table> tables;
208
+
209
+ /// A collection of statistics
210
+ std::vector<UniqueTableStatistics> stats;
211
+
212
+ /**
213
+ * @brief Search for a node in the hash table with the given key.
214
+ * @param p The node to search for.
215
+ * @param key The hashed value used to search the table.
216
+ * @returns A pointer to the node if found or Node::getTerminal() otherwise.
217
+ */
218
+ template <class Node>
219
+ [[nodiscard]] Node* searchTable(Node& p, const std::size_t& key) {
220
+ static_assert(std::is_base_of_v<NodeBase, Node>,
221
+ "Node must be derived from NodeBase");
222
+ const auto v = p.v;
223
+ Node* bucket = static_cast<Node*>(tables[v][key]);
224
+ while (bucket != nullptr) {
225
+ if (nodesAreEqual(p, *bucket)) {
226
+ // Match found
227
+ if (&p != bucket) {
228
+ // put node pointed to by p on available chain
229
+ memoryManager->returnEntry(p);
230
+ }
231
+ ++stats[v].hits;
232
+ return bucket;
233
+ }
234
+ ++stats[v].collisions;
235
+ bucket = bucket->next();
236
+ }
237
+
238
+ // Node not found in bucket
239
+ return Node::getTerminal();
240
+ }
241
+ };
242
+
243
+ } // namespace dd
@@ -0,0 +1,43 @@
1
+
2
+ #ifndef MQT_CORE_DD_EXPORT_H
3
+ #define MQT_CORE_DD_EXPORT_H
4
+
5
+ #ifdef MQT_CORE_DD_STATIC_DEFINE
6
+ # define MQT_CORE_DD_EXPORT
7
+ # define MQT_CORE_DD_NO_EXPORT
8
+ #else
9
+ # ifndef MQT_CORE_DD_EXPORT
10
+ # ifdef mqt_core_dd_EXPORTS
11
+ /* We are building this library */
12
+ # define MQT_CORE_DD_EXPORT __declspec(dllexport)
13
+ # else
14
+ /* We are using this library */
15
+ # define MQT_CORE_DD_EXPORT __declspec(dllimport)
16
+ # endif
17
+ # endif
18
+
19
+ # ifndef MQT_CORE_DD_NO_EXPORT
20
+ # define MQT_CORE_DD_NO_EXPORT
21
+ # endif
22
+ #endif
23
+
24
+ #ifndef MQT_CORE_DD_DEPRECATED
25
+ # define MQT_CORE_DD_DEPRECATED __declspec(deprecated)
26
+ #endif
27
+
28
+ #ifndef MQT_CORE_DD_DEPRECATED_EXPORT
29
+ # define MQT_CORE_DD_DEPRECATED_EXPORT MQT_CORE_DD_EXPORT MQT_CORE_DD_DEPRECATED
30
+ #endif
31
+
32
+ #ifndef MQT_CORE_DD_DEPRECATED_NO_EXPORT
33
+ # define MQT_CORE_DD_DEPRECATED_NO_EXPORT MQT_CORE_DD_NO_EXPORT MQT_CORE_DD_DEPRECATED
34
+ #endif
35
+
36
+ /* NOLINTNEXTLINE(readability-avoid-unconditional-preprocessor-if) */
37
+ #if 0 /* DEFINE_NO_DEPRECATED */
38
+ # ifndef MQT_CORE_DD_NO_DEPRECATED
39
+ # define MQT_CORE_DD_NO_DEPRECATED
40
+ # endif
41
+ #endif
42
+
43
+ #endif /* MQT_CORE_DD_EXPORT_H */