mqt-core 3.1.0__cp313-cp313t-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.

Potentially problematic release.


This version of mqt-core might be problematic. Click here for more details.

Files changed (343) 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 +21 -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-ir.dll +0 -0
  13. mqt/core/bin/mqt-core-na.dll +0 -0
  14. mqt/core/bin/mqt-core-qasm.dll +0 -0
  15. mqt/core/bin/mqt-core-zx.dll +0 -0
  16. mqt/core/dd.cp313t-win_arm64.pyd +0 -0
  17. mqt/core/dd.pyi +1031 -0
  18. mqt/core/dd_evaluation.py +368 -0
  19. mqt/core/include/mqt-core/algorithms/BernsteinVazirani.hpp +39 -0
  20. mqt/core/include/mqt-core/algorithms/GHZState.hpp +18 -0
  21. mqt/core/include/mqt-core/algorithms/Grover.hpp +33 -0
  22. mqt/core/include/mqt-core/algorithms/QFT.hpp +21 -0
  23. mqt/core/include/mqt-core/algorithms/QPE.hpp +30 -0
  24. mqt/core/include/mqt-core/algorithms/RandomCliffordCircuit.hpp +22 -0
  25. mqt/core/include/mqt-core/algorithms/StatePreparation.hpp +43 -0
  26. mqt/core/include/mqt-core/algorithms/WState.hpp +18 -0
  27. mqt/core/include/mqt-core/algorithms/mqt_core_algorithms_export.h +43 -0
  28. mqt/core/include/mqt-core/boost/config/abi/borland_prefix.hpp +27 -0
  29. mqt/core/include/mqt-core/boost/config/abi/borland_suffix.hpp +12 -0
  30. mqt/core/include/mqt-core/boost/config/abi/msvc_prefix.hpp +22 -0
  31. mqt/core/include/mqt-core/boost/config/abi/msvc_suffix.hpp +8 -0
  32. mqt/core/include/mqt-core/boost/config/abi_prefix.hpp +25 -0
  33. mqt/core/include/mqt-core/boost/config/abi_suffix.hpp +25 -0
  34. mqt/core/include/mqt-core/boost/config/assert_cxx03.hpp +211 -0
  35. mqt/core/include/mqt-core/boost/config/assert_cxx11.hpp +212 -0
  36. mqt/core/include/mqt-core/boost/config/assert_cxx14.hpp +47 -0
  37. mqt/core/include/mqt-core/boost/config/assert_cxx17.hpp +65 -0
  38. mqt/core/include/mqt-core/boost/config/assert_cxx20.hpp +59 -0
  39. mqt/core/include/mqt-core/boost/config/assert_cxx23.hpp +41 -0
  40. mqt/core/include/mqt-core/boost/config/assert_cxx98.hpp +23 -0
  41. mqt/core/include/mqt-core/boost/config/auto_link.hpp +525 -0
  42. mqt/core/include/mqt-core/boost/config/compiler/borland.hpp +342 -0
  43. mqt/core/include/mqt-core/boost/config/compiler/clang.hpp +370 -0
  44. mqt/core/include/mqt-core/boost/config/compiler/clang_version.hpp +89 -0
  45. mqt/core/include/mqt-core/boost/config/compiler/codegear.hpp +389 -0
  46. mqt/core/include/mqt-core/boost/config/compiler/comeau.hpp +59 -0
  47. mqt/core/include/mqt-core/boost/config/compiler/common_edg.hpp +185 -0
  48. mqt/core/include/mqt-core/boost/config/compiler/compaq_cxx.hpp +19 -0
  49. mqt/core/include/mqt-core/boost/config/compiler/cray.hpp +446 -0
  50. mqt/core/include/mqt-core/boost/config/compiler/diab.hpp +26 -0
  51. mqt/core/include/mqt-core/boost/config/compiler/digitalmars.hpp +146 -0
  52. mqt/core/include/mqt-core/boost/config/compiler/gcc.hpp +386 -0
  53. mqt/core/include/mqt-core/boost/config/compiler/gcc_xml.hpp +115 -0
  54. mqt/core/include/mqt-core/boost/config/compiler/greenhills.hpp +28 -0
  55. mqt/core/include/mqt-core/boost/config/compiler/hp_acc.hpp +153 -0
  56. mqt/core/include/mqt-core/boost/config/compiler/intel.hpp +577 -0
  57. mqt/core/include/mqt-core/boost/config/compiler/kai.hpp +33 -0
  58. mqt/core/include/mqt-core/boost/config/compiler/metrowerks.hpp +201 -0
  59. mqt/core/include/mqt-core/boost/config/compiler/mpw.hpp +143 -0
  60. mqt/core/include/mqt-core/boost/config/compiler/nvcc.hpp +64 -0
  61. mqt/core/include/mqt-core/boost/config/compiler/pathscale.hpp +141 -0
  62. mqt/core/include/mqt-core/boost/config/compiler/pgi.hpp +23 -0
  63. mqt/core/include/mqt-core/boost/config/compiler/sgi_mipspro.hpp +29 -0
  64. mqt/core/include/mqt-core/boost/config/compiler/sunpro_cc.hpp +225 -0
  65. mqt/core/include/mqt-core/boost/config/compiler/vacpp.hpp +189 -0
  66. mqt/core/include/mqt-core/boost/config/compiler/visualc.hpp +398 -0
  67. mqt/core/include/mqt-core/boost/config/compiler/xlcpp.hpp +303 -0
  68. mqt/core/include/mqt-core/boost/config/compiler/xlcpp_zos.hpp +174 -0
  69. mqt/core/include/mqt-core/boost/config/detail/cxx_composite.hpp +218 -0
  70. mqt/core/include/mqt-core/boost/config/detail/posix_features.hpp +95 -0
  71. mqt/core/include/mqt-core/boost/config/detail/select_compiler_config.hpp +157 -0
  72. mqt/core/include/mqt-core/boost/config/detail/select_platform_config.hpp +147 -0
  73. mqt/core/include/mqt-core/boost/config/detail/select_stdlib_config.hpp +121 -0
  74. mqt/core/include/mqt-core/boost/config/detail/suffix.hpp +1334 -0
  75. mqt/core/include/mqt-core/boost/config/header_deprecated.hpp +26 -0
  76. mqt/core/include/mqt-core/boost/config/helper_macros.hpp +37 -0
  77. mqt/core/include/mqt-core/boost/config/no_tr1/cmath.hpp +28 -0
  78. mqt/core/include/mqt-core/boost/config/no_tr1/complex.hpp +28 -0
  79. mqt/core/include/mqt-core/boost/config/no_tr1/functional.hpp +28 -0
  80. mqt/core/include/mqt-core/boost/config/no_tr1/memory.hpp +28 -0
  81. mqt/core/include/mqt-core/boost/config/no_tr1/utility.hpp +28 -0
  82. mqt/core/include/mqt-core/boost/config/platform/aix.hpp +33 -0
  83. mqt/core/include/mqt-core/boost/config/platform/amigaos.hpp +15 -0
  84. mqt/core/include/mqt-core/boost/config/platform/beos.hpp +26 -0
  85. mqt/core/include/mqt-core/boost/config/platform/bsd.hpp +83 -0
  86. mqt/core/include/mqt-core/boost/config/platform/cloudabi.hpp +18 -0
  87. mqt/core/include/mqt-core/boost/config/platform/cray.hpp +18 -0
  88. mqt/core/include/mqt-core/boost/config/platform/cygwin.hpp +71 -0
  89. mqt/core/include/mqt-core/boost/config/platform/haiku.hpp +31 -0
  90. mqt/core/include/mqt-core/boost/config/platform/hpux.hpp +87 -0
  91. mqt/core/include/mqt-core/boost/config/platform/irix.hpp +31 -0
  92. mqt/core/include/mqt-core/boost/config/platform/linux.hpp +106 -0
  93. mqt/core/include/mqt-core/boost/config/platform/macos.hpp +87 -0
  94. mqt/core/include/mqt-core/boost/config/platform/qnxnto.hpp +31 -0
  95. mqt/core/include/mqt-core/boost/config/platform/solaris.hpp +31 -0
  96. mqt/core/include/mqt-core/boost/config/platform/symbian.hpp +97 -0
  97. mqt/core/include/mqt-core/boost/config/platform/vms.hpp +25 -0
  98. mqt/core/include/mqt-core/boost/config/platform/vxworks.hpp +422 -0
  99. mqt/core/include/mqt-core/boost/config/platform/wasm.hpp +23 -0
  100. mqt/core/include/mqt-core/boost/config/platform/win32.hpp +90 -0
  101. mqt/core/include/mqt-core/boost/config/platform/zos.hpp +32 -0
  102. mqt/core/include/mqt-core/boost/config/pragma_message.hpp +31 -0
  103. mqt/core/include/mqt-core/boost/config/requires_threads.hpp +92 -0
  104. mqt/core/include/mqt-core/boost/config/stdlib/dinkumware.hpp +324 -0
  105. mqt/core/include/mqt-core/boost/config/stdlib/libcomo.hpp +93 -0
  106. mqt/core/include/mqt-core/boost/config/stdlib/libcpp.hpp +180 -0
  107. mqt/core/include/mqt-core/boost/config/stdlib/libstdcpp3.hpp +482 -0
  108. mqt/core/include/mqt-core/boost/config/stdlib/modena.hpp +79 -0
  109. mqt/core/include/mqt-core/boost/config/stdlib/msl.hpp +98 -0
  110. mqt/core/include/mqt-core/boost/config/stdlib/roguewave.hpp +208 -0
  111. mqt/core/include/mqt-core/boost/config/stdlib/sgi.hpp +168 -0
  112. mqt/core/include/mqt-core/boost/config/stdlib/stlport.hpp +258 -0
  113. mqt/core/include/mqt-core/boost/config/stdlib/vacpp.hpp +74 -0
  114. mqt/core/include/mqt-core/boost/config/stdlib/xlcpp_zos.hpp +61 -0
  115. mqt/core/include/mqt-core/boost/config/user.hpp +133 -0
  116. mqt/core/include/mqt-core/boost/config/warning_disable.hpp +47 -0
  117. mqt/core/include/mqt-core/boost/config/workaround.hpp +305 -0
  118. mqt/core/include/mqt-core/boost/config.hpp +67 -0
  119. mqt/core/include/mqt-core/boost/cstdint.hpp +556 -0
  120. mqt/core/include/mqt-core/boost/cxx11_char_types.hpp +70 -0
  121. mqt/core/include/mqt-core/boost/detail/workaround.hpp +10 -0
  122. mqt/core/include/mqt-core/boost/limits.hpp +146 -0
  123. mqt/core/include/mqt-core/boost/multiprecision/complex128.hpp +24 -0
  124. mqt/core/include/mqt-core/boost/multiprecision/complex_adaptor.hpp +1046 -0
  125. mqt/core/include/mqt-core/boost/multiprecision/concepts/mp_number_archetypes.hpp +257 -0
  126. mqt/core/include/mqt-core/boost/multiprecision/cpp_bin_float/io.hpp +698 -0
  127. mqt/core/include/mqt-core/boost/multiprecision/cpp_bin_float/transcendental.hpp +157 -0
  128. mqt/core/include/mqt-core/boost/multiprecision/cpp_bin_float.hpp +2297 -0
  129. mqt/core/include/mqt-core/boost/multiprecision/cpp_complex.hpp +12 -0
  130. mqt/core/include/mqt-core/boost/multiprecision/cpp_dec_float.hpp +3690 -0
  131. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/add.hpp +368 -0
  132. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/add_unsigned.hpp +387 -0
  133. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/bitwise.hpp +889 -0
  134. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/checked.hpp +178 -0
  135. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/comparison.hpp +374 -0
  136. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/cpp_int_config.hpp +161 -0
  137. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/divide.hpp +703 -0
  138. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/import_export.hpp +248 -0
  139. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/intel_intrinsics.hpp +138 -0
  140. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/limits.hpp +282 -0
  141. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/literals.hpp +295 -0
  142. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/misc.hpp +1457 -0
  143. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/multiply.hpp +848 -0
  144. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/serialize.hpp +211 -0
  145. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/value_pack.hpp +42 -0
  146. mqt/core/include/mqt-core/boost/multiprecision/cpp_int.hpp +2360 -0
  147. mqt/core/include/mqt-core/boost/multiprecision/debug_adaptor.hpp +760 -0
  148. mqt/core/include/mqt-core/boost/multiprecision/detail/assert.hpp +29 -0
  149. mqt/core/include/mqt-core/boost/multiprecision/detail/atomic.hpp +62 -0
  150. mqt/core/include/mqt-core/boost/multiprecision/detail/bitscan.hpp +317 -0
  151. mqt/core/include/mqt-core/boost/multiprecision/detail/check_cpp11_config.hpp +64 -0
  152. mqt/core/include/mqt-core/boost/multiprecision/detail/constexpr.hpp +88 -0
  153. mqt/core/include/mqt-core/boost/multiprecision/detail/default_ops.hpp +4052 -0
  154. mqt/core/include/mqt-core/boost/multiprecision/detail/digits.hpp +49 -0
  155. mqt/core/include/mqt-core/boost/multiprecision/detail/dynamic_array.hpp +44 -0
  156. mqt/core/include/mqt-core/boost/multiprecision/detail/empty_value.hpp +87 -0
  157. mqt/core/include/mqt-core/boost/multiprecision/detail/endian.hpp +35 -0
  158. mqt/core/include/mqt-core/boost/multiprecision/detail/et_ops.hpp +1831 -0
  159. mqt/core/include/mqt-core/boost/multiprecision/detail/float128_functions.hpp +95 -0
  160. mqt/core/include/mqt-core/boost/multiprecision/detail/float_string_cvt.hpp +333 -0
  161. mqt/core/include/mqt-core/boost/multiprecision/detail/fpclassify.hpp +101 -0
  162. mqt/core/include/mqt-core/boost/multiprecision/detail/functions/constants.hpp +288 -0
  163. mqt/core/include/mqt-core/boost/multiprecision/detail/functions/pow.hpp +905 -0
  164. mqt/core/include/mqt-core/boost/multiprecision/detail/functions/trig.hpp +1058 -0
  165. mqt/core/include/mqt-core/boost/multiprecision/detail/functions/trunc.hpp +82 -0
  166. mqt/core/include/mqt-core/boost/multiprecision/detail/generic_interconvert.hpp +687 -0
  167. mqt/core/include/mqt-core/boost/multiprecision/detail/hash.hpp +56 -0
  168. mqt/core/include/mqt-core/boost/multiprecision/detail/integer_ops.hpp +474 -0
  169. mqt/core/include/mqt-core/boost/multiprecision/detail/itos.hpp +39 -0
  170. mqt/core/include/mqt-core/boost/multiprecision/detail/min_max.hpp +106 -0
  171. mqt/core/include/mqt-core/boost/multiprecision/detail/no_et_ops.hpp +661 -0
  172. mqt/core/include/mqt-core/boost/multiprecision/detail/no_exceptions_support.hpp +55 -0
  173. mqt/core/include/mqt-core/boost/multiprecision/detail/number_base.hpp +1656 -0
  174. mqt/core/include/mqt-core/boost/multiprecision/detail/number_compare.hpp +848 -0
  175. mqt/core/include/mqt-core/boost/multiprecision/detail/precision.hpp +313 -0
  176. mqt/core/include/mqt-core/boost/multiprecision/detail/rebind.hpp +19 -0
  177. mqt/core/include/mqt-core/boost/multiprecision/detail/standalone_config.hpp +148 -0
  178. mqt/core/include/mqt-core/boost/multiprecision/detail/static_array.hpp +42 -0
  179. mqt/core/include/mqt-core/boost/multiprecision/detail/string_helpers.hpp +48 -0
  180. mqt/core/include/mqt-core/boost/multiprecision/detail/tables.hpp +80 -0
  181. mqt/core/include/mqt-core/boost/multiprecision/detail/ublas_interop.hpp +75 -0
  182. mqt/core/include/mqt-core/boost/multiprecision/detail/uniform_int_distribution.hpp +212 -0
  183. mqt/core/include/mqt-core/boost/multiprecision/detail/utype_helper.hpp +374 -0
  184. mqt/core/include/mqt-core/boost/multiprecision/eigen.hpp +248 -0
  185. mqt/core/include/mqt-core/boost/multiprecision/float128.hpp +920 -0
  186. mqt/core/include/mqt-core/boost/multiprecision/fwd.hpp +268 -0
  187. mqt/core/include/mqt-core/boost/multiprecision/gmp.hpp +4060 -0
  188. mqt/core/include/mqt-core/boost/multiprecision/integer.hpp +363 -0
  189. mqt/core/include/mqt-core/boost/multiprecision/logged_adaptor.hpp +834 -0
  190. mqt/core/include/mqt-core/boost/multiprecision/miller_rabin.hpp +221 -0
  191. mqt/core/include/mqt-core/boost/multiprecision/mpc.hpp +1721 -0
  192. mqt/core/include/mqt-core/boost/multiprecision/mpfi.hpp +2559 -0
  193. mqt/core/include/mqt-core/boost/multiprecision/mpfr.hpp +3644 -0
  194. mqt/core/include/mqt-core/boost/multiprecision/number.hpp +2500 -0
  195. mqt/core/include/mqt-core/boost/multiprecision/random.hpp +23 -0
  196. mqt/core/include/mqt-core/boost/multiprecision/rational_adaptor.hpp +1289 -0
  197. mqt/core/include/mqt-core/boost/multiprecision/tommath.hpp +1034 -0
  198. mqt/core/include/mqt-core/boost/multiprecision/traits/explicit_conversion.hpp +67 -0
  199. mqt/core/include/mqt-core/boost/multiprecision/traits/extract_exponent_type.hpp +28 -0
  200. mqt/core/include/mqt-core/boost/multiprecision/traits/is_backend.hpp +91 -0
  201. mqt/core/include/mqt-core/boost/multiprecision/traits/is_byte_container.hpp +51 -0
  202. mqt/core/include/mqt-core/boost/multiprecision/traits/is_complex.hpp +22 -0
  203. mqt/core/include/mqt-core/boost/multiprecision/traits/is_convertible_arithmetic.hpp +51 -0
  204. mqt/core/include/mqt-core/boost/multiprecision/traits/is_restricted_conversion.hpp +47 -0
  205. mqt/core/include/mqt-core/boost/multiprecision/traits/is_variable_precision.hpp +25 -0
  206. mqt/core/include/mqt-core/boost/multiprecision/traits/max_digits10.hpp +79 -0
  207. mqt/core/include/mqt-core/boost/multiprecision/traits/std_integer_traits.hpp +90 -0
  208. mqt/core/include/mqt-core/boost/multiprecision/traits/transcendental_reduction_type.hpp +21 -0
  209. mqt/core/include/mqt-core/boost/version.hpp +32 -0
  210. mqt/core/include/mqt-core/circuit_optimizer/CircuitOptimizer.hpp +106 -0
  211. mqt/core/include/mqt-core/circuit_optimizer/mqt_core_circuit_optimizer_export.h +43 -0
  212. mqt/core/include/mqt-core/datastructures/DirectedAcyclicGraph.hpp +117 -0
  213. mqt/core/include/mqt-core/datastructures/DirectedGraph.hpp +158 -0
  214. mqt/core/include/mqt-core/datastructures/DisjointSet.hpp +50 -0
  215. mqt/core/include/mqt-core/datastructures/Layer.hpp +172 -0
  216. mqt/core/include/mqt-core/datastructures/SymmetricMatrix.hpp +57 -0
  217. mqt/core/include/mqt-core/datastructures/UndirectedGraph.hpp +227 -0
  218. mqt/core/include/mqt-core/datastructures/mqt_core_ds_export.h +43 -0
  219. mqt/core/include/mqt-core/dd/Approximation.hpp +45 -0
  220. mqt/core/include/mqt-core/dd/CachedEdge.hpp +167 -0
  221. mqt/core/include/mqt-core/dd/Complex.hpp +165 -0
  222. mqt/core/include/mqt-core/dd/ComplexNumbers.hpp +150 -0
  223. mqt/core/include/mqt-core/dd/ComplexValue.hpp +184 -0
  224. mqt/core/include/mqt-core/dd/ComputeTable.hpp +183 -0
  225. mqt/core/include/mqt-core/dd/DDDefinitions.hpp +139 -0
  226. mqt/core/include/mqt-core/dd/DDpackageConfig.hpp +104 -0
  227. mqt/core/include/mqt-core/dd/DensityNoiseTable.hpp +114 -0
  228. mqt/core/include/mqt-core/dd/Edge.hpp +416 -0
  229. mqt/core/include/mqt-core/dd/Export.hpp +438 -0
  230. mqt/core/include/mqt-core/dd/FunctionalityConstruction.hpp +75 -0
  231. mqt/core/include/mqt-core/dd/GateMatrixDefinitions.hpp +43 -0
  232. mqt/core/include/mqt-core/dd/LinkedListBase.hpp +45 -0
  233. mqt/core/include/mqt-core/dd/MemoryManager.hpp +193 -0
  234. mqt/core/include/mqt-core/dd/Node.hpp +223 -0
  235. mqt/core/include/mqt-core/dd/NoiseFunctionality.hpp +144 -0
  236. mqt/core/include/mqt-core/dd/Operations.hpp +308 -0
  237. mqt/core/include/mqt-core/dd/Package.hpp +2036 -0
  238. mqt/core/include/mqt-core/dd/Package_fwd.hpp +22 -0
  239. mqt/core/include/mqt-core/dd/RealNumber.hpp +255 -0
  240. mqt/core/include/mqt-core/dd/RealNumberUniqueTable.hpp +217 -0
  241. mqt/core/include/mqt-core/dd/Simulation.hpp +98 -0
  242. mqt/core/include/mqt-core/dd/StateGeneration.hpp +143 -0
  243. mqt/core/include/mqt-core/dd/StochasticNoiseOperationTable.hpp +88 -0
  244. mqt/core/include/mqt-core/dd/UnaryComputeTable.hpp +121 -0
  245. mqt/core/include/mqt-core/dd/UniqueTable.hpp +243 -0
  246. mqt/core/include/mqt-core/dd/mqt_core_dd_export.h +43 -0
  247. mqt/core/include/mqt-core/dd/statistics/MemoryManagerStatistics.hpp +84 -0
  248. mqt/core/include/mqt-core/dd/statistics/PackageStatistics.hpp +55 -0
  249. mqt/core/include/mqt-core/dd/statistics/Statistics.hpp +48 -0
  250. mqt/core/include/mqt-core/dd/statistics/TableStatistics.hpp +79 -0
  251. mqt/core/include/mqt-core/dd/statistics/UniqueTableStatistics.hpp +31 -0
  252. mqt/core/include/mqt-core/ir/Definitions.hpp +108 -0
  253. mqt/core/include/mqt-core/ir/Permutation.hpp +213 -0
  254. mqt/core/include/mqt-core/ir/QuantumComputation.hpp +594 -0
  255. mqt/core/include/mqt-core/ir/Register.hpp +125 -0
  256. mqt/core/include/mqt-core/ir/mqt_core_ir_export.h +43 -0
  257. mqt/core/include/mqt-core/ir/operations/AodOperation.hpp +92 -0
  258. mqt/core/include/mqt-core/ir/operations/ClassicControlledOperation.hpp +156 -0
  259. mqt/core/include/mqt-core/ir/operations/CompoundOperation.hpp +210 -0
  260. mqt/core/include/mqt-core/ir/operations/Control.hpp +142 -0
  261. mqt/core/include/mqt-core/ir/operations/Expression.hpp +847 -0
  262. mqt/core/include/mqt-core/ir/operations/NonUnitaryOperation.hpp +118 -0
  263. mqt/core/include/mqt-core/ir/operations/OpType.hpp +115 -0
  264. mqt/core/include/mqt-core/ir/operations/OpType.inc +75 -0
  265. mqt/core/include/mqt-core/ir/operations/Operation.hpp +245 -0
  266. mqt/core/include/mqt-core/ir/operations/StandardOperation.hpp +138 -0
  267. mqt/core/include/mqt-core/ir/operations/SymbolicOperation.hpp +144 -0
  268. mqt/core/include/mqt-core/na/NAComputation.hpp +185 -0
  269. mqt/core/include/mqt-core/na/entities/Atom.hpp +62 -0
  270. mqt/core/include/mqt-core/na/entities/Location.hpp +154 -0
  271. mqt/core/include/mqt-core/na/entities/Zone.hpp +95 -0
  272. mqt/core/include/mqt-core/na/mqt_core_na_export.h +43 -0
  273. mqt/core/include/mqt-core/na/operations/GlobalCZOp.hpp +38 -0
  274. mqt/core/include/mqt-core/na/operations/GlobalOp.hpp +58 -0
  275. mqt/core/include/mqt-core/na/operations/GlobalRYOp.hpp +42 -0
  276. mqt/core/include/mqt-core/na/operations/LoadOp.hpp +89 -0
  277. mqt/core/include/mqt-core/na/operations/LocalOp.hpp +56 -0
  278. mqt/core/include/mqt-core/na/operations/LocalRZOp.hpp +42 -0
  279. mqt/core/include/mqt-core/na/operations/LocalUOp.hpp +49 -0
  280. mqt/core/include/mqt-core/na/operations/MoveOp.hpp +66 -0
  281. mqt/core/include/mqt-core/na/operations/Op.hpp +62 -0
  282. mqt/core/include/mqt-core/na/operations/ShuttlingOp.hpp +51 -0
  283. mqt/core/include/mqt-core/na/operations/StoreOp.hpp +87 -0
  284. mqt/core/include/mqt-core/qasm3/Exception.hpp +85 -0
  285. mqt/core/include/mqt-core/qasm3/Gate.hpp +65 -0
  286. mqt/core/include/mqt-core/qasm3/Importer.hpp +192 -0
  287. mqt/core/include/mqt-core/qasm3/InstVisitor.hpp +145 -0
  288. mqt/core/include/mqt-core/qasm3/NestedEnvironment.hpp +41 -0
  289. mqt/core/include/mqt-core/qasm3/Parser.hpp +170 -0
  290. mqt/core/include/mqt-core/qasm3/Scanner.hpp +73 -0
  291. mqt/core/include/mqt-core/qasm3/Statement.hpp +486 -0
  292. mqt/core/include/mqt-core/qasm3/Statement_fwd.hpp +39 -0
  293. mqt/core/include/mqt-core/qasm3/StdGates.hpp +123 -0
  294. mqt/core/include/mqt-core/qasm3/Token.hpp +198 -0
  295. mqt/core/include/mqt-core/qasm3/Types.hpp +238 -0
  296. mqt/core/include/mqt-core/qasm3/Types_fwd.hpp +22 -0
  297. mqt/core/include/mqt-core/qasm3/mqt_core_qasm_export.h +43 -0
  298. mqt/core/include/mqt-core/qasm3/passes/CompilerPass.hpp +22 -0
  299. mqt/core/include/mqt-core/qasm3/passes/ConstEvalPass.hpp +102 -0
  300. mqt/core/include/mqt-core/qasm3/passes/TypeCheckPass.hpp +124 -0
  301. mqt/core/include/mqt-core/zx/FunctionalityConstruction.hpp +125 -0
  302. mqt/core/include/mqt-core/zx/Rational.hpp +318 -0
  303. mqt/core/include/mqt-core/zx/Rules.hpp +132 -0
  304. mqt/core/include/mqt-core/zx/Simplify.hpp +182 -0
  305. mqt/core/include/mqt-core/zx/Utils.hpp +212 -0
  306. mqt/core/include/mqt-core/zx/ZXDefinitions.hpp +93 -0
  307. mqt/core/include/mqt-core/zx/ZXDiagram.hpp +480 -0
  308. mqt/core/include/mqt-core/zx/mqt_core_zx_export.h +43 -0
  309. mqt/core/ir/__init__.pyi +1998 -0
  310. mqt/core/ir/operations.pyi +1019 -0
  311. mqt/core/ir/registers.pyi +91 -0
  312. mqt/core/ir/symbolic.pyi +177 -0
  313. mqt/core/ir.cp313t-win_arm64.pyd +0 -0
  314. mqt/core/lib/mqt-core-algorithms.lib +0 -0
  315. mqt/core/lib/mqt-core-circuit-optimizer.lib +0 -0
  316. mqt/core/lib/mqt-core-dd.lib +0 -0
  317. mqt/core/lib/mqt-core-ds.lib +0 -0
  318. mqt/core/lib/mqt-core-ir.lib +0 -0
  319. mqt/core/lib/mqt-core-na.lib +0 -0
  320. mqt/core/lib/mqt-core-qasm.lib +0 -0
  321. mqt/core/lib/mqt-core-zx.lib +0 -0
  322. mqt/core/plugins/__init__.py +9 -0
  323. mqt/core/plugins/qiskit/__init__.py +19 -0
  324. mqt/core/plugins/qiskit/mqt_to_qiskit.py +354 -0
  325. mqt/core/plugins/qiskit/qiskit_to_mqt.py +455 -0
  326. mqt/core/py.typed +2 -0
  327. mqt/core/share/cmake/mqt-core/AddMQTPythonBinding.cmake +52 -0
  328. mqt/core/share/cmake/mqt-core/Cache.cmake +32 -0
  329. mqt/core/share/cmake/mqt-core/FindGMP.cmake +103 -0
  330. mqt/core/share/cmake/mqt-core/PackageAddTest.cmake +40 -0
  331. mqt/core/share/cmake/mqt-core/PreventInSourceBuilds.cmake +25 -0
  332. mqt/core/share/cmake/mqt-core/StandardProjectSettings.cmake +87 -0
  333. mqt/core/share/cmake/mqt-core/mqt-core-config-version.cmake +85 -0
  334. mqt/core/share/cmake/mqt-core/mqt-core-config.cmake +49 -0
  335. mqt/core/share/cmake/mqt-core/mqt-core-targets-release.cmake +90 -0
  336. mqt/core/share/cmake/mqt-core/mqt-core-targets.cmake +324 -0
  337. mqt_core-3.1.0.dist-info/DELVEWHEEL +2 -0
  338. mqt_core-3.1.0.dist-info/METADATA +168 -0
  339. mqt_core-3.1.0.dist-info/RECORD +343 -0
  340. mqt_core-3.1.0.dist-info/WHEEL +5 -0
  341. mqt_core-3.1.0.dist-info/entry_points.txt +4 -0
  342. mqt_core-3.1.0.dist-info/licenses/LICENSE.md +22 -0
  343. mqt_core.libs/msvcp140.dll +0 -0
@@ -0,0 +1,38 @@
1
+ /*
2
+ * Copyright (c) 2023 - 2025 Chair for Design Automation, TUM
3
+ * Copyright (c) 2025 Munich Quantum Software Company GmbH
4
+ * All rights reserved.
5
+ *
6
+ * SPDX-License-Identifier: MIT
7
+ *
8
+ * Licensed under the MIT License
9
+ */
10
+
11
+ /** @file
12
+ * @brief Defines a class for representing global CZ operations.
13
+ */
14
+
15
+ #pragma once
16
+
17
+ #include "na/entities/Zone.hpp"
18
+ #include "na/operations/GlobalOp.hpp"
19
+
20
+ #include <utility>
21
+ #include <vector>
22
+
23
+ namespace na {
24
+ /// Represents a global CZ operation in the NAComputation.
25
+ class GlobalCZOp final : public GlobalOp {
26
+ public:
27
+ /// Creates a new CZ operation in the given zones.
28
+ /// @param zones The zones the operation is applied to.
29
+ explicit GlobalCZOp(std::vector<const Zone*> zones)
30
+ : GlobalOp(std::move(zones), {}) {
31
+ name_ = "cz";
32
+ }
33
+
34
+ /// Creates a new CZ operation in the given zone.
35
+ /// @param zone The zone the operation is applied to.
36
+ explicit GlobalCZOp(const Zone& zone) : GlobalCZOp({&zone}) {}
37
+ };
38
+ } // namespace na
@@ -0,0 +1,58 @@
1
+ /*
2
+ * Copyright (c) 2023 - 2025 Chair for Design Automation, TUM
3
+ * Copyright (c) 2025 Munich Quantum Software Company GmbH
4
+ * All rights reserved.
5
+ *
6
+ * SPDX-License-Identifier: MIT
7
+ *
8
+ * Licensed under the MIT License
9
+ */
10
+
11
+ /** @file
12
+ * @brief Defines a class for representing global operations in the
13
+ * NAComputation.
14
+ */
15
+
16
+ #pragma once
17
+
18
+ #include "ir/Definitions.hpp"
19
+ #include "na/entities/Zone.hpp"
20
+ #include "na/operations/Op.hpp"
21
+
22
+ #include <string>
23
+ #include <utility>
24
+ #include <vector>
25
+
26
+ namespace na {
27
+ /// Represents a global operation in the NAComputation.
28
+ /// @details Global operations are applied to entire zones instead of to
29
+ /// individual atoms.
30
+ class GlobalOp : public Op {
31
+ protected:
32
+ /// The name of the operation.
33
+ std::string name_;
34
+ /// The parameters of the operation.
35
+ std::vector<qc::fp> params_;
36
+ /// The zones the operation is applied to.
37
+ std::vector<const Zone*> zones_;
38
+
39
+ /// Creates a new global operation in the given zone with the given
40
+ /// parameters.
41
+ /// @param zones The zones the operation is applied to.
42
+ /// @param params The parameters of the operation.
43
+ GlobalOp(std::vector<const Zone*> zones, std::vector<qc::fp> params)
44
+ : params_(std::move(params)), zones_(std::move(zones)) {}
45
+
46
+ public:
47
+ GlobalOp() = delete;
48
+
49
+ /// Returns the parameters of the operation.
50
+ [[nodiscard]] auto getParams() const -> auto& { return params_; }
51
+
52
+ /// Returns the zone the operation is applied to.
53
+ [[nodiscard]] auto getZones() const -> auto& { return zones_; }
54
+
55
+ /// Returns a string representation of the operation.
56
+ [[nodiscard]] auto toString() const -> std::string override;
57
+ };
58
+ } // namespace na
@@ -0,0 +1,42 @@
1
+ /*
2
+ * Copyright (c) 2023 - 2025 Chair for Design Automation, TUM
3
+ * Copyright (c) 2025 Munich Quantum Software Company GmbH
4
+ * All rights reserved.
5
+ *
6
+ * SPDX-License-Identifier: MIT
7
+ *
8
+ * Licensed under the MIT License
9
+ */
10
+
11
+ /** @file
12
+ * @brief Defines a class for representing global RY operations.
13
+ */
14
+
15
+ #pragma once
16
+
17
+ #include "ir/Definitions.hpp"
18
+ #include "na/entities/Zone.hpp"
19
+ #include "na/operations/GlobalOp.hpp"
20
+
21
+ #include <utility>
22
+ #include <vector>
23
+
24
+ namespace na {
25
+ /// Represents a global RY operation in the NAComputation.
26
+ class GlobalRYOp final : public GlobalOp {
27
+ public:
28
+ /// Creates a new RY operation in the given zones with the given angle.
29
+ /// @param zones The zones the operation is applied to.
30
+ /// @param angle The angle of the operation.
31
+ GlobalRYOp(std::vector<const Zone*> zones, const qc::fp angle)
32
+ : GlobalOp(std::move(zones), {angle}) {
33
+ name_ = "ry";
34
+ }
35
+
36
+ /// Creates a new RY operation in the given zone with the given angle.
37
+ /// @param zone The zone the operation is applied to.
38
+ /// @param angle The angle of the operation.
39
+ GlobalRYOp(const Zone& zone, const qc::fp angle)
40
+ : GlobalRYOp({&zone}, angle) {}
41
+ };
42
+ } // namespace na
@@ -0,0 +1,89 @@
1
+ /*
2
+ * Copyright (c) 2023 - 2025 Chair for Design Automation, TUM
3
+ * Copyright (c) 2025 Munich Quantum Software Company GmbH
4
+ * All rights reserved.
5
+ *
6
+ * SPDX-License-Identifier: MIT
7
+ *
8
+ * Licensed under the MIT License
9
+ */
10
+
11
+ /** @file
12
+ * @brief Defines a class for representing load operations.
13
+ */
14
+
15
+ #pragma once
16
+
17
+ #include "na/entities/Atom.hpp"
18
+ #include "na/entities/Location.hpp"
19
+ #include "na/operations/ShuttlingOp.hpp"
20
+
21
+ #include <optional>
22
+ #include <stdexcept>
23
+ #include <string>
24
+ #include <utility>
25
+ #include <vector>
26
+
27
+ namespace na {
28
+ /// Represents a load operation in the NAComputation.
29
+ /// @details Before an atom can be moved, it must be loaded, i.e., transferred
30
+ /// from a static SLM to an adjustable AOD trap.
31
+ class LoadOp final : public ShuttlingOp {
32
+ protected:
33
+ /// The target locations to load the atoms to.
34
+ std::optional<std::vector<Location>> targetLocations_ = std::nullopt;
35
+
36
+ public:
37
+ /// Creates a new load operation with the given atoms and target locations.
38
+ /// @details The target locations can be set if the loading operation contains
39
+ /// a certain offset.
40
+ /// @param atoms The atoms to load.
41
+ /// @param targetLocations The target locations to load the atoms to.
42
+ LoadOp(std::vector<const Atom*> atoms, std::vector<Location> targetLocations)
43
+ : ShuttlingOp(std::move(atoms)),
44
+ targetLocations_(std::move(targetLocations)) {
45
+ if (atoms_.size() != targetLocations_->size()) {
46
+ throw std::invalid_argument(
47
+ "Number of atoms and target locations must be equal.");
48
+ }
49
+ }
50
+
51
+ /// Creates a new load operation with the given atoms.
52
+ /// @details This constructor is used if the target locations are not set,
53
+ /// i.e., the load operation does not incorporate any offset.
54
+ /// @param atoms The atoms to load.
55
+ explicit LoadOp(std::vector<const Atom*> atoms)
56
+ : ShuttlingOp(std::move(atoms)) {}
57
+
58
+ /// Creates a new load operation with the given atom and target location.
59
+ /// @details The target locations can be set if the loading operation contains
60
+ /// a certain offset.
61
+ /// @param atom The atom to load.
62
+ /// @param targetLocation The target location to load the atom to.
63
+ LoadOp(const Atom& atom, const Location& targetLocation)
64
+ : LoadOp({&atom}, {targetLocation}) {}
65
+
66
+ /// Creates a new load operation with the given atom.
67
+ /// @details This constructor is used if the target locations are not set,
68
+ /// i.e., the load operation does not incorporate any offset.
69
+ /// @param atom The atom to load.
70
+ explicit LoadOp(const Atom& atom) : LoadOp({&atom}) {}
71
+
72
+ /// Returns whether the load operation has target locations set.
73
+ [[nodiscard]] auto hasTargetLocations() const -> bool override {
74
+ return targetLocations_.has_value();
75
+ }
76
+
77
+ /// Returns the target locations of the load operation.
78
+ [[nodiscard]] auto getTargetLocations() const
79
+ -> const std::vector<Location>& override {
80
+ if (!targetLocations_.has_value()) {
81
+ throw std::logic_error("Operation has no target locations set.");
82
+ }
83
+ return *targetLocations_;
84
+ }
85
+
86
+ /// Returns a string representation of the load operation.
87
+ [[nodiscard]] auto toString() const -> std::string override;
88
+ };
89
+ } // namespace na
@@ -0,0 +1,56 @@
1
+ /*
2
+ * Copyright (c) 2023 - 2025 Chair for Design Automation, TUM
3
+ * Copyright (c) 2025 Munich Quantum Software Company GmbH
4
+ * All rights reserved.
5
+ *
6
+ * SPDX-License-Identifier: MIT
7
+ *
8
+ * Licensed under the MIT License
9
+ */
10
+
11
+ /** @file
12
+ * @brief Defines a class for representing local operations in the
13
+ * NAComputation.
14
+ */
15
+
16
+ #pragma once
17
+
18
+ #include "ir/Definitions.hpp"
19
+ #include "na/entities/Atom.hpp"
20
+ #include "na/operations/Op.hpp"
21
+
22
+ #include <string>
23
+ #include <utility>
24
+ #include <vector>
25
+
26
+ namespace na {
27
+ /// Represents a local operation in the NAComputation.
28
+ /// @details A local operation is applied to individual atoms.
29
+ class LocalOp : public Op {
30
+ protected:
31
+ /// The name of the operation.
32
+ std::string name_;
33
+ /// The parameters of the operation.
34
+ std::vector<qc::fp> params_;
35
+ /// The atoms the operation is applied to.
36
+ std::vector<const Atom*> atoms_;
37
+
38
+ /// Creates a new local operation with the given atoms and parameters.
39
+ /// @param atoms The atoms the operation is applied to.
40
+ /// @param params The parameters of the operation.
41
+ LocalOp(std::vector<const Atom*> atoms, std::vector<qc::fp> params)
42
+ : params_(std::move(params)), atoms_(std::move(atoms)) {}
43
+
44
+ public:
45
+ LocalOp() = delete;
46
+
47
+ /// Returns the atoms the operation is applied to.
48
+ [[nodiscard]] auto getAtoms() const -> auto& { return atoms_; }
49
+
50
+ /// Returns the parameters of the operation.
51
+ [[nodiscard]] auto getParams() const -> auto& { return params_; }
52
+
53
+ /// Returns a string representation of the operation.
54
+ [[nodiscard]] auto toString() const -> std::string override;
55
+ };
56
+ } // namespace na
@@ -0,0 +1,42 @@
1
+ /*
2
+ * Copyright (c) 2023 - 2025 Chair for Design Automation, TUM
3
+ * Copyright (c) 2025 Munich Quantum Software Company GmbH
4
+ * All rights reserved.
5
+ *
6
+ * SPDX-License-Identifier: MIT
7
+ *
8
+ * Licensed under the MIT License
9
+ */
10
+
11
+ /** @file
12
+ * @brief Defines a class for representing local RZ operations.
13
+ */
14
+
15
+ #pragma once
16
+
17
+ #include "ir/Definitions.hpp"
18
+ #include "na/entities/Atom.hpp"
19
+ #include "na/operations/LocalOp.hpp"
20
+
21
+ #include <string>
22
+ #include <utility>
23
+ #include <vector>
24
+
25
+ namespace na {
26
+ /// Represents a local RZ operation in the NAComputation.
27
+ class LocalRZOp final : public LocalOp {
28
+ public:
29
+ /// Creates a new RZ operation with the given atoms and angle.
30
+ /// @param atoms The atoms the operation is applied to.
31
+ /// @param angle The angle of the operation.
32
+ LocalRZOp(std::vector<const Atom*> atoms, const qc::fp angle)
33
+ : LocalOp(std::move(atoms), {angle}) {
34
+ name_ = "rz";
35
+ }
36
+
37
+ /// Creates a new RZ operation with the given atom and angle.
38
+ /// @param atom The atom the operation is applied to.
39
+ /// @param angle The angle of the operation.
40
+ LocalRZOp(const Atom& atom, const qc::fp angle) : LocalRZOp({&atom}, angle) {}
41
+ };
42
+ } // namespace na
@@ -0,0 +1,49 @@
1
+ /*
2
+ * Copyright (c) 2023 - 2025 Chair for Design Automation, TUM
3
+ * Copyright (c) 2025 Munich Quantum Software Company GmbH
4
+ * All rights reserved.
5
+ *
6
+ * SPDX-License-Identifier: MIT
7
+ *
8
+ * Licensed under the MIT License
9
+ */
10
+
11
+ /** @file
12
+ * @brief Defines a class for representing local U3 operations.
13
+ */
14
+
15
+ #pragma once
16
+
17
+ #include "ir/Definitions.hpp"
18
+ #include "na/entities/Atom.hpp"
19
+ #include "na/operations/LocalOp.hpp"
20
+
21
+ #include <string>
22
+ #include <utility>
23
+ #include <vector>
24
+
25
+ namespace na {
26
+ /// Represents a local U3 operation in the NAComputation.
27
+ class LocalUOp final : public LocalOp {
28
+ public:
29
+ /// Creates a new U3 operation with the given atoms and angles.
30
+ /// @param atoms The atoms the operation is applied to.
31
+ /// @param theta The first parameter of the operation.
32
+ /// @param phi The second parameter of the operation.
33
+ /// @param lambda The third parameter of the operation.
34
+ LocalUOp(std::vector<const Atom*> atoms, const qc::fp theta, const qc::fp phi,
35
+ const qc::fp lambda)
36
+ : LocalOp(std::move(atoms), {theta, phi, lambda}) {
37
+ name_ = "u";
38
+ }
39
+
40
+ /// Creates a new U3 operation with the given atom and angle.
41
+ /// @param atom The atom the operation is applied to.
42
+ /// @param theta The first parameter of the operation.
43
+ /// @param phi The second parameter of the operation.
44
+ /// @param lambda The third parameter of the operation.
45
+ LocalUOp(const Atom& atom, const qc::fp theta, const qc::fp phi,
46
+ const qc::fp lambda)
47
+ : LocalUOp({&atom}, theta, phi, lambda) {}
48
+ };
49
+ } // namespace na
@@ -0,0 +1,66 @@
1
+ /*
2
+ * Copyright (c) 2023 - 2025 Chair for Design Automation, TUM
3
+ * Copyright (c) 2025 Munich Quantum Software Company GmbH
4
+ * All rights reserved.
5
+ *
6
+ * SPDX-License-Identifier: MIT
7
+ *
8
+ * Licensed under the MIT License
9
+ */
10
+
11
+ /** @file
12
+ * @brief Defines a class for representing move operations.
13
+ */
14
+
15
+ #pragma once
16
+
17
+ #include "na/entities/Atom.hpp"
18
+ #include "na/entities/Location.hpp"
19
+ #include "na/operations/ShuttlingOp.hpp"
20
+
21
+ #include <stdexcept>
22
+ #include <string>
23
+ #include <utility>
24
+ #include <vector>
25
+
26
+ namespace na {
27
+ /// Represents a move operation in the NAComputation.
28
+ class MoveOp final : public ShuttlingOp {
29
+ protected:
30
+ /// The target locations to move the atoms to.
31
+ std::vector<Location> targetLocations_;
32
+
33
+ public:
34
+ /// Creates a new move operation with the given atoms and target locations.
35
+ /// @param atoms The atoms to move.
36
+ /// @param targetLocations The target locations to move the atoms to.
37
+ MoveOp(std::vector<const Atom*> atoms, std::vector<Location> targetLocations)
38
+ : ShuttlingOp(std::move(atoms)),
39
+ targetLocations_(std::move(targetLocations)) {
40
+ if (atoms_.size() != targetLocations_.size()) {
41
+ throw std::invalid_argument(
42
+ "Number of atoms and target locations must be equal.");
43
+ }
44
+ }
45
+
46
+ /// Creates a new move operation with the given atom and target location.
47
+ /// @param atom The atom to move.
48
+ /// @param targetLocation The target location to move the atom to.
49
+ MoveOp(const Atom& atom, const Location& targetLocation)
50
+ : MoveOp({&atom}, {targetLocation}) {}
51
+
52
+ /// Returns whether the move operation has target locations set.
53
+ [[nodiscard]] auto hasTargetLocations() const -> bool override {
54
+ return true;
55
+ }
56
+
57
+ /// Returns the target locations of the move operation.
58
+ [[nodiscard]] auto getTargetLocations() const -> const
59
+ decltype(targetLocations_)& override {
60
+ return targetLocations_;
61
+ }
62
+
63
+ /// Returns a string representation of the operation.
64
+ [[nodiscard]] auto toString() const -> std::string override;
65
+ };
66
+ } // namespace na
@@ -0,0 +1,62 @@
1
+ /*
2
+ * Copyright (c) 2023 - 2025 Chair for Design Automation, TUM
3
+ * Copyright (c) 2025 Munich Quantum Software Company GmbH
4
+ * All rights reserved.
5
+ *
6
+ * SPDX-License-Identifier: MIT
7
+ *
8
+ * Licensed under the MIT License
9
+ */
10
+
11
+ /** @file
12
+ * @brief Defines the base class for all operations in the NAComputation.
13
+ */
14
+
15
+ #pragma once
16
+
17
+ #include <ostream>
18
+ #include <string>
19
+
20
+ namespace na {
21
+ /// This is the base class for all operations in the NAComputation.
22
+ class Op {
23
+ public:
24
+ /// Default constructor.
25
+ Op() = default;
26
+
27
+ /// Virtual destructor.
28
+ virtual ~Op() = default;
29
+
30
+ /// Returns a string representation of the operation.
31
+ [[nodiscard]] virtual auto toString() const -> std::string = 0;
32
+
33
+ /// Prints the operation to the given output stream.
34
+ /// @param os The output stream to print the operation to.
35
+ /// @param obj The operation to print.
36
+ /// @return The output stream after printing the operation.
37
+ friend auto operator<<(std::ostream& os, const Op& obj) -> std::ostream& {
38
+ return os << obj.toString(); // Using toString() method
39
+ }
40
+
41
+ /// Checks if the operation is of the given type.
42
+ /// @tparam T The type to check for.
43
+ /// @return True if the operation is of the given type, false otherwise.
44
+ template <class T> [[nodiscard]] auto is() const -> bool {
45
+ return dynamic_cast<const T*>(this) != nullptr;
46
+ }
47
+
48
+ /// Casts the operation to the given type.
49
+ /// @tparam T The type to cast to.
50
+ /// @return A reference to the operation as the given type.
51
+ template <class T> [[nodiscard]] auto as() -> T& {
52
+ return dynamic_cast<T&>(*this);
53
+ }
54
+
55
+ /// Casts the operation to the given type.
56
+ /// @tparam T The type to cast to.
57
+ /// @return A const reference to the operation as the given type.
58
+ template <class T> [[nodiscard]] auto as() const -> const T& {
59
+ return dynamic_cast<const T&>(*this);
60
+ }
61
+ };
62
+ } // namespace na
@@ -0,0 +1,51 @@
1
+ /*
2
+ * Copyright (c) 2023 - 2025 Chair for Design Automation, TUM
3
+ * Copyright (c) 2025 Munich Quantum Software Company GmbH
4
+ * All rights reserved.
5
+ *
6
+ * SPDX-License-Identifier: MIT
7
+ *
8
+ * Licensed under the MIT License
9
+ */
10
+
11
+ /** @file
12
+ * @brief Defines a base class for representing shuttling operations.
13
+ */
14
+
15
+ #pragma once
16
+
17
+ #include "na/entities/Atom.hpp"
18
+ #include "na/entities/Location.hpp"
19
+ #include "na/operations/Op.hpp"
20
+
21
+ #include <utility>
22
+ #include <vector>
23
+
24
+ namespace na {
25
+ /// Represents a shuttling operation in the NAComputation.
26
+ /// @details A shuttling operation is the super class for all shuttling-related
27
+ /// operations, i.e., load, store, and move operations.
28
+ class ShuttlingOp : public Op {
29
+ protected:
30
+ /// The atoms the operation is applied to.
31
+ std::vector<const Atom*> atoms_;
32
+
33
+ /// Creates a new shuttling operation with the given atoms.
34
+ /// @param atoms The atoms the operation is applied to.
35
+ explicit ShuttlingOp(std::vector<const Atom*> atoms)
36
+ : atoms_(std::move(atoms)) {}
37
+
38
+ public:
39
+ ShuttlingOp() = delete;
40
+
41
+ /// Returns the atoms the operation is applied to.
42
+ [[nodiscard]] auto getAtoms() const -> auto& { return atoms_; }
43
+
44
+ /// Returns whether the shuttling operation has target locations set.
45
+ [[nodiscard]] virtual auto hasTargetLocations() const -> bool = 0;
46
+
47
+ /// Returns the target locations of the shuttling operation.
48
+ [[nodiscard]] virtual auto getTargetLocations() const
49
+ -> const std::vector<Location>& = 0;
50
+ };
51
+ } // namespace na
@@ -0,0 +1,87 @@
1
+ /*
2
+ * Copyright (c) 2023 - 2025 Chair for Design Automation, TUM
3
+ * Copyright (c) 2025 Munich Quantum Software Company GmbH
4
+ * All rights reserved.
5
+ *
6
+ * SPDX-License-Identifier: MIT
7
+ *
8
+ * Licensed under the MIT License
9
+ */
10
+
11
+ /** @file
12
+ * @brief Defines a class for representing store operations.
13
+ */
14
+
15
+ #pragma once
16
+
17
+ #include "na/entities/Atom.hpp"
18
+ #include "na/entities/Location.hpp"
19
+ #include "na/operations/ShuttlingOp.hpp"
20
+
21
+ #include <optional>
22
+ #include <stdexcept>
23
+ #include <string>
24
+ #include <utility>
25
+ #include <vector>
26
+
27
+ namespace na {
28
+ /// Represents a store operation in the NAComputation.
29
+ class StoreOp final : public ShuttlingOp {
30
+ protected:
31
+ /// The target locations to store the atoms to.
32
+ std::optional<std::vector<Location>> targetLocations_ = std::nullopt;
33
+
34
+ public:
35
+ /// Creates a new store operation with the given atoms and target locations.
36
+ /// @details The target locations can be used if the store operation
37
+ /// incorporates some offset.
38
+ /// @param atoms The atoms to store.
39
+ /// @param targetLocations The target locations to store the atoms to.
40
+ StoreOp(std::vector<const Atom*> atoms, std::vector<Location> targetLocations)
41
+ : ShuttlingOp(std::move(atoms)),
42
+ targetLocations_(std::move(targetLocations)) {
43
+ if (atoms_.size() != targetLocations_->size()) {
44
+ throw std::invalid_argument(
45
+ "Number of atoms and target locations must be equal.");
46
+ }
47
+ }
48
+
49
+ /// Creates a new store operation with the given atoms and target locations.
50
+ /// @details Here, the target locations are not used, i.e., this store does
51
+ /// not contain any offset.
52
+ /// @param atoms The atoms to store.
53
+ explicit StoreOp(std::vector<const Atom*> atoms)
54
+ : ShuttlingOp(std::move(atoms)) {}
55
+
56
+ /// Creates a new store operation with the given atom and target location.
57
+ /// @details The target location can be used if the store operation
58
+ /// incorporates some offset.
59
+ /// @param atom The atom to store.
60
+ /// @param targetLocation The target location to store the atom to.
61
+ StoreOp(const Atom& atom, const Location& targetLocation)
62
+ : StoreOp({&atom}, {targetLocation}) {}
63
+
64
+ /// Creates a new store operation with the given atom and target locations.
65
+ /// @details Here, the target locations are not used, i.e., this store does
66
+ /// not contain any offset.
67
+ /// @param atom The atom to store.
68
+ explicit StoreOp(const Atom& atom) : StoreOp({&atom}) {}
69
+
70
+ /// Returns whether the store operation has target locations set.
71
+ [[nodiscard]] auto hasTargetLocations() const -> bool override {
72
+ return targetLocations_.has_value();
73
+ }
74
+
75
+ /// Returns the target locations of the store operation.
76
+ [[nodiscard]] auto getTargetLocations() const
77
+ -> const std::vector<Location>& override {
78
+ if (!targetLocations_.has_value()) {
79
+ throw std::logic_error("Operation has no target locations set.");
80
+ }
81
+ return *targetLocations_;
82
+ }
83
+
84
+ /// Returns a string representation of the operation.
85
+ [[nodiscard]] auto toString() const -> std::string override;
86
+ };
87
+ } // namespace na