mqt-core 3.3.2__cp313-cp313t-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.cp313t-win_amd64.pyd +0 -0
  21. mqt/core/dd.pyi +1016 -0
  22. mqt/core/dd_evaluation.py +368 -0
  23. mqt/core/fomac.cp313t-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.cp313t-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.cp313t-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,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 "Definitions.hpp"
14
+
15
+ #include <cstddef>
16
+ #include <functional>
17
+ #include <stdexcept>
18
+ #include <string>
19
+ #include <unordered_map>
20
+ #include <utility>
21
+
22
+ namespace qc {
23
+
24
+ template <typename BitType> class Register {
25
+ public:
26
+ Register(const BitType regStartIndex, const std::size_t regSize,
27
+ std::string regName)
28
+ : startIndex(regStartIndex), size(regSize), name(std::move(regName)) {}
29
+ virtual ~Register() = default;
30
+
31
+ [[nodiscard]] const std::string& getName() const noexcept { return name; }
32
+ [[nodiscard]] std::size_t getSize() const noexcept { return size; }
33
+ [[nodiscard]] std::size_t& getSize() noexcept { return size; }
34
+ [[nodiscard]] BitType getStartIndex() const noexcept { return startIndex; }
35
+ [[nodiscard]] BitType& getStartIndex() noexcept { return startIndex; }
36
+ [[nodiscard]] BitType getEndIndex() const noexcept {
37
+ return static_cast<BitType>(startIndex + size - 1);
38
+ }
39
+
40
+ [[nodiscard]] bool operator==(const Register& other) const {
41
+ return name == other.name && size == other.size;
42
+ }
43
+ [[nodiscard]] bool operator!=(const Register& other) const {
44
+ return !(*this == other);
45
+ }
46
+
47
+ [[nodiscard]] bool contains(const BitType index) const {
48
+ return startIndex <= index && index < startIndex + size;
49
+ }
50
+
51
+ [[nodiscard]] BitType getLocalIndex(const BitType globalIndex) const {
52
+ if (!contains(globalIndex)) {
53
+ throw std::out_of_range("Index out of range");
54
+ }
55
+ return globalIndex - startIndex;
56
+ }
57
+
58
+ [[nodiscard]] BitType getGlobalIndex(const BitType localIndex) const {
59
+ if (localIndex >= size) {
60
+ throw std::out_of_range("Index out of range");
61
+ }
62
+ return startIndex + localIndex;
63
+ }
64
+
65
+ [[nodiscard]] std::string toString(const BitType globalIndex) const {
66
+ return name + "[" + std::to_string(getLocalIndex(globalIndex)) + "]";
67
+ }
68
+
69
+ [[nodiscard]] BitType operator[](const BitType localIndex) const {
70
+ return getGlobalIndex(localIndex);
71
+ }
72
+
73
+ private:
74
+ BitType startIndex;
75
+ std::size_t size;
76
+ std::string name;
77
+ };
78
+
79
+ class QuantumRegister final : public Register<Qubit> {
80
+ public:
81
+ QuantumRegister(const Qubit regStartIndex, const std::size_t regSize,
82
+ const std::string& regName = "")
83
+ : Register(regStartIndex, regSize,
84
+ regName.empty() ? generateName() : regName) {}
85
+
86
+ protected:
87
+ static std::string generateName() {
88
+ static std::size_t counter = 0;
89
+ return "q" + std::to_string(counter++);
90
+ }
91
+ };
92
+
93
+ using QubitIndexToRegisterMap =
94
+ std::unordered_map<Qubit, std::pair<const QuantumRegister&, std::string>>;
95
+
96
+ class ClassicalRegister final : public Register<Bit> {
97
+ public:
98
+ ClassicalRegister(const Bit regStartIndex, const std::size_t regSize,
99
+ const std::string& regName = "")
100
+ : Register(regStartIndex, regSize,
101
+ regName.empty() ? generateName() : regName) {}
102
+
103
+ protected:
104
+ static std::string generateName() {
105
+ static std::size_t counter = 0;
106
+ return "c" + std::to_string(counter++);
107
+ }
108
+ };
109
+
110
+ using BitIndexToRegisterMap =
111
+ std::unordered_map<Bit, std::pair<const ClassicalRegister&, std::string>>;
112
+
113
+ } // namespace qc
114
+
115
+ template <> struct std::hash<qc::QuantumRegister> {
116
+ std::size_t operator()(const qc::QuantumRegister& reg) const noexcept {
117
+ return qc::combineHash(reg.getStartIndex(), reg.getSize());
118
+ }
119
+ };
120
+
121
+ template <> struct std::hash<qc::ClassicalRegister> {
122
+ std::size_t operator()(const qc::ClassicalRegister& reg) const noexcept {
123
+ return qc::combineHash(reg.getStartIndex(), reg.getSize());
124
+ }
125
+ };
@@ -0,0 +1,43 @@
1
+
2
+ #ifndef MQT_CORE_IR_EXPORT_H
3
+ #define MQT_CORE_IR_EXPORT_H
4
+
5
+ #ifdef MQT_CORE_IR_STATIC_DEFINE
6
+ # define MQT_CORE_IR_EXPORT
7
+ # define MQT_CORE_IR_NO_EXPORT
8
+ #else
9
+ # ifndef MQT_CORE_IR_EXPORT
10
+ # ifdef mqt_core_ir_EXPORTS
11
+ /* We are building this library */
12
+ # define MQT_CORE_IR_EXPORT __declspec(dllexport)
13
+ # else
14
+ /* We are using this library */
15
+ # define MQT_CORE_IR_EXPORT __declspec(dllimport)
16
+ # endif
17
+ # endif
18
+
19
+ # ifndef MQT_CORE_IR_NO_EXPORT
20
+ # define MQT_CORE_IR_NO_EXPORT
21
+ # endif
22
+ #endif
23
+
24
+ #ifndef MQT_CORE_IR_DEPRECATED
25
+ # define MQT_CORE_IR_DEPRECATED __declspec(deprecated)
26
+ #endif
27
+
28
+ #ifndef MQT_CORE_IR_DEPRECATED_EXPORT
29
+ # define MQT_CORE_IR_DEPRECATED_EXPORT MQT_CORE_IR_EXPORT MQT_CORE_IR_DEPRECATED
30
+ #endif
31
+
32
+ #ifndef MQT_CORE_IR_DEPRECATED_NO_EXPORT
33
+ # define MQT_CORE_IR_DEPRECATED_NO_EXPORT MQT_CORE_IR_NO_EXPORT MQT_CORE_IR_DEPRECATED
34
+ #endif
35
+
36
+ /* NOLINTNEXTLINE(readability-avoid-unconditional-preprocessor-if) */
37
+ #if 0 /* DEFINE_NO_DEPRECATED */
38
+ # ifndef MQT_CORE_IR_NO_DEPRECATED
39
+ # define MQT_CORE_IR_NO_DEPRECATED
40
+ # endif
41
+ #endif
42
+
43
+ #endif /* MQT_CORE_IR_EXPORT_H */
@@ -0,0 +1,92 @@
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 "ir/Definitions.hpp"
14
+ #include "ir/Register.hpp"
15
+ #include "ir/operations/Control.hpp"
16
+ #include "ir/operations/OpType.hpp"
17
+ #include "ir/operations/Operation.hpp"
18
+
19
+ #include <cstddef>
20
+ #include <cstdint>
21
+ #include <memory>
22
+ #include <ostream>
23
+ #include <string>
24
+ #include <tuple>
25
+ #include <vector>
26
+
27
+ namespace na {
28
+
29
+ enum class Dimension : std::uint8_t { X = 0, Y = 1 };
30
+ struct SingleOperation {
31
+ Dimension dir;
32
+ qc::fp start;
33
+ qc::fp end;
34
+
35
+ SingleOperation(const Dimension d, const qc::fp s, const qc::fp e)
36
+ : dir(d), start(s), end(e) {}
37
+
38
+ [[nodiscard]] std::string toQASMString() const;
39
+ };
40
+ class AodOperation final : public qc::Operation {
41
+ std::vector<SingleOperation> operations;
42
+
43
+ static std::vector<Dimension>
44
+ convertToDimension(const std::vector<uint32_t>& dirs);
45
+
46
+ public:
47
+ AodOperation() = default;
48
+ AodOperation(qc::OpType s, std::vector<qc::Qubit> qubits,
49
+ const std::vector<Dimension>& dirs,
50
+ const std::vector<qc::fp>& starts,
51
+ const std::vector<qc::fp>& ends);
52
+ AodOperation(qc::OpType s, std::vector<qc::Qubit> qubits,
53
+ const std::vector<uint32_t>& dirs,
54
+ const std::vector<qc::fp>& starts,
55
+ const std::vector<qc::fp>& ends);
56
+ AodOperation(const std::string& typeName, std::vector<qc::Qubit> qubits,
57
+ const std::vector<uint32_t>& dirs,
58
+ const std::vector<qc::fp>& starts,
59
+ const std::vector<qc::fp>& ends);
60
+ AodOperation(qc::OpType s, std::vector<qc::Qubit> qubits,
61
+ const std::vector<std::tuple<Dimension, qc::fp, qc::fp>>& ops);
62
+ AodOperation(qc::OpType type, std::vector<qc::Qubit> targets,
63
+ std::vector<SingleOperation> operations);
64
+
65
+ [[nodiscard]] std::unique_ptr<Operation> clone() const override {
66
+ return std::make_unique<AodOperation>(*this);
67
+ }
68
+
69
+ void addControl([[maybe_unused]] qc::Control c) override {}
70
+ void clearControls() override {}
71
+ void removeControl([[maybe_unused]] qc::Control c) override {}
72
+ qc::Controls::iterator
73
+ removeControl(const qc::Controls::iterator it) override {
74
+ return controls.erase(it);
75
+ }
76
+
77
+ [[nodiscard]] std::vector<qc::fp> getEnds(Dimension dir) const;
78
+
79
+ [[nodiscard]] std::vector<qc::fp> getStarts(Dimension dir) const;
80
+
81
+ [[nodiscard]] qc::fp getMaxDistance(Dimension dir) const;
82
+
83
+ [[nodiscard]] std::vector<qc::fp> getDistances(Dimension dir) const;
84
+
85
+ void dumpOpenQASM(std::ostream& of,
86
+ const qc::QubitIndexToRegisterMap& qubitMap,
87
+ const qc::BitIndexToRegisterMap& bitMap, std::size_t indent,
88
+ bool openQASM3) const override;
89
+
90
+ void invert() override;
91
+ };
92
+ } // namespace na
@@ -0,0 +1,212 @@
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 "Control.hpp"
14
+ #include "Operation.hpp"
15
+ #include "ir/Definitions.hpp"
16
+ #include "ir/Permutation.hpp"
17
+ #include "ir/Register.hpp"
18
+
19
+ #include <cstddef>
20
+ #include <functional>
21
+ #include <memory>
22
+ #include <ostream>
23
+ #include <set>
24
+ #include <vector>
25
+
26
+ namespace qc {
27
+
28
+ class CompoundOperation final : public Operation {
29
+ public:
30
+ using iterator = std::vector<std::unique_ptr<Operation>>::iterator;
31
+ using const_iterator =
32
+ std::vector<std::unique_ptr<Operation>>::const_iterator;
33
+
34
+ private:
35
+ std::vector<std::unique_ptr<Operation>> ops;
36
+ bool customGate;
37
+
38
+ public:
39
+ explicit CompoundOperation(bool isCustom = false);
40
+
41
+ explicit CompoundOperation(
42
+ std::vector<std::unique_ptr<Operation>>&& operations,
43
+ bool isCustom = false);
44
+
45
+ CompoundOperation(const CompoundOperation& co);
46
+
47
+ CompoundOperation& operator=(const CompoundOperation& co);
48
+
49
+ [[nodiscard]] std::unique_ptr<Operation> clone() const override;
50
+
51
+ [[nodiscard]] size_t getNqubits() const override;
52
+
53
+ [[nodiscard]] bool isCompoundOperation() const noexcept override;
54
+
55
+ [[nodiscard]] bool isNonUnitaryOperation() const override;
56
+
57
+ [[nodiscard]] bool isSymbolicOperation() const override;
58
+
59
+ [[nodiscard]] bool isCustomGate() const noexcept;
60
+
61
+ [[nodiscard]] bool isGlobal(size_t nQubits) const noexcept override;
62
+
63
+ [[nodiscard]] bool isClifford() const override;
64
+
65
+ void addControl(Control c) override;
66
+
67
+ void clearControls() override;
68
+
69
+ void removeControl(Control c) override;
70
+
71
+ Controls::iterator removeControl(Controls::iterator it) override;
72
+
73
+ [[nodiscard]] bool equals(const Operation& op, const Permutation& perm1,
74
+ const Permutation& perm2) const override;
75
+ [[nodiscard]] bool equals(const Operation& operation) const override;
76
+
77
+ std::ostream& print(std::ostream& os, const Permutation& permutation,
78
+ std::size_t prefixWidth,
79
+ std::size_t nqubits) const override;
80
+
81
+ [[nodiscard]] bool actsOn(Qubit i) const override;
82
+
83
+ void addDepthContribution(std::vector<std::size_t>& depths) const override;
84
+
85
+ void dumpOpenQASM(std::ostream& of, const QubitIndexToRegisterMap& qubitMap,
86
+ const BitIndexToRegisterMap& bitMap, std::size_t indent,
87
+ bool openQASM3) const override;
88
+
89
+ std::vector<std::unique_ptr<Operation>>& getOps() noexcept { return ops; }
90
+
91
+ [[nodiscard]] auto getUsedQubitsPermuted(const Permutation& perm) const
92
+ -> std::set<Qubit> override;
93
+
94
+ [[nodiscard]] auto commutesAtQubit(const Operation& other,
95
+ const Qubit& qubit) const -> bool override;
96
+
97
+ /**
98
+ * This refines the inherited method because the inherited method leads to
99
+ * false negatives
100
+ */
101
+ [[nodiscard]] auto isInverseOf(const Operation& other) const -> bool override;
102
+
103
+ void invert() override;
104
+
105
+ void apply(const Permutation& permutation) override;
106
+
107
+ /**
108
+ * @brief Merge another compound operation into this one.
109
+ * @details This transfers ownership of the operations from the other compound
110
+ * operation to this one. The other compound operation will be empty after
111
+ * this operation.
112
+ * @param op the compound operation to merge into this one
113
+ */
114
+ void merge(CompoundOperation& op);
115
+
116
+ /**
117
+ * @brief Check whether this operation can be collapsed into a single
118
+ * operation.
119
+ * @return true if this operation can be collapsed into a single operation,
120
+ * false otherwise
121
+ */
122
+ [[nodiscard]] bool isConvertibleToSingleOperation() const;
123
+
124
+ /**
125
+ * @brief Collapse this operation into a single operation.
126
+ * @details This operation must be convertible to a single operation.
127
+ * @return the collapsed operation
128
+ */
129
+ [[nodiscard]] std::unique_ptr<Operation> collapseToSingleOperation();
130
+
131
+ /**
132
+ * Pass-Through
133
+ */
134
+
135
+ // Iterators (pass-through)
136
+ auto begin() noexcept { return ops.begin(); }
137
+ [[nodiscard]] auto begin() const noexcept { return ops.begin(); }
138
+ [[nodiscard]] auto cbegin() const noexcept { return ops.cbegin(); }
139
+ auto end() noexcept { return ops.end(); }
140
+ [[nodiscard]] auto end() const noexcept { return ops.end(); }
141
+ [[nodiscard]] auto cend() const noexcept { return ops.cend(); }
142
+ auto rbegin() noexcept { return ops.rbegin(); }
143
+ [[nodiscard]] auto rbegin() const noexcept { return ops.rbegin(); }
144
+ [[nodiscard]] auto crbegin() const noexcept { return ops.crbegin(); }
145
+ auto rend() noexcept { return ops.rend(); }
146
+ [[nodiscard]] auto rend() const noexcept { return ops.rend(); }
147
+ [[nodiscard]] auto crend() const noexcept { return ops.crend(); }
148
+
149
+ // Capacity (pass-through)
150
+ [[nodiscard]] bool empty() const noexcept { return ops.empty(); }
151
+ [[nodiscard]] std::size_t size() const noexcept { return ops.size(); }
152
+ // NOLINTNEXTLINE(readability-identifier-naming)
153
+ [[nodiscard]] std::size_t max_size() const noexcept { return ops.max_size(); }
154
+ [[nodiscard]] std::size_t capacity() const noexcept { return ops.capacity(); }
155
+
156
+ void reserve(const std::size_t newCap) { ops.reserve(newCap); }
157
+ // NOLINTNEXTLINE(readability-identifier-naming)
158
+ void shrink_to_fit() { ops.shrink_to_fit(); }
159
+
160
+ // Modifiers (pass-through)
161
+ void clear() noexcept { ops.clear(); }
162
+ // NOLINTNEXTLINE(readability-identifier-naming)
163
+ void pop_back() { ops.pop_back(); }
164
+ void resize(const std::size_t count) { ops.resize(count); }
165
+ iterator erase(const const_iterator pos) { return ops.erase(pos); }
166
+ iterator erase(const const_iterator first, const const_iterator last) {
167
+ return ops.erase(first, last);
168
+ }
169
+
170
+ // NOLINTNEXTLINE(readability-identifier-naming)
171
+ template <class T, class... Args> void emplace_back(Args&&... args) {
172
+ ops.emplace_back(std::make_unique<T>(std::forward<Args>(args)...));
173
+ }
174
+
175
+ // NOLINTNEXTLINE(readability-identifier-naming)
176
+ template <class T> void emplace_back(std::unique_ptr<T>& op) {
177
+ ops.emplace_back(std::move(op));
178
+ }
179
+
180
+ // NOLINTNEXTLINE(readability-identifier-naming)
181
+ template <class T> void emplace_back(std::unique_ptr<T>&& op) {
182
+ ops.emplace_back(std::move(op));
183
+ }
184
+
185
+ template <class T, class... Args>
186
+ iterator insert(const_iterator iter, Args&&... args) {
187
+ return ops.insert(iter, std::make_unique<T>(std::forward<Args>(args)...));
188
+ }
189
+ template <class T>
190
+ iterator insert(const_iterator iter, std::unique_ptr<T>& op) {
191
+ return ops.insert(iter, std::move(op));
192
+ }
193
+ template <class T> iterator insert(const_iterator iter, T&& op) {
194
+ return ops.insert(iter, std::forward<decltype(op)>(op));
195
+ }
196
+
197
+ // Element access (pass-through)
198
+ [[nodiscard]] const auto& at(const std::size_t i) const { return ops.at(i); }
199
+ [[nodiscard]] auto& operator[](const std::size_t i) { return ops[i]; }
200
+ [[nodiscard]] const auto& operator[](const std::size_t i) const {
201
+ return ops[i];
202
+ }
203
+ [[nodiscard]] auto& front() { return ops.front(); }
204
+ [[nodiscard]] const auto& front() const { return ops.front(); }
205
+ [[nodiscard]] auto& back() { return ops.back(); }
206
+ [[nodiscard]] const auto& back() const { return ops.back(); }
207
+ };
208
+ } // namespace qc
209
+
210
+ template <> struct std::hash<qc::CompoundOperation> {
211
+ std::size_t operator()(const qc::CompoundOperation& co) const noexcept;
212
+ }; // namespace std
@@ -0,0 +1,142 @@
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 type for control qubits and some related functionality.
13
+ */
14
+
15
+ #pragma once
16
+
17
+ #include "ir/Definitions.hpp"
18
+
19
+ #include <cstddef>
20
+ #include <functional>
21
+ #include <set>
22
+ #include <sstream>
23
+ #include <string>
24
+
25
+ namespace qc {
26
+ /// Represents a control qubit as a qubit index and a control type.
27
+ struct Control {
28
+ /// The polarity of the control.
29
+ enum class Type : bool {
30
+ /// Positive controls trigger on \f$\ket{1}\f$.
31
+ Pos = true,
32
+ /// Negative controls trigger on \f$\ket{0}\f$.
33
+ Neg = false
34
+ };
35
+
36
+ /// The qubit that acts as a control.
37
+ Qubit qubit{};
38
+ /// The type of the control.
39
+ Type type = Type::Pos;
40
+
41
+ /// Get a string representation of the control.
42
+ [[nodiscard]] std::string toString() const {
43
+ std::ostringstream oss{};
44
+ oss << "Control(qubit=" << qubit << ", type_=\"";
45
+ if (type == Type::Pos) {
46
+ oss << "Pos";
47
+ } else {
48
+ oss << "Neg";
49
+ }
50
+ oss << "\")";
51
+ return oss.str();
52
+ }
53
+
54
+ // Explicitly allow implicit conversion from `Qubit` to `Control`
55
+ // NOLINTBEGIN(google-explicit-constructor)
56
+ /**
57
+ * @brief Construct a control qubit.
58
+ * @param q The qubit that acts as a control.
59
+ * @param t The type of the control. Defaults to `Type::Pos`.
60
+ * @note This constructor is not `explicit` to allow implicit conversion from
61
+ * `Qubit` to `Control`.
62
+ */
63
+ Control(const Qubit q = {}, const Type t = Type::Pos) : qubit(q), type(t) {}
64
+ // NOLINTEND(google-explicit-constructor)
65
+ };
66
+
67
+ /// Defines the order of controls based on their qubit index and type.
68
+ inline bool operator<(const Control& lhs, const Control& rhs) {
69
+ return lhs.qubit < rhs.qubit ||
70
+ (lhs.qubit == rhs.qubit && lhs.type < rhs.type);
71
+ }
72
+
73
+ /// operator== overload for `Control`
74
+ inline bool operator==(const Control& lhs, const Control& rhs) {
75
+ return lhs.qubit == rhs.qubit && lhs.type == rhs.type;
76
+ }
77
+
78
+ /// operator!= overload for `Control`
79
+ inline bool operator!=(const Control& lhs, const Control& rhs) {
80
+ return !(lhs == rhs);
81
+ }
82
+
83
+ /// Allows a set of @ref Control to be indexed by a `Qubit`
84
+ struct CompareControl {
85
+ using is_transparent [[maybe_unused]] = void;
86
+
87
+ bool operator()(const Control& lhs, const Control& rhs) const {
88
+ return lhs < rhs;
89
+ }
90
+
91
+ bool operator()(const Qubit lhs, const Control& rhs) const {
92
+ return lhs < rhs.qubit;
93
+ }
94
+
95
+ bool operator()(const Control& lhs, const Qubit rhs) const {
96
+ return lhs.qubit < rhs;
97
+ }
98
+ };
99
+
100
+ /// Type alias for a set of control qubits.
101
+ using Controls = std::set<Control, CompareControl>;
102
+
103
+ /**
104
+ * @brief Inline namespace for control literals.
105
+ * @details Use `using namespace qc::literals` to enable the literals.
106
+ */
107
+ inline namespace literals {
108
+ // User-defined literals require unsigned long long int
109
+ // NOLINTBEGIN(google-runtime-int)
110
+
111
+ /**
112
+ * @brief User-defined literal for positive control qubits.
113
+ * @details This literal allows to create a positive control qubit from an
114
+ * unsigned integer, for example as `0_pc`.
115
+ * @param q Index of the qubit that acts as a control.
116
+ * @return A positive control qubit.
117
+ */
118
+ inline Control operator""_pc(const unsigned long long int q) {
119
+ return {static_cast<Qubit>(q)};
120
+ }
121
+
122
+ /**
123
+ * @brief User-defined literal for negative control qubits.
124
+ * @details This literal allows to create a negative control qubit from an
125
+ * unsigned integer, for example as `0_nc`.
126
+ * @param q Index of the qubit that acts as a control.
127
+ * @return A negative control qubit.
128
+ */
129
+ inline Control operator""_nc(const unsigned long long int q) {
130
+ return {static_cast<Qubit>(q), Control::Type::Neg};
131
+ }
132
+ // NOLINTEND(google-runtime-int)
133
+ } // namespace literals
134
+ } // namespace qc
135
+
136
+ /// Hash function for `Control`
137
+ template <> struct std::hash<qc::Control> {
138
+ std::size_t operator()(const qc::Control& c) const noexcept {
139
+ return std::hash<qc::Qubit>{}(c.qubit) ^
140
+ std::hash<qc::Control::Type>{}(c.type);
141
+ }
142
+ };