mqt-core 3.1.0__cp312-cp312-win_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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.cp312-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.cp312-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,85 @@
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 "Statement.hpp"
14
+
15
+ #include <exception>
16
+ #include <memory>
17
+ #include <sstream>
18
+ #include <string>
19
+ #include <utility>
20
+
21
+ namespace qasm3 {
22
+ class CompilerError final : public std::exception {
23
+ public:
24
+ std::string message;
25
+ std::shared_ptr<DebugInfo> debugInfo;
26
+ mutable std::string cachedMessage;
27
+
28
+ CompilerError(std::string msg, std::shared_ptr<DebugInfo> debug)
29
+ : message(std::move(msg)), debugInfo(std::move(debug)) {}
30
+
31
+ [[nodiscard]] std::string toString() const {
32
+ std::stringstream ss{};
33
+ ss << debugInfo->toString();
34
+
35
+ auto parentDebugInfo = debugInfo->parent;
36
+ while (parentDebugInfo != nullptr) {
37
+ ss << "\n (included from " << parentDebugInfo->toString() << ")";
38
+ parentDebugInfo = parentDebugInfo->parent;
39
+ }
40
+
41
+ ss << ":\n" << message;
42
+
43
+ return ss.str();
44
+ }
45
+
46
+ [[nodiscard]] const char* what() const noexcept override {
47
+ cachedMessage = toString();
48
+ return cachedMessage.c_str();
49
+ }
50
+ };
51
+
52
+ class ConstEvalError final : public std::exception {
53
+ public:
54
+ std::string message;
55
+ mutable std::string cachedMessage;
56
+
57
+ explicit ConstEvalError(std::string msg) : message(std::move(msg)) {}
58
+
59
+ [[nodiscard]] std::string toString() const {
60
+ return "Constant Evaluation: " + message;
61
+ }
62
+
63
+ [[nodiscard]] const char* what() const noexcept override {
64
+ cachedMessage = toString();
65
+ return cachedMessage.c_str();
66
+ }
67
+ };
68
+
69
+ class TypeCheckError final : public std::exception {
70
+ public:
71
+ std::string message;
72
+ mutable std::string cachedMessage;
73
+
74
+ explicit TypeCheckError(std::string msg) : message(std::move(msg)) {}
75
+
76
+ [[nodiscard]] std::string toString() const {
77
+ return "Type Check Error: " + message;
78
+ }
79
+
80
+ [[nodiscard]] const char* what() const noexcept override {
81
+ cachedMessage = toString();
82
+ return cachedMessage.c_str();
83
+ }
84
+ };
85
+ } // namespace qasm3
@@ -0,0 +1,65 @@
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 "Statement_fwd.hpp"
14
+ #include "ir/operations/OpType.hpp"
15
+
16
+ #include <cstddef>
17
+ #include <memory>
18
+ #include <string>
19
+ #include <utility>
20
+ #include <vector>
21
+
22
+ namespace qasm3 {
23
+ struct GateInfo {
24
+ size_t nControls;
25
+ size_t nTargets;
26
+ size_t nParameters;
27
+ qc::OpType type;
28
+ };
29
+
30
+ struct Gate {
31
+ virtual ~Gate() = default;
32
+
33
+ virtual size_t getNControls() = 0;
34
+ virtual size_t getNTargets() = 0;
35
+ virtual size_t getNParameters() = 0;
36
+ };
37
+
38
+ struct StandardGate final : Gate {
39
+ GateInfo info;
40
+
41
+ explicit StandardGate(const GateInfo& gateInfo) : info(gateInfo) {}
42
+
43
+ size_t getNControls() override { return info.nControls; }
44
+
45
+ size_t getNTargets() override { return info.nTargets; }
46
+ size_t getNParameters() override { return info.nParameters; }
47
+ };
48
+
49
+ struct CompoundGate final : Gate {
50
+ std::vector<std::string> parameterNames;
51
+ std::vector<std::string> targetNames;
52
+ std::vector<std::shared_ptr<QuantumStatement>> body;
53
+
54
+ explicit CompoundGate(
55
+ std::vector<std::string> parameters, std::vector<std::string> targets,
56
+ std::vector<std::shared_ptr<QuantumStatement>> bodyStatements)
57
+ : parameterNames(std::move(parameters)), targetNames(std::move(targets)),
58
+ body(std::move(bodyStatements)) {}
59
+
60
+ size_t getNControls() override { return 0; }
61
+
62
+ size_t getNTargets() override { return targetNames.size(); }
63
+ size_t getNParameters() override { return parameterNames.size(); }
64
+ };
65
+ } // namespace qasm3
@@ -0,0 +1,192 @@
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/Permutation.hpp"
15
+ #include "qasm3/InstVisitor.hpp"
16
+ #include "qasm3/NestedEnvironment.hpp"
17
+ #include "qasm3/Statement_fwd.hpp"
18
+ #include "qasm3/passes/ConstEvalPass.hpp"
19
+ #include "qasm3/passes/TypeCheckPass.hpp"
20
+
21
+ #include <cstddef>
22
+ #include <cstdint>
23
+ #include <iosfwd>
24
+ #include <map>
25
+ #include <memory>
26
+ #include <string>
27
+ #include <tuple>
28
+ #include <unordered_map>
29
+ #include <utility>
30
+ #include <variant>
31
+ #include <vector>
32
+
33
+ // forward declarations
34
+ namespace qc {
35
+ enum ComparisonKind : std::uint8_t;
36
+ class ClassicalRegister;
37
+ struct Control;
38
+ class QuantumRegister;
39
+ class Operation;
40
+ class QuantumComputation;
41
+ using QuantumRegisterMap = std::unordered_map<std::string, QuantumRegister>;
42
+ } // namespace qc
43
+ namespace qasm3 {
44
+ class Statement;
45
+ struct Gate;
46
+
47
+ class Importer final : public InstVisitor {
48
+ public:
49
+ /**
50
+ * Imports a QASM3 file into a @ref qc::QuantumComputation instance
51
+ * @param filename The path to the QASM3 file to import
52
+ * @return The imported @ref qc::QuantumComputation instance
53
+ */
54
+ [[nodiscard]] static auto importf(const std::string& filename)
55
+ -> qc::QuantumComputation;
56
+
57
+ /**
58
+ * Imports a QASM3 program from a string into a @ref qc::QuantumComputation
59
+ * @param qasm The QASM3 program to import
60
+ * @return The imported @ref qc::QuantumComputation instance
61
+ */
62
+ [[nodiscard]] static auto imports(const std::string& qasm)
63
+ -> qc::QuantumComputation;
64
+
65
+ /**
66
+ * Imports a QASM3 program from a stream into a @ref qc::QuantumComputation
67
+ * @param is The input stream to read the QASM3 program from
68
+ * @return The imported @ref qc::QuantumComputation instance
69
+ */
70
+ [[nodiscard]] static auto import(std::istream& is) -> qc::QuantumComputation;
71
+
72
+ private:
73
+ /**
74
+ * @brief Construct a new instance for importing QASM3 code
75
+ * @param quantumComputation The @ref qc::QuantumComputation to import the
76
+ * QASM3 code into.
77
+ */
78
+ explicit Importer(qc::QuantumComputation& quantumComputation);
79
+
80
+ /**
81
+ * @brief Import the given QASM3 program into the @ref qc::QuantumComputation
82
+ * @param program The parsed QASM3 program AST
83
+ */
84
+ void visitProgram(const std::vector<std::shared_ptr<Statement>>& program);
85
+
86
+ const_eval::ConstEvalPass constEvalPass;
87
+ type_checking::TypeCheckPass typeCheckPass;
88
+
89
+ NestedEnvironment<std::shared_ptr<DeclarationStatement>> declarations;
90
+ qc::QuantumComputation* qc{};
91
+
92
+ std::map<std::string, std::shared_ptr<Gate>> gates;
93
+
94
+ bool openQASM2CompatMode{false};
95
+
96
+ qc::Permutation initialLayout;
97
+ qc::Permutation outputPermutation;
98
+
99
+ static std::map<std::string, std::pair<const_eval::ConstEvalValue,
100
+ type_checking::InferredType>>
101
+ initializeBuiltins();
102
+
103
+ void translateGateOperand(const std::shared_ptr<GateOperand>& gateOperand,
104
+ std::vector<qc::Qubit>& qubits,
105
+ const qc::QuantumRegisterMap& qregs,
106
+ const std::shared_ptr<DebugInfo>& debugInfo) const;
107
+
108
+ void translateBitOperand(
109
+ const std::shared_ptr<IndexedIdentifier>& indexedIdentifier,
110
+ std::vector<qc::Bit>& bits,
111
+ const std::shared_ptr<DebugInfo>& debugInfo) const;
112
+
113
+ /**
114
+ * @brief Translates a condition expression
115
+ * @param condition The condition expression to translate.
116
+ * @param debugInfo The debug information of the condition expression.
117
+ * @return Either a pair of a bit and a boolean value, or a triple of a
118
+ * classical register, a comparison kind, and an integer value.
119
+ * @throws CompilerError If the condition is neither of the expected types.
120
+ */
121
+ [[nodiscard]] std::variant<
122
+ std::pair<qc::Bit, bool>,
123
+ std::tuple<qc::ClassicalRegister, qc::ComparisonKind, uint64_t>>
124
+ translateCondition(const std::shared_ptr<Expression>& condition,
125
+ const std::shared_ptr<DebugInfo>& debugInfo) const;
126
+
127
+ static uint64_t
128
+ evaluatePositiveConstant(const std::shared_ptr<Expression>& expr,
129
+ const std::shared_ptr<DebugInfo>& debugInfo,
130
+ uint64_t defaultValue = 0);
131
+
132
+ void visitVersionDeclaration(
133
+ std::shared_ptr<VersionDeclaration> versionDeclaration) override;
134
+
135
+ void visitDeclarationStatement(
136
+ std::shared_ptr<DeclarationStatement> declarationStatement) override;
137
+
138
+ void visitAssignmentStatement(
139
+ std::shared_ptr<AssignmentStatement> assignmentStatement) override;
140
+
141
+ void visitInitialLayout(std::shared_ptr<InitialLayout> layout) override;
142
+
143
+ void visitOutputPermutation(
144
+ std::shared_ptr<OutputPermutation> permutation) override;
145
+
146
+ void
147
+ visitGateStatement(std::shared_ptr<GateDeclaration> gateStatement) override;
148
+
149
+ void visitGateCallStatement(
150
+ std::shared_ptr<GateCallStatement> gateCallStatement) override;
151
+
152
+ auto
153
+ evaluateGateCall(const std::shared_ptr<GateCallStatement>& gateCallStatement,
154
+ const std::string& identifier,
155
+ const std::vector<std::shared_ptr<Expression>>& parameters,
156
+ std::vector<std::shared_ptr<GateOperand>> targets,
157
+ const qc::QuantumRegisterMap& qregs)
158
+ -> std::unique_ptr<qc::Operation>;
159
+
160
+ static std::shared_ptr<Gate>
161
+ getMcGateDefinition(const std::string& identifier, size_t operandSize,
162
+ const std::shared_ptr<DebugInfo>& debugInfo);
163
+
164
+ auto applyQuantumOperation(const std::shared_ptr<Gate>& gate,
165
+ const qc::Targets& targetBits,
166
+ const std::vector<qc::Control>& controlBits,
167
+ const std::vector<qc::fp>& evaluatedParameters,
168
+ bool invertOperation,
169
+ const std::shared_ptr<DebugInfo>& debugInfo)
170
+ -> std::unique_ptr<qc::Operation>;
171
+
172
+ void visitMeasureAssignment(
173
+ const std::shared_ptr<IndexedIdentifier>& indexedIdentifier,
174
+ const std::shared_ptr<MeasureExpression>& measureExpression,
175
+ const std::shared_ptr<DebugInfo>& debugInfo);
176
+
177
+ void visitBarrierStatement(
178
+ std::shared_ptr<BarrierStatement> barrierStatement) override;
179
+
180
+ void
181
+ visitResetStatement(std::shared_ptr<ResetStatement> resetStatement) override;
182
+
183
+ void visitIfStatement(std::shared_ptr<IfStatement> ifStatement) override;
184
+
185
+ [[nodiscard]] auto translateBlockOperations(
186
+ const std::vector<std::shared_ptr<Statement>>& statements)
187
+ -> std::unique_ptr<qc::Operation>;
188
+
189
+ std::pair<std::string, size_t>
190
+ parseGateIdentifierCompatMode(const std::string& identifier);
191
+ };
192
+ } // namespace qasm3
@@ -0,0 +1,145 @@
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 "Statement_fwd.hpp"
14
+
15
+ #include <cstdint>
16
+ #include <memory>
17
+ #include <stdexcept>
18
+
19
+ namespace qasm3 {
20
+
21
+ class InstVisitor {
22
+ public:
23
+ virtual void
24
+ visitGateStatement(std::shared_ptr<GateDeclaration> gateStatement) = 0;
25
+ virtual void visitVersionDeclaration(
26
+ std::shared_ptr<VersionDeclaration> versionDeclaration) = 0;
27
+ virtual void visitDeclarationStatement(
28
+ std::shared_ptr<DeclarationStatement> declarationStatement) = 0;
29
+ virtual void
30
+ visitInitialLayout(std::shared_ptr<InitialLayout> initialLayout) = 0;
31
+ virtual void visitOutputPermutation(
32
+ std::shared_ptr<OutputPermutation> outputPermutation) = 0;
33
+ virtual void visitGateCallStatement(
34
+ std::shared_ptr<GateCallStatement> gateCallStatement) = 0;
35
+ virtual void visitAssignmentStatement(
36
+ std::shared_ptr<AssignmentStatement> assignmentStatement) = 0;
37
+ virtual void
38
+ visitBarrierStatement(std::shared_ptr<BarrierStatement> barrierStatement) = 0;
39
+ virtual void
40
+ visitResetStatement(std::shared_ptr<ResetStatement> resetStatement) = 0;
41
+ virtual void visitIfStatement(std::shared_ptr<IfStatement> ifStatement) = 0;
42
+
43
+ virtual ~InstVisitor() = default;
44
+ };
45
+
46
+ class DefaultInstVisitor : public InstVisitor {
47
+ public:
48
+ void visitGateStatement(
49
+ std::shared_ptr<GateDeclaration> /*gateStatement*/) override {}
50
+ void visitVersionDeclaration(
51
+ std::shared_ptr<VersionDeclaration> /*versionDeclaration*/) override {}
52
+ void visitDeclarationStatement(
53
+ std::shared_ptr<DeclarationStatement> /*declarationStatement*/) override {
54
+ }
55
+ void visitInitialLayout(
56
+ std::shared_ptr<InitialLayout> /*initialLayout*/) override {}
57
+ void visitOutputPermutation(
58
+ std::shared_ptr<OutputPermutation> /*outputPermutation*/) override {}
59
+ void visitGateCallStatement(
60
+ std::shared_ptr<GateCallStatement> /*gateCallStatement*/) override {}
61
+ void visitAssignmentStatement(
62
+ std::shared_ptr<AssignmentStatement> /*assignmentStatement*/) override {}
63
+ void visitBarrierStatement(
64
+ std::shared_ptr<BarrierStatement> /*barrierStatement*/) override {}
65
+ void visitResetStatement(
66
+ std::shared_ptr<ResetStatement> /*resetStatement*/) override {}
67
+ void visitIfStatement(std::shared_ptr<IfStatement> /*ifStatement*/) override {
68
+ }
69
+ };
70
+
71
+ template <typename T> class ExpressionVisitor {
72
+ public:
73
+ virtual T
74
+ visitBinaryExpression(std::shared_ptr<BinaryExpression> binaryExpression) = 0;
75
+ virtual T
76
+ visitUnaryExpression(std::shared_ptr<UnaryExpression> unaryExpression) = 0;
77
+ virtual T visitConstantExpression(std::shared_ptr<Constant> constant) = 0;
78
+ virtual T visitIdentifierExpression(
79
+ std::shared_ptr<IdentifierExpression> identifierExpression) = 0;
80
+ virtual T
81
+ visitIdentifierList(std::shared_ptr<IdentifierList> identifierList) = 0;
82
+ virtual T visitIndexedIdentifier(
83
+ std::shared_ptr<IndexedIdentifier> indexedIdentifier) = 0;
84
+ virtual T visitMeasureExpression(
85
+ std::shared_ptr<MeasureExpression> measureExpression) = 0;
86
+
87
+ // A manually implemented visitor function with a templated return type.
88
+ // This is impossible as a virtual function in expression, which is why
89
+ // we define it manually.
90
+ T visit(const std::shared_ptr<Expression>& expression) {
91
+ if (expression == nullptr) {
92
+ throw std::runtime_error("Expression is null");
93
+ }
94
+ if (const auto binaryExpression =
95
+ std::dynamic_pointer_cast<BinaryExpression>(expression)) {
96
+ return visitBinaryExpression(binaryExpression);
97
+ }
98
+ if (const auto unaryExpression =
99
+ std::dynamic_pointer_cast<UnaryExpression>(expression)) {
100
+ return visitUnaryExpression(unaryExpression);
101
+ }
102
+ if (const auto constantInt =
103
+ std::dynamic_pointer_cast<Constant>(expression)) {
104
+ return visitConstantExpression(constantInt);
105
+ }
106
+ if (const auto identifierExpression =
107
+ std::dynamic_pointer_cast<IdentifierExpression>(expression)) {
108
+ return visitIdentifierExpression(identifierExpression);
109
+ }
110
+ if (const auto identifierList =
111
+ std::dynamic_pointer_cast<IdentifierList>(expression)) {
112
+ return visitIdentifierList(identifierList);
113
+ }
114
+ if (const auto indexedIdentifier =
115
+ std::dynamic_pointer_cast<IndexedIdentifier>(expression)) {
116
+ return visitIndexedIdentifier(indexedIdentifier);
117
+ }
118
+ if (const auto measureExpression =
119
+ std::dynamic_pointer_cast<MeasureExpression>(expression)) {
120
+ return visitMeasureExpression(measureExpression);
121
+ }
122
+ throw std::runtime_error("Unhandled expression type.");
123
+ }
124
+
125
+ virtual ~ExpressionVisitor() = default;
126
+ };
127
+
128
+ template <typename T> class Type;
129
+ using ResolvedType = Type<uint64_t>;
130
+ template <typename T> class DesignatedType;
131
+ template <typename T> class UnsizedType;
132
+ template <typename T> class ArrayType;
133
+
134
+ template <typename T> class TypeVisitor {
135
+ public:
136
+ virtual ~TypeVisitor() = default;
137
+
138
+ virtual std::shared_ptr<ResolvedType>
139
+ visitDesignatedType(DesignatedType<T>* designatedType) = 0;
140
+ virtual std::shared_ptr<ResolvedType>
141
+ visitUnsizedType(UnsizedType<T>* unsizedType) = 0;
142
+ virtual std::shared_ptr<ResolvedType>
143
+ visitArrayType(ArrayType<T>* arrayType) = 0;
144
+ };
145
+ } // namespace qasm3
@@ -0,0 +1,41 @@
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 <map>
14
+ #include <optional>
15
+ #include <string>
16
+ #include <vector>
17
+
18
+ namespace qasm3 {
19
+ template <typename T> class NestedEnvironment {
20
+ std::vector<std::map<std::string, T>> env{};
21
+
22
+ public:
23
+ NestedEnvironment() { env.emplace_back(); };
24
+
25
+ void push() { env.emplace_back(); }
26
+
27
+ void pop() { env.pop_back(); }
28
+
29
+ std::optional<T> find(std::string key) {
30
+ for (auto it = env.rbegin(); it != env.rend(); ++it) {
31
+ auto found = it->find(key);
32
+ if (found != it->end()) {
33
+ return found->second;
34
+ }
35
+ }
36
+ return std::nullopt;
37
+ }
38
+
39
+ void emplace(std::string key, T value) { env.back().emplace(key, value); }
40
+ };
41
+ } // namespace qasm3
@@ -0,0 +1,170 @@
1
+ /*
2
+ * Copyright (c) 2023 - 2025 Chair for Design Automation, TUM
3
+ * Copyright (c) 2025 Munich Quantum Software Company GmbH
4
+ * All rights reserved.
5
+ *
6
+ * SPDX-License-Identifier: MIT
7
+ *
8
+ * Licensed under the MIT License
9
+ */
10
+
11
+ /*
12
+ * This file is part of MQT QFR library which is released under the MIT license.
13
+ * See file README.md or go to https://www.cda.cit.tum.de/research/quantum/ for
14
+ * more information.
15
+ */
16
+
17
+ #pragma once
18
+
19
+ #include "Scanner.hpp"
20
+ #include "Statement_fwd.hpp"
21
+ #include "Token.hpp"
22
+ #include "Types_fwd.hpp"
23
+
24
+ #include <istream>
25
+ #include <memory>
26
+ #include <optional>
27
+ #include <stack>
28
+ #include <string>
29
+ #include <utility>
30
+ #include <vector>
31
+
32
+ namespace qc {
33
+ // forward declarations
34
+ class Permutation;
35
+ } // namespace qc
36
+
37
+ namespace qasm3 {
38
+ class Parser final {
39
+ struct ScannerState {
40
+ private:
41
+ std::unique_ptr<std::istream> is;
42
+
43
+ public:
44
+ Token last{0, 0};
45
+ Token t{0, 0};
46
+ Token next{0, 0};
47
+ std::unique_ptr<Scanner> scanner;
48
+ std::optional<std::string> filename;
49
+ bool isImplicitInclude;
50
+
51
+ bool scan() {
52
+ last = t;
53
+ t = next;
54
+ next = scanner->next();
55
+
56
+ return t.kind != Token::Kind::Eof;
57
+ }
58
+
59
+ explicit ScannerState(
60
+ std::istream* in,
61
+ std::optional<std::string> debugFilename = std::nullopt,
62
+ const bool implicitInclude = false)
63
+ : scanner(std::make_unique<Scanner>(in)),
64
+ filename(std::move(debugFilename)),
65
+ isImplicitInclude(implicitInclude) {
66
+ scan();
67
+ }
68
+
69
+ explicit ScannerState(
70
+ std::unique_ptr<std::istream> in,
71
+ std::optional<std::string> debugFilename = std::nullopt,
72
+ const bool implicitInclude = false)
73
+ : is(std::move(in)), scanner(std::make_unique<Scanner>(is.get())),
74
+ filename(std::move(debugFilename)),
75
+ isImplicitInclude(implicitInclude) {
76
+ scan();
77
+ }
78
+ };
79
+
80
+ std::stack<ScannerState> scanner;
81
+ std::shared_ptr<DebugInfo> includeDebugInfo{nullptr};
82
+
83
+ [[noreturn]] void error(const Token& token, const std::string& msg);
84
+
85
+ [[nodiscard]] Token last() const;
86
+
87
+ [[nodiscard]] Token current() const;
88
+
89
+ [[nodiscard]] Token peek() const;
90
+
91
+ Token expect(const Token::Kind& expected,
92
+ const std::optional<std::string>& context = std::nullopt);
93
+
94
+ public:
95
+ explicit Parser(std::istream& is, bool implicitlyIncludeStdgates = true);
96
+
97
+ ~Parser() = default;
98
+
99
+ std::shared_ptr<VersionDeclaration> parseVersionDeclaration();
100
+
101
+ std::vector<std::shared_ptr<Statement>> parseProgram();
102
+
103
+ std::shared_ptr<Statement> parseStatement();
104
+
105
+ std::shared_ptr<QuantumStatement> parseQuantumStatement();
106
+
107
+ void parseInclude();
108
+
109
+ std::shared_ptr<AssignmentStatement> parseAssignmentStatement();
110
+
111
+ std::shared_ptr<AssignmentStatement> parseMeasureStatement();
112
+
113
+ std::shared_ptr<ResetStatement> parseResetStatement();
114
+
115
+ std::shared_ptr<BarrierStatement> parseBarrierStatement();
116
+
117
+ std::shared_ptr<Statement> parseDeclaration(bool isConst);
118
+
119
+ std::shared_ptr<GateDeclaration> parseGateDefinition();
120
+
121
+ std::shared_ptr<GateDeclaration> parseOpaqueGateDefinition();
122
+
123
+ std::shared_ptr<GateCallStatement> parseGateCallStatement();
124
+
125
+ std::shared_ptr<GateModifier> parseGateModifier();
126
+
127
+ std::shared_ptr<IndexOperator> parseIndexOperator();
128
+
129
+ std::shared_ptr<IndexedIdentifier> parseIndexedIdentifier();
130
+
131
+ std::shared_ptr<GateOperand> parseGateOperand();
132
+
133
+ std::shared_ptr<DeclarationExpression> parseDeclarationExpression();
134
+
135
+ std::shared_ptr<MeasureExpression> parseMeasureExpression();
136
+
137
+ std::shared_ptr<Expression> exponentiation();
138
+
139
+ std::shared_ptr<Expression> factor();
140
+
141
+ std::shared_ptr<Expression> term();
142
+
143
+ std::shared_ptr<Expression> comparison();
144
+
145
+ std::shared_ptr<Expression> parseExpression();
146
+
147
+ std::shared_ptr<IdentifierList> parseIdentifierList();
148
+
149
+ std::pair<std::shared_ptr<Type<std::shared_ptr<Expression>>>, bool>
150
+ parseType();
151
+
152
+ std::shared_ptr<Expression> parseTypeDesignator();
153
+
154
+ static qc::Permutation parsePermutation(std::string s);
155
+
156
+ void scan();
157
+
158
+ std::shared_ptr<DebugInfo> makeDebugInfo(Token const& begin,
159
+ Token const& /*end*/);
160
+
161
+ std::shared_ptr<DebugInfo> makeDebugInfo(Token const& token);
162
+
163
+ [[nodiscard]] bool isAtEnd() const {
164
+ return current().kind == Token::Kind::Eof;
165
+ }
166
+ std::shared_ptr<IfStatement> parseIfStatement();
167
+ std::vector<std::shared_ptr<Statement>> parseBlockOrStatement();
168
+ };
169
+
170
+ } // namespace qasm3