mqt-core 3.3.2__cp314-cp314t-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (537) hide show
  1. mqt/core/__init__.py +89 -0
  2. mqt/core/__main__.py +55 -0
  3. mqt/core/_commands.py +52 -0
  4. mqt/core/_compat/__init__.py +11 -0
  5. mqt/core/_compat/typing.py +29 -0
  6. mqt/core/_version.py +34 -0
  7. mqt/core/_version.pyi +12 -0
  8. mqt/core/bin/mqt-core-algorithms.dll +0 -0
  9. mqt/core/bin/mqt-core-circuit-optimizer.dll +0 -0
  10. mqt/core/bin/mqt-core-dd.dll +0 -0
  11. mqt/core/bin/mqt-core-ds.dll +0 -0
  12. mqt/core/bin/mqt-core-fomac.dll +0 -0
  13. mqt/core/bin/mqt-core-ir.dll +0 -0
  14. mqt/core/bin/mqt-core-na-fomac.dll +0 -0
  15. mqt/core/bin/mqt-core-na.dll +0 -0
  16. mqt/core/bin/mqt-core-qasm.dll +0 -0
  17. mqt/core/bin/mqt-core-qdmi-driver.dll +0 -0
  18. mqt/core/bin/mqt-core-qdmi-na-device.dll +0 -0
  19. mqt/core/bin/mqt-core-zx.dll +0 -0
  20. mqt/core/dd.cp314t-win_amd64.pyd +0 -0
  21. mqt/core/dd.pyi +1016 -0
  22. mqt/core/dd_evaluation.py +368 -0
  23. mqt/core/fomac.cp314t-win_amd64.pyd +0 -0
  24. mqt/core/fomac.pyi +125 -0
  25. mqt/core/include/mqt-core/algorithms/BernsteinVazirani.hpp +39 -0
  26. mqt/core/include/mqt-core/algorithms/GHZState.hpp +18 -0
  27. mqt/core/include/mqt-core/algorithms/Grover.hpp +33 -0
  28. mqt/core/include/mqt-core/algorithms/QFT.hpp +21 -0
  29. mqt/core/include/mqt-core/algorithms/QPE.hpp +30 -0
  30. mqt/core/include/mqt-core/algorithms/RandomCliffordCircuit.hpp +22 -0
  31. mqt/core/include/mqt-core/algorithms/StatePreparation.hpp +43 -0
  32. mqt/core/include/mqt-core/algorithms/WState.hpp +18 -0
  33. mqt/core/include/mqt-core/algorithms/mqt_core_algorithms_export.h +43 -0
  34. mqt/core/include/mqt-core/boost/config/abi/borland_prefix.hpp +27 -0
  35. mqt/core/include/mqt-core/boost/config/abi/borland_suffix.hpp +12 -0
  36. mqt/core/include/mqt-core/boost/config/abi/msvc_prefix.hpp +22 -0
  37. mqt/core/include/mqt-core/boost/config/abi/msvc_suffix.hpp +8 -0
  38. mqt/core/include/mqt-core/boost/config/abi_prefix.hpp +25 -0
  39. mqt/core/include/mqt-core/boost/config/abi_suffix.hpp +25 -0
  40. mqt/core/include/mqt-core/boost/config/assert_cxx03.hpp +211 -0
  41. mqt/core/include/mqt-core/boost/config/assert_cxx11.hpp +212 -0
  42. mqt/core/include/mqt-core/boost/config/assert_cxx14.hpp +47 -0
  43. mqt/core/include/mqt-core/boost/config/assert_cxx17.hpp +65 -0
  44. mqt/core/include/mqt-core/boost/config/assert_cxx20.hpp +59 -0
  45. mqt/core/include/mqt-core/boost/config/assert_cxx23.hpp +41 -0
  46. mqt/core/include/mqt-core/boost/config/assert_cxx98.hpp +23 -0
  47. mqt/core/include/mqt-core/boost/config/auto_link.hpp +525 -0
  48. mqt/core/include/mqt-core/boost/config/compiler/borland.hpp +342 -0
  49. mqt/core/include/mqt-core/boost/config/compiler/clang.hpp +370 -0
  50. mqt/core/include/mqt-core/boost/config/compiler/clang_version.hpp +89 -0
  51. mqt/core/include/mqt-core/boost/config/compiler/codegear.hpp +389 -0
  52. mqt/core/include/mqt-core/boost/config/compiler/comeau.hpp +59 -0
  53. mqt/core/include/mqt-core/boost/config/compiler/common_edg.hpp +185 -0
  54. mqt/core/include/mqt-core/boost/config/compiler/compaq_cxx.hpp +19 -0
  55. mqt/core/include/mqt-core/boost/config/compiler/cray.hpp +446 -0
  56. mqt/core/include/mqt-core/boost/config/compiler/diab.hpp +26 -0
  57. mqt/core/include/mqt-core/boost/config/compiler/digitalmars.hpp +146 -0
  58. mqt/core/include/mqt-core/boost/config/compiler/gcc.hpp +386 -0
  59. mqt/core/include/mqt-core/boost/config/compiler/gcc_xml.hpp +115 -0
  60. mqt/core/include/mqt-core/boost/config/compiler/greenhills.hpp +28 -0
  61. mqt/core/include/mqt-core/boost/config/compiler/hp_acc.hpp +153 -0
  62. mqt/core/include/mqt-core/boost/config/compiler/intel.hpp +577 -0
  63. mqt/core/include/mqt-core/boost/config/compiler/kai.hpp +33 -0
  64. mqt/core/include/mqt-core/boost/config/compiler/metrowerks.hpp +201 -0
  65. mqt/core/include/mqt-core/boost/config/compiler/mpw.hpp +143 -0
  66. mqt/core/include/mqt-core/boost/config/compiler/nvcc.hpp +64 -0
  67. mqt/core/include/mqt-core/boost/config/compiler/pathscale.hpp +141 -0
  68. mqt/core/include/mqt-core/boost/config/compiler/pgi.hpp +23 -0
  69. mqt/core/include/mqt-core/boost/config/compiler/sgi_mipspro.hpp +29 -0
  70. mqt/core/include/mqt-core/boost/config/compiler/sunpro_cc.hpp +225 -0
  71. mqt/core/include/mqt-core/boost/config/compiler/vacpp.hpp +189 -0
  72. mqt/core/include/mqt-core/boost/config/compiler/visualc.hpp +398 -0
  73. mqt/core/include/mqt-core/boost/config/compiler/xlcpp.hpp +303 -0
  74. mqt/core/include/mqt-core/boost/config/compiler/xlcpp_zos.hpp +174 -0
  75. mqt/core/include/mqt-core/boost/config/detail/cxx_composite.hpp +218 -0
  76. mqt/core/include/mqt-core/boost/config/detail/posix_features.hpp +95 -0
  77. mqt/core/include/mqt-core/boost/config/detail/select_compiler_config.hpp +157 -0
  78. mqt/core/include/mqt-core/boost/config/detail/select_platform_config.hpp +147 -0
  79. mqt/core/include/mqt-core/boost/config/detail/select_stdlib_config.hpp +121 -0
  80. mqt/core/include/mqt-core/boost/config/detail/suffix.hpp +1334 -0
  81. mqt/core/include/mqt-core/boost/config/header_deprecated.hpp +26 -0
  82. mqt/core/include/mqt-core/boost/config/helper_macros.hpp +37 -0
  83. mqt/core/include/mqt-core/boost/config/no_tr1/cmath.hpp +28 -0
  84. mqt/core/include/mqt-core/boost/config/no_tr1/complex.hpp +28 -0
  85. mqt/core/include/mqt-core/boost/config/no_tr1/functional.hpp +28 -0
  86. mqt/core/include/mqt-core/boost/config/no_tr1/memory.hpp +28 -0
  87. mqt/core/include/mqt-core/boost/config/no_tr1/utility.hpp +28 -0
  88. mqt/core/include/mqt-core/boost/config/platform/aix.hpp +33 -0
  89. mqt/core/include/mqt-core/boost/config/platform/amigaos.hpp +15 -0
  90. mqt/core/include/mqt-core/boost/config/platform/beos.hpp +26 -0
  91. mqt/core/include/mqt-core/boost/config/platform/bsd.hpp +83 -0
  92. mqt/core/include/mqt-core/boost/config/platform/cloudabi.hpp +18 -0
  93. mqt/core/include/mqt-core/boost/config/platform/cray.hpp +18 -0
  94. mqt/core/include/mqt-core/boost/config/platform/cygwin.hpp +71 -0
  95. mqt/core/include/mqt-core/boost/config/platform/haiku.hpp +31 -0
  96. mqt/core/include/mqt-core/boost/config/platform/hpux.hpp +87 -0
  97. mqt/core/include/mqt-core/boost/config/platform/irix.hpp +31 -0
  98. mqt/core/include/mqt-core/boost/config/platform/linux.hpp +106 -0
  99. mqt/core/include/mqt-core/boost/config/platform/macos.hpp +87 -0
  100. mqt/core/include/mqt-core/boost/config/platform/qnxnto.hpp +31 -0
  101. mqt/core/include/mqt-core/boost/config/platform/solaris.hpp +31 -0
  102. mqt/core/include/mqt-core/boost/config/platform/symbian.hpp +97 -0
  103. mqt/core/include/mqt-core/boost/config/platform/vms.hpp +25 -0
  104. mqt/core/include/mqt-core/boost/config/platform/vxworks.hpp +422 -0
  105. mqt/core/include/mqt-core/boost/config/platform/wasm.hpp +23 -0
  106. mqt/core/include/mqt-core/boost/config/platform/win32.hpp +90 -0
  107. mqt/core/include/mqt-core/boost/config/platform/zos.hpp +32 -0
  108. mqt/core/include/mqt-core/boost/config/pragma_message.hpp +31 -0
  109. mqt/core/include/mqt-core/boost/config/requires_threads.hpp +92 -0
  110. mqt/core/include/mqt-core/boost/config/stdlib/dinkumware.hpp +324 -0
  111. mqt/core/include/mqt-core/boost/config/stdlib/libcomo.hpp +93 -0
  112. mqt/core/include/mqt-core/boost/config/stdlib/libcpp.hpp +180 -0
  113. mqt/core/include/mqt-core/boost/config/stdlib/libstdcpp3.hpp +482 -0
  114. mqt/core/include/mqt-core/boost/config/stdlib/modena.hpp +79 -0
  115. mqt/core/include/mqt-core/boost/config/stdlib/msl.hpp +98 -0
  116. mqt/core/include/mqt-core/boost/config/stdlib/roguewave.hpp +208 -0
  117. mqt/core/include/mqt-core/boost/config/stdlib/sgi.hpp +168 -0
  118. mqt/core/include/mqt-core/boost/config/stdlib/stlport.hpp +258 -0
  119. mqt/core/include/mqt-core/boost/config/stdlib/vacpp.hpp +74 -0
  120. mqt/core/include/mqt-core/boost/config/stdlib/xlcpp_zos.hpp +61 -0
  121. mqt/core/include/mqt-core/boost/config/user.hpp +133 -0
  122. mqt/core/include/mqt-core/boost/config/warning_disable.hpp +47 -0
  123. mqt/core/include/mqt-core/boost/config/workaround.hpp +305 -0
  124. mqt/core/include/mqt-core/boost/config.hpp +67 -0
  125. mqt/core/include/mqt-core/boost/cstdint.hpp +556 -0
  126. mqt/core/include/mqt-core/boost/cxx11_char_types.hpp +70 -0
  127. mqt/core/include/mqt-core/boost/detail/workaround.hpp +10 -0
  128. mqt/core/include/mqt-core/boost/limits.hpp +146 -0
  129. mqt/core/include/mqt-core/boost/multiprecision/complex128.hpp +24 -0
  130. mqt/core/include/mqt-core/boost/multiprecision/complex_adaptor.hpp +1046 -0
  131. mqt/core/include/mqt-core/boost/multiprecision/concepts/mp_number_archetypes.hpp +257 -0
  132. mqt/core/include/mqt-core/boost/multiprecision/cpp_bin_float/io.hpp +698 -0
  133. mqt/core/include/mqt-core/boost/multiprecision/cpp_bin_float/transcendental.hpp +157 -0
  134. mqt/core/include/mqt-core/boost/multiprecision/cpp_bin_float.hpp +2297 -0
  135. mqt/core/include/mqt-core/boost/multiprecision/cpp_complex.hpp +12 -0
  136. mqt/core/include/mqt-core/boost/multiprecision/cpp_dec_float.hpp +3690 -0
  137. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/add.hpp +368 -0
  138. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/add_unsigned.hpp +387 -0
  139. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/bitwise.hpp +889 -0
  140. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/checked.hpp +178 -0
  141. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/comparison.hpp +374 -0
  142. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/cpp_int_config.hpp +161 -0
  143. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/divide.hpp +703 -0
  144. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/import_export.hpp +248 -0
  145. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/intel_intrinsics.hpp +138 -0
  146. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/limits.hpp +282 -0
  147. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/literals.hpp +295 -0
  148. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/misc.hpp +1457 -0
  149. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/multiply.hpp +848 -0
  150. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/serialize.hpp +211 -0
  151. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/value_pack.hpp +42 -0
  152. mqt/core/include/mqt-core/boost/multiprecision/cpp_int.hpp +2360 -0
  153. mqt/core/include/mqt-core/boost/multiprecision/debug_adaptor.hpp +760 -0
  154. mqt/core/include/mqt-core/boost/multiprecision/detail/assert.hpp +29 -0
  155. mqt/core/include/mqt-core/boost/multiprecision/detail/atomic.hpp +62 -0
  156. mqt/core/include/mqt-core/boost/multiprecision/detail/bitscan.hpp +317 -0
  157. mqt/core/include/mqt-core/boost/multiprecision/detail/check_cpp11_config.hpp +64 -0
  158. mqt/core/include/mqt-core/boost/multiprecision/detail/constexpr.hpp +88 -0
  159. mqt/core/include/mqt-core/boost/multiprecision/detail/default_ops.hpp +4052 -0
  160. mqt/core/include/mqt-core/boost/multiprecision/detail/digits.hpp +49 -0
  161. mqt/core/include/mqt-core/boost/multiprecision/detail/dynamic_array.hpp +44 -0
  162. mqt/core/include/mqt-core/boost/multiprecision/detail/empty_value.hpp +87 -0
  163. mqt/core/include/mqt-core/boost/multiprecision/detail/endian.hpp +35 -0
  164. mqt/core/include/mqt-core/boost/multiprecision/detail/et_ops.hpp +1831 -0
  165. mqt/core/include/mqt-core/boost/multiprecision/detail/float128_functions.hpp +95 -0
  166. mqt/core/include/mqt-core/boost/multiprecision/detail/float_string_cvt.hpp +333 -0
  167. mqt/core/include/mqt-core/boost/multiprecision/detail/fpclassify.hpp +101 -0
  168. mqt/core/include/mqt-core/boost/multiprecision/detail/functions/constants.hpp +288 -0
  169. mqt/core/include/mqt-core/boost/multiprecision/detail/functions/pow.hpp +905 -0
  170. mqt/core/include/mqt-core/boost/multiprecision/detail/functions/trig.hpp +1058 -0
  171. mqt/core/include/mqt-core/boost/multiprecision/detail/functions/trunc.hpp +82 -0
  172. mqt/core/include/mqt-core/boost/multiprecision/detail/generic_interconvert.hpp +687 -0
  173. mqt/core/include/mqt-core/boost/multiprecision/detail/hash.hpp +56 -0
  174. mqt/core/include/mqt-core/boost/multiprecision/detail/integer_ops.hpp +474 -0
  175. mqt/core/include/mqt-core/boost/multiprecision/detail/itos.hpp +39 -0
  176. mqt/core/include/mqt-core/boost/multiprecision/detail/min_max.hpp +106 -0
  177. mqt/core/include/mqt-core/boost/multiprecision/detail/no_et_ops.hpp +661 -0
  178. mqt/core/include/mqt-core/boost/multiprecision/detail/no_exceptions_support.hpp +55 -0
  179. mqt/core/include/mqt-core/boost/multiprecision/detail/number_base.hpp +1656 -0
  180. mqt/core/include/mqt-core/boost/multiprecision/detail/number_compare.hpp +848 -0
  181. mqt/core/include/mqt-core/boost/multiprecision/detail/precision.hpp +313 -0
  182. mqt/core/include/mqt-core/boost/multiprecision/detail/rebind.hpp +19 -0
  183. mqt/core/include/mqt-core/boost/multiprecision/detail/standalone_config.hpp +148 -0
  184. mqt/core/include/mqt-core/boost/multiprecision/detail/static_array.hpp +42 -0
  185. mqt/core/include/mqt-core/boost/multiprecision/detail/string_helpers.hpp +48 -0
  186. mqt/core/include/mqt-core/boost/multiprecision/detail/tables.hpp +80 -0
  187. mqt/core/include/mqt-core/boost/multiprecision/detail/ublas_interop.hpp +75 -0
  188. mqt/core/include/mqt-core/boost/multiprecision/detail/uniform_int_distribution.hpp +212 -0
  189. mqt/core/include/mqt-core/boost/multiprecision/detail/utype_helper.hpp +374 -0
  190. mqt/core/include/mqt-core/boost/multiprecision/eigen.hpp +248 -0
  191. mqt/core/include/mqt-core/boost/multiprecision/float128.hpp +920 -0
  192. mqt/core/include/mqt-core/boost/multiprecision/fwd.hpp +268 -0
  193. mqt/core/include/mqt-core/boost/multiprecision/gmp.hpp +4060 -0
  194. mqt/core/include/mqt-core/boost/multiprecision/integer.hpp +363 -0
  195. mqt/core/include/mqt-core/boost/multiprecision/logged_adaptor.hpp +834 -0
  196. mqt/core/include/mqt-core/boost/multiprecision/miller_rabin.hpp +221 -0
  197. mqt/core/include/mqt-core/boost/multiprecision/mpc.hpp +1721 -0
  198. mqt/core/include/mqt-core/boost/multiprecision/mpfi.hpp +2559 -0
  199. mqt/core/include/mqt-core/boost/multiprecision/mpfr.hpp +3644 -0
  200. mqt/core/include/mqt-core/boost/multiprecision/number.hpp +2500 -0
  201. mqt/core/include/mqt-core/boost/multiprecision/random.hpp +23 -0
  202. mqt/core/include/mqt-core/boost/multiprecision/rational_adaptor.hpp +1289 -0
  203. mqt/core/include/mqt-core/boost/multiprecision/tommath.hpp +1034 -0
  204. mqt/core/include/mqt-core/boost/multiprecision/traits/explicit_conversion.hpp +67 -0
  205. mqt/core/include/mqt-core/boost/multiprecision/traits/extract_exponent_type.hpp +28 -0
  206. mqt/core/include/mqt-core/boost/multiprecision/traits/is_backend.hpp +91 -0
  207. mqt/core/include/mqt-core/boost/multiprecision/traits/is_byte_container.hpp +51 -0
  208. mqt/core/include/mqt-core/boost/multiprecision/traits/is_complex.hpp +22 -0
  209. mqt/core/include/mqt-core/boost/multiprecision/traits/is_convertible_arithmetic.hpp +51 -0
  210. mqt/core/include/mqt-core/boost/multiprecision/traits/is_restricted_conversion.hpp +47 -0
  211. mqt/core/include/mqt-core/boost/multiprecision/traits/is_variable_precision.hpp +25 -0
  212. mqt/core/include/mqt-core/boost/multiprecision/traits/max_digits10.hpp +79 -0
  213. mqt/core/include/mqt-core/boost/multiprecision/traits/std_integer_traits.hpp +90 -0
  214. mqt/core/include/mqt-core/boost/multiprecision/traits/transcendental_reduction_type.hpp +21 -0
  215. mqt/core/include/mqt-core/boost/version.hpp +32 -0
  216. mqt/core/include/mqt-core/circuit_optimizer/CircuitOptimizer.hpp +119 -0
  217. mqt/core/include/mqt-core/circuit_optimizer/mqt_core_circuit_optimizer_export.h +43 -0
  218. mqt/core/include/mqt-core/datastructures/DirectedAcyclicGraph.hpp +117 -0
  219. mqt/core/include/mqt-core/datastructures/DirectedGraph.hpp +158 -0
  220. mqt/core/include/mqt-core/datastructures/DisjointSet.hpp +50 -0
  221. mqt/core/include/mqt-core/datastructures/Layer.hpp +172 -0
  222. mqt/core/include/mqt-core/datastructures/SymmetricMatrix.hpp +57 -0
  223. mqt/core/include/mqt-core/datastructures/UndirectedGraph.hpp +227 -0
  224. mqt/core/include/mqt-core/datastructures/mqt_core_ds_export.h +43 -0
  225. mqt/core/include/mqt-core/dd/Approximation.hpp +45 -0
  226. mqt/core/include/mqt-core/dd/CachedEdge.hpp +174 -0
  227. mqt/core/include/mqt-core/dd/Complex.hpp +165 -0
  228. mqt/core/include/mqt-core/dd/ComplexNumbers.hpp +150 -0
  229. mqt/core/include/mqt-core/dd/ComplexValue.hpp +184 -0
  230. mqt/core/include/mqt-core/dd/ComputeTable.hpp +183 -0
  231. mqt/core/include/mqt-core/dd/DDDefinitions.hpp +139 -0
  232. mqt/core/include/mqt-core/dd/DDpackageConfig.hpp +104 -0
  233. mqt/core/include/mqt-core/dd/DensityNoiseTable.hpp +114 -0
  234. mqt/core/include/mqt-core/dd/Edge.hpp +416 -0
  235. mqt/core/include/mqt-core/dd/Export.hpp +438 -0
  236. mqt/core/include/mqt-core/dd/FunctionalityConstruction.hpp +75 -0
  237. mqt/core/include/mqt-core/dd/GateMatrixDefinitions.hpp +43 -0
  238. mqt/core/include/mqt-core/dd/LinkedListBase.hpp +45 -0
  239. mqt/core/include/mqt-core/dd/MemoryManager.hpp +193 -0
  240. mqt/core/include/mqt-core/dd/Node.hpp +223 -0
  241. mqt/core/include/mqt-core/dd/NoiseFunctionality.hpp +144 -0
  242. mqt/core/include/mqt-core/dd/Operations.hpp +306 -0
  243. mqt/core/include/mqt-core/dd/Package.hpp +2036 -0
  244. mqt/core/include/mqt-core/dd/Package_fwd.hpp +22 -0
  245. mqt/core/include/mqt-core/dd/RealNumber.hpp +255 -0
  246. mqt/core/include/mqt-core/dd/RealNumberUniqueTable.hpp +217 -0
  247. mqt/core/include/mqt-core/dd/Simulation.hpp +98 -0
  248. mqt/core/include/mqt-core/dd/StateGeneration.hpp +143 -0
  249. mqt/core/include/mqt-core/dd/StochasticNoiseOperationTable.hpp +88 -0
  250. mqt/core/include/mqt-core/dd/UnaryComputeTable.hpp +121 -0
  251. mqt/core/include/mqt-core/dd/UniqueTable.hpp +243 -0
  252. mqt/core/include/mqt-core/dd/mqt_core_dd_export.h +43 -0
  253. mqt/core/include/mqt-core/dd/statistics/MemoryManagerStatistics.hpp +84 -0
  254. mqt/core/include/mqt-core/dd/statistics/PackageStatistics.hpp +55 -0
  255. mqt/core/include/mqt-core/dd/statistics/Statistics.hpp +48 -0
  256. mqt/core/include/mqt-core/dd/statistics/TableStatistics.hpp +79 -0
  257. mqt/core/include/mqt-core/dd/statistics/UniqueTableStatistics.hpp +31 -0
  258. mqt/core/include/mqt-core/fomac/FoMaC.hpp +568 -0
  259. mqt/core/include/mqt-core/ir/Definitions.hpp +108 -0
  260. mqt/core/include/mqt-core/ir/Permutation.hpp +213 -0
  261. mqt/core/include/mqt-core/ir/QuantumComputation.hpp +596 -0
  262. mqt/core/include/mqt-core/ir/Register.hpp +125 -0
  263. mqt/core/include/mqt-core/ir/mqt_core_ir_export.h +43 -0
  264. mqt/core/include/mqt-core/ir/operations/AodOperation.hpp +92 -0
  265. mqt/core/include/mqt-core/ir/operations/CompoundOperation.hpp +212 -0
  266. mqt/core/include/mqt-core/ir/operations/Control.hpp +142 -0
  267. mqt/core/include/mqt-core/ir/operations/Expression.hpp +847 -0
  268. mqt/core/include/mqt-core/ir/operations/IfElseOperation.hpp +169 -0
  269. mqt/core/include/mqt-core/ir/operations/NonUnitaryOperation.hpp +118 -0
  270. mqt/core/include/mqt-core/ir/operations/OpType.hpp +120 -0
  271. mqt/core/include/mqt-core/ir/operations/OpType.inc +76 -0
  272. mqt/core/include/mqt-core/ir/operations/Operation.hpp +247 -0
  273. mqt/core/include/mqt-core/ir/operations/StandardOperation.hpp +140 -0
  274. mqt/core/include/mqt-core/ir/operations/SymbolicOperation.hpp +144 -0
  275. mqt/core/include/mqt-core/mqt_na_qdmi/device.h +602 -0
  276. mqt/core/include/mqt-core/mqt_na_qdmi/types.h +78 -0
  277. mqt/core/include/mqt-core/na/NAComputation.hpp +185 -0
  278. mqt/core/include/mqt-core/na/device/Device.hpp +410 -0
  279. mqt/core/include/mqt-core/na/device/DeviceMemberInitializers.hpp +724 -0
  280. mqt/core/include/mqt-core/na/device/Generator.hpp +447 -0
  281. mqt/core/include/mqt-core/na/entities/Atom.hpp +62 -0
  282. mqt/core/include/mqt-core/na/entities/Location.hpp +154 -0
  283. mqt/core/include/mqt-core/na/entities/Zone.hpp +95 -0
  284. mqt/core/include/mqt-core/na/fomac/Device.hpp +169 -0
  285. mqt/core/include/mqt-core/na/mqt_core_na_export.h +43 -0
  286. mqt/core/include/mqt-core/na/operations/GlobalCZOp.hpp +38 -0
  287. mqt/core/include/mqt-core/na/operations/GlobalOp.hpp +58 -0
  288. mqt/core/include/mqt-core/na/operations/GlobalRYOp.hpp +42 -0
  289. mqt/core/include/mqt-core/na/operations/LoadOp.hpp +89 -0
  290. mqt/core/include/mqt-core/na/operations/LocalOp.hpp +56 -0
  291. mqt/core/include/mqt-core/na/operations/LocalRZOp.hpp +42 -0
  292. mqt/core/include/mqt-core/na/operations/LocalUOp.hpp +49 -0
  293. mqt/core/include/mqt-core/na/operations/MoveOp.hpp +66 -0
  294. mqt/core/include/mqt-core/na/operations/Op.hpp +62 -0
  295. mqt/core/include/mqt-core/na/operations/ShuttlingOp.hpp +51 -0
  296. mqt/core/include/mqt-core/na/operations/StoreOp.hpp +87 -0
  297. mqt/core/include/mqt-core/qasm3/Exception.hpp +85 -0
  298. mqt/core/include/mqt-core/qasm3/Gate.hpp +65 -0
  299. mqt/core/include/mqt-core/qasm3/Importer.hpp +192 -0
  300. mqt/core/include/mqt-core/qasm3/InstVisitor.hpp +145 -0
  301. mqt/core/include/mqt-core/qasm3/NestedEnvironment.hpp +41 -0
  302. mqt/core/include/mqt-core/qasm3/Parser.hpp +170 -0
  303. mqt/core/include/mqt-core/qasm3/Scanner.hpp +73 -0
  304. mqt/core/include/mqt-core/qasm3/Statement.hpp +486 -0
  305. mqt/core/include/mqt-core/qasm3/Statement_fwd.hpp +39 -0
  306. mqt/core/include/mqt-core/qasm3/StdGates.hpp +232 -0
  307. mqt/core/include/mqt-core/qasm3/Token.hpp +198 -0
  308. mqt/core/include/mqt-core/qasm3/Types.hpp +238 -0
  309. mqt/core/include/mqt-core/qasm3/Types_fwd.hpp +22 -0
  310. mqt/core/include/mqt-core/qasm3/mqt_core_qasm_export.h +43 -0
  311. mqt/core/include/mqt-core/qasm3/passes/CompilerPass.hpp +22 -0
  312. mqt/core/include/mqt-core/qasm3/passes/ConstEvalPass.hpp +102 -0
  313. mqt/core/include/mqt-core/qasm3/passes/TypeCheckPass.hpp +124 -0
  314. mqt/core/include/mqt-core/qdmi/Driver.hpp +431 -0
  315. mqt/core/include/mqt-core/zx/FunctionalityConstruction.hpp +125 -0
  316. mqt/core/include/mqt-core/zx/Rational.hpp +318 -0
  317. mqt/core/include/mqt-core/zx/Rules.hpp +132 -0
  318. mqt/core/include/mqt-core/zx/Simplify.hpp +182 -0
  319. mqt/core/include/mqt-core/zx/Utils.hpp +212 -0
  320. mqt/core/include/mqt-core/zx/ZXDefinitions.hpp +93 -0
  321. mqt/core/include/mqt-core/zx/ZXDiagram.hpp +480 -0
  322. mqt/core/include/mqt-core/zx/mqt_core_zx_export.h +43 -0
  323. mqt/core/include/nlohmann/adl_serializer.hpp +55 -0
  324. mqt/core/include/nlohmann/byte_container_with_subtype.hpp +103 -0
  325. mqt/core/include/nlohmann/detail/abi_macros.hpp +111 -0
  326. mqt/core/include/nlohmann/detail/conversions/from_json.hpp +577 -0
  327. mqt/core/include/nlohmann/detail/conversions/to_chars.hpp +1118 -0
  328. mqt/core/include/nlohmann/detail/conversions/to_json.hpp +479 -0
  329. mqt/core/include/nlohmann/detail/exceptions.hpp +291 -0
  330. mqt/core/include/nlohmann/detail/hash.hpp +129 -0
  331. mqt/core/include/nlohmann/detail/input/binary_reader.hpp +3068 -0
  332. mqt/core/include/nlohmann/detail/input/input_adapters.hpp +549 -0
  333. mqt/core/include/nlohmann/detail/input/json_sax.hpp +986 -0
  334. mqt/core/include/nlohmann/detail/input/lexer.hpp +1643 -0
  335. mqt/core/include/nlohmann/detail/input/parser.hpp +519 -0
  336. mqt/core/include/nlohmann/detail/input/position_t.hpp +37 -0
  337. mqt/core/include/nlohmann/detail/iterators/internal_iterator.hpp +35 -0
  338. mqt/core/include/nlohmann/detail/iterators/iter_impl.hpp +760 -0
  339. mqt/core/include/nlohmann/detail/iterators/iteration_proxy.hpp +235 -0
  340. mqt/core/include/nlohmann/detail/iterators/iterator_traits.hpp +61 -0
  341. mqt/core/include/nlohmann/detail/iterators/json_reverse_iterator.hpp +130 -0
  342. mqt/core/include/nlohmann/detail/iterators/primitive_iterator.hpp +132 -0
  343. mqt/core/include/nlohmann/detail/json_custom_base_class.hpp +39 -0
  344. mqt/core/include/nlohmann/detail/json_pointer.hpp +988 -0
  345. mqt/core/include/nlohmann/detail/json_ref.hpp +78 -0
  346. mqt/core/include/nlohmann/detail/macro_scope.hpp +595 -0
  347. mqt/core/include/nlohmann/detail/macro_unscope.hpp +46 -0
  348. mqt/core/include/nlohmann/detail/meta/call_std/begin.hpp +17 -0
  349. mqt/core/include/nlohmann/detail/meta/call_std/end.hpp +17 -0
  350. mqt/core/include/nlohmann/detail/meta/cpp_future.hpp +171 -0
  351. mqt/core/include/nlohmann/detail/meta/detected.hpp +70 -0
  352. mqt/core/include/nlohmann/detail/meta/identity_tag.hpp +21 -0
  353. mqt/core/include/nlohmann/detail/meta/is_sax.hpp +159 -0
  354. mqt/core/include/nlohmann/detail/meta/std_fs.hpp +29 -0
  355. mqt/core/include/nlohmann/detail/meta/type_traits.hpp +795 -0
  356. mqt/core/include/nlohmann/detail/meta/void_t.hpp +24 -0
  357. mqt/core/include/nlohmann/detail/output/binary_writer.hpp +1850 -0
  358. mqt/core/include/nlohmann/detail/output/output_adapters.hpp +147 -0
  359. mqt/core/include/nlohmann/detail/output/serializer.hpp +988 -0
  360. mqt/core/include/nlohmann/detail/string_concat.hpp +146 -0
  361. mqt/core/include/nlohmann/detail/string_escape.hpp +72 -0
  362. mqt/core/include/nlohmann/detail/string_utils.hpp +37 -0
  363. mqt/core/include/nlohmann/detail/value_t.hpp +118 -0
  364. mqt/core/include/nlohmann/json.hpp +5306 -0
  365. mqt/core/include/nlohmann/json_fwd.hpp +75 -0
  366. mqt/core/include/nlohmann/ordered_map.hpp +359 -0
  367. mqt/core/include/nlohmann/thirdparty/hedley/hedley.hpp +2045 -0
  368. mqt/core/include/nlohmann/thirdparty/hedley/hedley_undef.hpp +158 -0
  369. mqt/core/include/qdmi/qdmi/client.h +990 -0
  370. mqt/core/include/qdmi/qdmi/constants.h +1139 -0
  371. mqt/core/include/qdmi/qdmi/device.h +602 -0
  372. mqt/core/include/qdmi/qdmi/types.h +78 -0
  373. mqt/core/include/spdlog/async.h +99 -0
  374. mqt/core/include/spdlog/async_logger-inl.h +84 -0
  375. mqt/core/include/spdlog/async_logger.h +74 -0
  376. mqt/core/include/spdlog/cfg/argv.h +40 -0
  377. mqt/core/include/spdlog/cfg/env.h +36 -0
  378. mqt/core/include/spdlog/cfg/helpers-inl.h +107 -0
  379. mqt/core/include/spdlog/cfg/helpers.h +29 -0
  380. mqt/core/include/spdlog/common-inl.h +68 -0
  381. mqt/core/include/spdlog/common.h +406 -0
  382. mqt/core/include/spdlog/details/backtracer-inl.h +63 -0
  383. mqt/core/include/spdlog/details/backtracer.h +45 -0
  384. mqt/core/include/spdlog/details/circular_q.h +115 -0
  385. mqt/core/include/spdlog/details/console_globals.h +28 -0
  386. mqt/core/include/spdlog/details/file_helper-inl.h +153 -0
  387. mqt/core/include/spdlog/details/file_helper.h +61 -0
  388. mqt/core/include/spdlog/details/fmt_helper.h +141 -0
  389. mqt/core/include/spdlog/details/log_msg-inl.h +44 -0
  390. mqt/core/include/spdlog/details/log_msg.h +40 -0
  391. mqt/core/include/spdlog/details/log_msg_buffer-inl.h +54 -0
  392. mqt/core/include/spdlog/details/log_msg_buffer.h +32 -0
  393. mqt/core/include/spdlog/details/mpmc_blocking_q.h +177 -0
  394. mqt/core/include/spdlog/details/null_mutex.h +35 -0
  395. mqt/core/include/spdlog/details/os-inl.h +606 -0
  396. mqt/core/include/spdlog/details/os.h +127 -0
  397. mqt/core/include/spdlog/details/periodic_worker-inl.h +26 -0
  398. mqt/core/include/spdlog/details/periodic_worker.h +58 -0
  399. mqt/core/include/spdlog/details/registry-inl.h +270 -0
  400. mqt/core/include/spdlog/details/registry.h +131 -0
  401. mqt/core/include/spdlog/details/synchronous_factory.h +22 -0
  402. mqt/core/include/spdlog/details/tcp_client-windows.h +135 -0
  403. mqt/core/include/spdlog/details/tcp_client.h +127 -0
  404. mqt/core/include/spdlog/details/thread_pool-inl.h +126 -0
  405. mqt/core/include/spdlog/details/thread_pool.h +117 -0
  406. mqt/core/include/spdlog/details/udp_client-windows.h +98 -0
  407. mqt/core/include/spdlog/details/udp_client.h +81 -0
  408. mqt/core/include/spdlog/details/windows_include.h +11 -0
  409. mqt/core/include/spdlog/fmt/bin_to_hex.h +224 -0
  410. mqt/core/include/spdlog/fmt/bundled/args.h +220 -0
  411. mqt/core/include/spdlog/fmt/bundled/base.h +2989 -0
  412. mqt/core/include/spdlog/fmt/bundled/chrono.h +2330 -0
  413. mqt/core/include/spdlog/fmt/bundled/color.h +637 -0
  414. mqt/core/include/spdlog/fmt/bundled/compile.h +539 -0
  415. mqt/core/include/spdlog/fmt/bundled/core.h +5 -0
  416. mqt/core/include/spdlog/fmt/bundled/fmt.license.rst +27 -0
  417. mqt/core/include/spdlog/fmt/bundled/format-inl.h +1948 -0
  418. mqt/core/include/spdlog/fmt/bundled/format.h +4244 -0
  419. mqt/core/include/spdlog/fmt/bundled/os.h +427 -0
  420. mqt/core/include/spdlog/fmt/bundled/ostream.h +167 -0
  421. mqt/core/include/spdlog/fmt/bundled/printf.h +633 -0
  422. mqt/core/include/spdlog/fmt/bundled/ranges.h +850 -0
  423. mqt/core/include/spdlog/fmt/bundled/std.h +728 -0
  424. mqt/core/include/spdlog/fmt/bundled/xchar.h +369 -0
  425. mqt/core/include/spdlog/fmt/chrono.h +23 -0
  426. mqt/core/include/spdlog/fmt/compile.h +23 -0
  427. mqt/core/include/spdlog/fmt/fmt.h +30 -0
  428. mqt/core/include/spdlog/fmt/ostr.h +23 -0
  429. mqt/core/include/spdlog/fmt/ranges.h +23 -0
  430. mqt/core/include/spdlog/fmt/std.h +24 -0
  431. mqt/core/include/spdlog/fmt/xchar.h +23 -0
  432. mqt/core/include/spdlog/formatter.h +17 -0
  433. mqt/core/include/spdlog/fwd.h +18 -0
  434. mqt/core/include/spdlog/logger-inl.h +198 -0
  435. mqt/core/include/spdlog/logger.h +379 -0
  436. mqt/core/include/spdlog/mdc.h +52 -0
  437. mqt/core/include/spdlog/pattern_formatter-inl.h +1340 -0
  438. mqt/core/include/spdlog/pattern_formatter.h +118 -0
  439. mqt/core/include/spdlog/sinks/android_sink.h +137 -0
  440. mqt/core/include/spdlog/sinks/ansicolor_sink-inl.h +142 -0
  441. mqt/core/include/spdlog/sinks/ansicolor_sink.h +116 -0
  442. mqt/core/include/spdlog/sinks/base_sink-inl.h +59 -0
  443. mqt/core/include/spdlog/sinks/base_sink.h +51 -0
  444. mqt/core/include/spdlog/sinks/basic_file_sink-inl.h +48 -0
  445. mqt/core/include/spdlog/sinks/basic_file_sink.h +66 -0
  446. mqt/core/include/spdlog/sinks/callback_sink.h +56 -0
  447. mqt/core/include/spdlog/sinks/daily_file_sink.h +254 -0
  448. mqt/core/include/spdlog/sinks/dist_sink.h +81 -0
  449. mqt/core/include/spdlog/sinks/dup_filter_sink.h +91 -0
  450. mqt/core/include/spdlog/sinks/hourly_file_sink.h +193 -0
  451. mqt/core/include/spdlog/sinks/kafka_sink.h +119 -0
  452. mqt/core/include/spdlog/sinks/mongo_sink.h +108 -0
  453. mqt/core/include/spdlog/sinks/msvc_sink.h +68 -0
  454. mqt/core/include/spdlog/sinks/null_sink.h +41 -0
  455. mqt/core/include/spdlog/sinks/ostream_sink.h +43 -0
  456. mqt/core/include/spdlog/sinks/qt_sinks.h +304 -0
  457. mqt/core/include/spdlog/sinks/ringbuffer_sink.h +67 -0
  458. mqt/core/include/spdlog/sinks/rotating_file_sink-inl.h +179 -0
  459. mqt/core/include/spdlog/sinks/rotating_file_sink.h +93 -0
  460. mqt/core/include/spdlog/sinks/sink-inl.h +22 -0
  461. mqt/core/include/spdlog/sinks/sink.h +34 -0
  462. mqt/core/include/spdlog/sinks/stdout_color_sinks-inl.h +38 -0
  463. mqt/core/include/spdlog/sinks/stdout_color_sinks.h +49 -0
  464. mqt/core/include/spdlog/sinks/stdout_sinks-inl.h +127 -0
  465. mqt/core/include/spdlog/sinks/stdout_sinks.h +84 -0
  466. mqt/core/include/spdlog/sinks/syslog_sink.h +104 -0
  467. mqt/core/include/spdlog/sinks/systemd_sink.h +121 -0
  468. mqt/core/include/spdlog/sinks/tcp_sink.h +75 -0
  469. mqt/core/include/spdlog/sinks/udp_sink.h +69 -0
  470. mqt/core/include/spdlog/sinks/win_eventlog_sink.h +260 -0
  471. mqt/core/include/spdlog/sinks/wincolor_sink-inl.h +172 -0
  472. mqt/core/include/spdlog/sinks/wincolor_sink.h +82 -0
  473. mqt/core/include/spdlog/spdlog-inl.h +96 -0
  474. mqt/core/include/spdlog/spdlog.h +357 -0
  475. mqt/core/include/spdlog/stopwatch.h +66 -0
  476. mqt/core/include/spdlog/tweakme.h +148 -0
  477. mqt/core/include/spdlog/version.h +11 -0
  478. mqt/core/ir/__init__.pyi +2078 -0
  479. mqt/core/ir/operations.pyi +1011 -0
  480. mqt/core/ir/registers.pyi +91 -0
  481. mqt/core/ir/symbolic.pyi +177 -0
  482. mqt/core/ir.cp314t-win_amd64.pyd +0 -0
  483. mqt/core/lib/mqt-core-algorithms.lib +0 -0
  484. mqt/core/lib/mqt-core-circuit-optimizer.lib +0 -0
  485. mqt/core/lib/mqt-core-dd.lib +0 -0
  486. mqt/core/lib/mqt-core-ds.lib +0 -0
  487. mqt/core/lib/mqt-core-fomac.lib +0 -0
  488. mqt/core/lib/mqt-core-ir.lib +0 -0
  489. mqt/core/lib/mqt-core-na-fomac.lib +0 -0
  490. mqt/core/lib/mqt-core-na.lib +0 -0
  491. mqt/core/lib/mqt-core-qasm.lib +0 -0
  492. mqt/core/lib/mqt-core-qdmi-driver.lib +0 -0
  493. mqt/core/lib/mqt-core-qdmi-na-device-gen.lib +0 -0
  494. mqt/core/lib/mqt-core-qdmi-na-device.lib +0 -0
  495. mqt/core/lib/mqt-core-zx.lib +0 -0
  496. mqt/core/lib/pkgconfig/spdlog.pc +13 -0
  497. mqt/core/lib/spdlog.lib +0 -0
  498. mqt/core/na/__init__.py +12 -0
  499. mqt/core/na/fomac.cp314t-win_amd64.pyd +0 -0
  500. mqt/core/na/fomac.pyi +117 -0
  501. mqt/core/nlohmann_json.natvis +278 -0
  502. mqt/core/plugins/__init__.py +9 -0
  503. mqt/core/plugins/qiskit/__init__.py +19 -0
  504. mqt/core/plugins/qiskit/mqt_to_qiskit.py +420 -0
  505. mqt/core/plugins/qiskit/qiskit_to_mqt.py +562 -0
  506. mqt/core/py.typed +2 -0
  507. mqt/core/share/cmake/mqt-core/AddMQTPythonBinding.cmake +55 -0
  508. mqt/core/share/cmake/mqt-core/Cache.cmake +33 -0
  509. mqt/core/share/cmake/mqt-core/FindGMP.cmake +103 -0
  510. mqt/core/share/cmake/mqt-core/PackageAddTest.cmake +46 -0
  511. mqt/core/share/cmake/mqt-core/PreventInSourceBuilds.cmake +25 -0
  512. mqt/core/share/cmake/mqt-core/StandardProjectSettings.cmake +87 -0
  513. mqt/core/share/cmake/mqt-core/mqt-core-config-version.cmake +85 -0
  514. mqt/core/share/cmake/mqt-core/mqt-core-config.cmake +52 -0
  515. mqt/core/share/cmake/mqt-core/mqt-core-targets-release.cmake +141 -0
  516. mqt/core/share/cmake/mqt-core/mqt-core-targets.cmake +445 -0
  517. mqt/core/share/cmake/nlohmann_json/nlohmann_jsonConfig.cmake +15 -0
  518. mqt/core/share/cmake/nlohmann_json/nlohmann_jsonConfigVersion.cmake +20 -0
  519. mqt/core/share/cmake/nlohmann_json/nlohmann_jsonTargets.cmake +110 -0
  520. mqt/core/share/cmake/qdmi/Cache.cmake +44 -0
  521. mqt/core/share/cmake/qdmi/PrefixHandling.cmake +78 -0
  522. mqt/core/share/cmake/qdmi/prefix_defs.txt +26 -0
  523. mqt/core/share/cmake/qdmi/qdmi-config-version.cmake +85 -0
  524. mqt/core/share/cmake/qdmi/qdmi-config.cmake +42 -0
  525. mqt/core/share/cmake/qdmi/qdmi-targets.cmake +129 -0
  526. mqt/core/share/cmake/spdlog/spdlogConfig.cmake +44 -0
  527. mqt/core/share/cmake/spdlog/spdlogConfigTargets-release.cmake +19 -0
  528. mqt/core/share/cmake/spdlog/spdlogConfigTargets.cmake +121 -0
  529. mqt/core/share/cmake/spdlog/spdlogConfigVersion.cmake +65 -0
  530. mqt/core/share/pkgconfig/nlohmann_json.pc +7 -0
  531. mqt_core-3.3.2.dist-info/DELVEWHEEL +2 -0
  532. mqt_core-3.3.2.dist-info/METADATA +210 -0
  533. mqt_core-3.3.2.dist-info/RECORD +537 -0
  534. mqt_core-3.3.2.dist-info/WHEEL +5 -0
  535. mqt_core-3.3.2.dist-info/entry_points.txt +4 -0
  536. mqt_core-3.3.2.dist-info/licenses/LICENSE.md +22 -0
  537. mqt_core.libs/msvcp140.dll +0 -0
@@ -0,0 +1,1011 @@
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
+ from abc import ABC, abstractmethod
10
+ from collections.abc import Iterable, Mapping, MutableSequence, Sequence
11
+ from enum import Enum
12
+ from typing import overload
13
+
14
+ from .registers import ClassicalRegister
15
+ from .symbolic import Expression, Variable
16
+
17
+ __all__ = [
18
+ "ComparisonKind",
19
+ "CompoundOperation",
20
+ "Control",
21
+ "IfElseOperation",
22
+ "NonUnitaryOperation",
23
+ "OpType",
24
+ "Operation",
25
+ "StandardOperation",
26
+ "SymbolicOperation",
27
+ ]
28
+
29
+ class Control:
30
+ """A control is a pair of a qubit and a type. The type can be either positive or negative.
31
+
32
+ Args:
33
+ qubit: The qubit that is the control.
34
+ type_: The type of the control (default is positive).
35
+ """
36
+
37
+ class Type(Enum):
38
+ """Enumeration of control types.
39
+
40
+ It can be either positive or negative.
41
+ """
42
+
43
+ Neg = ...
44
+ r"""A negative control.
45
+
46
+ The operation that is controlled on this qubit is only executed if the qubit is in the :math:`|0\rangle` state.
47
+ """
48
+ Pos = ...
49
+ r"""A positive control.
50
+
51
+ The operation that is controlled on this qubit is only executed if the qubit is in the :math:`|1\rangle` state.
52
+ """
53
+
54
+ qubit: int
55
+ type_: Type
56
+
57
+ def __init__(self, qubit: int, type_: Type = ...) -> None:
58
+ """Initialize a control.
59
+
60
+ Args:
61
+ qubit: The qubit that is the control.
62
+ type_: The type of the control (default is positive).
63
+ """
64
+
65
+ def __eq__(self, other: object) -> bool:
66
+ """Check if two controls are equal."""
67
+
68
+ def __ne__(self, other: object) -> bool:
69
+ """Check if two controls are not equal."""
70
+
71
+ def __hash__(self) -> int:
72
+ """Get the hash of the control."""
73
+
74
+ class OpType(Enum):
75
+ """Enumeration of operation types."""
76
+
77
+ barrier = ...
78
+ """
79
+ A barrier operation. It is used to separate operations in the circuit.
80
+
81
+ See Also:
82
+ :meth:`mqt.core.ir.QuantumComputation.barrier`
83
+ """
84
+ if_else = ...
85
+ """
86
+ An if-else operation.
87
+
88
+ Used to control the execution of an operation based on the value of a classical register.
89
+
90
+ See Also:
91
+ :meth:`mqt.core.ir.QuantumComputation.if_else`
92
+ """
93
+ compound = ...
94
+ """
95
+ A compound operation. It is used to group multiple operations into a single operation.
96
+
97
+ See Also:
98
+ :class:`.CompoundOperation`
99
+ """
100
+ dcx = ...
101
+ """
102
+ A DCX gate.
103
+
104
+ See Also:
105
+ :meth:`mqt.core.ir.QuantumComputation.dcx`
106
+ """
107
+ ecr = ...
108
+ """
109
+ An ECR gate.
110
+
111
+ See Also:
112
+ :meth:`mqt.core.ir.QuantumComputation.ecr`
113
+ """
114
+ gphase = ...
115
+ """
116
+ A global phase operation.
117
+
118
+ See Also:
119
+ :meth:`mqt.core.ir.QuantumComputation.gphase`
120
+ """
121
+ h = ...
122
+ """
123
+ A Hadamard gate.
124
+
125
+ See Also:
126
+ :meth:`mqt.core.ir.QuantumComputation.h`
127
+ """
128
+ i = ...
129
+ """
130
+ An identity operation.
131
+
132
+ See Also:
133
+ :meth:`mqt.core.ir.QuantumComputation.i`
134
+ """
135
+ iswap = ...
136
+ """
137
+ An iSWAP gate.
138
+
139
+ See Also:
140
+ :meth:`mqt.core.ir.QuantumComputation.iswap`
141
+ """
142
+ iswapdg = ...
143
+ r"""
144
+ An :math:`i\text{SWAP}^\dagger` gate.
145
+
146
+ See Also:
147
+ :meth:`mqt.core.ir.QuantumComputation.iswapdg`
148
+ """
149
+ measure = ...
150
+ """
151
+ A measurement operation.
152
+
153
+ See Also:
154
+ :meth:`mqt.core.ir.QuantumComputation.measure`
155
+ """
156
+ none = ...
157
+ """
158
+ A placeholder operation. It is used to represent an operation that is not yet defined.
159
+ """
160
+ peres = ...
161
+ """
162
+ A Peres gate.
163
+
164
+ See Also:
165
+ :meth:`mqt.core.ir.QuantumComputation.peres`
166
+ """
167
+ peresdg = ...
168
+ r"""
169
+ A :math:`\text{Peres}^\dagger` gate.
170
+
171
+ See Also:
172
+ :meth:`mqt.core.ir.QuantumComputation.peresdg`
173
+ """
174
+ p = ...
175
+ """
176
+ A phase gate.
177
+
178
+ See Also:
179
+ :meth:`mqt.core.ir.QuantumComputation.p`
180
+ """
181
+ reset = ...
182
+ """
183
+ A reset operation.
184
+
185
+ See Also:
186
+ :meth:`mqt.core.ir.QuantumComputation.reset`
187
+ """
188
+ r = ...
189
+ r"""
190
+ An :math:`R` gate.
191
+
192
+ See Also:
193
+ :meth:`mqt.core.ir.QuantumComputation.r`
194
+ """
195
+ rx = ...
196
+ r"""
197
+ An :math:`R_x` gate.
198
+
199
+ See Also:
200
+ :meth:`mqt.core.ir.QuantumComputation.rx`
201
+ """
202
+ rxx = ...
203
+ r"""
204
+ An :math:`R_{xx}` gate.
205
+
206
+ See Also:
207
+ :meth:`mqt.core.ir.QuantumComputation.rxx`
208
+ """
209
+ ry = ...
210
+ r"""
211
+ An :math:`R_y` gate.
212
+
213
+ See Also:
214
+ :meth:`mqt.core.ir.QuantumComputation.ry`
215
+ """
216
+ ryy = ...
217
+ r"""
218
+ An :math:`R_{yy}` gate.
219
+
220
+ See Also:
221
+ :meth:`mqt.core.ir.QuantumComputation.ryy`
222
+ """
223
+ rz = ...
224
+ r"""
225
+ An :math:`R_z` gate.
226
+
227
+ See Also:
228
+ :meth:`mqt.core.ir.QuantumComputation.rz`
229
+ """
230
+ rzx = ...
231
+ r"""
232
+ An :math:`R_{zx}` gate.
233
+
234
+ See Also:
235
+ :meth:`mqt.core.ir.QuantumComputation.rzx`
236
+ """
237
+ rzz = ...
238
+ r"""
239
+ An :math:`R_{zz}` gate.
240
+
241
+ See Also:
242
+ :meth:`mqt.core.ir.QuantumComputation.rzz`
243
+ """
244
+ s = ...
245
+ """
246
+ An S gate.
247
+
248
+ See Also:
249
+ :meth:`mqt.core.ir.QuantumComputation.s`
250
+ """
251
+ sdg = ...
252
+ r"""
253
+ An :math:`S^\dagger` gate.
254
+
255
+ See Also:
256
+ :meth:`mqt.core.ir.QuantumComputation.sdg`
257
+ """
258
+ swap = ...
259
+ """
260
+ A SWAP gate.
261
+
262
+ See Also:
263
+ :meth:`mqt.core.ir.QuantumComputation.swap`
264
+ """
265
+ sx = ...
266
+ r"""
267
+ A :math:`\sqrt{X}` gate.
268
+
269
+ See Also:
270
+ :meth:`mqt.core.ir.QuantumComputation.sx`
271
+ """
272
+ sxdg = ...
273
+ r"""
274
+ A :math:`\sqrt{X}^\dagger` gate.
275
+
276
+ See Also:
277
+ :meth:`mqt.core.ir.QuantumComputation.sxdg`
278
+ """
279
+ t = ...
280
+ """
281
+ A T gate.
282
+
283
+ See Also:
284
+ :meth:`mqt.core.ir.QuantumComputation.t`
285
+ """
286
+ tdg = ...
287
+ r"""
288
+ A :math:`T^\dagger` gate.
289
+
290
+ See Also:
291
+ :meth:`mqt.core.ir.QuantumComputation.tdg`
292
+ """
293
+ u2 = ...
294
+ """
295
+ A U2 gate.
296
+
297
+ See Also:
298
+ :meth:`mqt.core.ir.QuantumComputation.u2`
299
+ """
300
+ u = ...
301
+ """
302
+ A U gate.
303
+
304
+ See Also:
305
+ :meth:`mqt.core.ir.QuantumComputation.u`
306
+ """
307
+ v = ...
308
+ """
309
+ A V gate.
310
+
311
+ See Also:
312
+ :meth:`mqt.core.ir.QuantumComputation.v`
313
+ """
314
+ vdg = ...
315
+ r"""
316
+ A :math:`V^\dagger` gate.
317
+
318
+ See Also:
319
+ :meth:`mqt.core.ir.QuantumComputation.vdg`
320
+ """
321
+ x = ...
322
+ """
323
+ An X gate.
324
+
325
+ See Also:
326
+ :meth:`mqt.core.ir.QuantumComputation.x`
327
+ """
328
+ xx_minus_yy = ...
329
+ r"""
330
+ An :math:`R_{XX - YY}` gate.
331
+
332
+ See Also:
333
+ :meth:`mqt.core.ir.QuantumComputation.xx_minus_yy`
334
+ """
335
+ xx_plus_yy = ...
336
+ r"""
337
+ An :math:`R_{XX + YY}` gate.
338
+
339
+ See Also:
340
+ :meth:`mqt.core.ir.QuantumComputation.xx_plus_yy`
341
+ """
342
+ y = ...
343
+ """
344
+ A Y gate.
345
+
346
+ See Also:
347
+ :meth:`mqt.core.ir.QuantumComputation.y`
348
+ """
349
+ z = ...
350
+ """
351
+ A Z gate.
352
+
353
+ See Also:
354
+ :meth:`mqt.core.ir.QuantumComputation.z`
355
+ """
356
+
357
+ class Operation(ABC):
358
+ """An abstract base class for operations that can be added to a :class:`~mqt.core.ir.QuantumComputation`."""
359
+
360
+ type_: OpType
361
+ """
362
+ The type of the operation.
363
+ """
364
+ controls: set[Control]
365
+ """
366
+ The controls of the operation.
367
+
368
+ Note:
369
+ The notion of a control might not make sense for all types of operations.
370
+ """
371
+ targets: list[int]
372
+ """
373
+ The targets of the operation.
374
+
375
+ Note:
376
+ The notion of a target might not make sense for all types of operations.
377
+ """
378
+ parameter: list[float]
379
+ """
380
+ The parameters of the operation.
381
+
382
+ Note:
383
+ The notion of a parameter might not make sense for all types of operations.
384
+ """
385
+
386
+ @property
387
+ def name(self) -> str:
388
+ """The name of the operation."""
389
+
390
+ @property
391
+ def num_targets(self) -> int:
392
+ """The number of targets of the operation."""
393
+
394
+ @property
395
+ def num_controls(self) -> int:
396
+ """The number of controls of the operation."""
397
+
398
+ @abstractmethod
399
+ def add_control(self, control: Control) -> None:
400
+ """Add a control to the operation.
401
+
402
+ Args:
403
+ control: The control to add.
404
+ """
405
+
406
+ def add_controls(self, controls: set[Control]) -> None:
407
+ """Add multiple controls to the operation.
408
+
409
+ Args:
410
+ controls: The controls to add.
411
+ """
412
+
413
+ @abstractmethod
414
+ def clear_controls(self) -> None:
415
+ """Clear all controls of the operation."""
416
+
417
+ @abstractmethod
418
+ def remove_control(self, control: Control) -> None:
419
+ """Remove a control from the operation.
420
+
421
+ Args:
422
+ control: The control to remove.
423
+ """
424
+
425
+ def remove_controls(self, controls: set[Control]) -> None:
426
+ """Remove multiple controls from the operation.
427
+
428
+ Args:
429
+ controls: The controls to remove.
430
+ """
431
+
432
+ def acts_on(self, qubit: int) -> bool:
433
+ """Check if the operation acts on a specific qubit.
434
+
435
+ Args:
436
+ qubit: The qubit to check.
437
+
438
+ Returns:
439
+ True if the operation acts on the qubit, False otherwise.
440
+ """
441
+
442
+ def get_used_qubits(self) -> set[int]:
443
+ """Get the qubits that are used by the operation.
444
+
445
+ Returns:
446
+ The set of qubits that are used by the operation.
447
+ """
448
+
449
+ def is_if_else_operation(self) -> bool:
450
+ """Check if the operation is a :class:`IfElseOperation`.
451
+
452
+ Returns:
453
+ True if the operation is a :class:`IfElseOperation`, False otherwise.
454
+ """
455
+
456
+ def is_compound_operation(self) -> bool:
457
+ """Check if the operation is a :class:`CompoundOperation`.
458
+
459
+ Returns:
460
+ True if the operation is a :class:`CompoundOperation`, False otherwise.
461
+ """
462
+
463
+ def is_controlled(self) -> bool:
464
+ """Check if the operation is controlled.
465
+
466
+ Returns:
467
+ True if the operation is controlled, False otherwise.
468
+ """
469
+
470
+ def is_non_unitary_operation(self) -> bool:
471
+ """Check if the operation is a :class:`NonUnitaryOperation`.
472
+
473
+ Returns:
474
+ True if the operation is a :class:`NonUnitaryOperation`, False otherwise.
475
+ """
476
+
477
+ def is_standard_operation(self) -> bool:
478
+ """Check if the operation is a :class:`StandardOperation`.
479
+
480
+ Returns:
481
+ True if the operation is a :class:`StandardOperation`, False otherwise.
482
+ """
483
+
484
+ def is_symbolic_operation(self) -> bool:
485
+ """Check if the operation is a :class:`SymbolicOperation`.
486
+
487
+ Returns:
488
+ True if the operation is a :class:`SymbolicOperation`, False otherwise.
489
+ """
490
+
491
+ def is_unitary(self) -> bool:
492
+ """Check if the operation is unitary.
493
+
494
+ Returns:
495
+ True if the operation is unitary, False otherwise.
496
+ """
497
+
498
+ def get_inverted(self) -> Operation:
499
+ """Get the inverse of the operation.
500
+
501
+ Returns:
502
+ The inverse of the operation.
503
+ """
504
+
505
+ @abstractmethod
506
+ def invert(self) -> None:
507
+ """Invert the operation (in-place)."""
508
+
509
+ def __eq__(self, other: object) -> bool: ...
510
+ def __hash__(self) -> int: ...
511
+ def __ne__(self, other: object) -> bool: ...
512
+
513
+ class StandardOperation(Operation):
514
+ """Standard quantum operation.
515
+
516
+ This class is used to represent all standard quantum operations, i.e.,
517
+ operations that are unitary. This includes all possible quantum gates.
518
+ Such Operations are defined by their :class:`OpType`, the qubits (controls
519
+ and targets) they act on, and their parameters.
520
+
521
+ Args:
522
+ control: The control qubit(s) of the operation (if any).
523
+ target: The target qubit(s) of the operation.
524
+ op_type: The type of the operation.
525
+ params: The parameters of the operation (if any).
526
+ """
527
+
528
+ @overload
529
+ def __init__(self) -> None: ...
530
+ @overload
531
+ def __init__(
532
+ self,
533
+ target: int,
534
+ op_type: OpType,
535
+ params: Sequence[float] | None = None,
536
+ ) -> None: ...
537
+ @overload
538
+ def __init__(
539
+ self,
540
+ targets: Sequence[int],
541
+ op_type: OpType,
542
+ params: Sequence[float] | None = None,
543
+ ) -> None: ...
544
+ @overload
545
+ def __init__(
546
+ self,
547
+ control: Control,
548
+ target: int,
549
+ op_type: OpType,
550
+ params: Sequence[float] | None = None,
551
+ ) -> None: ...
552
+ @overload
553
+ def __init__(
554
+ self,
555
+ control: Control,
556
+ targets: Sequence[int],
557
+ op_type: OpType,
558
+ params: Sequence[float] | None = None,
559
+ ) -> None: ...
560
+ @overload
561
+ def __init__(
562
+ self,
563
+ controls: set[Control],
564
+ target: int,
565
+ op_type: OpType,
566
+ params: Sequence[float] | None = None,
567
+ ) -> None: ...
568
+ @overload
569
+ def __init__(
570
+ self,
571
+ controls: set[Control],
572
+ targets: Sequence[int],
573
+ op_type: OpType,
574
+ params: Sequence[float] | None = None,
575
+ ) -> None: ...
576
+ @overload
577
+ def __init__(
578
+ self,
579
+ controls: set[Control],
580
+ target0: int,
581
+ target1: int,
582
+ op_type: OpType,
583
+ params: Sequence[float] | None = None,
584
+ ) -> None: ...
585
+ def add_control(self, control: Control) -> None:
586
+ """Add a control to the operation.
587
+
588
+ :class:`StandardOperation` supports arbitrarily many controls per operation.
589
+
590
+ Args:
591
+ control: The control to add.
592
+ """
593
+
594
+ def clear_controls(self) -> None:
595
+ """Clear all controls of the operation."""
596
+
597
+ def remove_control(self, control: Control) -> None:
598
+ """Remove a control from the operation.
599
+
600
+ Args:
601
+ control: The control to remove.
602
+ """
603
+
604
+ def invert(self) -> None:
605
+ """Invert the operation (in-place).
606
+
607
+ Since any :class:`StandardOperation` is unitary, the inverse is simply the
608
+ conjugate transpose of the operation's matrix representation.
609
+ """
610
+
611
+ class NonUnitaryOperation(Operation):
612
+ """Non-unitary operation.
613
+
614
+ This class is used to represent all non-unitary operations, i.e., operations
615
+ that are not reversible. This includes measurements and resets.
616
+
617
+ Args:
618
+ targets: The target qubit(s) of the operation.
619
+ classics: The classical bit(s) that are associated with the operation (only relevant for measurements).
620
+ op_type: The type of the operation.
621
+ """
622
+
623
+ @property
624
+ def classics(self) -> list[int]:
625
+ """The classical registers that are associated with the operation."""
626
+
627
+ @overload
628
+ def __init__(self, targets: Sequence[int], classics: Sequence[int]) -> None: ...
629
+ @overload
630
+ def __init__(self, target: int, classic: int) -> None: ...
631
+ @overload
632
+ def __init__(self, targets: Sequence[int], op_type: OpType = ...) -> None: ...
633
+ def add_control(self, control: Control) -> None:
634
+ """Adding controls to a non-unitary operation is not supported."""
635
+
636
+ def clear_controls(self) -> None:
637
+ """Cannot clear controls of a non-unitary operation."""
638
+
639
+ def remove_control(self, control: Control) -> None:
640
+ """Removing controls from a non-unitary operation is not supported."""
641
+
642
+ def invert(self) -> None:
643
+ """Non-unitary operations are, per definition, not invertible."""
644
+
645
+ class CompoundOperation(Operation, MutableSequence[Operation]):
646
+ """Compound quantum operation.
647
+
648
+ This class is used to aggregate and group multiple operations into a single
649
+ object. This is useful for optimizations and for representing complex
650
+ quantum functionality. A :class:`CompoundOperation` can contain any number
651
+ of operations, including other :class:`CompoundOperation`'s.
652
+
653
+ Args:
654
+ ops: The operations that are part of the compound operation.
655
+ """
656
+
657
+ @overload
658
+ def __init__(self) -> None: ...
659
+ @overload
660
+ def __init__(self, ops: Sequence[Operation]) -> None: ...
661
+ def __len__(self) -> int:
662
+ """The number of operations in the compound operation."""
663
+
664
+ @overload
665
+ def __getitem__(self, idx: int) -> Operation:
666
+ """Get the operation at the given index.
667
+
668
+ Args:
669
+ idx: The index of the operation to get.
670
+
671
+ Returns:
672
+ The operation at the given index.
673
+
674
+ Notes:
675
+ This gives direct access to the operations in the compound operation.
676
+ """
677
+
678
+ @overload
679
+ def __getitem__(self, idx: slice) -> list[Operation]:
680
+ """Get the operations in the given slice.
681
+
682
+ Args:
683
+ idx: The slice of the operations to get.
684
+
685
+ Returns:
686
+ The operations in the given slice.
687
+
688
+ Notes:
689
+ This gives direct access to the operations in the compound operation.
690
+ """
691
+
692
+ @overload
693
+ def __setitem__(self, idx: int, op: Operation) -> None:
694
+ """Set the operation at the given index.
695
+
696
+ Args:
697
+ idx: The index of the operation to set.
698
+ op: The operation to set at the given index.
699
+ """
700
+
701
+ @overload
702
+ def __setitem__(self, idx: slice, ops: Iterable[Operation]) -> None:
703
+ """Set the operations in the given slice.
704
+
705
+ Args:
706
+ idx: The slice of operations to set.
707
+ ops: The operations to set in the given slice.
708
+ """
709
+
710
+ @overload
711
+ def __delitem__(self, idx: int) -> None:
712
+ """Delete the operation at the given index.
713
+
714
+ Args:
715
+ idx: The index of the operation to delete.
716
+ """
717
+
718
+ @overload
719
+ def __delitem__(self, idx: slice) -> None:
720
+ """Delete the operations in the given slice.
721
+
722
+ Args:
723
+ idx: The slice of operations to delete.
724
+ """
725
+
726
+ def insert(self, idx: int, op: Operation) -> None:
727
+ """Insert an operation at the given index.
728
+
729
+ Args:
730
+ idx: The index to insert the operation at.
731
+ op: The operation to insert.
732
+ """
733
+
734
+ def append(self, op: Operation) -> None:
735
+ """Append an operation to the compound operation."""
736
+
737
+ def empty(self) -> bool:
738
+ """Check if the compound operation is empty."""
739
+
740
+ def clear(self) -> None:
741
+ """Clear all operations in the compound operation."""
742
+
743
+ def add_control(self, control: Control) -> None:
744
+ """Add a control to the operation.
745
+
746
+ This will add the control to all operations in the compound operation.
747
+ Additionally, the control is added to the compound operation itself to
748
+ keep track of all controls that are applied to the compound operation.
749
+
750
+ Args:
751
+ control: The control to add.
752
+ """
753
+
754
+ def clear_controls(self) -> None:
755
+ """Clear all controls of the operation.
756
+
757
+ This will clear all controls that have been tracked in the compound
758
+ operation itself and will clear these controls of all operations that are
759
+ part of the compound operation.
760
+ """
761
+
762
+ def remove_control(self, control: Control) -> None:
763
+ """Remove a control from the operation.
764
+
765
+ This will remove the control from all operations in the compound operation.
766
+ Additionally, the control is removed from the compound operation itself to
767
+ keep track of all controls that are applied to the compound operation.
768
+
769
+ Args:
770
+ control: The control to remove.
771
+ """
772
+
773
+ def invert(self) -> None:
774
+ """Invert the operation (in-place).
775
+
776
+ This will invert all operations in the compound operation and reverse
777
+ the order of the operations. This only works if all operations in the
778
+ compound operation are invertible and will throw an error otherwise.
779
+ """
780
+
781
+ class SymbolicOperation(StandardOperation):
782
+ """Symbolic quantum operation.
783
+
784
+ This class is used to represent quantum operations that are not yet fully
785
+ defined. This can be useful for representing operations that depend on
786
+ parameters that are not yet known. A :class:`SymbolicOperation` is defined
787
+ by its :class:`OpType`, the qubits (controls and targets) it acts on, and
788
+ its parameters. The parameters can be either fixed values or symbolic
789
+ expressions.
790
+
791
+ Args:
792
+ controls: The control qubit(s) of the operation (if any).
793
+ targets: The target qubit(s) of the operation.
794
+ op_type: The type of the operation.
795
+ params: The parameters of the operation (if any).
796
+ """
797
+
798
+ @overload
799
+ def __init__(self) -> None: ...
800
+ @overload
801
+ def __init__(
802
+ self,
803
+ target: int,
804
+ op_type: OpType,
805
+ params: Sequence[Expression | float] | None = None,
806
+ ) -> None: ...
807
+ @overload
808
+ def __init__(
809
+ self,
810
+ targets: Sequence[int],
811
+ op_type: OpType,
812
+ params: Sequence[Expression | float] | None = None,
813
+ ) -> None: ...
814
+ @overload
815
+ def __init__(
816
+ self,
817
+ control: Control,
818
+ target: int,
819
+ op_type: OpType,
820
+ params: Sequence[Expression | float] | None = None,
821
+ ) -> None: ...
822
+ @overload
823
+ def __init__(
824
+ self,
825
+ control: Control,
826
+ targets: Sequence[int],
827
+ op_type: OpType,
828
+ params: Sequence[Expression | float] | None = None,
829
+ ) -> None: ...
830
+ @overload
831
+ def __init__(
832
+ self,
833
+ controls: set[Control],
834
+ target: int,
835
+ op_type: OpType,
836
+ params: Sequence[Expression | float] | None = None,
837
+ ) -> None: ...
838
+ @overload
839
+ def __init__(
840
+ self,
841
+ controls: set[Control],
842
+ targets: Sequence[int],
843
+ op_type: OpType,
844
+ params: Sequence[Expression | float] | None = None,
845
+ ) -> None: ...
846
+ @overload
847
+ def __init__(
848
+ self,
849
+ controls: set[Control],
850
+ target0: int,
851
+ target1: int,
852
+ op_type: OpType,
853
+ params: Sequence[Expression | float] | None = None,
854
+ ) -> None: ...
855
+ def get_parameter(self, idx: int) -> Expression | float:
856
+ """Get the parameter at the given index.
857
+
858
+ Args:
859
+ idx: The index of the parameter to get.
860
+
861
+ Returns:
862
+ The parameter at the given index.
863
+ """
864
+
865
+ def get_parameters(self) -> list[Expression | float]:
866
+ """Get all parameters of the operation.
867
+
868
+ Returns:
869
+ The parameters of the operation.
870
+ """
871
+
872
+ def get_instantiated_operation(self, assignment: Mapping[Variable, float]) -> StandardOperation:
873
+ """Get the instantiated operation.
874
+
875
+ Args:
876
+ assignment: The assignment of the symbolic parameters.
877
+
878
+ Returns:
879
+ The instantiated operation.
880
+ """
881
+
882
+ def instantiate(self, assignment: Mapping[Variable, float]) -> None:
883
+ """Instantiate the operation (in-place).
884
+
885
+ Args:
886
+ assignment: The assignment of the symbolic parameters.
887
+ """
888
+
889
+ class ComparisonKind(Enum):
890
+ """Enumeration of comparison types for classic-controlled operations."""
891
+
892
+ eq = ...
893
+ """Equality comparison."""
894
+ neq = ...
895
+ """Inequality comparison."""
896
+ lt = ...
897
+ """Less than comparison."""
898
+ leq = ...
899
+ """Less than or equal comparison."""
900
+ gt = ...
901
+ """Greater than comparison."""
902
+ geq = ...
903
+ """Greater than or equal comparison."""
904
+
905
+ class IfElseOperation(Operation):
906
+ """If-else quantum operation.
907
+
908
+ This class is used to represent an if-else operation. The then operation is executed if the
909
+ value of the classical register matches the expected value. Otherwise, the else operation is executed.
910
+
911
+ Args:
912
+ then_operation: The operation that is executed if the condition is met.
913
+ else_operation: The operation that is executed if the condition is not met.
914
+ control_register: The classical register that controls the operation.
915
+ expected_value: The expected value of the classical register.
916
+ comparison_kind: The kind of comparison (default is equality).
917
+ """
918
+
919
+ @overload
920
+ def __init__(
921
+ self,
922
+ if_operation: Operation,
923
+ else_operation: Operation | None,
924
+ control_register: ClassicalRegister,
925
+ expected_value: int = 1,
926
+ comparison_kind: ComparisonKind = ...,
927
+ ) -> None: ...
928
+ @overload
929
+ def __init__(
930
+ self,
931
+ if_operation: Operation,
932
+ else_operation: Operation | None,
933
+ control_bit: int,
934
+ expected_value: bool = True,
935
+ comparison_kind: ComparisonKind = ...,
936
+ ) -> None: ...
937
+ @property
938
+ def then_operation(self) -> Operation:
939
+ """The operation that is executed if the condition is met."""
940
+
941
+ @property
942
+ def else_operation(self) -> Operation | None:
943
+ """The operation that is executed if the condition is not met."""
944
+
945
+ @property
946
+ def control_register(self) -> ClassicalRegister | None:
947
+ """The classical register that controls the operation."""
948
+
949
+ @property
950
+ def control_bit(self) -> int | None:
951
+ """The classical bit that controls the operation."""
952
+
953
+ @property
954
+ def expected_value_register(self) -> int:
955
+ """The expected value of the classical register.
956
+
957
+ The then-operation is executed if the value of the classical register matches the expected value based on the
958
+ kind of comparison.
959
+ The expected value is an integer that is interpreted as a binary number, where the least significant bit is at
960
+ the start index of the classical register.
961
+ """
962
+
963
+ @property
964
+ def expected_value_bit(self) -> bool:
965
+ """The expected value of the classical register.
966
+
967
+ The then-operation is executed if the value of the classical bit matches the expected value based on the
968
+ kind of comparison.
969
+ """
970
+
971
+ @property
972
+ def comparison_kind(self) -> ComparisonKind:
973
+ """The kind of comparison.
974
+
975
+ The then-operation is executed if the value of the classical register matches the expected value based on the
976
+ kind of comparison.
977
+ """
978
+
979
+ def add_control(self, control: Control) -> None:
980
+ """Adds a control to the underlying operation.
981
+
982
+ Args:
983
+ control: The control to add.
984
+
985
+ See Also:
986
+ :meth:`Operation.add_control`
987
+ """
988
+
989
+ def clear_controls(self) -> None:
990
+ """Clears the controls of the underlying operation.
991
+
992
+ See Also:
993
+ :meth:`Operation.clear_controls`
994
+ """
995
+
996
+ def remove_control(self, control: Control) -> None:
997
+ """Removes a control from the underlying operation.
998
+
999
+ Args:
1000
+ control: The control to remove.
1001
+
1002
+ See Also:
1003
+ :meth:`Operation.remove_control`
1004
+ """
1005
+
1006
+ def invert(self) -> None:
1007
+ """Inverts the underlying operation.
1008
+
1009
+ See Also:
1010
+ :meth:`Operation.invert`
1011
+ """