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,431 @@
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 <cstddef>
14
+ #include <cstdint>
15
+ #include <memory>
16
+ #include <qdmi/client.h>
17
+ #include <qdmi/device.h>
18
+ #include <string>
19
+ #include <unordered_map>
20
+ #include <unordered_set>
21
+ #include <vector>
22
+
23
+ namespace qdmi {
24
+
25
+ /**
26
+ * @brief Definition of the device library.
27
+ * @details The device library contains function pointers to the QDMI
28
+ * device interface functions.
29
+ */
30
+ struct DeviceLibrary {
31
+ // we keep the naming scheme of QDMI, i.e., snail_case for function names,
32
+ // here to ease the `LOAD_SYMBOL` macro later on.
33
+ // NOLINTBEGIN(readability-identifier-naming)
34
+ /// Function pointer to @ref QDMI_device_initialize.
35
+ decltype(QDMI_device_initialize)* device_initialize{};
36
+ /// Function pointer to @ref QDMI_device_finalize.
37
+ decltype(QDMI_device_finalize)* device_finalize{};
38
+ /// Function pointer to @ref QDMI_device_session_alloc.
39
+ decltype(QDMI_device_session_alloc)* device_session_alloc{};
40
+ /// Function pointer to @ref QDMI_device_session_init.
41
+ decltype(QDMI_device_session_init)* device_session_init{};
42
+ /// Function pointer to @ref QDMI_device_session_free.
43
+ decltype(QDMI_device_session_free)* device_session_free{};
44
+ /// Function pointer to @ref QDMI_device_session_set_parameter.
45
+ decltype(QDMI_device_session_set_parameter)* device_session_set_parameter{};
46
+ /// Function pointer to @ref QDMI_device_session_create_device_job.
47
+ decltype(QDMI_device_session_create_device_job)*
48
+ device_session_create_device_job{};
49
+ /// Function pointer to @ref QDMI_device_job_free.
50
+ decltype(QDMI_device_job_free)* device_job_free{};
51
+ /// Function pointer to @ref QDMI_device_job_set_parameter.
52
+ decltype(QDMI_device_job_set_parameter)* device_job_set_parameter{};
53
+ /// Function pointer to @ref QDMI_device_job_query_property.
54
+ decltype(QDMI_device_job_query_property)* device_job_query_property{};
55
+ /// Function pointer to @ref QDMI_device_job_submit.
56
+ decltype(QDMI_device_job_submit)* device_job_submit{};
57
+ /// Function pointer to @ref QDMI_device_job_cancel.
58
+ decltype(QDMI_device_job_cancel)* device_job_cancel{};
59
+ /// Function pointer to @ref QDMI_device_job_check.
60
+ decltype(QDMI_device_job_check)* device_job_check{};
61
+ /// Function pointer to @ref QDMI_device_job_wait.
62
+ decltype(QDMI_device_job_wait)* device_job_wait{};
63
+ /// Function pointer to @ref QDMI_device_job_get_results.
64
+ decltype(QDMI_device_job_get_results)* device_job_get_results{};
65
+ /// Function pointer to @ref QDMI_device_session_query_device_property.
66
+ decltype(QDMI_device_session_query_device_property)*
67
+ device_session_query_device_property{};
68
+ /// Function pointer to @ref QDMI_device_session_query_site_property.
69
+ decltype(QDMI_device_session_query_site_property)*
70
+ device_session_query_site_property{};
71
+ /// Function pointer to @ref QDMI_device_session_query_operation_property.
72
+ decltype(QDMI_device_session_query_operation_property)*
73
+ device_session_query_operation_property{};
74
+ // NOLINTEND(readability-identifier-naming)
75
+
76
+ // Default constructor
77
+ DeviceLibrary() = default;
78
+ // delete copy constructor and copy assignment operator
79
+ DeviceLibrary(const DeviceLibrary&) = delete;
80
+ DeviceLibrary& operator=(const DeviceLibrary&) = delete;
81
+ // define move constructor and move assignment operator
82
+ DeviceLibrary(DeviceLibrary&&) = default;
83
+ DeviceLibrary& operator=(DeviceLibrary&&) = default;
84
+ // destructor should be virtual to allow for polymorphic deletion
85
+ virtual ~DeviceLibrary() = default;
86
+ };
87
+
88
+ #ifndef _WIN32
89
+ /**
90
+ * @brief Definition of the dynamic device library.
91
+ * @details This class is used to load the QDMI device interface functions
92
+ * from a dynamic library at runtime. It inherits from DeviceLibrary and
93
+ * overrides the constructor and destructor to open and close the library.
94
+ * @note This class is only available on non-Windows platforms.
95
+ */
96
+ class DynamicDeviceLibrary final : public DeviceLibrary {
97
+ /// @brief Handle to the dynamic library returned by `dlopen`.
98
+ void* libHandle_;
99
+
100
+ /**
101
+ * @brief Returns a reference to the set of open library handles.
102
+ * @details This set can be used to check whether a newly opened library
103
+ * is already open.
104
+ */
105
+ static auto openLibHandles() -> std::unordered_set<void*>& {
106
+ static std::unordered_set<void*> libHandles;
107
+ return libHandles;
108
+ }
109
+
110
+ public:
111
+ /**
112
+ * @brief Constructs a DynamicDeviceLibrary object.
113
+ * @details This constructor loads the QDMI device interface functions
114
+ * from the dynamic library specified by `libName` and `prefix`.
115
+ * @param libName is the name of the dynamic library to load.
116
+ * @param prefix is the prefix used for the function names in the library.
117
+ */
118
+ DynamicDeviceLibrary(const std::string& libName, const std::string& prefix);
119
+
120
+ /**
121
+ * @brief Destructor for the DynamicDeviceLibrary.
122
+ * @details This destructor calls the @ref QDMI_device_finalize function if it
123
+ * is not null and closes the dynamic library.
124
+ */
125
+ ~DynamicDeviceLibrary() override;
126
+ };
127
+ #endif // _WIN32
128
+
129
+ // Macro to define a static library class that inherits from DeviceLibrary.
130
+ // It binds all device library functions to the functions of the static library.
131
+ // @param prefix is the prefix used for the function names in the library.
132
+ #define DECLARE_STATIC_LIBRARY(prefix) \
133
+ class prefix##DeviceLibrary final : public DeviceLibrary { \
134
+ public: \
135
+ prefix##DeviceLibrary(); \
136
+ \
137
+ ~prefix##DeviceLibrary() override; \
138
+ };
139
+
140
+ // Call the above macro for all static libraries that we want to support.
141
+ DECLARE_STATIC_LIBRARY(MQT_NA)
142
+
143
+ /**
144
+ * @brief The status of a session.
145
+ * @details This enum defines the possible states of a session in the QDMI
146
+ * library. A session can be either allocated or initialized.
147
+ */
148
+ enum class SessionStatus : uint8_t {
149
+ ALLOCATED, ///< The session has been allocated but not initialized
150
+ INITIALIZED ///< The session has been initialized and is ready for use
151
+ };
152
+ } // namespace qdmi
153
+
154
+ /**
155
+ * @brief Definition of the QDMI Device.
156
+ */
157
+ struct QDMI_Device_impl_d {
158
+ private:
159
+ // Since we treat this struct as a class, we apply also the naming scheme for
160
+ // classes, i.e., an underscore at the end of member names.
161
+
162
+ /**
163
+ * @brief The device library that provides the device interface functions.
164
+ * @note This must be a pointer type as we need access to dynamic and static
165
+ * libraries that are subclasses of qdmi::DeviceLibrary.
166
+ */
167
+ std::unique_ptr<qdmi::DeviceLibrary> library_;
168
+ /// @brief The device session handle.
169
+ QDMI_Device_Session deviceSession_ = nullptr;
170
+ /**
171
+ * @brief Map of jobs to their corresponding unique pointers of
172
+ * QDMI_Job_impl_d objects.
173
+ */
174
+ std::unordered_map<QDMI_Job, std::unique_ptr<QDMI_Job_impl_d>> jobs_;
175
+
176
+ public:
177
+ /**
178
+ * @brief Constructor for the QDMI device.
179
+ * @details This constructor initializes the device session and allocates
180
+ * the device session handle.
181
+ * @param lib is a unique pointer to the device library that provides the
182
+ * device interface functions.
183
+ */
184
+ explicit QDMI_Device_impl_d(std::unique_ptr<qdmi::DeviceLibrary>&& lib);
185
+
186
+ /**
187
+ * @brief Destructor for the QDMI device.
188
+ * @details This destructor frees the device session and clears the jobs map.
189
+ */
190
+ ~QDMI_Device_impl_d() {
191
+ jobs_.clear();
192
+ if (deviceSession_ != nullptr) {
193
+ library_->device_session_free(deviceSession_);
194
+ }
195
+ }
196
+
197
+ /// @returns the library with the device interface functions pointers.
198
+ [[nodiscard]] auto getLibrary() const -> const qdmi::DeviceLibrary& {
199
+ return *library_;
200
+ }
201
+
202
+ /**
203
+ * @brief Creates a job for the device.
204
+ * @see QDMI_device_create_job
205
+ */
206
+ auto createJob(QDMI_Job* job) -> int;
207
+
208
+ /**
209
+ * @brief Frees the job associated with the device.
210
+ * @see QDMI_job_free
211
+ */
212
+ auto freeJob(QDMI_Job job) -> void;
213
+
214
+ /**
215
+ * @brief Queries a device property.
216
+ * @see QDMI_device_query_device_property
217
+ */
218
+ auto queryDeviceProperty(QDMI_Device_Property prop, size_t size, void* value,
219
+ size_t* sizeRet) const -> int;
220
+
221
+ /**
222
+ * @brief Queries a site property.
223
+ * @see QDMI_device_query_site_property
224
+ */
225
+ auto querySiteProperty(QDMI_Site site, QDMI_Site_Property prop, size_t size,
226
+ void* value, size_t* sizeRet) const -> int;
227
+
228
+ /**
229
+ * @brief Queries an operation property.
230
+ * @see QDMI_device_query_operation_property
231
+ */
232
+ auto queryOperationProperty(QDMI_Operation operation, size_t numSites,
233
+ const QDMI_Site* sites, size_t numParams,
234
+ const double* params,
235
+ QDMI_Operation_Property prop, size_t size,
236
+ void* value, size_t* sizeRet) const -> int;
237
+ };
238
+
239
+ /**
240
+ * @brief Definition of the QDMI Job.
241
+ */
242
+ struct QDMI_Job_impl_d {
243
+ private:
244
+ // Since we treat this struct as a class, we apply also the naming scheme for
245
+ // classes, i.e., an underscore at the end of member names.
246
+
247
+ /// @brief The device job handle.
248
+ QDMI_Device_Job deviceJob_ = nullptr;
249
+ /// @brief The device associated with the job.
250
+ QDMI_Device device_ = nullptr;
251
+
252
+ public:
253
+ /**
254
+ * @brief Constructor for the QDMI job.
255
+ * @details This constructor initializes the job with the device job handle
256
+ * and the device library.
257
+ * @param deviceJob is the handle to the device job.
258
+ * @param device is the device associated with the job.
259
+ */
260
+ explicit QDMI_Job_impl_d(QDMI_Device_Job deviceJob, QDMI_Device device)
261
+ : deviceJob_(deviceJob), device_(device) {}
262
+
263
+ /**
264
+ * @brief Destructor for the QDMI job.
265
+ * @details This destructor frees the device job handle using the
266
+ * @ref QDMI_device_job_free function from the device library.
267
+ */
268
+ ~QDMI_Job_impl_d();
269
+
270
+ /**
271
+ * @brief Sets a parameter for the job.
272
+ * @see QDMI_job_set_parameter
273
+ */
274
+ auto setParameter(QDMI_Job_Parameter param, size_t size,
275
+ const void* value) const -> int;
276
+
277
+ /**
278
+ * @brief Queries a property of the job.
279
+ * @see QDMI_job_query_property
280
+ */
281
+ auto queryProperty(QDMI_Job_Property prop, size_t size, void* value,
282
+ size_t* sizeRet) const -> int;
283
+
284
+ /**
285
+ * @brief Submits the job to the device.
286
+ * @see QDMI_job_submit
287
+ */
288
+ [[nodiscard]] auto submit() const -> int;
289
+
290
+ /**
291
+ * @brief Cancels the job.
292
+ * @see QDMI_job_cancel
293
+ */
294
+ [[nodiscard]] auto cancel() const -> int;
295
+
296
+ /**
297
+ * @brief Checks the status of the job.
298
+ * @see QDMI_job_check
299
+ */
300
+ auto check(QDMI_Job_Status* status) const -> int;
301
+
302
+ /**
303
+ * @brief Waits for the job to complete but at most for the specified
304
+ * timeout.
305
+ * @see QDMI_job_wait
306
+ */
307
+ [[nodiscard]] auto wait(size_t timeout) const -> int;
308
+
309
+ /**
310
+ * @brief Gets the results of the job.
311
+ * @see QDMI_job_get_results
312
+ */
313
+ auto getResults(QDMI_Job_Result result, size_t size, void* data,
314
+ size_t* sizeRet) const -> int;
315
+
316
+ /**
317
+ * @brief Frees the job.
318
+ * @note This function just forwards to the device's @ref Device::freeJob
319
+ * function. This function is needed because the interface only provides the
320
+ * job handle to the @ref QDMI_job_free function and the job's device handle
321
+ * is private.
322
+ */
323
+ auto free() -> void;
324
+ };
325
+
326
+ /**
327
+ * @brief Definition of the QDMI Session.
328
+ */
329
+ // Since we treat this struct as a class, we apply also the naming scheme for
330
+ // classes, i.e., an underscore at the end of member names.
331
+ struct QDMI_Session_impl_d {
332
+ private:
333
+ /// @brief The status of the session.
334
+ qdmi::SessionStatus status_ = qdmi::SessionStatus::ALLOCATED;
335
+ /// @brief A pointer to the list of all devices.
336
+ const std::vector<std::unique_ptr<QDMI_Device_impl_d>>* devices_;
337
+
338
+ public:
339
+ /// @brief Constructor for the QDMI session.
340
+ explicit QDMI_Session_impl_d(
341
+ const std::vector<std::unique_ptr<QDMI_Device_impl_d>>& devices)
342
+ : devices_(&devices) {}
343
+
344
+ /**
345
+ * @brief Initializes the session.
346
+ * @see QDMI_session_init
347
+ */
348
+ auto init() -> int;
349
+
350
+ /**
351
+ * @brief Sets a parameter for the session.
352
+ * @see QDMI_session_set_parameter
353
+ */
354
+ auto setParameter(QDMI_Session_Parameter param, size_t size,
355
+ const void* value) const -> int;
356
+
357
+ /**
358
+ * @brief Queries a session property.
359
+ * @see QDMI_session_query_session_property
360
+ */
361
+ auto querySessionProperty(QDMI_Session_Property prop, size_t size,
362
+ void* value, size_t* sizeRet) const -> int;
363
+ };
364
+
365
+ namespace qdmi {
366
+ /**
367
+ * @brief The MQT QDMI driver class.
368
+ * @details This driver loads all statically known and linked QDMI device
369
+ * libraries. Additional devices can be added dynamically.
370
+ * @note This class is a singleton that manages the QDMI libraries and
371
+ * sessions. It is responsible for loading the libraries, allocating sessions,
372
+ * and providing access to the devices.
373
+ */
374
+ class Driver final {
375
+ /// @brief Private constructor to enforce the singleton pattern.
376
+ Driver();
377
+
378
+ /**
379
+ * @brief Map of sessions to their corresponding unique pointers to
380
+ * QDMI_Session_impl_d objects.
381
+ */
382
+ std::unordered_map<QDMI_Session, std::unique_ptr<QDMI_Session_impl_d>>
383
+ sessions_;
384
+
385
+ /**
386
+ * @brief Vector of unique pointers to QDMI_Device_impl_d objects.
387
+ */
388
+ std::vector<std::unique_ptr<QDMI_Device_impl_d>> devices_;
389
+
390
+ public:
391
+ // Delete copy constructors and assignment operators to prevent copying the
392
+ // singleton instance.
393
+ Driver(const Driver&) = delete;
394
+ Driver& operator=(const Driver&) = delete;
395
+ Driver(Driver&&) = default;
396
+ Driver& operator=(Driver&&) = default;
397
+
398
+ /// @brief Returns the singleton instance.
399
+ static auto get() -> Driver& {
400
+ static Driver instance;
401
+ return instance;
402
+ }
403
+
404
+ /// @brief Destructor for the Driver class.
405
+ ~Driver();
406
+ #ifndef _WIN32
407
+ /**
408
+ * @brief Adds a dynamic device library to the driver.
409
+ * @param libName is the path to the dynamic library to load.
410
+ * @param prefix is the prefix used for the device interface functions.
411
+ * @returns `true` if the library was successfully loaded, `false`
412
+ * if it was already loaded.
413
+ * @note This function is only available on non-Windows platforms.
414
+ */
415
+ auto addDynamicDeviceLibrary(const std::string& libName,
416
+ const std::string& prefix) -> bool;
417
+ #endif // _WIN32
418
+ /**
419
+ * @brief Allocates a new session.
420
+ * @see QDMI_session_alloc
421
+ */
422
+ auto sessionAlloc(QDMI_Session* session) -> int;
423
+
424
+ /**
425
+ * @brief Frees a session.
426
+ * @see QDMI_session_free
427
+ */
428
+ auto sessionFree(QDMI_Session session) -> void;
429
+ };
430
+
431
+ } // namespace qdmi
@@ -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