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,480 @@
1
+ /*
2
+ * Copyright (c) 2023 - 2025 Chair for Design Automation, TUM
3
+ * Copyright (c) 2025 Munich Quantum Software Company GmbH
4
+ * All rights reserved.
5
+ *
6
+ * SPDX-License-Identifier: MIT
7
+ *
8
+ * Licensed under the MIT License
9
+ */
10
+
11
+ #pragma once
12
+
13
+ #include "Utils.hpp"
14
+ #include "ZXDefinitions.hpp"
15
+
16
+ #include <cassert>
17
+ #include <cstddef>
18
+ #include <optional>
19
+ #include <utility>
20
+ #include <vector>
21
+
22
+ namespace zx {
23
+
24
+ /**
25
+ * @brief Class representing a ZX-diagram.
26
+ *
27
+ * @details Labelled undirected graph. Every node is either of type
28
+ * VertexType::Z, VertexType::X or VertexType::Boundary. The boundary vertices
29
+ * are the inputs and outputs of the diagram. The graph is stored as an
30
+ * adjacency list. The vertices are stored in a vector of optional VertexData.
31
+ * The optional is empty if the vertex has been deleted.
32
+ * The scalars of the diagram are SymbolicPiExpressions, meaning that all
33
+ * computations can be done symbolically.
34
+ */
35
+ class ZXDiagram {
36
+ public:
37
+ ZXDiagram() = default;
38
+ /**
39
+ * @brief Create an nqubit identity diagram.
40
+ * @param nqubits number of qubits
41
+ */
42
+ explicit ZXDiagram(std::size_t nqubits);
43
+
44
+ /**
45
+ * @brief Add an edge to the diagram.
46
+ * @param from first vertex of the edge
47
+ * @param to second vertex of the edge
48
+ * @param type type of the edge (Simple or Hadamard)
49
+ */
50
+ void addEdge(Vertex from, Vertex to, EdgeType type = EdgeType::Simple);
51
+
52
+ /**
53
+ * @brief Add a Hadamard edge to the diagram.
54
+ * @param from first vertex of the edge
55
+ * @param to second vertex of the edge
56
+ */
57
+ void addHadamardEdge(const Vertex from, const Vertex to) {
58
+ addEdge(from, to, EdgeType::Hadamard);
59
+ };
60
+
61
+ /**
62
+ * @brief Add edge to diagram, simplifying the diagram if this results in
63
+ * parallel edges.
64
+ * @details In the ZX-calculus, parallel edges and self-loops can usually be
65
+ * simplified. Two parallel Simple edges between two opposite-colored
66
+ * vertices cancel out for example. This function adds an edge to the diagram
67
+ * and then simplifies the diagram if necessary.
68
+ * @param from first vertex of the edge
69
+ * @param to second vertex of the edge
70
+ * @param eType type of the edge (Simple or Hadamard)
71
+ */
72
+ void addEdgeParallelAware(Vertex from, Vertex to,
73
+ EdgeType eType = EdgeType::Simple);
74
+
75
+ /**
76
+ * @brief Remove Edge from the diagram.
77
+ * @param from first vertex of the edge
78
+ * @param to second vertex of the edge
79
+ */
80
+ void removeEdge(Vertex from, Vertex to);
81
+
82
+ /**
83
+ * @brief Add a vertex to the diagram.
84
+ * @param data data of the vertex
85
+ * @return the vertex that was added
86
+ */
87
+ Vertex addVertex(const VertexData& data);
88
+
89
+ /**
90
+ * @brief Add a vertex to the diagram.
91
+ * @param qubit qubit index of the vertex
92
+ * @param col column index of the vertex
93
+ * @param phase phase of the vertex
94
+ * @param type type of the vertex
95
+ * @return the vertex that was added
96
+ */
97
+ Vertex addVertex(Qubit qubit, Col col = 0,
98
+ const PiExpression& phase = PiExpression(),
99
+ VertexType type = VertexType::Z);
100
+
101
+ /**
102
+ * @brief Add a bare qubit to the diagram.
103
+ */
104
+ void addQubit();
105
+
106
+ /**
107
+ * @brief Add multiple bare qubits to the diagram.
108
+ * @param n number of qubits to add
109
+ */
110
+ void addQubits(zx::Qubit n);
111
+
112
+ /**
113
+ * @brief Remove a vertex from the diagram. Also removes all edges incident to
114
+ * the vertex.
115
+ * @param toRemove vertex to remove
116
+ */
117
+ void removeVertex(Vertex toRemove);
118
+
119
+ /**
120
+ * @brief Get number of deleted vertices.
121
+ * @details Deleted vertices are not removed from the vertices vector, but
122
+ * are left as optional in the array.
123
+ * @return number of deleted vertices
124
+ */
125
+ [[nodiscard]] std::size_t getNdeleted() const { return deleted.size(); }
126
+
127
+ /**
128
+ * @brief Get number of vertices.
129
+ * @return number of vertices
130
+ */
131
+ [[nodiscard]] std::size_t getNVertices() const { return nvertices; }
132
+
133
+ /**
134
+ * @brief Get number of edges.
135
+ * @return number of edges
136
+ */
137
+ [[nodiscard]] std::size_t getNEdges() const { return nedges; }
138
+
139
+ /**
140
+ * @brief Get number of qubits.
141
+ * @return number of qubits
142
+ */
143
+ [[nodiscard]] std::size_t getNQubits() const { return inputs.size(); }
144
+
145
+ /**
146
+ * @brief Check whether there is a path between two vertices.
147
+ * @param from first vertex
148
+ * @param to second vertex
149
+ * @return true if there is a path between the two vertices, false otherwise
150
+ */
151
+ [[nodiscard]] bool connected(Vertex from, Vertex to) const;
152
+
153
+ /**
154
+ * @brief Get the edge between two vertices.
155
+ * @param from first vertex
156
+ * @param to second vertex
157
+ * @return the edge between the two vertices, if it exists
158
+ */
159
+ [[nodiscard]] std::optional<Edge> getEdge(Vertex from, Vertex to) const;
160
+
161
+ /**
162
+ * @brief Get all edges incident to a vertex.
163
+ * @param v vertex
164
+ * @return vector of edges incident to the vertex
165
+ */
166
+ [[nodiscard]] const std::vector<Edge>& incidentEdges(const Vertex v) const {
167
+ return edges[v];
168
+ }
169
+
170
+ /**
171
+ * @brief Get the n-th incident edge of a vertex. Bounds are not checked for
172
+ * performance reasons!
173
+ * @param v vertex
174
+ * @param n index of the incident edge
175
+ * @return the n-th incident edge of the vertex
176
+ */
177
+ [[nodiscard]] const Edge& incidentEdge(const Vertex v, const std::size_t n) {
178
+ return edges[v][n];
179
+ }
180
+
181
+ /**
182
+ * @brief Get the degree of a vertex.
183
+ * @param v vertex
184
+ * @return degree of the vertex
185
+ */
186
+ [[nodiscard]] std::size_t degree(const Vertex v) const {
187
+ return edges[v].size();
188
+ }
189
+
190
+ /**
191
+ * @brief Get the phase of a vertex
192
+ * @param v vertex
193
+ * @return phase of the vertex
194
+ */
195
+ [[nodiscard]] const PiExpression& phase(const Vertex v) const {
196
+ const auto& vertex = vertices[v];
197
+ assert(vertex.has_value());
198
+ return vertex->phase; // NOLINT(bugprone-unchecked-optional-access)
199
+ }
200
+
201
+ /**
202
+ * @brief Get the qubit of a vertex
203
+ * @param v vertex
204
+ * @return qubit of the vertex
205
+ */
206
+ [[nodiscard]] Qubit qubit(const Vertex v) const {
207
+ const auto& vertex = vertices[v];
208
+ assert(vertex.has_value());
209
+ return vertex->qubit; // NOLINT(bugprone-unchecked-optional-access)
210
+ }
211
+
212
+ /**
213
+ * @brief Get the type of a vertex
214
+ * @param v vertex
215
+ * @return type of the vertex
216
+ */
217
+ [[nodiscard]] VertexType type(const Vertex v) const {
218
+ const auto& vertex = vertices[v];
219
+ assert(vertex.has_value());
220
+ return vertex->type; // NOLINT(bugprone-unchecked-optional-access)
221
+ }
222
+
223
+ /**
224
+ * @brief Get vertex data if vertex has not been deleted.
225
+ * @param v vertex
226
+ * @return vertex data if vertex has not been deleted
227
+ */
228
+ [[nodiscard]] std::optional<VertexData> getVData(const Vertex v) const {
229
+ return vertices[v];
230
+ }
231
+
232
+ /**
233
+ * @brief Get all vertices of the diagram.
234
+ * @return vector of vertices
235
+ */
236
+ [[nodiscard]] std::vector<std::pair<Vertex, const VertexData&>>
237
+ getVertices() const;
238
+
239
+ /**
240
+ * @brief Get all edges of the diagram.
241
+ * @return vector of edges
242
+ */
243
+ [[nodiscard]] std::vector<std::pair<Vertex, Vertex>> getEdges() const;
244
+
245
+ /**
246
+ * @brief Get all input vertices of the diagram.
247
+ * @return vector of input vertices
248
+ */
249
+ [[nodiscard]] const std::vector<Vertex>& getInputs() const { return inputs; }
250
+
251
+ /**
252
+ * @brief Get i-th input vertex of the diagram. Bounds are not checked!
253
+ * @param i index of the input vertex
254
+ * @return i-th input vertex
255
+ */
256
+ [[nodiscard]] Vertex getInput(const std::size_t i) const { return inputs[i]; }
257
+
258
+ /**
259
+ * @brief Get all output vertices of the diagram.
260
+ * @return vector of output vertices
261
+ */
262
+ [[nodiscard]] const std::vector<Vertex>& getOutputs() const {
263
+ return outputs;
264
+ }
265
+
266
+ /**
267
+ * @brief Get i-th output vertex of the diagram. Bounds are not checked!
268
+ * @param i index of the output vertex
269
+ * @return i-th output vertex
270
+ */
271
+ [[nodiscard]] Vertex getOutput(const std::size_t i) const {
272
+ return outputs[i];
273
+ }
274
+
275
+ /**
276
+ * @brief Check whether vertex has been deleted.
277
+ * @param v vertex
278
+ * @return true if vertex has been deleted, false otherwise
279
+ */
280
+ [[nodiscard]] bool isDeleted(const Vertex v) const {
281
+ return !vertices[v].has_value();
282
+ }
283
+
284
+ /**
285
+ * @brief Check whether vertex is a boundary vertex.
286
+ * @param v vertex
287
+ * @return true if vertex is a boundary vertex, false otherwise
288
+ */
289
+ [[nodiscard]] bool isBoundaryVertex(const Vertex v) const {
290
+ return type(v) == VertexType::Boundary;
291
+ }
292
+
293
+ /**
294
+ * @brief Check whether vertex is an input vertex.
295
+ * @param v vertex
296
+ * @return true if vertex is an input vertex, false otherwise
297
+ */
298
+ [[nodiscard]] bool isInput(Vertex v) const;
299
+
300
+ /**
301
+ * @brief Check whether vertex is an output vertex.
302
+ * @param v vertex
303
+ * @return true if vertex is an output vertex, false otherwise
304
+ */
305
+ [[nodiscard]] bool isOutput(Vertex v) const;
306
+
307
+ /**
308
+ * @brief Add phase to a vertex. The phase is added to the existing phase.
309
+ * @param v vertex
310
+ * @param phase phase to add
311
+ */
312
+ void addPhase(const Vertex v, const PiExpression& phase) {
313
+ auto& vertex = vertices[v];
314
+ if (vertex.has_value()) {
315
+ vertex->phase += phase;
316
+ }
317
+ }
318
+
319
+ /**
320
+ * @brief Set phase of a vertex. Previous value is overwritten.
321
+ * @param v vertex
322
+ * @param phase phase to set
323
+ */
324
+ void setPhase(const Vertex v, const PiExpression& phase) {
325
+ auto& vertex = vertices[v];
326
+ if (vertex.has_value()) {
327
+ vertex->phase = phase;
328
+ }
329
+ }
330
+
331
+ /**
332
+ * @brief Set type of a vertex.
333
+ * @param v vertex
334
+ * @param type type to set
335
+ */
336
+ void setType(const Vertex v, const VertexType type) {
337
+ auto& vertex = vertices[v];
338
+ if (vertex.has_value()) {
339
+ vertex->type = type;
340
+ }
341
+ }
342
+
343
+ /**
344
+ * @brief Transform the diagram to a graph-like diagram. Modifies the diagram
345
+ * in place.
346
+ * @details A graph-like diagram is a diagram where all vertices are of type Z
347
+ * and all edges are hadamard edges. Every ZX-diagram can be rewritten into
348
+ * this form by adding Hadamard edges and changing the type of the vertices.
349
+ */
350
+ void toGraphlike();
351
+
352
+ /**
353
+ * @brief check whether the diagram is the identity diagram.
354
+ * @details The identity diagram is a diagram where every input is connected
355
+ * to one output without any additional vertices or hadamard edges in between.
356
+ * @return true if the diagram is the identity diagram, false otherwise
357
+ */
358
+ [[nodiscard]] bool isIdentity() const;
359
+
360
+ /**
361
+ * @brief Get the adjoint of the diagram.
362
+ * @details The adjoint of a ZX-diagram is the diagram with inputs and outputs
363
+ * swapped and all phases negated.
364
+ * @return the adjoint of the diagram
365
+ */
366
+ [[nodiscard]] ZXDiagram adjoint() const;
367
+
368
+ /**
369
+ * @brief Invert the diagram in place.
370
+ * @details Diagram is replaced by its adjoint.
371
+ * @return reference to the inverted diagram
372
+ */
373
+ ZXDiagram& invert();
374
+
375
+ /**
376
+ * @brief Concatenate two diagrams. Modifies the first diagram in place.
377
+ * @details The second diagram is added to the first diagram. The inputs of
378
+ * the second diagram are connected to the outputs of the first diagram. The
379
+ * number of qubits of the two diagrams must be the same.
380
+ * @param rhs second diagram
381
+ * @return reference to the concatenated diagram
382
+ */
383
+ ZXDiagram& concat(const ZXDiagram& rhs);
384
+
385
+ /**
386
+ * @brief Same as concat(const ZXDiagram&)
387
+ * @param rhs second diagram
388
+ * @return reference to the concatenated diagram
389
+ */
390
+ ZXDiagram& operator+=(const ZXDiagram& rhs) { return this->concat(rhs); }
391
+
392
+ /**
393
+ * @brief Convert a qubit to an ancilla initialized and post-selected on |0>.
394
+ * @param qubit qubit to convert
395
+ */
396
+ void makeAncilla(Qubit qubit);
397
+
398
+ /**
399
+ * @brief Convert a qubit to an ancilla initialized and post-selected on |0>.
400
+ * @param in qubit initialized in |0>
401
+ * @param out qubit post-selected in |0>
402
+ */
403
+ void makeAncilla(Qubit in, Qubit out);
404
+
405
+ /**
406
+ * @brief Round phases in the diagram to multiples of pi/2. Modifies the
407
+ * diagram in place.
408
+ * @param tolerance tolerance for rounding
409
+ */
410
+ void approximateCliffords(fp tolerance);
411
+
412
+ /**
413
+ * @brief Remove disconnected spiders from the diagram. Modifies the diagram
414
+ * in place.
415
+ */
416
+ void removeDisconnectedSpiders();
417
+
418
+ /**
419
+ * @brief Add a global phase to the diagram. Adds the phase to the current
420
+ * global phase.
421
+ * @param phase phase to add
422
+ */
423
+ void addGlobalPhase(const PiExpression& phase);
424
+
425
+ /**
426
+ * @brief Get the global phase of the diagram.
427
+ * @return global phase of the diagram
428
+ */
429
+ [[nodiscard]] PiExpression getGlobalPhase() const { return globalPhase; }
430
+
431
+ /**
432
+ * @brief Check whether the global phase of the diagram is zero.
433
+ * @return true if the global phase is zero, false otherwise
434
+ */
435
+ [[nodiscard]] bool globalPhaseIsZero() const { return globalPhase.isZero(); }
436
+
437
+ /**
438
+ * @brief Get the adjacency matrix of the diagram.
439
+ * @return adjacency matrix of the diagram
440
+ */
441
+ [[nodiscard]] gf2Mat getAdjMat() const;
442
+
443
+ /**
444
+ * @brief Get the connected set of a set of vertices.
445
+ * @details The connected set of a set of vertices is the set of all vertices
446
+ * that are connected to the input set.
447
+ * @param s set of vertices
448
+ * @param exclude set of vertices to exclude from the connected set
449
+ * @return connected set of the input set
450
+ */
451
+ [[nodiscard]] std::vector<Vertex>
452
+ getConnectedSet(const std::vector<Vertex>& s,
453
+ const std::vector<Vertex>& exclude = {}) const;
454
+
455
+ /**
456
+ * @brief Check whether a vertex is in a vector of vertices.
457
+ * @param v vertex
458
+ * @param vertices vector of vertices
459
+ * @return true if the vertex is in the vector, false otherwise
460
+ */
461
+ static bool isIn(const Vertex& v, const std::vector<Vertex>& vertices);
462
+
463
+ private:
464
+ std::vector<std::vector<Edge>> edges;
465
+ std::vector<std::optional<VertexData>> vertices;
466
+ std::vector<Vertex> deleted;
467
+ std::vector<Vertex> inputs;
468
+ std::vector<Vertex> outputs;
469
+ std::size_t nvertices = 0;
470
+ std::size_t nedges = 0;
471
+ PiExpression globalPhase;
472
+
473
+ std::vector<Vertex> initGraph(std::size_t nqubits);
474
+ void closeGraph(const std::vector<Vertex>& qubitVertices);
475
+
476
+ void removeHalfEdge(Vertex from, Vertex to);
477
+
478
+ std::vector<Edge>::iterator getEdgePtr(Vertex from, Vertex to);
479
+ };
480
+ } // namespace zx
@@ -0,0 +1,43 @@
1
+
2
+ #ifndef MQT_CORE_ZX_EXPORT_H
3
+ #define MQT_CORE_ZX_EXPORT_H
4
+
5
+ #ifdef MQT_CORE_ZX_STATIC_DEFINE
6
+ # define MQT_CORE_ZX_EXPORT
7
+ # define MQT_CORE_ZX_NO_EXPORT
8
+ #else
9
+ # ifndef MQT_CORE_ZX_EXPORT
10
+ # ifdef mqt_core_zx_EXPORTS
11
+ /* We are building this library */
12
+ # define MQT_CORE_ZX_EXPORT __declspec(dllexport)
13
+ # else
14
+ /* We are using this library */
15
+ # define MQT_CORE_ZX_EXPORT __declspec(dllimport)
16
+ # endif
17
+ # endif
18
+
19
+ # ifndef MQT_CORE_ZX_NO_EXPORT
20
+ # define MQT_CORE_ZX_NO_EXPORT
21
+ # endif
22
+ #endif
23
+
24
+ #ifndef MQT_CORE_ZX_DEPRECATED
25
+ # define MQT_CORE_ZX_DEPRECATED __declspec(deprecated)
26
+ #endif
27
+
28
+ #ifndef MQT_CORE_ZX_DEPRECATED_EXPORT
29
+ # define MQT_CORE_ZX_DEPRECATED_EXPORT MQT_CORE_ZX_EXPORT MQT_CORE_ZX_DEPRECATED
30
+ #endif
31
+
32
+ #ifndef MQT_CORE_ZX_DEPRECATED_NO_EXPORT
33
+ # define MQT_CORE_ZX_DEPRECATED_NO_EXPORT MQT_CORE_ZX_NO_EXPORT MQT_CORE_ZX_DEPRECATED
34
+ #endif
35
+
36
+ /* NOLINTNEXTLINE(readability-avoid-unconditional-preprocessor-if) */
37
+ #if 0 /* DEFINE_NO_DEPRECATED */
38
+ # ifndef MQT_CORE_ZX_NO_DEPRECATED
39
+ # define MQT_CORE_ZX_NO_DEPRECATED
40
+ # endif
41
+ #endif
42
+
43
+ #endif /* MQT_CORE_ZX_EXPORT_H */
@@ -0,0 +1,55 @@
1
+ // __ _____ _____ _____
2
+ // __| | __| | | | JSON for Modern C++
3
+ // | | |__ | | | | | | version 3.12.0
4
+ // |_____|_____|_____|_|___| https://github.com/nlohmann/json
5
+ //
6
+ // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me>
7
+ // SPDX-License-Identifier: MIT
8
+
9
+ #pragma once
10
+
11
+ #include <utility>
12
+
13
+ #include <nlohmann/detail/abi_macros.hpp>
14
+ #include <nlohmann/detail/conversions/from_json.hpp>
15
+ #include <nlohmann/detail/conversions/to_json.hpp>
16
+ #include <nlohmann/detail/meta/identity_tag.hpp>
17
+
18
+ NLOHMANN_JSON_NAMESPACE_BEGIN
19
+
20
+ /// @sa https://json.nlohmann.me/api/adl_serializer/
21
+ template<typename ValueType, typename>
22
+ struct adl_serializer
23
+ {
24
+ /// @brief convert a JSON value to any value type
25
+ /// @sa https://json.nlohmann.me/api/adl_serializer/from_json/
26
+ template<typename BasicJsonType, typename TargetType = ValueType>
27
+ static auto from_json(BasicJsonType && j, TargetType& val) noexcept(
28
+ noexcept(::nlohmann::from_json(std::forward<BasicJsonType>(j), val)))
29
+ -> decltype(::nlohmann::from_json(std::forward<BasicJsonType>(j), val), void())
30
+ {
31
+ ::nlohmann::from_json(std::forward<BasicJsonType>(j), val);
32
+ }
33
+
34
+ /// @brief convert a JSON value to any value type
35
+ /// @sa https://json.nlohmann.me/api/adl_serializer/from_json/
36
+ template<typename BasicJsonType, typename TargetType = ValueType>
37
+ static auto from_json(BasicJsonType && j) noexcept(
38
+ noexcept(::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType> {})))
39
+ -> decltype(::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType> {}))
40
+ {
41
+ return ::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType> {});
42
+ }
43
+
44
+ /// @brief convert any value type to a JSON value
45
+ /// @sa https://json.nlohmann.me/api/adl_serializer/to_json/
46
+ template<typename BasicJsonType, typename TargetType = ValueType>
47
+ static auto to_json(BasicJsonType& j, TargetType && val) noexcept(
48
+ noexcept(::nlohmann::to_json(j, std::forward<TargetType>(val))))
49
+ -> decltype(::nlohmann::to_json(j, std::forward<TargetType>(val)), void())
50
+ {
51
+ ::nlohmann::to_json(j, std::forward<TargetType>(val));
52
+ }
53
+ };
54
+
55
+ NLOHMANN_JSON_NAMESPACE_END
@@ -0,0 +1,103 @@
1
+ // __ _____ _____ _____
2
+ // __| | __| | | | JSON for Modern C++
3
+ // | | |__ | | | | | | version 3.12.0
4
+ // |_____|_____|_____|_|___| https://github.com/nlohmann/json
5
+ //
6
+ // SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me>
7
+ // SPDX-License-Identifier: MIT
8
+
9
+ #pragma once
10
+
11
+ #include <cstdint> // uint8_t, uint64_t
12
+ #include <tuple> // tie
13
+ #include <utility> // move
14
+
15
+ #include <nlohmann/detail/abi_macros.hpp>
16
+
17
+ NLOHMANN_JSON_NAMESPACE_BEGIN
18
+
19
+ /// @brief an internal type for a backed binary type
20
+ /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/
21
+ template<typename BinaryType>
22
+ class byte_container_with_subtype : public BinaryType
23
+ {
24
+ public:
25
+ using container_type = BinaryType;
26
+ using subtype_type = std::uint64_t;
27
+
28
+ /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/
29
+ byte_container_with_subtype() noexcept(noexcept(container_type()))
30
+ : container_type()
31
+ {}
32
+
33
+ /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/
34
+ byte_container_with_subtype(const container_type& b) noexcept(noexcept(container_type(b)))
35
+ : container_type(b)
36
+ {}
37
+
38
+ /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/
39
+ byte_container_with_subtype(container_type&& b) noexcept(noexcept(container_type(std::move(b))))
40
+ : container_type(std::move(b))
41
+ {}
42
+
43
+ /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/
44
+ byte_container_with_subtype(const container_type& b, subtype_type subtype_) noexcept(noexcept(container_type(b)))
45
+ : container_type(b)
46
+ , m_subtype(subtype_)
47
+ , m_has_subtype(true)
48
+ {}
49
+
50
+ /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/
51
+ byte_container_with_subtype(container_type&& b, subtype_type subtype_) noexcept(noexcept(container_type(std::move(b))))
52
+ : container_type(std::move(b))
53
+ , m_subtype(subtype_)
54
+ , m_has_subtype(true)
55
+ {}
56
+
57
+ bool operator==(const byte_container_with_subtype& rhs) const
58
+ {
59
+ return std::tie(static_cast<const BinaryType&>(*this), m_subtype, m_has_subtype) ==
60
+ std::tie(static_cast<const BinaryType&>(rhs), rhs.m_subtype, rhs.m_has_subtype);
61
+ }
62
+
63
+ bool operator!=(const byte_container_with_subtype& rhs) const
64
+ {
65
+ return !(rhs == *this);
66
+ }
67
+
68
+ /// @brief sets the binary subtype
69
+ /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/set_subtype/
70
+ void set_subtype(subtype_type subtype_) noexcept
71
+ {
72
+ m_subtype = subtype_;
73
+ m_has_subtype = true;
74
+ }
75
+
76
+ /// @brief return the binary subtype
77
+ /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/subtype/
78
+ constexpr subtype_type subtype() const noexcept
79
+ {
80
+ return m_has_subtype ? m_subtype : static_cast<subtype_type>(-1);
81
+ }
82
+
83
+ /// @brief return whether the value has a subtype
84
+ /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/has_subtype/
85
+ constexpr bool has_subtype() const noexcept
86
+ {
87
+ return m_has_subtype;
88
+ }
89
+
90
+ /// @brief clears the binary subtype
91
+ /// @sa https://json.nlohmann.me/api/byte_container_with_subtype/clear_subtype/
92
+ void clear_subtype() noexcept
93
+ {
94
+ m_subtype = 0;
95
+ m_has_subtype = false;
96
+ }
97
+
98
+ private:
99
+ subtype_type m_subtype = 0;
100
+ bool m_has_subtype = false;
101
+ };
102
+
103
+ NLOHMANN_JSON_NAMESPACE_END