mqt-core 3.2.1__cp314-cp314-win_arm64.whl → 3.3.1__cp314-cp314-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 (242) hide show
  1. mqt/core/__init__.py +3 -3
  2. mqt/core/_commands.py +2 -2
  3. mqt/core/_version.py +16 -3
  4. mqt/core/bin/mqt-core-algorithms.dll +0 -0
  5. mqt/core/bin/mqt-core-circuit-optimizer.dll +0 -0
  6. mqt/core/bin/mqt-core-dd.dll +0 -0
  7. mqt/core/bin/mqt-core-ds.dll +0 -0
  8. mqt/core/bin/mqt-core-fomac.dll +0 -0
  9. mqt/core/bin/mqt-core-ir.dll +0 -0
  10. mqt/core/bin/mqt-core-na-fomac.dll +0 -0
  11. mqt/core/bin/mqt-core-na.dll +0 -0
  12. mqt/core/bin/mqt-core-qasm.dll +0 -0
  13. mqt/core/bin/mqt-core-qdmi-driver.dll +0 -0
  14. mqt/core/bin/mqt-core-qdmi-na-device.dll +0 -0
  15. mqt/core/bin/mqt-core-zx.dll +0 -0
  16. mqt/core/dd.cp314-win_arm64.pyd +0 -0
  17. mqt/core/dd.pyi +5 -7
  18. mqt/core/fomac.cp314-win_arm64.pyd +0 -0
  19. mqt/core/fomac.pyi +125 -0
  20. mqt/core/include/mqt-core/circuit_optimizer/CircuitOptimizer.hpp +13 -0
  21. mqt/core/include/mqt-core/dd/CachedEdge.hpp +7 -0
  22. mqt/core/include/mqt-core/dd/Operations.hpp +12 -14
  23. mqt/core/include/mqt-core/fomac/FoMaC.hpp +568 -0
  24. mqt/core/include/mqt-core/ir/QuantumComputation.hpp +29 -28
  25. mqt/core/include/mqt-core/ir/operations/CompoundOperation.hpp +2 -0
  26. mqt/core/include/mqt-core/ir/operations/IfElseOperation.hpp +169 -0
  27. mqt/core/include/mqt-core/ir/operations/OpType.hpp +3 -0
  28. mqt/core/include/mqt-core/ir/operations/OpType.inc +2 -2
  29. mqt/core/include/mqt-core/ir/operations/Operation.hpp +3 -1
  30. mqt/core/include/mqt-core/ir/operations/StandardOperation.hpp +2 -0
  31. mqt/core/include/mqt-core/mqt_na_qdmi/device.h +602 -0
  32. mqt/core/include/mqt-core/mqt_na_qdmi/types.h +78 -0
  33. mqt/core/include/mqt-core/na/device/Device.hpp +410 -0
  34. mqt/core/include/mqt-core/na/device/DeviceMemberInitializers.hpp +724 -0
  35. mqt/core/include/mqt-core/na/device/Generator.hpp +447 -0
  36. mqt/core/include/mqt-core/na/fomac/Device.hpp +169 -0
  37. mqt/core/include/mqt-core/qdmi/Driver.hpp +431 -0
  38. mqt/core/include/nlohmann/adl_serializer.hpp +55 -0
  39. mqt/core/include/nlohmann/byte_container_with_subtype.hpp +103 -0
  40. mqt/core/include/nlohmann/detail/abi_macros.hpp +111 -0
  41. mqt/core/include/nlohmann/detail/conversions/from_json.hpp +577 -0
  42. mqt/core/include/nlohmann/detail/conversions/to_chars.hpp +1118 -0
  43. mqt/core/include/nlohmann/detail/conversions/to_json.hpp +479 -0
  44. mqt/core/include/nlohmann/detail/exceptions.hpp +291 -0
  45. mqt/core/include/nlohmann/detail/hash.hpp +129 -0
  46. mqt/core/include/nlohmann/detail/input/binary_reader.hpp +3068 -0
  47. mqt/core/include/nlohmann/detail/input/input_adapters.hpp +549 -0
  48. mqt/core/include/nlohmann/detail/input/json_sax.hpp +986 -0
  49. mqt/core/include/nlohmann/detail/input/lexer.hpp +1643 -0
  50. mqt/core/include/nlohmann/detail/input/parser.hpp +519 -0
  51. mqt/core/include/nlohmann/detail/input/position_t.hpp +37 -0
  52. mqt/core/include/nlohmann/detail/iterators/internal_iterator.hpp +35 -0
  53. mqt/core/include/nlohmann/detail/iterators/iter_impl.hpp +760 -0
  54. mqt/core/include/nlohmann/detail/iterators/iteration_proxy.hpp +235 -0
  55. mqt/core/include/nlohmann/detail/iterators/iterator_traits.hpp +61 -0
  56. mqt/core/include/nlohmann/detail/iterators/json_reverse_iterator.hpp +130 -0
  57. mqt/core/include/nlohmann/detail/iterators/primitive_iterator.hpp +132 -0
  58. mqt/core/include/nlohmann/detail/json_custom_base_class.hpp +39 -0
  59. mqt/core/include/nlohmann/detail/json_pointer.hpp +988 -0
  60. mqt/core/include/nlohmann/detail/json_ref.hpp +78 -0
  61. mqt/core/include/nlohmann/detail/macro_scope.hpp +595 -0
  62. mqt/core/include/nlohmann/detail/macro_unscope.hpp +46 -0
  63. mqt/core/include/nlohmann/detail/meta/call_std/begin.hpp +17 -0
  64. mqt/core/include/nlohmann/detail/meta/call_std/end.hpp +17 -0
  65. mqt/core/include/nlohmann/detail/meta/cpp_future.hpp +171 -0
  66. mqt/core/include/nlohmann/detail/meta/detected.hpp +70 -0
  67. mqt/core/include/nlohmann/detail/meta/identity_tag.hpp +21 -0
  68. mqt/core/include/nlohmann/detail/meta/is_sax.hpp +159 -0
  69. mqt/core/include/nlohmann/detail/meta/std_fs.hpp +29 -0
  70. mqt/core/include/nlohmann/detail/meta/type_traits.hpp +795 -0
  71. mqt/core/include/nlohmann/detail/meta/void_t.hpp +24 -0
  72. mqt/core/include/nlohmann/detail/output/binary_writer.hpp +1850 -0
  73. mqt/core/include/nlohmann/detail/output/output_adapters.hpp +147 -0
  74. mqt/core/include/nlohmann/detail/output/serializer.hpp +988 -0
  75. mqt/core/include/nlohmann/detail/string_concat.hpp +146 -0
  76. mqt/core/include/nlohmann/detail/string_escape.hpp +72 -0
  77. mqt/core/include/nlohmann/detail/string_utils.hpp +37 -0
  78. mqt/core/include/nlohmann/detail/value_t.hpp +118 -0
  79. mqt/core/include/nlohmann/json.hpp +5306 -0
  80. mqt/core/include/nlohmann/json_fwd.hpp +75 -0
  81. mqt/core/include/nlohmann/ordered_map.hpp +359 -0
  82. mqt/core/include/nlohmann/thirdparty/hedley/hedley.hpp +2045 -0
  83. mqt/core/include/nlohmann/thirdparty/hedley/hedley_undef.hpp +158 -0
  84. mqt/core/include/qdmi/qdmi/client.h +990 -0
  85. mqt/core/include/qdmi/qdmi/constants.h +1139 -0
  86. mqt/core/include/qdmi/qdmi/device.h +602 -0
  87. mqt/core/include/qdmi/qdmi/types.h +78 -0
  88. mqt/core/include/spdlog/async.h +99 -0
  89. mqt/core/include/spdlog/async_logger-inl.h +84 -0
  90. mqt/core/include/spdlog/async_logger.h +74 -0
  91. mqt/core/include/spdlog/cfg/argv.h +40 -0
  92. mqt/core/include/spdlog/cfg/env.h +36 -0
  93. mqt/core/include/spdlog/cfg/helpers-inl.h +107 -0
  94. mqt/core/include/spdlog/cfg/helpers.h +29 -0
  95. mqt/core/include/spdlog/common-inl.h +68 -0
  96. mqt/core/include/spdlog/common.h +406 -0
  97. mqt/core/include/spdlog/details/backtracer-inl.h +63 -0
  98. mqt/core/include/spdlog/details/backtracer.h +45 -0
  99. mqt/core/include/spdlog/details/circular_q.h +115 -0
  100. mqt/core/include/spdlog/details/console_globals.h +28 -0
  101. mqt/core/include/spdlog/details/file_helper-inl.h +153 -0
  102. mqt/core/include/spdlog/details/file_helper.h +61 -0
  103. mqt/core/include/spdlog/details/fmt_helper.h +141 -0
  104. mqt/core/include/spdlog/details/log_msg-inl.h +44 -0
  105. mqt/core/include/spdlog/details/log_msg.h +40 -0
  106. mqt/core/include/spdlog/details/log_msg_buffer-inl.h +54 -0
  107. mqt/core/include/spdlog/details/log_msg_buffer.h +32 -0
  108. mqt/core/include/spdlog/details/mpmc_blocking_q.h +177 -0
  109. mqt/core/include/spdlog/details/null_mutex.h +35 -0
  110. mqt/core/include/spdlog/details/os-inl.h +606 -0
  111. mqt/core/include/spdlog/details/os.h +127 -0
  112. mqt/core/include/spdlog/details/periodic_worker-inl.h +26 -0
  113. mqt/core/include/spdlog/details/periodic_worker.h +58 -0
  114. mqt/core/include/spdlog/details/registry-inl.h +270 -0
  115. mqt/core/include/spdlog/details/registry.h +131 -0
  116. mqt/core/include/spdlog/details/synchronous_factory.h +22 -0
  117. mqt/core/include/spdlog/details/tcp_client-windows.h +135 -0
  118. mqt/core/include/spdlog/details/tcp_client.h +127 -0
  119. mqt/core/include/spdlog/details/thread_pool-inl.h +126 -0
  120. mqt/core/include/spdlog/details/thread_pool.h +117 -0
  121. mqt/core/include/spdlog/details/udp_client-windows.h +98 -0
  122. mqt/core/include/spdlog/details/udp_client.h +81 -0
  123. mqt/core/include/spdlog/details/windows_include.h +11 -0
  124. mqt/core/include/spdlog/fmt/bin_to_hex.h +224 -0
  125. mqt/core/include/spdlog/fmt/bundled/args.h +220 -0
  126. mqt/core/include/spdlog/fmt/bundled/base.h +2989 -0
  127. mqt/core/include/spdlog/fmt/bundled/chrono.h +2330 -0
  128. mqt/core/include/spdlog/fmt/bundled/color.h +637 -0
  129. mqt/core/include/spdlog/fmt/bundled/compile.h +539 -0
  130. mqt/core/include/spdlog/fmt/bundled/core.h +5 -0
  131. mqt/core/include/spdlog/fmt/bundled/fmt.license.rst +27 -0
  132. mqt/core/include/spdlog/fmt/bundled/format-inl.h +1948 -0
  133. mqt/core/include/spdlog/fmt/bundled/format.h +4244 -0
  134. mqt/core/include/spdlog/fmt/bundled/os.h +427 -0
  135. mqt/core/include/spdlog/fmt/bundled/ostream.h +167 -0
  136. mqt/core/include/spdlog/fmt/bundled/printf.h +633 -0
  137. mqt/core/include/spdlog/fmt/bundled/ranges.h +850 -0
  138. mqt/core/include/spdlog/fmt/bundled/std.h +728 -0
  139. mqt/core/include/spdlog/fmt/bundled/xchar.h +369 -0
  140. mqt/core/include/spdlog/fmt/chrono.h +23 -0
  141. mqt/core/include/spdlog/fmt/compile.h +23 -0
  142. mqt/core/include/spdlog/fmt/fmt.h +30 -0
  143. mqt/core/include/spdlog/fmt/ostr.h +23 -0
  144. mqt/core/include/spdlog/fmt/ranges.h +23 -0
  145. mqt/core/include/spdlog/fmt/std.h +24 -0
  146. mqt/core/include/spdlog/fmt/xchar.h +23 -0
  147. mqt/core/include/spdlog/formatter.h +17 -0
  148. mqt/core/include/spdlog/fwd.h +18 -0
  149. mqt/core/include/spdlog/logger-inl.h +198 -0
  150. mqt/core/include/spdlog/logger.h +379 -0
  151. mqt/core/include/spdlog/mdc.h +52 -0
  152. mqt/core/include/spdlog/pattern_formatter-inl.h +1340 -0
  153. mqt/core/include/spdlog/pattern_formatter.h +118 -0
  154. mqt/core/include/spdlog/sinks/android_sink.h +137 -0
  155. mqt/core/include/spdlog/sinks/ansicolor_sink-inl.h +142 -0
  156. mqt/core/include/spdlog/sinks/ansicolor_sink.h +116 -0
  157. mqt/core/include/spdlog/sinks/base_sink-inl.h +59 -0
  158. mqt/core/include/spdlog/sinks/base_sink.h +51 -0
  159. mqt/core/include/spdlog/sinks/basic_file_sink-inl.h +48 -0
  160. mqt/core/include/spdlog/sinks/basic_file_sink.h +66 -0
  161. mqt/core/include/spdlog/sinks/callback_sink.h +56 -0
  162. mqt/core/include/spdlog/sinks/daily_file_sink.h +254 -0
  163. mqt/core/include/spdlog/sinks/dist_sink.h +81 -0
  164. mqt/core/include/spdlog/sinks/dup_filter_sink.h +91 -0
  165. mqt/core/include/spdlog/sinks/hourly_file_sink.h +193 -0
  166. mqt/core/include/spdlog/sinks/kafka_sink.h +119 -0
  167. mqt/core/include/spdlog/sinks/mongo_sink.h +108 -0
  168. mqt/core/include/spdlog/sinks/msvc_sink.h +68 -0
  169. mqt/core/include/spdlog/sinks/null_sink.h +41 -0
  170. mqt/core/include/spdlog/sinks/ostream_sink.h +43 -0
  171. mqt/core/include/spdlog/sinks/qt_sinks.h +304 -0
  172. mqt/core/include/spdlog/sinks/ringbuffer_sink.h +67 -0
  173. mqt/core/include/spdlog/sinks/rotating_file_sink-inl.h +179 -0
  174. mqt/core/include/spdlog/sinks/rotating_file_sink.h +93 -0
  175. mqt/core/include/spdlog/sinks/sink-inl.h +22 -0
  176. mqt/core/include/spdlog/sinks/sink.h +34 -0
  177. mqt/core/include/spdlog/sinks/stdout_color_sinks-inl.h +38 -0
  178. mqt/core/include/spdlog/sinks/stdout_color_sinks.h +49 -0
  179. mqt/core/include/spdlog/sinks/stdout_sinks-inl.h +127 -0
  180. mqt/core/include/spdlog/sinks/stdout_sinks.h +84 -0
  181. mqt/core/include/spdlog/sinks/syslog_sink.h +104 -0
  182. mqt/core/include/spdlog/sinks/systemd_sink.h +121 -0
  183. mqt/core/include/spdlog/sinks/tcp_sink.h +75 -0
  184. mqt/core/include/spdlog/sinks/udp_sink.h +69 -0
  185. mqt/core/include/spdlog/sinks/win_eventlog_sink.h +260 -0
  186. mqt/core/include/spdlog/sinks/wincolor_sink-inl.h +172 -0
  187. mqt/core/include/spdlog/sinks/wincolor_sink.h +82 -0
  188. mqt/core/include/spdlog/spdlog-inl.h +96 -0
  189. mqt/core/include/spdlog/spdlog.h +357 -0
  190. mqt/core/include/spdlog/stopwatch.h +66 -0
  191. mqt/core/include/spdlog/tweakme.h +148 -0
  192. mqt/core/include/spdlog/version.h +11 -0
  193. mqt/core/ir/__init__.pyi +83 -45
  194. mqt/core/ir/operations.pyi +40 -27
  195. mqt/core/ir.cp314-win_arm64.pyd +0 -0
  196. mqt/core/lib/mqt-core-circuit-optimizer.lib +0 -0
  197. mqt/core/lib/mqt-core-dd.lib +0 -0
  198. mqt/core/lib/mqt-core-fomac.lib +0 -0
  199. mqt/core/lib/mqt-core-ir.lib +0 -0
  200. mqt/core/lib/mqt-core-na-fomac.lib +0 -0
  201. mqt/core/lib/mqt-core-qasm.lib +0 -0
  202. mqt/core/lib/mqt-core-qdmi-driver.lib +0 -0
  203. mqt/core/lib/mqt-core-qdmi-na-device-gen.lib +0 -0
  204. mqt/core/lib/mqt-core-qdmi-na-device.lib +0 -0
  205. mqt/core/lib/pkgconfig/spdlog.pc +13 -0
  206. mqt/core/lib/spdlog.lib +0 -0
  207. mqt/core/na/__init__.py +12 -0
  208. mqt/core/na/fomac.cp314-win_arm64.pyd +0 -0
  209. mqt/core/na/fomac.pyi +117 -0
  210. mqt/core/nlohmann_json.natvis +278 -0
  211. mqt/core/plugins/qiskit/mqt_to_qiskit.py +75 -11
  212. mqt/core/plugins/qiskit/qiskit_to_mqt.py +108 -5
  213. mqt/core/share/cmake/mqt-core/AddMQTPythonBinding.cmake +3 -0
  214. mqt/core/share/cmake/mqt-core/Cache.cmake +17 -16
  215. mqt/core/share/cmake/mqt-core/PackageAddTest.cmake +6 -0
  216. mqt/core/share/cmake/mqt-core/StandardProjectSettings.cmake +1 -1
  217. mqt/core/share/cmake/mqt-core/mqt-core-config-version.cmake +3 -3
  218. mqt/core/share/cmake/mqt-core/mqt-core-config.cmake +3 -0
  219. mqt/core/share/cmake/mqt-core/mqt-core-targets-release.cmake +51 -0
  220. mqt/core/share/cmake/mqt-core/mqt-core-targets.cmake +124 -3
  221. mqt/core/share/cmake/nlohmann_json/nlohmann_jsonConfig.cmake +15 -0
  222. mqt/core/share/cmake/nlohmann_json/nlohmann_jsonConfigVersion.cmake +20 -0
  223. mqt/core/share/cmake/nlohmann_json/nlohmann_jsonTargets.cmake +110 -0
  224. mqt/core/share/cmake/qdmi/Cache.cmake +44 -0
  225. mqt/core/share/cmake/qdmi/PrefixHandling.cmake +78 -0
  226. mqt/core/share/cmake/qdmi/prefix_defs.txt +26 -0
  227. mqt/core/share/cmake/qdmi/qdmi-config-version.cmake +85 -0
  228. mqt/core/share/cmake/qdmi/qdmi-config.cmake +42 -0
  229. mqt/core/share/cmake/qdmi/qdmi-targets.cmake +129 -0
  230. mqt/core/share/cmake/spdlog/spdlogConfig.cmake +44 -0
  231. mqt/core/share/cmake/spdlog/spdlogConfigTargets-release.cmake +19 -0
  232. mqt/core/share/cmake/spdlog/spdlogConfigTargets.cmake +121 -0
  233. mqt/core/share/cmake/spdlog/spdlogConfigVersion.cmake +65 -0
  234. mqt/core/share/pkgconfig/nlohmann_json.pc +7 -0
  235. mqt_core-3.3.1.dist-info/DELVEWHEEL +2 -0
  236. {mqt_core-3.2.1.dist-info → mqt_core-3.3.1.dist-info}/METADATA +74 -33
  237. {mqt_core-3.2.1.dist-info → mqt_core-3.3.1.dist-info}/RECORD +240 -46
  238. {mqt_core-3.2.1.dist-info → mqt_core-3.3.1.dist-info}/WHEEL +1 -1
  239. mqt/core/include/mqt-core/ir/operations/ClassicControlledOperation.hpp +0 -156
  240. mqt_core-3.2.1.dist-info/DELVEWHEEL +0 -2
  241. {mqt_core-3.2.1.dist-info → mqt_core-3.3.1.dist-info}/entry_points.txt +0 -0
  242. {mqt_core-3.2.1.dist-info → mqt_core-3.3.1.dist-info}/licenses/LICENSE.md +0 -0
mqt/core/ir/__init__.pyi CHANGED
@@ -1864,33 +1864,71 @@ class QuantumComputation(MutableSequence[Operation]):
1864
1864
  """
1865
1865
 
1866
1866
  @overload
1867
- def classic_controlled(
1867
+ def if_else(
1868
1868
  self,
1869
- op: OpType,
1869
+ then_operation: Operation,
1870
+ else_operation: Operation | None,
1871
+ control_register: ClassicalRegister,
1872
+ expected_value: int = 1,
1873
+ comparison_kind: ComparisonKind = ComparisonKind.eq,
1874
+ ) -> None:
1875
+ """Add an if-else operation to the circuit.
1876
+
1877
+ Args:
1878
+ then_operation: The operation to apply if the condition is met
1879
+ else_operation: The operation to apply if the condition is not met
1880
+ control_register: The classical register to check against
1881
+ expected_value: The expected value of the control register
1882
+ comparison_kind: The kind of comparison to perform
1883
+ """
1884
+
1885
+ @overload
1886
+ def if_else(
1887
+ self,
1888
+ then_operation: Operation,
1889
+ else_operation: Operation | None,
1890
+ control_bit: int,
1891
+ expected_value: int = 1,
1892
+ comparison_kind: ComparisonKind = ComparisonKind.eq,
1893
+ ) -> None:
1894
+ """Add an if-else operation to the circuit.
1895
+
1896
+ Args:
1897
+ then_operation: The operation to apply if the condition is met
1898
+ else_operation: The operation to apply if the condition is not met
1899
+ control_bit: The index of the classical bit to check against
1900
+ expected_value: The expected value of the control bit
1901
+ comparison_kind: The kind of comparison to perform
1902
+ """
1903
+
1904
+ @overload
1905
+ def if_(
1906
+ self,
1907
+ op_type: OpType,
1870
1908
  target: int,
1871
- creg: ClassicalRegister,
1909
+ control_register: ClassicalRegister,
1872
1910
  expected_value: int = 1,
1873
1911
  comparison_kind: ComparisonKind = ComparisonKind.eq,
1874
1912
  params: Sequence[float] = (),
1875
1913
  ) -> None:
1876
- """Add a classic-controlled operation to the circuit.
1914
+ """Add an if operartion to the circuit.
1877
1915
 
1878
1916
  Args:
1879
- op: The operation to apply
1917
+ op_type: The operation to apply
1880
1918
  target: The target qubit
1881
- creg: The classical register
1882
- expected_value: The expected value of the classical register
1919
+ control_register: The classical register to check against
1920
+ expected_value: The expected value of the control register
1883
1921
  comparison_kind: The kind of comparison to perform
1884
1922
  params: The parameters of the operation
1885
1923
  """
1886
1924
 
1887
1925
  @overload
1888
- def classic_controlled(
1926
+ def if_(
1889
1927
  self,
1890
- op: OpType,
1928
+ op_type: OpType,
1891
1929
  target: int,
1892
1930
  control: Control | int,
1893
- creg: ClassicalRegister,
1931
+ control_register: ClassicalRegister,
1894
1932
  expected_value: int = 1,
1895
1933
  comparison_kind: ComparisonKind = ComparisonKind.eq,
1896
1934
  params: Sequence[float] = (),
@@ -1898,22 +1936,22 @@ class QuantumComputation(MutableSequence[Operation]):
1898
1936
  """Add a classic-controlled operation to the circuit.
1899
1937
 
1900
1938
  Args:
1901
- op: The operation to apply
1939
+ op_type: The operation to apply
1902
1940
  target: The target qubit
1903
1941
  control: The control qubit
1904
- creg: The classical register
1905
- expected_value: The expected value of the classical register
1942
+ control_register: The classical register to check against
1943
+ expected_value: The expected value of the control register
1906
1944
  comparison_kind: The kind of comparison to perform
1907
- params: The parameters of the operation
1945
+ params: The parameters of the operation.
1908
1946
  """
1909
1947
 
1910
1948
  @overload
1911
- def classic_controlled(
1949
+ def if_(
1912
1950
  self,
1913
- op: OpType,
1951
+ op_type: OpType,
1914
1952
  target: int,
1915
1953
  controls: set[Control | int],
1916
- creg: ClassicalRegister,
1954
+ control_register: ClassicalRegister,
1917
1955
  expected_value: int = 1,
1918
1956
  comparison_kind: ComparisonKind = ComparisonKind.eq,
1919
1957
  params: Sequence[float] = (),
@@ -1921,78 +1959,78 @@ class QuantumComputation(MutableSequence[Operation]):
1921
1959
  """Add a classic-controlled operation to the circuit.
1922
1960
 
1923
1961
  Args:
1924
- op: The operation to apply
1962
+ op_type: The operation to apply
1925
1963
  target: The target qubit
1926
1964
  controls: The control qubits
1927
- creg: The classical register
1928
- expected_value: The expected value of the classical register
1965
+ control_register: The classical register to check against
1966
+ expected_value: The expected value of the control register
1929
1967
  comparison_kind: The kind of comparison to perform
1930
- params: The parameters of the operation
1968
+ params: The parameters of the operation.
1931
1969
  """
1932
1970
 
1933
1971
  @overload
1934
- def classic_controlled(
1972
+ def if_(
1935
1973
  self,
1936
- op: OpType,
1974
+ op_type: OpType,
1937
1975
  target: int,
1938
- cbit: int,
1939
- expected_value: int = 1,
1976
+ control_bit: int,
1977
+ expected_value: bool = True,
1940
1978
  comparison_kind: ComparisonKind = ComparisonKind.eq,
1941
1979
  params: Sequence[float] = (),
1942
1980
  ) -> None:
1943
1981
  """Add a classic-controlled operation to the circuit.
1944
1982
 
1945
1983
  Args:
1946
- op: The operation to apply
1984
+ op_type: The operation to apply
1947
1985
  target: The target qubit
1948
- cbit: The classical bit index
1949
- expected_value: The expected value of the classical register
1986
+ control_bit: The index of the classical bit to check against
1987
+ expected_value: The expected value of the control bit
1950
1988
  comparison_kind: The kind of comparison to perform
1951
- params: The parameters of the operation
1989
+ params: The parameters of the operation.
1952
1990
  """
1953
1991
 
1954
1992
  @overload
1955
- def classic_controlled(
1993
+ def if_(
1956
1994
  self,
1957
- op: OpType,
1995
+ op_type: OpType,
1958
1996
  target: int,
1959
1997
  control: Control | int,
1960
- cbit: int,
1961
- expected_value: int = 1,
1998
+ control_bit: int,
1999
+ expected_value: bool = True,
1962
2000
  comparison_kind: ComparisonKind = ComparisonKind.eq,
1963
2001
  params: Sequence[float] = (),
1964
2002
  ) -> None:
1965
2003
  """Add a classic-controlled operation to the circuit.
1966
2004
 
1967
2005
  Args:
1968
- op: The operation to apply
2006
+ op_type: The operation to apply
1969
2007
  target: The target qubit
1970
2008
  control: The control qubit
1971
- cbit: The classical bit index
1972
- expected_value: The expected value of the classical register
2009
+ control_bit: The index of the classical bit to check against
2010
+ expected_value: The expected value of the control bit
1973
2011
  comparison_kind: The kind of comparison to perform
1974
- params: The parameters of the operation
2012
+ params: The parameters of the operation.
1975
2013
  """
1976
2014
 
1977
2015
  @overload
1978
- def classic_controlled(
2016
+ def if_(
1979
2017
  self,
1980
- op: OpType,
2018
+ op_type: OpType,
1981
2019
  target: int,
1982
2020
  controls: set[Control | int],
1983
- cbit: int,
1984
- expected_value: int = 1,
2021
+ control_bit: int,
2022
+ expected_value: bool = True,
1985
2023
  comparison_kind: ComparisonKind = ComparisonKind.eq,
1986
2024
  params: Sequence[float] = (),
1987
2025
  ) -> None:
1988
2026
  """Add a classic-controlled operation to the circuit.
1989
2027
 
1990
2028
  Args:
1991
- op: The operation to apply
2029
+ op_type: The operation to apply
1992
2030
  target: The target qubit
1993
2031
  controls: The control qubits
1994
- cbit: The classical bit index
1995
- expected_value: The expected value of the classical register
2032
+ control_bit: The index of the classical bit to check against
2033
+ expected_value: The expected value of the control bit
1996
2034
  comparison_kind: The kind of comparison to perform
1997
- params: The parameters of the operation
2035
+ params: The parameters of the operation.
1998
2036
  """
@@ -15,10 +15,10 @@ from .registers import ClassicalRegister
15
15
  from .symbolic import Expression, Variable
16
16
 
17
17
  __all__ = [
18
- "ClassicControlledOperation",
19
18
  "ComparisonKind",
20
19
  "CompoundOperation",
21
20
  "Control",
21
+ "IfElseOperation",
22
22
  "NonUnitaryOperation",
23
23
  "OpType",
24
24
  "Operation",
@@ -81,14 +81,14 @@ class OpType(Enum):
81
81
  See Also:
82
82
  :meth:`mqt.core.ir.QuantumComputation.barrier`
83
83
  """
84
- classic_controlled = ...
84
+ if_else = ...
85
85
  """
86
- A classic controlled operation.
86
+ An if-else operation.
87
87
 
88
- It is used to control the execution of an operation based on the value of a classical register.
88
+ Used to control the execution of an operation based on the value of a classical register.
89
89
 
90
90
  See Also:
91
- :meth:`mqt.core.ir.QuantumComputation.classic_controlled`
91
+ :meth:`mqt.core.ir.QuantumComputation.if_else`
92
92
  """
93
93
  compound = ...
94
94
  """
@@ -439,11 +439,11 @@ class Operation(ABC):
439
439
  The set of qubits that are used by the operation.
440
440
  """
441
441
 
442
- def is_classic_controlled_operation(self) -> bool:
443
- """Check if the operation is a :class:`ClassicControlledOperation`.
442
+ def is_if_else_operation(self) -> bool:
443
+ """Check if the operation is a :class:`IfElseOperation`.
444
444
 
445
445
  Returns:
446
- True if the operation is a :class:`ClassicControlledOperation`, False otherwise.
446
+ True if the operation is a :class:`IfElseOperation`, False otherwise.
447
447
  """
448
448
 
449
449
  def is_compound_operation(self) -> bool:
@@ -895,15 +895,15 @@ class ComparisonKind(Enum):
895
895
  geq = ...
896
896
  """Greater than or equal comparison."""
897
897
 
898
- class ClassicControlledOperation(Operation):
899
- """Classic controlled quantum operation.
898
+ class IfElseOperation(Operation):
899
+ """If-else quantum operation.
900
900
 
901
- This class is used to represent quantum operations that are controlled by
902
- the value of a classical register. The operation is only executed if the
903
- value of the classical register matches the expected value.
901
+ This class is used to represent an if-else operation. The then operation is executed if the
902
+ value of the classical register matches the expected value. Otherwise, the else operation is executed.
904
903
 
905
904
  Args:
906
- operation: The operation that is controlled.
905
+ then_operation: The operation that is executed if the condition is met.
906
+ else_operation: The operation that is executed if the condition is not met.
907
907
  control_register: The classical register that controls the operation.
908
908
  expected_value: The expected value of the classical register.
909
909
  comparison_kind: The kind of comparison (default is equality).
@@ -912,7 +912,8 @@ class ClassicControlledOperation(Operation):
912
912
  @overload
913
913
  def __init__(
914
914
  self,
915
- operation: Operation,
915
+ if_operation: Operation,
916
+ else_operation: Operation | None,
916
917
  control_register: ClassicalRegister,
917
918
  expected_value: int = 1,
918
919
  comparison_kind: ComparisonKind = ...,
@@ -920,14 +921,19 @@ class ClassicControlledOperation(Operation):
920
921
  @overload
921
922
  def __init__(
922
923
  self,
923
- operation: Operation,
924
+ if_operation: Operation,
925
+ else_operation: Operation | None,
924
926
  control_bit: int,
925
- expected_value: int = 1,
927
+ expected_value: bool = True,
926
928
  comparison_kind: ComparisonKind = ...,
927
929
  ) -> None: ...
928
930
  @property
929
- def operation(self) -> Operation:
930
- """The operation that is classically controlled."""
931
+ def then_operation(self) -> Operation:
932
+ """The operation that is executed if the condition is met."""
933
+
934
+ @property
935
+ def else_operation(self) -> Operation | None:
936
+ """The operation that is executed if the condition is not met."""
931
937
 
932
938
  @property
933
939
  def control_register(self) -> ClassicalRegister | None:
@@ -938,22 +944,29 @@ class ClassicControlledOperation(Operation):
938
944
  """The classical bit that controls the operation."""
939
945
 
940
946
  @property
941
- def expected_value(self) -> int:
947
+ def expected_value_register(self) -> int:
948
+ """The expected value of the classical register.
949
+
950
+ The then-operation is executed if the value of the classical register matches the expected value based on the
951
+ kind of comparison.
952
+ The expected value is an integer that is interpreted as a binary number, where the least significant bit is at
953
+ the start index of the classical register.
954
+ """
955
+
956
+ @property
957
+ def expected_value_bit(self) -> bool:
942
958
  """The expected value of the classical register.
943
959
 
944
- The operation is only executed if the value of the classical register matches the expected value
945
- based on the kind of comparison.
946
- If the classical register is a single bit, the expected value is either 0 or 1.
947
- Otherwise, the expected value is an integer that is interpreted as a binary number, where
948
- the least significant bit is at the start index of the classical register.
960
+ The then-operation is executed if the value of the classical bit matches the expected value based on the
961
+ kind of comparison.
949
962
  """
950
963
 
951
964
  @property
952
965
  def comparison_kind(self) -> ComparisonKind:
953
966
  """The kind of comparison.
954
967
 
955
- The operation is only executed if the value of the classical register matches the expected value
956
- based on the kind of comparison.
968
+ The then-operation is executed if the value of the classical register matches the expected value based on the
969
+ kind of comparison.
957
970
  """
958
971
 
959
972
  def add_control(self, control: Control) -> None:
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,13 @@
1
+ prefix=C:/Users/runneradmin/AppData/Local/Temp/tmpjn3wc2_s/wheel/platlib/mqt/core
2
+ exec_prefix=${prefix}
3
+ includedir=${prefix}/include
4
+ libdir=${exec_prefix}/lib
5
+
6
+ Name: libspdlog
7
+ Description: Fast C++ logging library.
8
+ URL: https://github.com/gabime/spdlog
9
+ Version: 1.15.3
10
+ CFlags: -I${includedir} -DSPDLOG_COMPILED_LIB
11
+ Libs: -L${libdir} -lspdlog -pthread
12
+ Requires:
13
+
Binary file
@@ -0,0 +1,12 @@
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
+ """MQT Core NA - The MQT Core neutral atom module.
10
+
11
+ This module contains all neutral atom related functionality of MQT Core.
12
+ """
Binary file
mqt/core/na/fomac.pyi ADDED
@@ -0,0 +1,117 @@
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
+ """Reconstruction of NADevice from QDMI's Device class."""
10
+
11
+ from collections.abc import Iterable
12
+
13
+ from ..fomac import Device as GenericDevice
14
+
15
+ __all__ = ["Device"]
16
+
17
+ class Device(GenericDevice):
18
+ """Represents a device with a lattice of traps."""
19
+
20
+ class Vector:
21
+ """Represents a 2D vector."""
22
+
23
+ x: int
24
+ """
25
+ The x-coordinate of the vector.
26
+ """
27
+ y: int
28
+ """
29
+ The y-coordinate of the vector.
30
+ """
31
+ def __eq__(self, other: object) -> bool: ...
32
+ def __ne__(self, other: object) -> bool: ...
33
+
34
+ class Region:
35
+ """Represents a region in the device."""
36
+
37
+ origin: Device.Vector
38
+ """
39
+ The origin of the region.
40
+ """
41
+
42
+ class Size:
43
+ """Represents the size of a region."""
44
+
45
+ width: int
46
+ """
47
+ The width of the region.
48
+ """
49
+ height: int
50
+ """
51
+ The height of the region.
52
+ """
53
+ def __eq__(self, other: object) -> bool: ...
54
+ def __ne__(self, other: object) -> bool: ...
55
+
56
+ size: Size
57
+ """
58
+ The size of the region.
59
+ """
60
+
61
+ def __eq__(self, other: object) -> bool: ...
62
+ def __ne__(self, other: object) -> bool: ...
63
+
64
+ class Lattice:
65
+ """Represents a lattice of traps in the device."""
66
+
67
+ lattice_origin: Device.Vector
68
+ """
69
+ The origin of the lattice.
70
+ """
71
+ lattice_vector_1: Device.Vector
72
+ """
73
+ The first lattice vector.
74
+ """
75
+ lattice_vector_2: Device.Vector
76
+ """
77
+ The second lattice vector.
78
+ """
79
+ sublattice_offsets: Iterable[Device.Vector]
80
+ """
81
+ The offsets of the sublattices.
82
+ """
83
+ extent: Device.Region
84
+ """
85
+ The extent of the lattice.
86
+ """
87
+ def __eq__(self, other: object) -> bool: ...
88
+ def __ne__(self, other: object) -> bool: ...
89
+
90
+ traps: Iterable[Device.Lattice]
91
+ """
92
+ The list of trap positions in the device.
93
+ """
94
+ t1: int
95
+ """
96
+ The T1 time of the device.
97
+ """
98
+ t2: int
99
+ """
100
+ The T2 time of the device.
101
+ """
102
+
103
+ @classmethod
104
+ def try_create_from_device(cls, device: GenericDevice) -> Device | None:
105
+ """Create NA FoMaC Device from generic FoMaC Device.
106
+
107
+ Args:
108
+ device: The generic FoMaC Device to convert.
109
+
110
+ Returns:
111
+ The converted NA FoMaC Device or None if the conversion is not possible.
112
+ """
113
+ def __eq__(self, other: object) -> bool: ...
114
+ def __ne__(self, other: object) -> bool: ...
115
+
116
+ def devices() -> Iterable[Device]:
117
+ """Returns a list of available devices."""