mqt-core 3.3.3__cp314-cp314-win_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (542) 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-ddsim-device.dll +0 -0
  18. mqt/core/bin/mqt-core-qdmi-driver.dll +0 -0
  19. mqt/core/bin/mqt-core-qdmi-na-device.dll +0 -0
  20. mqt/core/bin/mqt-core-zx.dll +0 -0
  21. mqt/core/dd.cp314-win_arm64.pyd +0 -0
  22. mqt/core/dd.pyi +1016 -0
  23. mqt/core/dd_evaluation.py +368 -0
  24. mqt/core/fomac.cp314-win_arm64.pyd +0 -0
  25. mqt/core/fomac.pyi +125 -0
  26. mqt/core/include/mqt-core/algorithms/BernsteinVazirani.hpp +39 -0
  27. mqt/core/include/mqt-core/algorithms/GHZState.hpp +18 -0
  28. mqt/core/include/mqt-core/algorithms/Grover.hpp +33 -0
  29. mqt/core/include/mqt-core/algorithms/QFT.hpp +21 -0
  30. mqt/core/include/mqt-core/algorithms/QPE.hpp +30 -0
  31. mqt/core/include/mqt-core/algorithms/RandomCliffordCircuit.hpp +22 -0
  32. mqt/core/include/mqt-core/algorithms/StatePreparation.hpp +43 -0
  33. mqt/core/include/mqt-core/algorithms/WState.hpp +18 -0
  34. mqt/core/include/mqt-core/algorithms/mqt_core_algorithms_export.h +43 -0
  35. mqt/core/include/mqt-core/boost/config/abi/borland_prefix.hpp +27 -0
  36. mqt/core/include/mqt-core/boost/config/abi/borland_suffix.hpp +12 -0
  37. mqt/core/include/mqt-core/boost/config/abi/msvc_prefix.hpp +22 -0
  38. mqt/core/include/mqt-core/boost/config/abi/msvc_suffix.hpp +8 -0
  39. mqt/core/include/mqt-core/boost/config/abi_prefix.hpp +25 -0
  40. mqt/core/include/mqt-core/boost/config/abi_suffix.hpp +25 -0
  41. mqt/core/include/mqt-core/boost/config/assert_cxx03.hpp +211 -0
  42. mqt/core/include/mqt-core/boost/config/assert_cxx11.hpp +212 -0
  43. mqt/core/include/mqt-core/boost/config/assert_cxx14.hpp +47 -0
  44. mqt/core/include/mqt-core/boost/config/assert_cxx17.hpp +65 -0
  45. mqt/core/include/mqt-core/boost/config/assert_cxx20.hpp +59 -0
  46. mqt/core/include/mqt-core/boost/config/assert_cxx23.hpp +41 -0
  47. mqt/core/include/mqt-core/boost/config/assert_cxx98.hpp +23 -0
  48. mqt/core/include/mqt-core/boost/config/auto_link.hpp +525 -0
  49. mqt/core/include/mqt-core/boost/config/compiler/borland.hpp +342 -0
  50. mqt/core/include/mqt-core/boost/config/compiler/clang.hpp +370 -0
  51. mqt/core/include/mqt-core/boost/config/compiler/clang_version.hpp +89 -0
  52. mqt/core/include/mqt-core/boost/config/compiler/codegear.hpp +389 -0
  53. mqt/core/include/mqt-core/boost/config/compiler/comeau.hpp +59 -0
  54. mqt/core/include/mqt-core/boost/config/compiler/common_edg.hpp +185 -0
  55. mqt/core/include/mqt-core/boost/config/compiler/compaq_cxx.hpp +19 -0
  56. mqt/core/include/mqt-core/boost/config/compiler/cray.hpp +446 -0
  57. mqt/core/include/mqt-core/boost/config/compiler/diab.hpp +26 -0
  58. mqt/core/include/mqt-core/boost/config/compiler/digitalmars.hpp +146 -0
  59. mqt/core/include/mqt-core/boost/config/compiler/gcc.hpp +386 -0
  60. mqt/core/include/mqt-core/boost/config/compiler/gcc_xml.hpp +115 -0
  61. mqt/core/include/mqt-core/boost/config/compiler/greenhills.hpp +28 -0
  62. mqt/core/include/mqt-core/boost/config/compiler/hp_acc.hpp +153 -0
  63. mqt/core/include/mqt-core/boost/config/compiler/intel.hpp +577 -0
  64. mqt/core/include/mqt-core/boost/config/compiler/kai.hpp +33 -0
  65. mqt/core/include/mqt-core/boost/config/compiler/metrowerks.hpp +201 -0
  66. mqt/core/include/mqt-core/boost/config/compiler/mpw.hpp +143 -0
  67. mqt/core/include/mqt-core/boost/config/compiler/nvcc.hpp +64 -0
  68. mqt/core/include/mqt-core/boost/config/compiler/pathscale.hpp +141 -0
  69. mqt/core/include/mqt-core/boost/config/compiler/pgi.hpp +23 -0
  70. mqt/core/include/mqt-core/boost/config/compiler/sgi_mipspro.hpp +29 -0
  71. mqt/core/include/mqt-core/boost/config/compiler/sunpro_cc.hpp +225 -0
  72. mqt/core/include/mqt-core/boost/config/compiler/vacpp.hpp +189 -0
  73. mqt/core/include/mqt-core/boost/config/compiler/visualc.hpp +398 -0
  74. mqt/core/include/mqt-core/boost/config/compiler/xlcpp.hpp +303 -0
  75. mqt/core/include/mqt-core/boost/config/compiler/xlcpp_zos.hpp +174 -0
  76. mqt/core/include/mqt-core/boost/config/detail/cxx_composite.hpp +218 -0
  77. mqt/core/include/mqt-core/boost/config/detail/posix_features.hpp +95 -0
  78. mqt/core/include/mqt-core/boost/config/detail/select_compiler_config.hpp +157 -0
  79. mqt/core/include/mqt-core/boost/config/detail/select_platform_config.hpp +147 -0
  80. mqt/core/include/mqt-core/boost/config/detail/select_stdlib_config.hpp +121 -0
  81. mqt/core/include/mqt-core/boost/config/detail/suffix.hpp +1334 -0
  82. mqt/core/include/mqt-core/boost/config/header_deprecated.hpp +26 -0
  83. mqt/core/include/mqt-core/boost/config/helper_macros.hpp +37 -0
  84. mqt/core/include/mqt-core/boost/config/no_tr1/cmath.hpp +28 -0
  85. mqt/core/include/mqt-core/boost/config/no_tr1/complex.hpp +28 -0
  86. mqt/core/include/mqt-core/boost/config/no_tr1/functional.hpp +28 -0
  87. mqt/core/include/mqt-core/boost/config/no_tr1/memory.hpp +28 -0
  88. mqt/core/include/mqt-core/boost/config/no_tr1/utility.hpp +28 -0
  89. mqt/core/include/mqt-core/boost/config/platform/aix.hpp +33 -0
  90. mqt/core/include/mqt-core/boost/config/platform/amigaos.hpp +15 -0
  91. mqt/core/include/mqt-core/boost/config/platform/beos.hpp +26 -0
  92. mqt/core/include/mqt-core/boost/config/platform/bsd.hpp +83 -0
  93. mqt/core/include/mqt-core/boost/config/platform/cloudabi.hpp +18 -0
  94. mqt/core/include/mqt-core/boost/config/platform/cray.hpp +18 -0
  95. mqt/core/include/mqt-core/boost/config/platform/cygwin.hpp +71 -0
  96. mqt/core/include/mqt-core/boost/config/platform/haiku.hpp +31 -0
  97. mqt/core/include/mqt-core/boost/config/platform/hpux.hpp +87 -0
  98. mqt/core/include/mqt-core/boost/config/platform/irix.hpp +31 -0
  99. mqt/core/include/mqt-core/boost/config/platform/linux.hpp +106 -0
  100. mqt/core/include/mqt-core/boost/config/platform/macos.hpp +87 -0
  101. mqt/core/include/mqt-core/boost/config/platform/qnxnto.hpp +31 -0
  102. mqt/core/include/mqt-core/boost/config/platform/solaris.hpp +31 -0
  103. mqt/core/include/mqt-core/boost/config/platform/symbian.hpp +97 -0
  104. mqt/core/include/mqt-core/boost/config/platform/vms.hpp +25 -0
  105. mqt/core/include/mqt-core/boost/config/platform/vxworks.hpp +422 -0
  106. mqt/core/include/mqt-core/boost/config/platform/wasm.hpp +23 -0
  107. mqt/core/include/mqt-core/boost/config/platform/win32.hpp +90 -0
  108. mqt/core/include/mqt-core/boost/config/platform/zos.hpp +32 -0
  109. mqt/core/include/mqt-core/boost/config/pragma_message.hpp +31 -0
  110. mqt/core/include/mqt-core/boost/config/requires_threads.hpp +92 -0
  111. mqt/core/include/mqt-core/boost/config/stdlib/dinkumware.hpp +324 -0
  112. mqt/core/include/mqt-core/boost/config/stdlib/libcomo.hpp +93 -0
  113. mqt/core/include/mqt-core/boost/config/stdlib/libcpp.hpp +180 -0
  114. mqt/core/include/mqt-core/boost/config/stdlib/libstdcpp3.hpp +482 -0
  115. mqt/core/include/mqt-core/boost/config/stdlib/modena.hpp +79 -0
  116. mqt/core/include/mqt-core/boost/config/stdlib/msl.hpp +98 -0
  117. mqt/core/include/mqt-core/boost/config/stdlib/roguewave.hpp +208 -0
  118. mqt/core/include/mqt-core/boost/config/stdlib/sgi.hpp +168 -0
  119. mqt/core/include/mqt-core/boost/config/stdlib/stlport.hpp +258 -0
  120. mqt/core/include/mqt-core/boost/config/stdlib/vacpp.hpp +74 -0
  121. mqt/core/include/mqt-core/boost/config/stdlib/xlcpp_zos.hpp +61 -0
  122. mqt/core/include/mqt-core/boost/config/user.hpp +133 -0
  123. mqt/core/include/mqt-core/boost/config/warning_disable.hpp +47 -0
  124. mqt/core/include/mqt-core/boost/config/workaround.hpp +305 -0
  125. mqt/core/include/mqt-core/boost/config.hpp +67 -0
  126. mqt/core/include/mqt-core/boost/cstdint.hpp +556 -0
  127. mqt/core/include/mqt-core/boost/cxx11_char_types.hpp +70 -0
  128. mqt/core/include/mqt-core/boost/detail/workaround.hpp +10 -0
  129. mqt/core/include/mqt-core/boost/limits.hpp +146 -0
  130. mqt/core/include/mqt-core/boost/multiprecision/complex128.hpp +24 -0
  131. mqt/core/include/mqt-core/boost/multiprecision/complex_adaptor.hpp +1046 -0
  132. mqt/core/include/mqt-core/boost/multiprecision/concepts/mp_number_archetypes.hpp +257 -0
  133. mqt/core/include/mqt-core/boost/multiprecision/cpp_bin_float/io.hpp +698 -0
  134. mqt/core/include/mqt-core/boost/multiprecision/cpp_bin_float/transcendental.hpp +157 -0
  135. mqt/core/include/mqt-core/boost/multiprecision/cpp_bin_float.hpp +2297 -0
  136. mqt/core/include/mqt-core/boost/multiprecision/cpp_complex.hpp +12 -0
  137. mqt/core/include/mqt-core/boost/multiprecision/cpp_dec_float.hpp +3690 -0
  138. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/add.hpp +368 -0
  139. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/add_unsigned.hpp +387 -0
  140. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/bitwise.hpp +889 -0
  141. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/checked.hpp +178 -0
  142. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/comparison.hpp +374 -0
  143. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/cpp_int_config.hpp +161 -0
  144. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/divide.hpp +703 -0
  145. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/import_export.hpp +248 -0
  146. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/intel_intrinsics.hpp +138 -0
  147. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/limits.hpp +282 -0
  148. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/literals.hpp +295 -0
  149. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/misc.hpp +1457 -0
  150. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/multiply.hpp +848 -0
  151. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/serialize.hpp +211 -0
  152. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/value_pack.hpp +42 -0
  153. mqt/core/include/mqt-core/boost/multiprecision/cpp_int.hpp +2360 -0
  154. mqt/core/include/mqt-core/boost/multiprecision/debug_adaptor.hpp +760 -0
  155. mqt/core/include/mqt-core/boost/multiprecision/detail/assert.hpp +29 -0
  156. mqt/core/include/mqt-core/boost/multiprecision/detail/atomic.hpp +62 -0
  157. mqt/core/include/mqt-core/boost/multiprecision/detail/bitscan.hpp +317 -0
  158. mqt/core/include/mqt-core/boost/multiprecision/detail/check_cpp11_config.hpp +64 -0
  159. mqt/core/include/mqt-core/boost/multiprecision/detail/constexpr.hpp +88 -0
  160. mqt/core/include/mqt-core/boost/multiprecision/detail/default_ops.hpp +4052 -0
  161. mqt/core/include/mqt-core/boost/multiprecision/detail/digits.hpp +49 -0
  162. mqt/core/include/mqt-core/boost/multiprecision/detail/dynamic_array.hpp +44 -0
  163. mqt/core/include/mqt-core/boost/multiprecision/detail/empty_value.hpp +87 -0
  164. mqt/core/include/mqt-core/boost/multiprecision/detail/endian.hpp +35 -0
  165. mqt/core/include/mqt-core/boost/multiprecision/detail/et_ops.hpp +1831 -0
  166. mqt/core/include/mqt-core/boost/multiprecision/detail/float128_functions.hpp +95 -0
  167. mqt/core/include/mqt-core/boost/multiprecision/detail/float_string_cvt.hpp +333 -0
  168. mqt/core/include/mqt-core/boost/multiprecision/detail/fpclassify.hpp +101 -0
  169. mqt/core/include/mqt-core/boost/multiprecision/detail/functions/constants.hpp +288 -0
  170. mqt/core/include/mqt-core/boost/multiprecision/detail/functions/pow.hpp +905 -0
  171. mqt/core/include/mqt-core/boost/multiprecision/detail/functions/trig.hpp +1058 -0
  172. mqt/core/include/mqt-core/boost/multiprecision/detail/functions/trunc.hpp +82 -0
  173. mqt/core/include/mqt-core/boost/multiprecision/detail/generic_interconvert.hpp +687 -0
  174. mqt/core/include/mqt-core/boost/multiprecision/detail/hash.hpp +56 -0
  175. mqt/core/include/mqt-core/boost/multiprecision/detail/integer_ops.hpp +474 -0
  176. mqt/core/include/mqt-core/boost/multiprecision/detail/itos.hpp +39 -0
  177. mqt/core/include/mqt-core/boost/multiprecision/detail/min_max.hpp +106 -0
  178. mqt/core/include/mqt-core/boost/multiprecision/detail/no_et_ops.hpp +661 -0
  179. mqt/core/include/mqt-core/boost/multiprecision/detail/no_exceptions_support.hpp +55 -0
  180. mqt/core/include/mqt-core/boost/multiprecision/detail/number_base.hpp +1656 -0
  181. mqt/core/include/mqt-core/boost/multiprecision/detail/number_compare.hpp +848 -0
  182. mqt/core/include/mqt-core/boost/multiprecision/detail/precision.hpp +313 -0
  183. mqt/core/include/mqt-core/boost/multiprecision/detail/rebind.hpp +19 -0
  184. mqt/core/include/mqt-core/boost/multiprecision/detail/standalone_config.hpp +148 -0
  185. mqt/core/include/mqt-core/boost/multiprecision/detail/static_array.hpp +42 -0
  186. mqt/core/include/mqt-core/boost/multiprecision/detail/string_helpers.hpp +48 -0
  187. mqt/core/include/mqt-core/boost/multiprecision/detail/tables.hpp +80 -0
  188. mqt/core/include/mqt-core/boost/multiprecision/detail/ublas_interop.hpp +75 -0
  189. mqt/core/include/mqt-core/boost/multiprecision/detail/uniform_int_distribution.hpp +212 -0
  190. mqt/core/include/mqt-core/boost/multiprecision/detail/utype_helper.hpp +374 -0
  191. mqt/core/include/mqt-core/boost/multiprecision/eigen.hpp +248 -0
  192. mqt/core/include/mqt-core/boost/multiprecision/float128.hpp +920 -0
  193. mqt/core/include/mqt-core/boost/multiprecision/fwd.hpp +268 -0
  194. mqt/core/include/mqt-core/boost/multiprecision/gmp.hpp +4060 -0
  195. mqt/core/include/mqt-core/boost/multiprecision/integer.hpp +363 -0
  196. mqt/core/include/mqt-core/boost/multiprecision/logged_adaptor.hpp +834 -0
  197. mqt/core/include/mqt-core/boost/multiprecision/miller_rabin.hpp +221 -0
  198. mqt/core/include/mqt-core/boost/multiprecision/mpc.hpp +1721 -0
  199. mqt/core/include/mqt-core/boost/multiprecision/mpfi.hpp +2559 -0
  200. mqt/core/include/mqt-core/boost/multiprecision/mpfr.hpp +3644 -0
  201. mqt/core/include/mqt-core/boost/multiprecision/number.hpp +2500 -0
  202. mqt/core/include/mqt-core/boost/multiprecision/random.hpp +23 -0
  203. mqt/core/include/mqt-core/boost/multiprecision/rational_adaptor.hpp +1289 -0
  204. mqt/core/include/mqt-core/boost/multiprecision/tommath.hpp +1034 -0
  205. mqt/core/include/mqt-core/boost/multiprecision/traits/explicit_conversion.hpp +67 -0
  206. mqt/core/include/mqt-core/boost/multiprecision/traits/extract_exponent_type.hpp +28 -0
  207. mqt/core/include/mqt-core/boost/multiprecision/traits/is_backend.hpp +91 -0
  208. mqt/core/include/mqt-core/boost/multiprecision/traits/is_byte_container.hpp +51 -0
  209. mqt/core/include/mqt-core/boost/multiprecision/traits/is_complex.hpp +22 -0
  210. mqt/core/include/mqt-core/boost/multiprecision/traits/is_convertible_arithmetic.hpp +51 -0
  211. mqt/core/include/mqt-core/boost/multiprecision/traits/is_restricted_conversion.hpp +47 -0
  212. mqt/core/include/mqt-core/boost/multiprecision/traits/is_variable_precision.hpp +25 -0
  213. mqt/core/include/mqt-core/boost/multiprecision/traits/max_digits10.hpp +79 -0
  214. mqt/core/include/mqt-core/boost/multiprecision/traits/std_integer_traits.hpp +90 -0
  215. mqt/core/include/mqt-core/boost/multiprecision/traits/transcendental_reduction_type.hpp +21 -0
  216. mqt/core/include/mqt-core/boost/version.hpp +32 -0
  217. mqt/core/include/mqt-core/circuit_optimizer/CircuitOptimizer.hpp +119 -0
  218. mqt/core/include/mqt-core/circuit_optimizer/mqt_core_circuit_optimizer_export.h +43 -0
  219. mqt/core/include/mqt-core/datastructures/DirectedAcyclicGraph.hpp +117 -0
  220. mqt/core/include/mqt-core/datastructures/DirectedGraph.hpp +158 -0
  221. mqt/core/include/mqt-core/datastructures/DisjointSet.hpp +50 -0
  222. mqt/core/include/mqt-core/datastructures/Layer.hpp +172 -0
  223. mqt/core/include/mqt-core/datastructures/SymmetricMatrix.hpp +57 -0
  224. mqt/core/include/mqt-core/datastructures/UndirectedGraph.hpp +227 -0
  225. mqt/core/include/mqt-core/datastructures/mqt_core_ds_export.h +43 -0
  226. mqt/core/include/mqt-core/dd/Approximation.hpp +45 -0
  227. mqt/core/include/mqt-core/dd/CachedEdge.hpp +174 -0
  228. mqt/core/include/mqt-core/dd/Complex.hpp +165 -0
  229. mqt/core/include/mqt-core/dd/ComplexNumbers.hpp +150 -0
  230. mqt/core/include/mqt-core/dd/ComplexValue.hpp +184 -0
  231. mqt/core/include/mqt-core/dd/ComputeTable.hpp +183 -0
  232. mqt/core/include/mqt-core/dd/DDDefinitions.hpp +139 -0
  233. mqt/core/include/mqt-core/dd/DDpackageConfig.hpp +104 -0
  234. mqt/core/include/mqt-core/dd/DensityNoiseTable.hpp +114 -0
  235. mqt/core/include/mqt-core/dd/Edge.hpp +416 -0
  236. mqt/core/include/mqt-core/dd/Export.hpp +438 -0
  237. mqt/core/include/mqt-core/dd/FunctionalityConstruction.hpp +75 -0
  238. mqt/core/include/mqt-core/dd/GateMatrixDefinitions.hpp +43 -0
  239. mqt/core/include/mqt-core/dd/LinkedListBase.hpp +45 -0
  240. mqt/core/include/mqt-core/dd/MemoryManager.hpp +193 -0
  241. mqt/core/include/mqt-core/dd/Node.hpp +223 -0
  242. mqt/core/include/mqt-core/dd/NoiseFunctionality.hpp +144 -0
  243. mqt/core/include/mqt-core/dd/Operations.hpp +306 -0
  244. mqt/core/include/mqt-core/dd/Package.hpp +2036 -0
  245. mqt/core/include/mqt-core/dd/Package_fwd.hpp +22 -0
  246. mqt/core/include/mqt-core/dd/RealNumber.hpp +255 -0
  247. mqt/core/include/mqt-core/dd/RealNumberUniqueTable.hpp +217 -0
  248. mqt/core/include/mqt-core/dd/Simulation.hpp +98 -0
  249. mqt/core/include/mqt-core/dd/StateGeneration.hpp +143 -0
  250. mqt/core/include/mqt-core/dd/StochasticNoiseOperationTable.hpp +88 -0
  251. mqt/core/include/mqt-core/dd/UnaryComputeTable.hpp +121 -0
  252. mqt/core/include/mqt-core/dd/UniqueTable.hpp +243 -0
  253. mqt/core/include/mqt-core/dd/mqt_core_dd_export.h +43 -0
  254. mqt/core/include/mqt-core/dd/statistics/MemoryManagerStatistics.hpp +84 -0
  255. mqt/core/include/mqt-core/dd/statistics/PackageStatistics.hpp +55 -0
  256. mqt/core/include/mqt-core/dd/statistics/Statistics.hpp +48 -0
  257. mqt/core/include/mqt-core/dd/statistics/TableStatistics.hpp +79 -0
  258. mqt/core/include/mqt-core/dd/statistics/UniqueTableStatistics.hpp +31 -0
  259. mqt/core/include/mqt-core/fomac/FoMaC.hpp +568 -0
  260. mqt/core/include/mqt-core/ir/Definitions.hpp +108 -0
  261. mqt/core/include/mqt-core/ir/Permutation.hpp +213 -0
  262. mqt/core/include/mqt-core/ir/QuantumComputation.hpp +598 -0
  263. mqt/core/include/mqt-core/ir/Register.hpp +125 -0
  264. mqt/core/include/mqt-core/ir/mqt_core_ir_export.h +43 -0
  265. mqt/core/include/mqt-core/ir/operations/AodOperation.hpp +92 -0
  266. mqt/core/include/mqt-core/ir/operations/CompoundOperation.hpp +212 -0
  267. mqt/core/include/mqt-core/ir/operations/Control.hpp +142 -0
  268. mqt/core/include/mqt-core/ir/operations/Expression.hpp +847 -0
  269. mqt/core/include/mqt-core/ir/operations/IfElseOperation.hpp +169 -0
  270. mqt/core/include/mqt-core/ir/operations/NonUnitaryOperation.hpp +118 -0
  271. mqt/core/include/mqt-core/ir/operations/OpType.hpp +120 -0
  272. mqt/core/include/mqt-core/ir/operations/OpType.inc +77 -0
  273. mqt/core/include/mqt-core/ir/operations/Operation.hpp +247 -0
  274. mqt/core/include/mqt-core/ir/operations/StandardOperation.hpp +140 -0
  275. mqt/core/include/mqt-core/ir/operations/SymbolicOperation.hpp +144 -0
  276. mqt/core/include/mqt-core/mqt_ddsim_qdmi/device.h +602 -0
  277. mqt/core/include/mqt-core/mqt_ddsim_qdmi/types.h +78 -0
  278. mqt/core/include/mqt-core/mqt_na_qdmi/device.h +602 -0
  279. mqt/core/include/mqt-core/mqt_na_qdmi/types.h +78 -0
  280. mqt/core/include/mqt-core/na/NAComputation.hpp +185 -0
  281. mqt/core/include/mqt-core/na/device/Device.hpp +410 -0
  282. mqt/core/include/mqt-core/na/device/DeviceMemberInitializers.hpp +724 -0
  283. mqt/core/include/mqt-core/na/device/Generator.hpp +447 -0
  284. mqt/core/include/mqt-core/na/entities/Atom.hpp +62 -0
  285. mqt/core/include/mqt-core/na/entities/Location.hpp +154 -0
  286. mqt/core/include/mqt-core/na/entities/Zone.hpp +95 -0
  287. mqt/core/include/mqt-core/na/fomac/Device.hpp +169 -0
  288. mqt/core/include/mqt-core/na/mqt_core_na_export.h +43 -0
  289. mqt/core/include/mqt-core/na/operations/GlobalCZOp.hpp +38 -0
  290. mqt/core/include/mqt-core/na/operations/GlobalOp.hpp +58 -0
  291. mqt/core/include/mqt-core/na/operations/GlobalRYOp.hpp +42 -0
  292. mqt/core/include/mqt-core/na/operations/LoadOp.hpp +89 -0
  293. mqt/core/include/mqt-core/na/operations/LocalOp.hpp +56 -0
  294. mqt/core/include/mqt-core/na/operations/LocalRZOp.hpp +42 -0
  295. mqt/core/include/mqt-core/na/operations/LocalUOp.hpp +49 -0
  296. mqt/core/include/mqt-core/na/operations/MoveOp.hpp +66 -0
  297. mqt/core/include/mqt-core/na/operations/Op.hpp +62 -0
  298. mqt/core/include/mqt-core/na/operations/ShuttlingOp.hpp +51 -0
  299. mqt/core/include/mqt-core/na/operations/StoreOp.hpp +87 -0
  300. mqt/core/include/mqt-core/qasm3/Exception.hpp +85 -0
  301. mqt/core/include/mqt-core/qasm3/Gate.hpp +65 -0
  302. mqt/core/include/mqt-core/qasm3/Importer.hpp +192 -0
  303. mqt/core/include/mqt-core/qasm3/InstVisitor.hpp +145 -0
  304. mqt/core/include/mqt-core/qasm3/NestedEnvironment.hpp +41 -0
  305. mqt/core/include/mqt-core/qasm3/Parser.hpp +170 -0
  306. mqt/core/include/mqt-core/qasm3/Scanner.hpp +73 -0
  307. mqt/core/include/mqt-core/qasm3/Statement.hpp +486 -0
  308. mqt/core/include/mqt-core/qasm3/Statement_fwd.hpp +39 -0
  309. mqt/core/include/mqt-core/qasm3/StdGates.hpp +232 -0
  310. mqt/core/include/mqt-core/qasm3/Token.hpp +198 -0
  311. mqt/core/include/mqt-core/qasm3/Types.hpp +238 -0
  312. mqt/core/include/mqt-core/qasm3/Types_fwd.hpp +22 -0
  313. mqt/core/include/mqt-core/qasm3/mqt_core_qasm_export.h +43 -0
  314. mqt/core/include/mqt-core/qasm3/passes/CompilerPass.hpp +22 -0
  315. mqt/core/include/mqt-core/qasm3/passes/ConstEvalPass.hpp +102 -0
  316. mqt/core/include/mqt-core/qasm3/passes/TypeCheckPass.hpp +124 -0
  317. mqt/core/include/mqt-core/qdmi/Driver.hpp +432 -0
  318. mqt/core/include/mqt-core/qdmi/dd/Device.hpp +310 -0
  319. mqt/core/include/mqt-core/zx/FunctionalityConstruction.hpp +125 -0
  320. mqt/core/include/mqt-core/zx/Rational.hpp +318 -0
  321. mqt/core/include/mqt-core/zx/Rules.hpp +132 -0
  322. mqt/core/include/mqt-core/zx/Simplify.hpp +182 -0
  323. mqt/core/include/mqt-core/zx/Utils.hpp +212 -0
  324. mqt/core/include/mqt-core/zx/ZXDefinitions.hpp +93 -0
  325. mqt/core/include/mqt-core/zx/ZXDiagram.hpp +480 -0
  326. mqt/core/include/mqt-core/zx/mqt_core_zx_export.h +43 -0
  327. mqt/core/include/nlohmann/adl_serializer.hpp +55 -0
  328. mqt/core/include/nlohmann/byte_container_with_subtype.hpp +103 -0
  329. mqt/core/include/nlohmann/detail/abi_macros.hpp +111 -0
  330. mqt/core/include/nlohmann/detail/conversions/from_json.hpp +577 -0
  331. mqt/core/include/nlohmann/detail/conversions/to_chars.hpp +1118 -0
  332. mqt/core/include/nlohmann/detail/conversions/to_json.hpp +479 -0
  333. mqt/core/include/nlohmann/detail/exceptions.hpp +291 -0
  334. mqt/core/include/nlohmann/detail/hash.hpp +129 -0
  335. mqt/core/include/nlohmann/detail/input/binary_reader.hpp +3068 -0
  336. mqt/core/include/nlohmann/detail/input/input_adapters.hpp +549 -0
  337. mqt/core/include/nlohmann/detail/input/json_sax.hpp +986 -0
  338. mqt/core/include/nlohmann/detail/input/lexer.hpp +1643 -0
  339. mqt/core/include/nlohmann/detail/input/parser.hpp +519 -0
  340. mqt/core/include/nlohmann/detail/input/position_t.hpp +37 -0
  341. mqt/core/include/nlohmann/detail/iterators/internal_iterator.hpp +35 -0
  342. mqt/core/include/nlohmann/detail/iterators/iter_impl.hpp +760 -0
  343. mqt/core/include/nlohmann/detail/iterators/iteration_proxy.hpp +235 -0
  344. mqt/core/include/nlohmann/detail/iterators/iterator_traits.hpp +61 -0
  345. mqt/core/include/nlohmann/detail/iterators/json_reverse_iterator.hpp +130 -0
  346. mqt/core/include/nlohmann/detail/iterators/primitive_iterator.hpp +132 -0
  347. mqt/core/include/nlohmann/detail/json_custom_base_class.hpp +39 -0
  348. mqt/core/include/nlohmann/detail/json_pointer.hpp +988 -0
  349. mqt/core/include/nlohmann/detail/json_ref.hpp +78 -0
  350. mqt/core/include/nlohmann/detail/macro_scope.hpp +595 -0
  351. mqt/core/include/nlohmann/detail/macro_unscope.hpp +46 -0
  352. mqt/core/include/nlohmann/detail/meta/call_std/begin.hpp +17 -0
  353. mqt/core/include/nlohmann/detail/meta/call_std/end.hpp +17 -0
  354. mqt/core/include/nlohmann/detail/meta/cpp_future.hpp +171 -0
  355. mqt/core/include/nlohmann/detail/meta/detected.hpp +70 -0
  356. mqt/core/include/nlohmann/detail/meta/identity_tag.hpp +21 -0
  357. mqt/core/include/nlohmann/detail/meta/is_sax.hpp +159 -0
  358. mqt/core/include/nlohmann/detail/meta/std_fs.hpp +29 -0
  359. mqt/core/include/nlohmann/detail/meta/type_traits.hpp +795 -0
  360. mqt/core/include/nlohmann/detail/meta/void_t.hpp +24 -0
  361. mqt/core/include/nlohmann/detail/output/binary_writer.hpp +1850 -0
  362. mqt/core/include/nlohmann/detail/output/output_adapters.hpp +147 -0
  363. mqt/core/include/nlohmann/detail/output/serializer.hpp +988 -0
  364. mqt/core/include/nlohmann/detail/string_concat.hpp +146 -0
  365. mqt/core/include/nlohmann/detail/string_escape.hpp +72 -0
  366. mqt/core/include/nlohmann/detail/string_utils.hpp +37 -0
  367. mqt/core/include/nlohmann/detail/value_t.hpp +118 -0
  368. mqt/core/include/nlohmann/json.hpp +5306 -0
  369. mqt/core/include/nlohmann/json_fwd.hpp +75 -0
  370. mqt/core/include/nlohmann/ordered_map.hpp +359 -0
  371. mqt/core/include/nlohmann/thirdparty/hedley/hedley.hpp +2045 -0
  372. mqt/core/include/nlohmann/thirdparty/hedley/hedley_undef.hpp +158 -0
  373. mqt/core/include/qdmi/qdmi/client.h +990 -0
  374. mqt/core/include/qdmi/qdmi/constants.h +1139 -0
  375. mqt/core/include/qdmi/qdmi/device.h +602 -0
  376. mqt/core/include/qdmi/qdmi/types.h +78 -0
  377. mqt/core/include/spdlog/async.h +99 -0
  378. mqt/core/include/spdlog/async_logger-inl.h +84 -0
  379. mqt/core/include/spdlog/async_logger.h +74 -0
  380. mqt/core/include/spdlog/cfg/argv.h +40 -0
  381. mqt/core/include/spdlog/cfg/env.h +36 -0
  382. mqt/core/include/spdlog/cfg/helpers-inl.h +107 -0
  383. mqt/core/include/spdlog/cfg/helpers.h +29 -0
  384. mqt/core/include/spdlog/common-inl.h +68 -0
  385. mqt/core/include/spdlog/common.h +406 -0
  386. mqt/core/include/spdlog/details/backtracer-inl.h +63 -0
  387. mqt/core/include/spdlog/details/backtracer.h +45 -0
  388. mqt/core/include/spdlog/details/circular_q.h +115 -0
  389. mqt/core/include/spdlog/details/console_globals.h +28 -0
  390. mqt/core/include/spdlog/details/file_helper-inl.h +153 -0
  391. mqt/core/include/spdlog/details/file_helper.h +61 -0
  392. mqt/core/include/spdlog/details/fmt_helper.h +141 -0
  393. mqt/core/include/spdlog/details/log_msg-inl.h +44 -0
  394. mqt/core/include/spdlog/details/log_msg.h +40 -0
  395. mqt/core/include/spdlog/details/log_msg_buffer-inl.h +54 -0
  396. mqt/core/include/spdlog/details/log_msg_buffer.h +32 -0
  397. mqt/core/include/spdlog/details/mpmc_blocking_q.h +177 -0
  398. mqt/core/include/spdlog/details/null_mutex.h +35 -0
  399. mqt/core/include/spdlog/details/os-inl.h +606 -0
  400. mqt/core/include/spdlog/details/os.h +127 -0
  401. mqt/core/include/spdlog/details/periodic_worker-inl.h +26 -0
  402. mqt/core/include/spdlog/details/periodic_worker.h +58 -0
  403. mqt/core/include/spdlog/details/registry-inl.h +270 -0
  404. mqt/core/include/spdlog/details/registry.h +131 -0
  405. mqt/core/include/spdlog/details/synchronous_factory.h +22 -0
  406. mqt/core/include/spdlog/details/tcp_client-windows.h +135 -0
  407. mqt/core/include/spdlog/details/tcp_client.h +127 -0
  408. mqt/core/include/spdlog/details/thread_pool-inl.h +126 -0
  409. mqt/core/include/spdlog/details/thread_pool.h +117 -0
  410. mqt/core/include/spdlog/details/udp_client-windows.h +98 -0
  411. mqt/core/include/spdlog/details/udp_client.h +81 -0
  412. mqt/core/include/spdlog/details/windows_include.h +11 -0
  413. mqt/core/include/spdlog/fmt/bin_to_hex.h +224 -0
  414. mqt/core/include/spdlog/fmt/bundled/args.h +220 -0
  415. mqt/core/include/spdlog/fmt/bundled/base.h +2989 -0
  416. mqt/core/include/spdlog/fmt/bundled/chrono.h +2330 -0
  417. mqt/core/include/spdlog/fmt/bundled/color.h +637 -0
  418. mqt/core/include/spdlog/fmt/bundled/compile.h +539 -0
  419. mqt/core/include/spdlog/fmt/bundled/core.h +5 -0
  420. mqt/core/include/spdlog/fmt/bundled/fmt.license.rst +27 -0
  421. mqt/core/include/spdlog/fmt/bundled/format-inl.h +1948 -0
  422. mqt/core/include/spdlog/fmt/bundled/format.h +4244 -0
  423. mqt/core/include/spdlog/fmt/bundled/os.h +427 -0
  424. mqt/core/include/spdlog/fmt/bundled/ostream.h +167 -0
  425. mqt/core/include/spdlog/fmt/bundled/printf.h +633 -0
  426. mqt/core/include/spdlog/fmt/bundled/ranges.h +850 -0
  427. mqt/core/include/spdlog/fmt/bundled/std.h +728 -0
  428. mqt/core/include/spdlog/fmt/bundled/xchar.h +369 -0
  429. mqt/core/include/spdlog/fmt/chrono.h +23 -0
  430. mqt/core/include/spdlog/fmt/compile.h +23 -0
  431. mqt/core/include/spdlog/fmt/fmt.h +30 -0
  432. mqt/core/include/spdlog/fmt/ostr.h +23 -0
  433. mqt/core/include/spdlog/fmt/ranges.h +23 -0
  434. mqt/core/include/spdlog/fmt/std.h +24 -0
  435. mqt/core/include/spdlog/fmt/xchar.h +23 -0
  436. mqt/core/include/spdlog/formatter.h +17 -0
  437. mqt/core/include/spdlog/fwd.h +18 -0
  438. mqt/core/include/spdlog/logger-inl.h +198 -0
  439. mqt/core/include/spdlog/logger.h +379 -0
  440. mqt/core/include/spdlog/mdc.h +52 -0
  441. mqt/core/include/spdlog/pattern_formatter-inl.h +1340 -0
  442. mqt/core/include/spdlog/pattern_formatter.h +118 -0
  443. mqt/core/include/spdlog/sinks/android_sink.h +137 -0
  444. mqt/core/include/spdlog/sinks/ansicolor_sink-inl.h +142 -0
  445. mqt/core/include/spdlog/sinks/ansicolor_sink.h +116 -0
  446. mqt/core/include/spdlog/sinks/base_sink-inl.h +59 -0
  447. mqt/core/include/spdlog/sinks/base_sink.h +51 -0
  448. mqt/core/include/spdlog/sinks/basic_file_sink-inl.h +48 -0
  449. mqt/core/include/spdlog/sinks/basic_file_sink.h +66 -0
  450. mqt/core/include/spdlog/sinks/callback_sink.h +56 -0
  451. mqt/core/include/spdlog/sinks/daily_file_sink.h +254 -0
  452. mqt/core/include/spdlog/sinks/dist_sink.h +81 -0
  453. mqt/core/include/spdlog/sinks/dup_filter_sink.h +91 -0
  454. mqt/core/include/spdlog/sinks/hourly_file_sink.h +193 -0
  455. mqt/core/include/spdlog/sinks/kafka_sink.h +119 -0
  456. mqt/core/include/spdlog/sinks/mongo_sink.h +108 -0
  457. mqt/core/include/spdlog/sinks/msvc_sink.h +68 -0
  458. mqt/core/include/spdlog/sinks/null_sink.h +41 -0
  459. mqt/core/include/spdlog/sinks/ostream_sink.h +43 -0
  460. mqt/core/include/spdlog/sinks/qt_sinks.h +304 -0
  461. mqt/core/include/spdlog/sinks/ringbuffer_sink.h +67 -0
  462. mqt/core/include/spdlog/sinks/rotating_file_sink-inl.h +179 -0
  463. mqt/core/include/spdlog/sinks/rotating_file_sink.h +93 -0
  464. mqt/core/include/spdlog/sinks/sink-inl.h +22 -0
  465. mqt/core/include/spdlog/sinks/sink.h +34 -0
  466. mqt/core/include/spdlog/sinks/stdout_color_sinks-inl.h +38 -0
  467. mqt/core/include/spdlog/sinks/stdout_color_sinks.h +49 -0
  468. mqt/core/include/spdlog/sinks/stdout_sinks-inl.h +127 -0
  469. mqt/core/include/spdlog/sinks/stdout_sinks.h +84 -0
  470. mqt/core/include/spdlog/sinks/syslog_sink.h +104 -0
  471. mqt/core/include/spdlog/sinks/systemd_sink.h +121 -0
  472. mqt/core/include/spdlog/sinks/tcp_sink.h +75 -0
  473. mqt/core/include/spdlog/sinks/udp_sink.h +69 -0
  474. mqt/core/include/spdlog/sinks/win_eventlog_sink.h +260 -0
  475. mqt/core/include/spdlog/sinks/wincolor_sink-inl.h +172 -0
  476. mqt/core/include/spdlog/sinks/wincolor_sink.h +82 -0
  477. mqt/core/include/spdlog/spdlog-inl.h +96 -0
  478. mqt/core/include/spdlog/spdlog.h +357 -0
  479. mqt/core/include/spdlog/stopwatch.h +66 -0
  480. mqt/core/include/spdlog/tweakme.h +148 -0
  481. mqt/core/include/spdlog/version.h +11 -0
  482. mqt/core/ir/__init__.pyi +2078 -0
  483. mqt/core/ir/operations.pyi +1011 -0
  484. mqt/core/ir/registers.pyi +91 -0
  485. mqt/core/ir/symbolic.pyi +177 -0
  486. mqt/core/ir.cp314-win_arm64.pyd +0 -0
  487. mqt/core/lib/mqt-core-algorithms.lib +0 -0
  488. mqt/core/lib/mqt-core-circuit-optimizer.lib +0 -0
  489. mqt/core/lib/mqt-core-dd.lib +0 -0
  490. mqt/core/lib/mqt-core-ds.lib +0 -0
  491. mqt/core/lib/mqt-core-fomac.lib +0 -0
  492. mqt/core/lib/mqt-core-ir.lib +0 -0
  493. mqt/core/lib/mqt-core-na-fomac.lib +0 -0
  494. mqt/core/lib/mqt-core-na.lib +0 -0
  495. mqt/core/lib/mqt-core-qasm.lib +0 -0
  496. mqt/core/lib/mqt-core-qdmi-ddsim-device.lib +0 -0
  497. mqt/core/lib/mqt-core-qdmi-driver.lib +0 -0
  498. mqt/core/lib/mqt-core-qdmi-na-device-gen.lib +0 -0
  499. mqt/core/lib/mqt-core-qdmi-na-device.lib +0 -0
  500. mqt/core/lib/mqt-core-zx.lib +0 -0
  501. mqt/core/lib/pkgconfig/spdlog.pc +13 -0
  502. mqt/core/lib/spdlog.lib +0 -0
  503. mqt/core/na/__init__.py +12 -0
  504. mqt/core/na/fomac.cp314-win_arm64.pyd +0 -0
  505. mqt/core/na/fomac.pyi +117 -0
  506. mqt/core/nlohmann_json.natvis +278 -0
  507. mqt/core/plugins/__init__.py +9 -0
  508. mqt/core/plugins/qiskit/__init__.py +19 -0
  509. mqt/core/plugins/qiskit/mqt_to_qiskit.py +420 -0
  510. mqt/core/plugins/qiskit/qiskit_to_mqt.py +562 -0
  511. mqt/core/py.typed +2 -0
  512. mqt/core/share/cmake/mqt-core/AddMQTPythonBinding.cmake +55 -0
  513. mqt/core/share/cmake/mqt-core/Cache.cmake +33 -0
  514. mqt/core/share/cmake/mqt-core/FindGMP.cmake +103 -0
  515. mqt/core/share/cmake/mqt-core/PackageAddTest.cmake +46 -0
  516. mqt/core/share/cmake/mqt-core/PreventInSourceBuilds.cmake +25 -0
  517. mqt/core/share/cmake/mqt-core/StandardProjectSettings.cmake +87 -0
  518. mqt/core/share/cmake/mqt-core/mqt-core-config-version.cmake +85 -0
  519. mqt/core/share/cmake/mqt-core/mqt-core-config.cmake +52 -0
  520. mqt/core/share/cmake/mqt-core/mqt-core-targets-release.cmake +152 -0
  521. mqt/core/share/cmake/mqt-core/mqt-core-targets.cmake +468 -0
  522. mqt/core/share/cmake/nlohmann_json/nlohmann_jsonConfig.cmake +15 -0
  523. mqt/core/share/cmake/nlohmann_json/nlohmann_jsonConfigVersion.cmake +20 -0
  524. mqt/core/share/cmake/nlohmann_json/nlohmann_jsonTargets.cmake +110 -0
  525. mqt/core/share/cmake/qdmi/Cache.cmake +44 -0
  526. mqt/core/share/cmake/qdmi/PrefixHandling.cmake +78 -0
  527. mqt/core/share/cmake/qdmi/prefix_defs.txt +26 -0
  528. mqt/core/share/cmake/qdmi/qdmi-config-version.cmake +85 -0
  529. mqt/core/share/cmake/qdmi/qdmi-config.cmake +42 -0
  530. mqt/core/share/cmake/qdmi/qdmi-targets.cmake +129 -0
  531. mqt/core/share/cmake/spdlog/spdlogConfig.cmake +44 -0
  532. mqt/core/share/cmake/spdlog/spdlogConfigTargets-release.cmake +19 -0
  533. mqt/core/share/cmake/spdlog/spdlogConfigTargets.cmake +121 -0
  534. mqt/core/share/cmake/spdlog/spdlogConfigVersion.cmake +65 -0
  535. mqt/core/share/pkgconfig/nlohmann_json.pc +7 -0
  536. mqt_core-3.3.3.dist-info/DELVEWHEEL +2 -0
  537. mqt_core-3.3.3.dist-info/METADATA +210 -0
  538. mqt_core-3.3.3.dist-info/RECORD +542 -0
  539. mqt_core-3.3.3.dist-info/WHEEL +5 -0
  540. mqt_core-3.3.3.dist-info/entry_points.txt +4 -0
  541. mqt_core-3.3.3.dist-info/licenses/LICENSE.md +22 -0
  542. mqt_core.libs/msvcp140.dll +0 -0
@@ -0,0 +1,310 @@
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
+ /** @file
14
+ * @brief The MQT QDMI device implementation for its DD-based simulator.
15
+ */
16
+
17
+ #include "dd/DDDefinitions.hpp"
18
+ #include "dd/Package.hpp"
19
+ #include "mqt_ddsim_qdmi/device.h"
20
+
21
+ #include <atomic>
22
+ #include <cstddef>
23
+ #include <cstdint>
24
+ #include <future>
25
+ #include <limits>
26
+ #include <map>
27
+ #include <memory>
28
+ #include <mutex>
29
+ #include <random>
30
+ #include <string>
31
+ #include <unordered_map>
32
+ #include <vector>
33
+
34
+ namespace qdmi::dd {
35
+ class Device final {
36
+ /// Provides access to the device name.
37
+ std::string name_;
38
+
39
+ /// The number of qubits supported by the simulator.
40
+ size_t qubitsNum_ = 0;
41
+
42
+ /// The status of the device.
43
+ std::atomic<QDMI_Device_Status> status_{QDMI_DEVICE_STATUS_OFFLINE};
44
+
45
+ /// The list of device sessions.
46
+ std::unordered_map<MQT_DDSIM_QDMI_Device_Session,
47
+ std::unique_ptr<MQT_DDSIM_QDMI_Device_Session_impl_d>>
48
+ sessions_;
49
+ /// Mutex protecting access to sessions_.
50
+ mutable std::mutex sessionsMutex_{};
51
+
52
+ /// RNG for generating unique IDs.
53
+ std::mt19937_64 rng_{std::random_device{}()};
54
+ /// Mutex protecting RNG usage.
55
+ mutable std::mutex rngMutex_{};
56
+
57
+ /// Distribution for generating unique IDs.
58
+ std::uniform_int_distribution<> dis_ =
59
+ std::uniform_int_distribution<>(0, std::numeric_limits<int>::max());
60
+
61
+ /// The number of running jobs.
62
+ std::atomic<size_t> runningJobs_{0};
63
+
64
+ /// @brief Private constructor to enforce the singleton pattern.
65
+ Device();
66
+
67
+ public:
68
+ // Default move constructor and move assignment operator.
69
+ Device(Device&&) = delete;
70
+ Device& operator=(Device&&) = delete;
71
+ // Delete copy constructor and assignment operator to enforce singleton.
72
+ Device(const Device&) = delete;
73
+ Device& operator=(const Device&) = delete;
74
+
75
+ /// @returns the singleton instance of the Device class.
76
+ [[nodiscard]] static Device& get() {
77
+ static Device instance;
78
+ return instance;
79
+ }
80
+
81
+ /// @brief Destructor for the Device class.
82
+ ~Device() = default;
83
+
84
+ /**
85
+ * @brief Allocates a new device session.
86
+ * @see MQT_DDSIM_QDMI_device_session_alloc
87
+ */
88
+ auto sessionAlloc(MQT_DDSIM_QDMI_Device_Session* session) -> QDMI_STATUS;
89
+
90
+ /**
91
+ * @brief Frees a device session.
92
+ * @see MQT_DDSIM_QDMI_device_session_free
93
+ */
94
+ auto sessionFree(MQT_DDSIM_QDMI_Device_Session session) -> void;
95
+
96
+ /**
97
+ * @brief Query a device property.
98
+ * @see MQT_DDSIM_QDMI_device_session_query_device_property
99
+ */
100
+ auto queryProperty(QDMI_Device_Property prop, size_t size, void* value,
101
+ size_t* sizeRet) const -> QDMI_STATUS;
102
+
103
+ /// Generates a unique ID.
104
+ auto generateUniqueID() -> int;
105
+
106
+ /// Sets the device status.
107
+ auto setStatus(QDMI_Device_Status status) -> void;
108
+
109
+ /// Bumps the number of running jobs and updates the status
110
+ auto increaseRunningJobs() -> void;
111
+
112
+ /// Decreases the number of running jobs and updates the status
113
+ auto decreaseRunningJobs() -> void;
114
+ };
115
+ } // namespace qdmi::dd
116
+
117
+ /**
118
+ * @brief Implementation of the MQT_DDSIM_QDMI_Device_Session structure.
119
+ */
120
+ struct MQT_DDSIM_QDMI_Device_Session_impl_d {
121
+ private:
122
+ /// The status of the session.
123
+ enum class Status : uint8_t {
124
+ ALLOCATED, ///< The session has been allocated but not initialized
125
+ INITIALIZED, ///< The session has been initialized and is ready for use
126
+ };
127
+ /// @brief The current status of the session.
128
+ Status status_ = Status::ALLOCATED;
129
+ /// @brief The device jobs associated with this session.
130
+ std::unordered_map<MQT_DDSIM_QDMI_Device_Job,
131
+ std::unique_ptr<MQT_DDSIM_QDMI_Device_Job_impl_d>>
132
+ jobs_;
133
+ /// @brief Mutex protecting access to jobs_.
134
+ mutable std::mutex jobsMutex_{};
135
+
136
+ public:
137
+ /**
138
+ * @brief Initializes the device session.
139
+ * @see MQT_DDSIM_QDMI_device_session_init
140
+ */
141
+ auto init() -> QDMI_STATUS;
142
+
143
+ /**
144
+ * @brief Sets a parameter for the device session.
145
+ * @see MQT_DDSIM_QDMI_device_session_set_parameter
146
+ */
147
+ auto setParameter(QDMI_Device_Session_Parameter param, size_t size,
148
+ const void* value) const -> QDMI_STATUS;
149
+
150
+ /**
151
+ * @brief Create a new device job.
152
+ * @see MQT_DDSIM_QDMI_device_session_create_device_job
153
+ */
154
+ auto createDeviceJob(MQT_DDSIM_QDMI_Device_Job* job) -> QDMI_STATUS;
155
+
156
+ /**
157
+ * @brief Frees the device job.
158
+ * @see MQT_DDSIM_QDMI_device_job_free
159
+ */
160
+ auto freeDeviceJob(MQT_DDSIM_QDMI_Device_Job job) -> void;
161
+
162
+ /**
163
+ * @brief Forwards a query of a device property to the device.
164
+ * @see MQT_DDSIM_QDMI_device_session_query_device_property
165
+ */
166
+ auto queryDeviceProperty(QDMI_Device_Property prop, size_t size, void* value,
167
+ size_t* sizeRet) const -> QDMI_STATUS;
168
+
169
+ /**
170
+ * @brief Forwards a query of a site property to the site.
171
+ * @see MQT_DDSIM_QDMI_device_session_query_site_property
172
+ */
173
+ auto querySiteProperty(MQT_DDSIM_QDMI_Site site, QDMI_Site_Property prop,
174
+ size_t size, void* value, size_t* sizeRet) const
175
+ -> QDMI_STATUS;
176
+
177
+ /**
178
+ * @brief Forwards a query of an operation property to the operation.
179
+ * @see MQT_DDSIM_QDMI_device_session_query_operation_property
180
+ */
181
+ auto queryOperationProperty(MQT_DDSIM_QDMI_Operation operation,
182
+ size_t numSites, const MQT_DDSIM_QDMI_Site* sites,
183
+ size_t numParams, const double* params,
184
+ QDMI_Operation_Property prop, size_t size,
185
+ void* value, size_t* sizeRet) const
186
+ -> QDMI_STATUS;
187
+ };
188
+
189
+ /**
190
+ * @brief Implementation of the MQT_DDSIM_QDMI_Device_Job structure.
191
+ */
192
+ struct MQT_DDSIM_QDMI_Device_Job_impl_d {
193
+ private:
194
+ /// The device session associated with the job.
195
+ MQT_DDSIM_QDMI_Device_Session_impl_d* session_;
196
+
197
+ /// The unique identifier of the job.
198
+ int id_ = 0;
199
+
200
+ /// The status of the job
201
+ std::atomic<QDMI_Job_Status> status_{QDMI_JOB_STATUS_CREATED};
202
+
203
+ /// The program format
204
+ QDMI_Program_Format format_ = QDMI_PROGRAM_FORMAT_QASM3;
205
+
206
+ /// The quantum program associated with the job
207
+ std::string program_;
208
+
209
+ /// The number of shots for the job
210
+ size_t numShots_ = 1024U;
211
+
212
+ /// Handle for the asynchronous job
213
+ std::future<void> jobHandle_;
214
+
215
+ /// The measurement counts for the job
216
+ std::map<std::string, std::size_t> counts_;
217
+
218
+ /// The DD package used for the state vector simulation
219
+ std::unique_ptr<dd::Package> dd_;
220
+
221
+ /// The final DD at the end of the state vector simulation
222
+ dd::VectorDD stateVecDD_{};
223
+
224
+ /// The state vector for the job (only available if no mid-circuit
225
+ /// measurements are used).
226
+ dd::CVec stateVec_;
227
+
228
+ /// The sparse state vector for the job (only available if no mid-circuit
229
+ /// measurements are used).
230
+ dd::SparseCVec stateVecSparse_;
231
+
232
+ /// One-time flags to lazily materialize vectors in a thread-safe way
233
+ std::once_flag stateVecOnce_;
234
+ std::once_flag stateVecSparseOnce_;
235
+
236
+ /// Translate counts to QDMI histogram
237
+ auto getHistogram(QDMI_Job_Result result, size_t size, void* data,
238
+ size_t* sizeRet) -> QDMI_STATUS;
239
+
240
+ /// Translate the state vector DD to a dense state vector for QDMI
241
+ auto getStateVector(size_t size, void* data, size_t* sizeRet) -> QDMI_STATUS;
242
+
243
+ /// Translate the state vector DD to sparse representations for QDMI
244
+ auto getSparseResults(QDMI_Job_Result result, size_t size, void* data,
245
+ size_t* sizeRet) -> QDMI_STATUS;
246
+
247
+ /// Translate the state vector DD to a dense vector of probabilities for QDMI
248
+ auto getProbabilities(size_t size, void* data, size_t* sizeRet)
249
+ -> QDMI_STATUS;
250
+
251
+ public:
252
+ /// Constructor for the MQT_DDSIM_QDMI_Device_Job_impl_d.
253
+ explicit MQT_DDSIM_QDMI_Device_Job_impl_d(
254
+ MQT_DDSIM_QDMI_Device_Session_impl_d* session)
255
+ : session_(session), id_(qdmi::dd::Device::get().generateUniqueID()) {}
256
+ /**
257
+ * @brief Frees the device job.
258
+ * @note This function just forwards to the session's @ref freeDeviceJob
259
+ * function. This function is needed because the interface only provides the
260
+ * job handle to the @ref QDMI_job_free function and the job's session handle
261
+ * is private.
262
+ * @see QDMI_job_free
263
+ */
264
+ auto free() -> void;
265
+
266
+ /**
267
+ * @brief Sets a parameter for the job.
268
+ * @see MQT_DDSIM_QDMI_device_job_set_parameter
269
+ */
270
+ auto setParameter(QDMI_Device_Job_Parameter param, size_t size,
271
+ const void* value) -> QDMI_STATUS;
272
+
273
+ /**
274
+ * @brief Queries a property of the job.
275
+ * @see MQT_DDSIM_QDMI_device_job_query_property
276
+ */
277
+ auto queryProperty(QDMI_Device_Job_Property prop, size_t size, void* value,
278
+ size_t* sizeRet) const -> QDMI_STATUS;
279
+
280
+ /**
281
+ * @brief Submits the job to the device.
282
+ * @see MQT_DDSIM_QDMI_device_job_submit
283
+ */
284
+ auto submit() -> QDMI_STATUS;
285
+
286
+ /**
287
+ * @brief Cancels the job.
288
+ * @see MQT_DDSIM_QDMI_device_job_cancel
289
+ */
290
+ auto cancel() -> QDMI_STATUS;
291
+
292
+ /**
293
+ * @brief Checks the status of the job.
294
+ * @see MQT_DDSIM_QDMI_device_job_check
295
+ */
296
+ auto check(QDMI_Job_Status* status) const -> QDMI_STATUS;
297
+
298
+ /**
299
+ * @brief Waits for the job to complete but at most for the specified timeout.
300
+ * @see MQT_DDSIM_QDMI_device_job_wait
301
+ */
302
+ auto wait(size_t timeout) const -> QDMI_STATUS;
303
+
304
+ /**
305
+ * @brief Gets the results of the job.
306
+ * @see MQT_DDSIM_QDMI_device_job_get_results
307
+ */
308
+ auto getResults(QDMI_Job_Result result, size_t size, void* data,
309
+ size_t* sizeRet) -> QDMI_STATUS;
310
+ };
@@ -0,0 +1,125 @@
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 "ZXDefinitions.hpp"
14
+ #include "ZXDiagram.hpp"
15
+ #include "ir/Permutation.hpp"
16
+ #include "ir/QuantumComputation.hpp"
17
+ #include "ir/operations/Expression.hpp"
18
+ #include "ir/operations/Operation.hpp"
19
+
20
+ #include <cstddef>
21
+ #include <optional>
22
+ #include <vector>
23
+
24
+ namespace zx {
25
+
26
+ /**
27
+ * @brief Static class to construct ZX-diagrams from a Quantumcomputation
28
+ */
29
+ class FunctionalityConstruction {
30
+ using op_it = qc::QuantumComputation::const_iterator;
31
+
32
+ public:
33
+ /**
34
+ * @brief Builds a ZX-diagram from a QuantumComputation
35
+ *
36
+ * @param qc Pointer to QuantumComputation to build the ZX-diagram from
37
+ * @return ZXDiagram
38
+ */
39
+ static ZXDiagram buildFunctionality(const qc::QuantumComputation* qc);
40
+
41
+ /**
42
+ * @brief Check whether a given QuantumComputation can be transformed to a
43
+ * ZXDiagram.
44
+ * @details Not all instructions supported by the QuantumComputation are
45
+ * supported by the ZXDiagram (e.g. arbitrarily-controlled multi-qubit gates).
46
+ * @param qc Pointer to QuantumComputation to check
47
+ * @return true if the QuantumComputation can be transformed to a ZXDiagram,
48
+ * false otherwise
49
+ */
50
+ static bool transformableToZX(const qc::QuantumComputation* qc);
51
+
52
+ /**
53
+ * @brief Check whether a given Operation can be transformed to a ZXDiagram.
54
+ * @details Not all Operations have a corresponding representation in the
55
+ * ZX-calculus.
56
+ * @param op Pointer to Operation to check
57
+ * @return true if the Operation can be transformed to a ZXDiagram, false
58
+ * otherwise
59
+ */
60
+ static bool transformableToZX(const qc::Operation* op);
61
+
62
+ protected:
63
+ static bool checkSwap(const op_it& it, const op_it& end, Qubit ctrl,
64
+ Qubit target, const qc::Permutation& p);
65
+ static void addZSpider(ZXDiagram& diag, zx::Qubit qubit,
66
+ std::vector<Vertex>& qubits,
67
+ const PiExpression& phase = PiExpression(),
68
+ EdgeType type = EdgeType::Simple);
69
+ static void addXSpider(ZXDiagram& diag, Qubit qubit,
70
+ std::vector<Vertex>& qubits,
71
+ const PiExpression& phase = PiExpression(),
72
+ EdgeType type = EdgeType::Simple);
73
+ static void
74
+ addRz(ZXDiagram& diag, const PiExpression& phase, Qubit target,
75
+ std::vector<Vertex>& qubits,
76
+ const std::optional<double>& unconvertedPhase = std::nullopt);
77
+ static void addRx(ZXDiagram& diag, const PiExpression& phase, Qubit target,
78
+ std::vector<Vertex>& qubits);
79
+ static void
80
+ addRy(ZXDiagram& diag, const PiExpression& phase, Qubit target,
81
+ std::vector<Vertex>& qubits,
82
+ const std::optional<double>& unconvertedPhase = std::nullopt);
83
+ static void addCnot(ZXDiagram& diag, Qubit ctrl, Qubit target,
84
+ std::vector<Vertex>& qubits,
85
+ EdgeType type = EdgeType::Simple);
86
+ static void addCphase(ZXDiagram& diag, const PiExpression& phase, Qubit ctrl,
87
+ Qubit target, std::vector<Vertex>& qubits);
88
+ static void addSwap(ZXDiagram& diag, Qubit target, Qubit target2,
89
+ std::vector<Vertex>& qubits);
90
+ static void
91
+ addRzz(ZXDiagram& diag, const PiExpression& phase, Qubit target,
92
+ Qubit target2, std::vector<Vertex>& qubits,
93
+ const std::optional<double>& unconvertedPhase = std::nullopt);
94
+ static void
95
+ addRxx(ZXDiagram& diag, const PiExpression& phase, Qubit target,
96
+ Qubit target2, std::vector<Vertex>& qubits,
97
+ const std::optional<double>& unconvertedPhase = std::nullopt);
98
+ static void
99
+ addRzx(ZXDiagram& diag, const PiExpression& phase, Qubit target,
100
+ Qubit target2, std::vector<Vertex>& qubits,
101
+ const std::optional<double>& unconvertedPhase = std::nullopt);
102
+ static void addDcx(ZXDiagram& diag, Qubit qubit1, Qubit qubit2,
103
+ std::vector<Vertex>& qubits);
104
+ static void
105
+ addXXplusYY(ZXDiagram& diag, const PiExpression& theta,
106
+ const PiExpression& beta, Qubit qubit0, Qubit qubit1,
107
+ std::vector<Vertex>& qubits,
108
+ const std::optional<double>& unconvertedBeta = std::nullopt);
109
+ static void
110
+ addXXminusYY(ZXDiagram& diag, const PiExpression& theta,
111
+ const PiExpression& beta, Qubit qubit0, Qubit qubit1,
112
+ std::vector<Vertex>& qubits,
113
+ const std::optional<double>& unconvertedBeta = std::nullopt);
114
+ static void addCcx(ZXDiagram& diag, Qubit ctrl0, Qubit ctrl1, Qubit target,
115
+ std::vector<Vertex>& qubits);
116
+ static op_it parseOp(ZXDiagram& diag, op_it it, op_it end,
117
+ std::vector<Vertex>& qubits, const qc::Permutation& p);
118
+ static op_it parseCompoundOp(ZXDiagram& diag, op_it it, op_it end,
119
+ std::vector<Vertex>& qubits,
120
+ const qc::Permutation& initialLayout);
121
+
122
+ static PiExpression toPiExpr(const qc::SymbolOrNumber& param);
123
+ static PiExpression parseParam(const qc::Operation* op, std::size_t i);
124
+ };
125
+ } // namespace zx