mqt-core 3.1.0__cp313-cp313-win_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (343) hide show
  1. mqt/core/__init__.py +89 -0
  2. mqt/core/__main__.py +55 -0
  3. mqt/core/_commands.py +52 -0
  4. mqt/core/_compat/__init__.py +11 -0
  5. mqt/core/_compat/typing.py +29 -0
  6. mqt/core/_version.py +21 -0
  7. mqt/core/_version.pyi +12 -0
  8. mqt/core/bin/mqt-core-algorithms.dll +0 -0
  9. mqt/core/bin/mqt-core-circuit-optimizer.dll +0 -0
  10. mqt/core/bin/mqt-core-dd.dll +0 -0
  11. mqt/core/bin/mqt-core-ds.dll +0 -0
  12. mqt/core/bin/mqt-core-ir.dll +0 -0
  13. mqt/core/bin/mqt-core-na.dll +0 -0
  14. mqt/core/bin/mqt-core-qasm.dll +0 -0
  15. mqt/core/bin/mqt-core-zx.dll +0 -0
  16. mqt/core/dd.cp313-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.cp313-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,455 @@
1
+ # Copyright (c) 2023 - 2025 Chair for Design Automation, TUM
2
+ # Copyright (c) 2025 Munich Quantum Software Company GmbH
3
+ # All rights reserved.
4
+ #
5
+ # SPDX-License-Identifier: MIT
6
+ #
7
+ # Licensed under the MIT License
8
+
9
+ """Functionality for translating from Qiskit to the MQT."""
10
+
11
+ from __future__ import annotations
12
+
13
+ import re
14
+ import warnings
15
+ from typing import TYPE_CHECKING, cast
16
+
17
+ from qiskit.circuit import AncillaRegister, Clbit, Qubit
18
+
19
+ from ...ir import QuantumComputation
20
+ from ...ir.operations import (
21
+ CompoundOperation,
22
+ Control,
23
+ NonUnitaryOperation,
24
+ OpType,
25
+ StandardOperation,
26
+ SymbolicOperation,
27
+ )
28
+ from ...ir.symbolic import Expression, Term, Variable
29
+
30
+ if TYPE_CHECKING:
31
+ from collections.abc import Mapping, Sequence
32
+
33
+ from qiskit.circuit import Instruction, ParameterExpression, QuantumCircuit
34
+
35
+
36
+ __all__ = ["qiskit_to_mqt"]
37
+
38
+
39
+ def __dir__() -> list[str]:
40
+ return __all__
41
+
42
+
43
+ def qiskit_to_mqt(circ: QuantumCircuit) -> QuantumComputation:
44
+ """Convert a Qiskit :class:`~qiskit.circuit.QuantumCircuit` to a :class:`~mqt.core.ir.QuantumComputation` object.
45
+
46
+ Args:
47
+ circ: The Qiskit circuit to convert.
48
+
49
+ Returns:
50
+ The converted circuit.
51
+ """
52
+ qc = QuantumComputation()
53
+
54
+ if circ.name is not None:
55
+ qc.name = circ.name
56
+
57
+ qubit_index = 0
58
+ qubit_map: dict[Qubit, int] = {}
59
+ for reg in circ.qregs:
60
+ size = reg.size
61
+ if size == 0:
62
+ continue
63
+ if isinstance(reg, AncillaRegister):
64
+ qc.add_ancillary_register(size, reg.name)
65
+ else:
66
+ qc.add_qubit_register(size, reg.name)
67
+ for qubit in reg:
68
+ qubit_map[qubit] = qubit_index
69
+ qubit_index += 1
70
+
71
+ clbit_index = 0
72
+ clbit_map: dict[Clbit, int] = {}
73
+ for reg in circ.cregs:
74
+ size = reg.size
75
+ if size == 0:
76
+ continue
77
+ qc.add_classical_register(size, reg.name)
78
+ for bit in reg:
79
+ clbit_map[bit] = clbit_index
80
+ clbit_index += 1
81
+
82
+ try:
83
+ qc.global_phase = circ.global_phase
84
+ except TypeError:
85
+ warnings.warn(
86
+ "Symbolic global phase values are not supported yet. Setting global phase to 0.",
87
+ RuntimeWarning,
88
+ stacklevel=2,
89
+ )
90
+ qc.global_phase = 0
91
+
92
+ for instruction in circ.data:
93
+ symb_params = _emplace_operation(
94
+ qc,
95
+ instruction.operation,
96
+ instruction.qubits,
97
+ instruction.clbits,
98
+ instruction.operation.params,
99
+ qubit_map,
100
+ clbit_map,
101
+ )
102
+ for symb_param in symb_params:
103
+ qc.add_variable(symb_param)
104
+
105
+ # import initial layout and output permutation if available
106
+ if circ.layout is not None:
107
+ _import_layouts(qc, circ)
108
+
109
+ qc.initialize_io_mapping()
110
+ return qc
111
+
112
+
113
+ _NATIVELY_SUPPORTED_GATES = frozenset({
114
+ "i",
115
+ "id",
116
+ "iden",
117
+ "x",
118
+ "y",
119
+ "z",
120
+ "h",
121
+ "s",
122
+ "sdg",
123
+ "t",
124
+ "tdg",
125
+ "p",
126
+ "u1",
127
+ "rx",
128
+ "ry",
129
+ "rz",
130
+ "u2",
131
+ "u",
132
+ "u3",
133
+ "cx",
134
+ "cy",
135
+ "cz",
136
+ "cs",
137
+ "csdg",
138
+ "cp",
139
+ "cu1",
140
+ "ch",
141
+ "crx",
142
+ "cry",
143
+ "crz",
144
+ "cu3",
145
+ "ccx",
146
+ "swap",
147
+ "cswap",
148
+ "iswap",
149
+ "sx",
150
+ "sxdg",
151
+ "csx",
152
+ "mcx",
153
+ # we keep the "mcx_*" variants here for compatibility with Qiskit 1.x
154
+ "mcx_gray",
155
+ "mcx_recursive",
156
+ "mcx_vchain",
157
+ "mcphase",
158
+ "mcrx",
159
+ "mcry",
160
+ "mcrz",
161
+ "dcx",
162
+ "ecr",
163
+ "rxx",
164
+ "ryy",
165
+ "rzx",
166
+ "rzz",
167
+ "xx_minus_yy",
168
+ "xx_plus_yy",
169
+ "reset",
170
+ "barrier",
171
+ "measure",
172
+ })
173
+
174
+
175
+ def _emplace_operation(
176
+ qc: QuantumComputation | CompoundOperation,
177
+ instr: Instruction,
178
+ qargs: Sequence[Qubit],
179
+ cargs: Sequence[Clbit],
180
+ params: Sequence[float | ParameterExpression],
181
+ qubit_map: Mapping[Qubit, int],
182
+ clbit_map: Mapping[Clbit, int],
183
+ ) -> list[float | ParameterExpression]:
184
+ name = instr.name
185
+
186
+ if name not in _NATIVELY_SUPPORTED_GATES:
187
+ try:
188
+ return _import_definition(qc, instr.definition, qargs, cargs, qubit_map, clbit_map)
189
+ except Exception as ex: # PRAGMA: NO COVER
190
+ msg = f"Unsupported gate {name} with definition {instr.definition}"
191
+ raise NotImplementedError(msg) from ex
192
+
193
+ qubits = [qubit_map[qubit] for qubit in qargs]
194
+
195
+ if name == "measure":
196
+ clbits = [clbit_map[clbit] for clbit in cargs]
197
+ qc.append(NonUnitaryOperation(qubits, clbits))
198
+ return []
199
+
200
+ if name == "reset":
201
+ qc.append(NonUnitaryOperation(qubits))
202
+ return []
203
+
204
+ if name == "barrier":
205
+ qc.append(StandardOperation(qubits, OpType.barrier))
206
+ return []
207
+
208
+ if name in {"i", "id", "iden"}:
209
+ return _add_operation(qc, OpType.i, qargs, params, qubit_map)
210
+
211
+ # we keep "mcx_gray" here for compatibility reasons with older Qiskit versions, e.g., 1.0.0 where "noancilla"
212
+ # is the default for the argument "mode" which leads to the gate name "gray_code"
213
+ if name in {"x", "cx", "ccx", "mcx", "mcx_gray"}:
214
+ return _add_operation(qc, OpType.x, qargs, params, qubit_map)
215
+
216
+ if name in {"y", "cy"}:
217
+ return _add_operation(qc, OpType.y, qargs, params, qubit_map)
218
+
219
+ if name in {"z", "cz"}:
220
+ return _add_operation(qc, OpType.z, qargs, params, qubit_map)
221
+
222
+ if name in {"h", "ch"}:
223
+ return _add_operation(qc, OpType.h, qargs, params, qubit_map)
224
+
225
+ if name in {"s", "cs"}:
226
+ return _add_operation(qc, OpType.s, qargs, params, qubit_map)
227
+
228
+ if name in {"sdg", "csdg"}:
229
+ return _add_operation(qc, OpType.sdg, qargs, params, qubit_map)
230
+
231
+ if name == "t":
232
+ return _add_operation(qc, OpType.t, qargs, params, qubit_map)
233
+
234
+ if name == "tdg":
235
+ return _add_operation(qc, OpType.tdg, qargs, params, qubit_map)
236
+
237
+ if name in {"sx", "csx"}:
238
+ return _add_operation(qc, OpType.sx, qargs, params, qubit_map)
239
+
240
+ if name == "sxdg":
241
+ return _add_operation(qc, OpType.sxdg, qargs, params, qubit_map)
242
+
243
+ if name == "mcx_recursive":
244
+ if len(qargs) <= 5:
245
+ return _add_operation(qc, OpType.x, qargs, params, qubit_map)
246
+ # reconfigure controls and targets (drops the last qubit as ancilla)
247
+ qargs = qargs[:-1]
248
+ return _add_operation(qc, OpType.x, qargs, params, qubit_map)
249
+
250
+ if name == "mcx_vchain":
251
+ size = len(qargs)
252
+ num_controls = (size + 1) // 2
253
+ # reconfigure controls and targets (drops the last num_controls - 2 qubits as ancilla)
254
+ if num_controls > 2:
255
+ qargs = qargs[: -num_controls + 2]
256
+ return _add_operation(qc, OpType.x, qargs, params, qubit_map)
257
+
258
+ if name in {"rx", "crx", "mcrx"}:
259
+ return _add_operation(qc, OpType.rx, qargs, params, qubit_map)
260
+
261
+ if name in {"ry", "cry", "mcry"}:
262
+ return _add_operation(qc, OpType.ry, qargs, params, qubit_map)
263
+
264
+ if name in {"rz", "crz", "mcrz"}:
265
+ return _add_operation(qc, OpType.rz, qargs, params, qubit_map)
266
+
267
+ if name in {"p", "u1", "cp", "cu1", "mcphase"}:
268
+ return _add_operation(qc, OpType.p, qargs, params, qubit_map)
269
+
270
+ if name == "u2":
271
+ return _add_operation(qc, OpType.u2, qargs, params, qubit_map)
272
+
273
+ if name in {"u", "u3", "cu3"}:
274
+ return _add_operation(qc, OpType.u, qargs, params, qubit_map)
275
+
276
+ if name in {"swap", "cswap"}:
277
+ return _add_two_target_operation(qc, OpType.swap, qargs, params, qubit_map)
278
+
279
+ if name == "iswap":
280
+ return _add_two_target_operation(qc, OpType.iswap, qargs, params, qubit_map)
281
+
282
+ if name == "dcx":
283
+ return _add_two_target_operation(qc, OpType.dcx, qargs, params, qubit_map)
284
+
285
+ if name == "ecr":
286
+ return _add_two_target_operation(qc, OpType.ecr, qargs, params, qubit_map)
287
+
288
+ if name == "rxx":
289
+ return _add_two_target_operation(qc, OpType.rxx, qargs, params, qubit_map)
290
+
291
+ if name == "ryy":
292
+ return _add_two_target_operation(qc, OpType.ryy, qargs, params, qubit_map)
293
+
294
+ if name == "rzz":
295
+ return _add_two_target_operation(qc, OpType.rzz, qargs, params, qubit_map)
296
+
297
+ if name == "rzx":
298
+ return _add_two_target_operation(qc, OpType.rzx, qargs, params, qubit_map)
299
+
300
+ if name == "xx_minus_yy":
301
+ return _add_two_target_operation(qc, OpType.xx_minus_yy, qargs, params, qubit_map)
302
+
303
+ if name == "xx_plus_yy":
304
+ return _add_two_target_operation(qc, OpType.xx_plus_yy, qargs, params, qubit_map)
305
+
306
+ msg = f"Unsupported gate {name}" # pragma: no cover
307
+ raise NotImplementedError(msg)
308
+
309
+
310
+ _SUM_REGEX = re.compile(r"[+|-]?[^+-]+")
311
+ _PROD_REGEX = re.compile(r"[*/]?[^*/]+")
312
+
313
+
314
+ def _parse_symbolic_expression(qiskit_expr: ParameterExpression | float) -> float | Expression:
315
+ if isinstance(qiskit_expr, float):
316
+ return qiskit_expr
317
+
318
+ expr_str = str(qiskit_expr).strip()
319
+ expr = Expression()
320
+ is_const = True
321
+ for summand in _SUM_REGEX.findall(expr_str):
322
+ sign = 1
323
+ summand_no_operator = summand
324
+ if summand[0] == "+":
325
+ summand_no_operator = summand[1:]
326
+ elif summand[0] == "-":
327
+ summand_no_operator = summand[1:]
328
+ sign = -1
329
+
330
+ coeff = 1.0
331
+ var = ""
332
+ for factor in _PROD_REGEX.findall(summand_no_operator):
333
+ is_div = False
334
+ factor_no_operator = factor
335
+ if factor[0] == "*":
336
+ factor_no_operator = factor[1:]
337
+ elif factor[0] == "/":
338
+ factor_no_operator = factor[1:]
339
+ is_div = True
340
+
341
+ factor_no_operator = factor_no_operator.strip()
342
+ if factor_no_operator.replace(".", "").isnumeric():
343
+ f = float(factor_no_operator)
344
+ coeff *= 1.0 / f if is_div else f
345
+ else:
346
+ var = factor_no_operator
347
+
348
+ if not var:
349
+ expr += coeff
350
+ else:
351
+ is_const = False
352
+ expr += Term(Variable(var), sign * coeff)
353
+
354
+ if is_const:
355
+ return expr.constant
356
+ return expr
357
+
358
+
359
+ def _add_operation(
360
+ qc: QuantumComputation | CompoundOperation,
361
+ type_: OpType,
362
+ qargs: Sequence[Qubit],
363
+ params: Sequence[float | ParameterExpression],
364
+ qubit_map: Mapping[Qubit, int],
365
+ ) -> list[float | ParameterExpression]:
366
+ qubits = [qubit_map[qubit] for qubit in qargs]
367
+ target = qubits.pop()
368
+ controls = {Control(qubit) for qubit in qubits}
369
+ parameters = [_parse_symbolic_expression(param) for param in params]
370
+ if any(isinstance(parameter, Expression) for parameter in parameters):
371
+ qc.append(SymbolicOperation(controls, target, type_, parameters))
372
+ else:
373
+ qc.append(StandardOperation(controls, target, type_, cast("list[float]", parameters)))
374
+ return parameters
375
+
376
+
377
+ def _add_two_target_operation(
378
+ qc: QuantumComputation | CompoundOperation,
379
+ type_: OpType,
380
+ qargs: Sequence[Qubit],
381
+ params: Sequence[float | ParameterExpression],
382
+ qubit_map: Mapping[Qubit, int],
383
+ ) -> list[float | ParameterExpression]:
384
+ qubits = [qubit_map[qubit] for qubit in qargs]
385
+ target2 = qubits.pop()
386
+ target1 = qubits.pop()
387
+ controls = {Control(qubit) for qubit in qubits}
388
+ parameters = [_parse_symbolic_expression(param) for param in params]
389
+ if any(isinstance(parameter, Expression) for parameter in parameters):
390
+ qc.append(SymbolicOperation(controls, target1, target2, type_, parameters))
391
+ else:
392
+ qc.append(StandardOperation(controls, target1, target2, type_, cast("list[float]", parameters)))
393
+ return parameters
394
+
395
+
396
+ def _import_layouts(qc: QuantumComputation, circ: QuantumCircuit) -> None:
397
+ qc.initial_layout.clear()
398
+ initial_index_layout = circ.layout.initial_index_layout()
399
+ for virtual, physical in enumerate(initial_index_layout):
400
+ qc.initial_layout[physical] = virtual
401
+
402
+ # Properly mark ancillary qubits
403
+ for register in circ.layout.initial_layout.get_registers():
404
+ if register.name != "ancilla" and not isinstance(register, AncillaRegister):
405
+ continue
406
+ for qubit in reversed(register):
407
+ physical_qubit = circ.layout.initial_layout[qubit]
408
+ virtual_qubit = qc.initial_layout[physical_qubit]
409
+ qc.set_circuit_qubit_ancillary(virtual_qubit)
410
+
411
+ if circ.layout.final_layout is None:
412
+ qc.output_permutation = qc.initial_layout
413
+ return
414
+
415
+ qc.output_permutation.clear()
416
+ final_index_layout = circ.layout.final_index_layout()
417
+ for virtual, physical in enumerate(final_index_layout):
418
+ qc.output_permutation[physical] = virtual
419
+
420
+ # Properly mark garbage qubits
421
+ # Any qubit in the initial layout that is not in the final layout is garbage
422
+ for virtual_qubit in range(len(final_index_layout), len(initial_index_layout)):
423
+ qc.set_circuit_qubit_garbage(virtual_qubit)
424
+
425
+
426
+ def _import_definition(
427
+ qc: QuantumComputation | CompoundOperation,
428
+ circ: QuantumCircuit,
429
+ qargs: Sequence[Qubit],
430
+ cargs: Sequence[Clbit],
431
+ qubit_map: Mapping[Qubit, int],
432
+ clbit_map: Mapping[Clbit, int],
433
+ ) -> list[float | ParameterExpression]:
434
+ qarg_map = dict(zip(circ.qubits, qargs))
435
+ carg_map = dict(zip(circ.clbits, cargs))
436
+
437
+ qc.append(CompoundOperation())
438
+ comp_op = cast("CompoundOperation", qc[-1])
439
+
440
+ params = []
441
+ for instruction in circ.data:
442
+ mapped_qargs = [qarg_map[qarg] for qarg in instruction.qubits]
443
+ mapped_cargs = [carg_map[carg] for carg in instruction.clbits]
444
+ operation = instruction.operation
445
+ new_params = _emplace_operation(
446
+ comp_op,
447
+ operation,
448
+ mapped_qargs,
449
+ mapped_cargs,
450
+ operation.params,
451
+ qubit_map,
452
+ clbit_map,
453
+ )
454
+ params.extend(new_params)
455
+ return params
mqt/core/py.typed ADDED
@@ -0,0 +1,2 @@
1
+ # Instruct type checkers to look for inline type annotations in this package.
2
+ # See PEP 561.
@@ -0,0 +1,52 @@
1
+ # Copyright (c) 2023 - 2025 Chair for Design Automation, TUM
2
+ # Copyright (c) 2025 Munich Quantum Software Company GmbH
3
+ # All rights reserved.
4
+ #
5
+ # SPDX-License-Identifier: MIT
6
+ #
7
+ # Licensed under the MIT License
8
+
9
+ function(add_mqt_python_binding package_name target_name)
10
+ # parse the arguments
11
+ cmake_parse_arguments(ARG "" "MODULE_NAME;INSTALL_DIR" "LINK_LIBS" ${ARGN})
12
+ set(SOURCES ${ARG_UNPARSED_ARGUMENTS})
13
+
14
+ # declare the Python module
15
+ pybind11_add_module(
16
+ # name of the extension
17
+ ${target_name}
18
+ # Pprefer thin LTO if available
19
+ THIN_LTO
20
+ # optimize the bindings for size
21
+ OPT_SIZE
22
+ # source code goes here
23
+ ${SOURCES})
24
+
25
+ # set default "." for INSTALL_DIR
26
+ if(NOT ARG_INSTALL_DIR)
27
+ set(ARG_INSTALL_DIR ".")
28
+ endif()
29
+
30
+ if(ARG_MODULE_NAME)
31
+ # the library name must be the same as the module name
32
+ set_target_properties(${target_name} PROPERTIES OUTPUT_NAME ${ARG_MODULE_NAME})
33
+ target_compile_definitions(${target_name}
34
+ PRIVATE MQT_${package_name}_MODULE_NAME=${ARG_MODULE_NAME})
35
+ else()
36
+ # use the target name as the module name
37
+ target_compile_definitions(${target_name}
38
+ PRIVATE MQT_${package_name}_MODULE_NAME=${target_name})
39
+ endif()
40
+
41
+ # add project libraries to the link libraries
42
+ list(APPEND ARG_LINK_LIBS MQT::ProjectOptions MQT::ProjectWarnings)
43
+
44
+ # link the required libraries
45
+ target_link_libraries(${target_name} PRIVATE ${ARG_LINK_LIBS})
46
+
47
+ # install directive for scikit-build-core
48
+ install(
49
+ TARGETS ${target_name}
50
+ DESTINATION ${ARG_INSTALL_DIR}
51
+ COMPONENT ${MQT_${package_name}_TARGET_NAME}_Python)
52
+ endfunction()
@@ -0,0 +1,32 @@
1
+ # Copyright (c) 2023 - 2025 Chair for Design Automation, TUM
2
+ # Copyright (c) 2025 Munich Quantum Software Company GmbH
3
+ # All rights reserved.
4
+ #
5
+ # SPDX-License-Identifier: MIT
6
+ #
7
+ # Licensed under the MIT License
8
+
9
+ option(ENABLE_CACHE "Enable compiler cache if available" ON)
10
+ if(NOT ENABLE_CACHE)
11
+ return()
12
+ endif()
13
+
14
+ set(CACHE_OPTION_VALUES "ccache" "sccache")
15
+ set(CACHE_OPTION
16
+ "ccache"
17
+ CACHE STRING "Compiler cache to use")
18
+ set_property(CACHE CACHE_OPTION PROPERTY STRINGS ${CACHE_OPTION_VALUES})
19
+ list(FIND CACHE_OPTION_VALUES ${CACHE_OPTION} CACHE_OPTION_INDEX)
20
+ if(CACHE_OPTION_INDEX EQUAL -1)
21
+ message(NOTICE
22
+ "Unknown compiler cache '${CACHE_OPTION}'. Available options are: ${CACHE_OPTION_VALUES}")
23
+ endif()
24
+
25
+ find_program(CACHE_BINARY ${CACHE_OPTION})
26
+ if(CACHE_BINARY)
27
+ message(STATUS "Compiler cache '${CACHE_OPTION}' found and enabled")
28
+ set(CMAKE_C_COMPILER_LAUNCHER ${CACHE_BINARY})
29
+ set(CMAKE_CXX_COMPILER_LAUNCHER ${CACHE_BINARY})
30
+ else()
31
+ message(NOTICE "${CACHE_OPTION} is enabled but was not found. Not using it")
32
+ endif()
@@ -0,0 +1,103 @@
1
+ # Copyright (c) 2023 - 2025 Chair for Design Automation, TUM
2
+ # Copyright (c) 2025 Munich Quantum Software Company GmbH
3
+ # All rights reserved.
4
+ #
5
+ # SPDX-License-Identifier: MIT
6
+ #
7
+ # Licensed under the MIT License
8
+
9
+ # File adapted from
10
+ # https://github.com/dune-project/dune-common/blob/master/cmake/modules/FindGMP.cmake
11
+
12
+ #[=======================================================================[.rst:
13
+ FindGMP
14
+ -------
15
+
16
+ Find the GNU MULTI-Precision Bignum (GMP) library
17
+ and the corresponding C++ bindings GMPxx.
18
+
19
+ This module searches for both libraries and only considers the package
20
+ found if both can be located. It then defines separate targets for the C
21
+ and the C++ library.
22
+
23
+ Imported Targets
24
+ ^^^^^^^^^^^^^^^^
25
+
26
+ This module provides the following imported targets, if found:
27
+
28
+ ``GMP::gmp``
29
+ Library target of the C library.
30
+ ``GMP::gmpxx``
31
+ Library target of the C++ library, which also links to the C library.
32
+
33
+ Result Variables
34
+ ^^^^^^^^^^^^^^^^
35
+
36
+ This will define the following variables:
37
+
38
+ ``GMP_FOUND``
39
+ True if the GMP library, the GMPxx headers and
40
+ the GMPxx library were found.
41
+
42
+ Cache Variables
43
+ ^^^^^^^^^^^^^^^
44
+
45
+ You may set the following variables to modify the behaviour of
46
+ this module:
47
+
48
+ ``GMP_INCLUDE_DIR``
49
+ The directory containing ``gmp.h``.
50
+ ``GMP_LIB``
51
+ The path to the gmp library.
52
+ ``GMPXX_INCLUDE_DIR``
53
+ The directory containing ``gmpxx.h``.
54
+ ``GMPXX_LIB``
55
+ The path to the gmpxx library.
56
+
57
+ #]=======================================================================]
58
+
59
+ # Add a feature summary for this package
60
+ include(FeatureSummary)
61
+ set_package_properties(
62
+ GMP PROPERTIES
63
+ DESCRIPTION "GNU multi-precision library"
64
+ URL "https://gmplib.org")
65
+
66
+ # Try finding the package with pkg-config
67
+ find_package(PkgConfig QUIET)
68
+ pkg_check_modules(PKG QUIET gmp gmpxx)
69
+
70
+ # Try to locate the libraries and their headers, using pkg-config hints
71
+ find_path(GMP_INCLUDE_DIR gmp.h HINTS ${PKG_gmp_INCLUDEDIR})
72
+ find_library(GMP_LIB gmp HINTS ${PKG_gmp_LIBDIR})
73
+
74
+ find_path(GMPXX_INCLUDE_DIR gmpxx.h HINTS ${PKG_gmpxx_INCLUDEDIR})
75
+ find_library(GMPXX_LIB gmpxx HINTS ${PKG_gmpxx_LIBDIR})
76
+
77
+ # Remove these variables from cache inspector
78
+ mark_as_advanced(GMP_INCLUDE_DIR GMP_LIB GMPXX_INCLUDE_DIR GMPXX_LIB)
79
+
80
+ # Report if package was found
81
+ include(FindPackageHandleStandardArgs)
82
+ find_package_handle_standard_args(GMP DEFAULT_MSG GMPXX_LIB GMPXX_INCLUDE_DIR GMP_INCLUDE_DIR
83
+ GMP_LIB)
84
+
85
+ # Set targets
86
+ if(GMP_FOUND)
87
+ # C library
88
+ if(NOT TARGET GMP::gmp)
89
+ add_library(GMP::gmp UNKNOWN IMPORTED)
90
+ set_target_properties(GMP::gmp PROPERTIES IMPORTED_LOCATION ${GMP_LIB}
91
+ INTERFACE_INCLUDE_DIRECTORIES ${GMP_INCLUDE_DIR})
92
+ endif()
93
+
94
+ # C++ library, which requires a link to the C library
95
+ if(NOT TARGET GMP::gmpxx)
96
+ add_library(GMP::gmpxx UNKNOWN IMPORTED)
97
+ set_target_properties(
98
+ GMP::gmpxx
99
+ PROPERTIES IMPORTED_LOCATION ${GMPXX_LIB}
100
+ INTERFACE_INCLUDE_DIRECTORIES ${GMPXX_INCLUDE_DIR}
101
+ INTERFACE_LINK_LIBRARIES GMP::gmp)
102
+ endif()
103
+ endif()
@@ -0,0 +1,40 @@
1
+ # Copyright (c) 2023 - 2025 Chair for Design Automation, TUM
2
+ # Copyright (c) 2025 Munich Quantum Software Company GmbH
3
+ # All rights reserved.
4
+ #
5
+ # SPDX-License-Identifier: MIT
6
+ #
7
+ # Licensed under the MIT License
8
+
9
+ # macro to add a test executable for one of the project libraries
10
+ macro(PACKAGE_ADD_TEST testname linklibs)
11
+ if(NOT TARGET ${testname})
12
+ # create an executable in which the tests will be stored
13
+ add_executable(${testname} ${ARGN})
14
+ # link the Google test infrastructure and a default main function to the test executable.
15
+ target_link_libraries(${testname} PRIVATE ${linklibs} GTest::gmock GTest::gtest_main
16
+ MQT::ProjectOptions MQT::ProjectWarnings)
17
+ # discover tests
18
+ gtest_discover_tests(
19
+ ${testname}
20
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
21
+ PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" DISCOVERY_TIMEOUT 60)
22
+ set_target_properties(${testname} PROPERTIES FOLDER tests)
23
+ endif()
24
+ endmacro()
25
+
26
+ macro(PACKAGE_ADD_TEST_WITH_WORKING_DIR testname linklibs test_working_directory)
27
+ if(NOT TARGET ${testname})
28
+ # create an executable in which the tests will be stored
29
+ add_executable(${testname} ${ARGN})
30
+ # link the Google test infrastructure and a default main function to the test executable.
31
+ target_link_libraries(${testname} PRIVATE ${linklibs} GTest::gmock GTest::gtest_main
32
+ MQT::ProjectOptions MQT::ProjectWarnings)
33
+ # discover tests
34
+ gtest_discover_tests(
35
+ ${testname}
36
+ WORKING_DIRECTORY ${test_working_directory}
37
+ PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${test_working_directory}" DISCOVERY_TIMEOUT 60)
38
+ set_target_properties(${testname} PROPERTIES FOLDER tests)
39
+ endif()
40
+ endmacro()