mqt-core 3.3.2__cp314-cp314t-macosx_11_0_x86_64.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 (546) hide show
  1. mqt/core/__init__.py +77 -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/dd.cpython-314t-darwin.so +0 -0
  9. mqt/core/dd.pyi +1016 -0
  10. mqt/core/dd_evaluation.py +368 -0
  11. mqt/core/fomac.cpython-314t-darwin.so +0 -0
  12. mqt/core/fomac.pyi +125 -0
  13. mqt/core/include/mqt-core/algorithms/BernsteinVazirani.hpp +39 -0
  14. mqt/core/include/mqt-core/algorithms/GHZState.hpp +18 -0
  15. mqt/core/include/mqt-core/algorithms/Grover.hpp +33 -0
  16. mqt/core/include/mqt-core/algorithms/QFT.hpp +21 -0
  17. mqt/core/include/mqt-core/algorithms/QPE.hpp +30 -0
  18. mqt/core/include/mqt-core/algorithms/RandomCliffordCircuit.hpp +22 -0
  19. mqt/core/include/mqt-core/algorithms/StatePreparation.hpp +43 -0
  20. mqt/core/include/mqt-core/algorithms/WState.hpp +18 -0
  21. mqt/core/include/mqt-core/algorithms/mqt_core_algorithms_export.h +43 -0
  22. mqt/core/include/mqt-core/boost/config/abi/borland_prefix.hpp +27 -0
  23. mqt/core/include/mqt-core/boost/config/abi/borland_suffix.hpp +12 -0
  24. mqt/core/include/mqt-core/boost/config/abi/msvc_prefix.hpp +22 -0
  25. mqt/core/include/mqt-core/boost/config/abi/msvc_suffix.hpp +8 -0
  26. mqt/core/include/mqt-core/boost/config/abi_prefix.hpp +25 -0
  27. mqt/core/include/mqt-core/boost/config/abi_suffix.hpp +25 -0
  28. mqt/core/include/mqt-core/boost/config/assert_cxx03.hpp +211 -0
  29. mqt/core/include/mqt-core/boost/config/assert_cxx11.hpp +212 -0
  30. mqt/core/include/mqt-core/boost/config/assert_cxx14.hpp +47 -0
  31. mqt/core/include/mqt-core/boost/config/assert_cxx17.hpp +65 -0
  32. mqt/core/include/mqt-core/boost/config/assert_cxx20.hpp +59 -0
  33. mqt/core/include/mqt-core/boost/config/assert_cxx23.hpp +41 -0
  34. mqt/core/include/mqt-core/boost/config/assert_cxx98.hpp +23 -0
  35. mqt/core/include/mqt-core/boost/config/auto_link.hpp +525 -0
  36. mqt/core/include/mqt-core/boost/config/compiler/borland.hpp +342 -0
  37. mqt/core/include/mqt-core/boost/config/compiler/clang.hpp +370 -0
  38. mqt/core/include/mqt-core/boost/config/compiler/clang_version.hpp +89 -0
  39. mqt/core/include/mqt-core/boost/config/compiler/codegear.hpp +389 -0
  40. mqt/core/include/mqt-core/boost/config/compiler/comeau.hpp +59 -0
  41. mqt/core/include/mqt-core/boost/config/compiler/common_edg.hpp +185 -0
  42. mqt/core/include/mqt-core/boost/config/compiler/compaq_cxx.hpp +19 -0
  43. mqt/core/include/mqt-core/boost/config/compiler/cray.hpp +446 -0
  44. mqt/core/include/mqt-core/boost/config/compiler/diab.hpp +26 -0
  45. mqt/core/include/mqt-core/boost/config/compiler/digitalmars.hpp +146 -0
  46. mqt/core/include/mqt-core/boost/config/compiler/gcc.hpp +386 -0
  47. mqt/core/include/mqt-core/boost/config/compiler/gcc_xml.hpp +115 -0
  48. mqt/core/include/mqt-core/boost/config/compiler/greenhills.hpp +28 -0
  49. mqt/core/include/mqt-core/boost/config/compiler/hp_acc.hpp +153 -0
  50. mqt/core/include/mqt-core/boost/config/compiler/intel.hpp +577 -0
  51. mqt/core/include/mqt-core/boost/config/compiler/kai.hpp +33 -0
  52. mqt/core/include/mqt-core/boost/config/compiler/metrowerks.hpp +201 -0
  53. mqt/core/include/mqt-core/boost/config/compiler/mpw.hpp +143 -0
  54. mqt/core/include/mqt-core/boost/config/compiler/nvcc.hpp +64 -0
  55. mqt/core/include/mqt-core/boost/config/compiler/pathscale.hpp +141 -0
  56. mqt/core/include/mqt-core/boost/config/compiler/pgi.hpp +23 -0
  57. mqt/core/include/mqt-core/boost/config/compiler/sgi_mipspro.hpp +29 -0
  58. mqt/core/include/mqt-core/boost/config/compiler/sunpro_cc.hpp +225 -0
  59. mqt/core/include/mqt-core/boost/config/compiler/vacpp.hpp +189 -0
  60. mqt/core/include/mqt-core/boost/config/compiler/visualc.hpp +398 -0
  61. mqt/core/include/mqt-core/boost/config/compiler/xlcpp.hpp +303 -0
  62. mqt/core/include/mqt-core/boost/config/compiler/xlcpp_zos.hpp +174 -0
  63. mqt/core/include/mqt-core/boost/config/detail/cxx_composite.hpp +218 -0
  64. mqt/core/include/mqt-core/boost/config/detail/posix_features.hpp +95 -0
  65. mqt/core/include/mqt-core/boost/config/detail/select_compiler_config.hpp +157 -0
  66. mqt/core/include/mqt-core/boost/config/detail/select_platform_config.hpp +147 -0
  67. mqt/core/include/mqt-core/boost/config/detail/select_stdlib_config.hpp +121 -0
  68. mqt/core/include/mqt-core/boost/config/detail/suffix.hpp +1334 -0
  69. mqt/core/include/mqt-core/boost/config/header_deprecated.hpp +26 -0
  70. mqt/core/include/mqt-core/boost/config/helper_macros.hpp +37 -0
  71. mqt/core/include/mqt-core/boost/config/no_tr1/cmath.hpp +28 -0
  72. mqt/core/include/mqt-core/boost/config/no_tr1/complex.hpp +28 -0
  73. mqt/core/include/mqt-core/boost/config/no_tr1/functional.hpp +28 -0
  74. mqt/core/include/mqt-core/boost/config/no_tr1/memory.hpp +28 -0
  75. mqt/core/include/mqt-core/boost/config/no_tr1/utility.hpp +28 -0
  76. mqt/core/include/mqt-core/boost/config/platform/aix.hpp +33 -0
  77. mqt/core/include/mqt-core/boost/config/platform/amigaos.hpp +15 -0
  78. mqt/core/include/mqt-core/boost/config/platform/beos.hpp +26 -0
  79. mqt/core/include/mqt-core/boost/config/platform/bsd.hpp +83 -0
  80. mqt/core/include/mqt-core/boost/config/platform/cloudabi.hpp +18 -0
  81. mqt/core/include/mqt-core/boost/config/platform/cray.hpp +18 -0
  82. mqt/core/include/mqt-core/boost/config/platform/cygwin.hpp +71 -0
  83. mqt/core/include/mqt-core/boost/config/platform/haiku.hpp +31 -0
  84. mqt/core/include/mqt-core/boost/config/platform/hpux.hpp +87 -0
  85. mqt/core/include/mqt-core/boost/config/platform/irix.hpp +31 -0
  86. mqt/core/include/mqt-core/boost/config/platform/linux.hpp +106 -0
  87. mqt/core/include/mqt-core/boost/config/platform/macos.hpp +87 -0
  88. mqt/core/include/mqt-core/boost/config/platform/qnxnto.hpp +31 -0
  89. mqt/core/include/mqt-core/boost/config/platform/solaris.hpp +31 -0
  90. mqt/core/include/mqt-core/boost/config/platform/symbian.hpp +97 -0
  91. mqt/core/include/mqt-core/boost/config/platform/vms.hpp +25 -0
  92. mqt/core/include/mqt-core/boost/config/platform/vxworks.hpp +422 -0
  93. mqt/core/include/mqt-core/boost/config/platform/wasm.hpp +23 -0
  94. mqt/core/include/mqt-core/boost/config/platform/win32.hpp +90 -0
  95. mqt/core/include/mqt-core/boost/config/platform/zos.hpp +32 -0
  96. mqt/core/include/mqt-core/boost/config/pragma_message.hpp +31 -0
  97. mqt/core/include/mqt-core/boost/config/requires_threads.hpp +92 -0
  98. mqt/core/include/mqt-core/boost/config/stdlib/dinkumware.hpp +324 -0
  99. mqt/core/include/mqt-core/boost/config/stdlib/libcomo.hpp +93 -0
  100. mqt/core/include/mqt-core/boost/config/stdlib/libcpp.hpp +180 -0
  101. mqt/core/include/mqt-core/boost/config/stdlib/libstdcpp3.hpp +482 -0
  102. mqt/core/include/mqt-core/boost/config/stdlib/modena.hpp +79 -0
  103. mqt/core/include/mqt-core/boost/config/stdlib/msl.hpp +98 -0
  104. mqt/core/include/mqt-core/boost/config/stdlib/roguewave.hpp +208 -0
  105. mqt/core/include/mqt-core/boost/config/stdlib/sgi.hpp +168 -0
  106. mqt/core/include/mqt-core/boost/config/stdlib/stlport.hpp +258 -0
  107. mqt/core/include/mqt-core/boost/config/stdlib/vacpp.hpp +74 -0
  108. mqt/core/include/mqt-core/boost/config/stdlib/xlcpp_zos.hpp +61 -0
  109. mqt/core/include/mqt-core/boost/config/user.hpp +133 -0
  110. mqt/core/include/mqt-core/boost/config/warning_disable.hpp +47 -0
  111. mqt/core/include/mqt-core/boost/config/workaround.hpp +305 -0
  112. mqt/core/include/mqt-core/boost/config.hpp +67 -0
  113. mqt/core/include/mqt-core/boost/cstdint.hpp +556 -0
  114. mqt/core/include/mqt-core/boost/cxx11_char_types.hpp +70 -0
  115. mqt/core/include/mqt-core/boost/detail/workaround.hpp +10 -0
  116. mqt/core/include/mqt-core/boost/limits.hpp +146 -0
  117. mqt/core/include/mqt-core/boost/multiprecision/complex128.hpp +24 -0
  118. mqt/core/include/mqt-core/boost/multiprecision/complex_adaptor.hpp +1046 -0
  119. mqt/core/include/mqt-core/boost/multiprecision/concepts/mp_number_archetypes.hpp +257 -0
  120. mqt/core/include/mqt-core/boost/multiprecision/cpp_bin_float/io.hpp +698 -0
  121. mqt/core/include/mqt-core/boost/multiprecision/cpp_bin_float/transcendental.hpp +157 -0
  122. mqt/core/include/mqt-core/boost/multiprecision/cpp_bin_float.hpp +2297 -0
  123. mqt/core/include/mqt-core/boost/multiprecision/cpp_complex.hpp +12 -0
  124. mqt/core/include/mqt-core/boost/multiprecision/cpp_dec_float.hpp +3690 -0
  125. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/add.hpp +368 -0
  126. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/add_unsigned.hpp +387 -0
  127. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/bitwise.hpp +889 -0
  128. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/checked.hpp +178 -0
  129. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/comparison.hpp +374 -0
  130. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/cpp_int_config.hpp +161 -0
  131. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/divide.hpp +703 -0
  132. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/import_export.hpp +248 -0
  133. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/intel_intrinsics.hpp +138 -0
  134. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/limits.hpp +282 -0
  135. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/literals.hpp +295 -0
  136. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/misc.hpp +1457 -0
  137. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/multiply.hpp +848 -0
  138. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/serialize.hpp +211 -0
  139. mqt/core/include/mqt-core/boost/multiprecision/cpp_int/value_pack.hpp +42 -0
  140. mqt/core/include/mqt-core/boost/multiprecision/cpp_int.hpp +2360 -0
  141. mqt/core/include/mqt-core/boost/multiprecision/debug_adaptor.hpp +760 -0
  142. mqt/core/include/mqt-core/boost/multiprecision/detail/assert.hpp +29 -0
  143. mqt/core/include/mqt-core/boost/multiprecision/detail/atomic.hpp +62 -0
  144. mqt/core/include/mqt-core/boost/multiprecision/detail/bitscan.hpp +317 -0
  145. mqt/core/include/mqt-core/boost/multiprecision/detail/check_cpp11_config.hpp +64 -0
  146. mqt/core/include/mqt-core/boost/multiprecision/detail/constexpr.hpp +88 -0
  147. mqt/core/include/mqt-core/boost/multiprecision/detail/default_ops.hpp +4052 -0
  148. mqt/core/include/mqt-core/boost/multiprecision/detail/digits.hpp +49 -0
  149. mqt/core/include/mqt-core/boost/multiprecision/detail/dynamic_array.hpp +44 -0
  150. mqt/core/include/mqt-core/boost/multiprecision/detail/empty_value.hpp +87 -0
  151. mqt/core/include/mqt-core/boost/multiprecision/detail/endian.hpp +35 -0
  152. mqt/core/include/mqt-core/boost/multiprecision/detail/et_ops.hpp +1831 -0
  153. mqt/core/include/mqt-core/boost/multiprecision/detail/float128_functions.hpp +95 -0
  154. mqt/core/include/mqt-core/boost/multiprecision/detail/float_string_cvt.hpp +333 -0
  155. mqt/core/include/mqt-core/boost/multiprecision/detail/fpclassify.hpp +101 -0
  156. mqt/core/include/mqt-core/boost/multiprecision/detail/functions/constants.hpp +288 -0
  157. mqt/core/include/mqt-core/boost/multiprecision/detail/functions/pow.hpp +905 -0
  158. mqt/core/include/mqt-core/boost/multiprecision/detail/functions/trig.hpp +1058 -0
  159. mqt/core/include/mqt-core/boost/multiprecision/detail/functions/trunc.hpp +82 -0
  160. mqt/core/include/mqt-core/boost/multiprecision/detail/generic_interconvert.hpp +687 -0
  161. mqt/core/include/mqt-core/boost/multiprecision/detail/hash.hpp +56 -0
  162. mqt/core/include/mqt-core/boost/multiprecision/detail/integer_ops.hpp +474 -0
  163. mqt/core/include/mqt-core/boost/multiprecision/detail/itos.hpp +39 -0
  164. mqt/core/include/mqt-core/boost/multiprecision/detail/min_max.hpp +106 -0
  165. mqt/core/include/mqt-core/boost/multiprecision/detail/no_et_ops.hpp +661 -0
  166. mqt/core/include/mqt-core/boost/multiprecision/detail/no_exceptions_support.hpp +55 -0
  167. mqt/core/include/mqt-core/boost/multiprecision/detail/number_base.hpp +1656 -0
  168. mqt/core/include/mqt-core/boost/multiprecision/detail/number_compare.hpp +848 -0
  169. mqt/core/include/mqt-core/boost/multiprecision/detail/precision.hpp +313 -0
  170. mqt/core/include/mqt-core/boost/multiprecision/detail/rebind.hpp +19 -0
  171. mqt/core/include/mqt-core/boost/multiprecision/detail/standalone_config.hpp +148 -0
  172. mqt/core/include/mqt-core/boost/multiprecision/detail/static_array.hpp +42 -0
  173. mqt/core/include/mqt-core/boost/multiprecision/detail/string_helpers.hpp +48 -0
  174. mqt/core/include/mqt-core/boost/multiprecision/detail/tables.hpp +80 -0
  175. mqt/core/include/mqt-core/boost/multiprecision/detail/ublas_interop.hpp +75 -0
  176. mqt/core/include/mqt-core/boost/multiprecision/detail/uniform_int_distribution.hpp +212 -0
  177. mqt/core/include/mqt-core/boost/multiprecision/detail/utype_helper.hpp +374 -0
  178. mqt/core/include/mqt-core/boost/multiprecision/eigen.hpp +248 -0
  179. mqt/core/include/mqt-core/boost/multiprecision/float128.hpp +920 -0
  180. mqt/core/include/mqt-core/boost/multiprecision/fwd.hpp +268 -0
  181. mqt/core/include/mqt-core/boost/multiprecision/gmp.hpp +4060 -0
  182. mqt/core/include/mqt-core/boost/multiprecision/integer.hpp +363 -0
  183. mqt/core/include/mqt-core/boost/multiprecision/logged_adaptor.hpp +834 -0
  184. mqt/core/include/mqt-core/boost/multiprecision/miller_rabin.hpp +221 -0
  185. mqt/core/include/mqt-core/boost/multiprecision/mpc.hpp +1721 -0
  186. mqt/core/include/mqt-core/boost/multiprecision/mpfi.hpp +2559 -0
  187. mqt/core/include/mqt-core/boost/multiprecision/mpfr.hpp +3644 -0
  188. mqt/core/include/mqt-core/boost/multiprecision/number.hpp +2500 -0
  189. mqt/core/include/mqt-core/boost/multiprecision/random.hpp +23 -0
  190. mqt/core/include/mqt-core/boost/multiprecision/rational_adaptor.hpp +1289 -0
  191. mqt/core/include/mqt-core/boost/multiprecision/tommath.hpp +1034 -0
  192. mqt/core/include/mqt-core/boost/multiprecision/traits/explicit_conversion.hpp +67 -0
  193. mqt/core/include/mqt-core/boost/multiprecision/traits/extract_exponent_type.hpp +28 -0
  194. mqt/core/include/mqt-core/boost/multiprecision/traits/is_backend.hpp +91 -0
  195. mqt/core/include/mqt-core/boost/multiprecision/traits/is_byte_container.hpp +51 -0
  196. mqt/core/include/mqt-core/boost/multiprecision/traits/is_complex.hpp +22 -0
  197. mqt/core/include/mqt-core/boost/multiprecision/traits/is_convertible_arithmetic.hpp +51 -0
  198. mqt/core/include/mqt-core/boost/multiprecision/traits/is_restricted_conversion.hpp +47 -0
  199. mqt/core/include/mqt-core/boost/multiprecision/traits/is_variable_precision.hpp +25 -0
  200. mqt/core/include/mqt-core/boost/multiprecision/traits/max_digits10.hpp +79 -0
  201. mqt/core/include/mqt-core/boost/multiprecision/traits/std_integer_traits.hpp +90 -0
  202. mqt/core/include/mqt-core/boost/multiprecision/traits/transcendental_reduction_type.hpp +21 -0
  203. mqt/core/include/mqt-core/boost/version.hpp +32 -0
  204. mqt/core/include/mqt-core/circuit_optimizer/CircuitOptimizer.hpp +119 -0
  205. mqt/core/include/mqt-core/circuit_optimizer/mqt_core_circuit_optimizer_export.h +43 -0
  206. mqt/core/include/mqt-core/datastructures/DirectedAcyclicGraph.hpp +117 -0
  207. mqt/core/include/mqt-core/datastructures/DirectedGraph.hpp +158 -0
  208. mqt/core/include/mqt-core/datastructures/DisjointSet.hpp +50 -0
  209. mqt/core/include/mqt-core/datastructures/Layer.hpp +172 -0
  210. mqt/core/include/mqt-core/datastructures/SymmetricMatrix.hpp +57 -0
  211. mqt/core/include/mqt-core/datastructures/UndirectedGraph.hpp +227 -0
  212. mqt/core/include/mqt-core/datastructures/mqt_core_ds_export.h +43 -0
  213. mqt/core/include/mqt-core/dd/Approximation.hpp +45 -0
  214. mqt/core/include/mqt-core/dd/CachedEdge.hpp +174 -0
  215. mqt/core/include/mqt-core/dd/Complex.hpp +165 -0
  216. mqt/core/include/mqt-core/dd/ComplexNumbers.hpp +150 -0
  217. mqt/core/include/mqt-core/dd/ComplexValue.hpp +184 -0
  218. mqt/core/include/mqt-core/dd/ComputeTable.hpp +183 -0
  219. mqt/core/include/mqt-core/dd/DDDefinitions.hpp +139 -0
  220. mqt/core/include/mqt-core/dd/DDpackageConfig.hpp +104 -0
  221. mqt/core/include/mqt-core/dd/DensityNoiseTable.hpp +114 -0
  222. mqt/core/include/mqt-core/dd/Edge.hpp +416 -0
  223. mqt/core/include/mqt-core/dd/Export.hpp +438 -0
  224. mqt/core/include/mqt-core/dd/FunctionalityConstruction.hpp +75 -0
  225. mqt/core/include/mqt-core/dd/GateMatrixDefinitions.hpp +43 -0
  226. mqt/core/include/mqt-core/dd/LinkedListBase.hpp +45 -0
  227. mqt/core/include/mqt-core/dd/MemoryManager.hpp +193 -0
  228. mqt/core/include/mqt-core/dd/Node.hpp +223 -0
  229. mqt/core/include/mqt-core/dd/NoiseFunctionality.hpp +144 -0
  230. mqt/core/include/mqt-core/dd/Operations.hpp +306 -0
  231. mqt/core/include/mqt-core/dd/Package.hpp +2036 -0
  232. mqt/core/include/mqt-core/dd/Package_fwd.hpp +22 -0
  233. mqt/core/include/mqt-core/dd/RealNumber.hpp +255 -0
  234. mqt/core/include/mqt-core/dd/RealNumberUniqueTable.hpp +217 -0
  235. mqt/core/include/mqt-core/dd/Simulation.hpp +98 -0
  236. mqt/core/include/mqt-core/dd/StateGeneration.hpp +143 -0
  237. mqt/core/include/mqt-core/dd/StochasticNoiseOperationTable.hpp +88 -0
  238. mqt/core/include/mqt-core/dd/UnaryComputeTable.hpp +121 -0
  239. mqt/core/include/mqt-core/dd/UniqueTable.hpp +243 -0
  240. mqt/core/include/mqt-core/dd/mqt_core_dd_export.h +43 -0
  241. mqt/core/include/mqt-core/dd/statistics/MemoryManagerStatistics.hpp +84 -0
  242. mqt/core/include/mqt-core/dd/statistics/PackageStatistics.hpp +55 -0
  243. mqt/core/include/mqt-core/dd/statistics/Statistics.hpp +48 -0
  244. mqt/core/include/mqt-core/dd/statistics/TableStatistics.hpp +79 -0
  245. mqt/core/include/mqt-core/dd/statistics/UniqueTableStatistics.hpp +31 -0
  246. mqt/core/include/mqt-core/fomac/FoMaC.hpp +568 -0
  247. mqt/core/include/mqt-core/ir/Definitions.hpp +108 -0
  248. mqt/core/include/mqt-core/ir/Permutation.hpp +213 -0
  249. mqt/core/include/mqt-core/ir/QuantumComputation.hpp +596 -0
  250. mqt/core/include/mqt-core/ir/Register.hpp +125 -0
  251. mqt/core/include/mqt-core/ir/mqt_core_ir_export.h +43 -0
  252. mqt/core/include/mqt-core/ir/operations/AodOperation.hpp +92 -0
  253. mqt/core/include/mqt-core/ir/operations/CompoundOperation.hpp +212 -0
  254. mqt/core/include/mqt-core/ir/operations/Control.hpp +142 -0
  255. mqt/core/include/mqt-core/ir/operations/Expression.hpp +847 -0
  256. mqt/core/include/mqt-core/ir/operations/IfElseOperation.hpp +169 -0
  257. mqt/core/include/mqt-core/ir/operations/NonUnitaryOperation.hpp +118 -0
  258. mqt/core/include/mqt-core/ir/operations/OpType.hpp +120 -0
  259. mqt/core/include/mqt-core/ir/operations/OpType.inc +76 -0
  260. mqt/core/include/mqt-core/ir/operations/Operation.hpp +247 -0
  261. mqt/core/include/mqt-core/ir/operations/StandardOperation.hpp +140 -0
  262. mqt/core/include/mqt-core/ir/operations/SymbolicOperation.hpp +144 -0
  263. mqt/core/include/mqt-core/mqt_na_qdmi/device.h +602 -0
  264. mqt/core/include/mqt-core/mqt_na_qdmi/types.h +78 -0
  265. mqt/core/include/mqt-core/na/NAComputation.hpp +185 -0
  266. mqt/core/include/mqt-core/na/device/Device.hpp +410 -0
  267. mqt/core/include/mqt-core/na/device/DeviceMemberInitializers.hpp +724 -0
  268. mqt/core/include/mqt-core/na/device/Generator.hpp +447 -0
  269. mqt/core/include/mqt-core/na/entities/Atom.hpp +62 -0
  270. mqt/core/include/mqt-core/na/entities/Location.hpp +154 -0
  271. mqt/core/include/mqt-core/na/entities/Zone.hpp +95 -0
  272. mqt/core/include/mqt-core/na/fomac/Device.hpp +169 -0
  273. mqt/core/include/mqt-core/na/mqt_core_na_export.h +43 -0
  274. mqt/core/include/mqt-core/na/operations/GlobalCZOp.hpp +38 -0
  275. mqt/core/include/mqt-core/na/operations/GlobalOp.hpp +58 -0
  276. mqt/core/include/mqt-core/na/operations/GlobalRYOp.hpp +42 -0
  277. mqt/core/include/mqt-core/na/operations/LoadOp.hpp +89 -0
  278. mqt/core/include/mqt-core/na/operations/LocalOp.hpp +56 -0
  279. mqt/core/include/mqt-core/na/operations/LocalRZOp.hpp +42 -0
  280. mqt/core/include/mqt-core/na/operations/LocalUOp.hpp +49 -0
  281. mqt/core/include/mqt-core/na/operations/MoveOp.hpp +66 -0
  282. mqt/core/include/mqt-core/na/operations/Op.hpp +62 -0
  283. mqt/core/include/mqt-core/na/operations/ShuttlingOp.hpp +51 -0
  284. mqt/core/include/mqt-core/na/operations/StoreOp.hpp +87 -0
  285. mqt/core/include/mqt-core/qasm3/Exception.hpp +85 -0
  286. mqt/core/include/mqt-core/qasm3/Gate.hpp +65 -0
  287. mqt/core/include/mqt-core/qasm3/Importer.hpp +192 -0
  288. mqt/core/include/mqt-core/qasm3/InstVisitor.hpp +145 -0
  289. mqt/core/include/mqt-core/qasm3/NestedEnvironment.hpp +41 -0
  290. mqt/core/include/mqt-core/qasm3/Parser.hpp +170 -0
  291. mqt/core/include/mqt-core/qasm3/Scanner.hpp +73 -0
  292. mqt/core/include/mqt-core/qasm3/Statement.hpp +486 -0
  293. mqt/core/include/mqt-core/qasm3/Statement_fwd.hpp +39 -0
  294. mqt/core/include/mqt-core/qasm3/StdGates.hpp +232 -0
  295. mqt/core/include/mqt-core/qasm3/Token.hpp +198 -0
  296. mqt/core/include/mqt-core/qasm3/Types.hpp +238 -0
  297. mqt/core/include/mqt-core/qasm3/Types_fwd.hpp +22 -0
  298. mqt/core/include/mqt-core/qasm3/mqt_core_qasm_export.h +43 -0
  299. mqt/core/include/mqt-core/qasm3/passes/CompilerPass.hpp +22 -0
  300. mqt/core/include/mqt-core/qasm3/passes/ConstEvalPass.hpp +102 -0
  301. mqt/core/include/mqt-core/qasm3/passes/TypeCheckPass.hpp +124 -0
  302. mqt/core/include/mqt-core/qdmi/Driver.hpp +431 -0
  303. mqt/core/include/mqt-core/zx/FunctionalityConstruction.hpp +125 -0
  304. mqt/core/include/mqt-core/zx/Rational.hpp +318 -0
  305. mqt/core/include/mqt-core/zx/Rules.hpp +132 -0
  306. mqt/core/include/mqt-core/zx/Simplify.hpp +182 -0
  307. mqt/core/include/mqt-core/zx/Utils.hpp +212 -0
  308. mqt/core/include/mqt-core/zx/ZXDefinitions.hpp +93 -0
  309. mqt/core/include/mqt-core/zx/ZXDiagram.hpp +480 -0
  310. mqt/core/include/mqt-core/zx/mqt_core_zx_export.h +43 -0
  311. mqt/core/include/nlohmann/adl_serializer.hpp +55 -0
  312. mqt/core/include/nlohmann/byte_container_with_subtype.hpp +103 -0
  313. mqt/core/include/nlohmann/detail/abi_macros.hpp +111 -0
  314. mqt/core/include/nlohmann/detail/conversions/from_json.hpp +577 -0
  315. mqt/core/include/nlohmann/detail/conversions/to_chars.hpp +1118 -0
  316. mqt/core/include/nlohmann/detail/conversions/to_json.hpp +479 -0
  317. mqt/core/include/nlohmann/detail/exceptions.hpp +291 -0
  318. mqt/core/include/nlohmann/detail/hash.hpp +129 -0
  319. mqt/core/include/nlohmann/detail/input/binary_reader.hpp +3068 -0
  320. mqt/core/include/nlohmann/detail/input/input_adapters.hpp +549 -0
  321. mqt/core/include/nlohmann/detail/input/json_sax.hpp +986 -0
  322. mqt/core/include/nlohmann/detail/input/lexer.hpp +1643 -0
  323. mqt/core/include/nlohmann/detail/input/parser.hpp +519 -0
  324. mqt/core/include/nlohmann/detail/input/position_t.hpp +37 -0
  325. mqt/core/include/nlohmann/detail/iterators/internal_iterator.hpp +35 -0
  326. mqt/core/include/nlohmann/detail/iterators/iter_impl.hpp +760 -0
  327. mqt/core/include/nlohmann/detail/iterators/iteration_proxy.hpp +235 -0
  328. mqt/core/include/nlohmann/detail/iterators/iterator_traits.hpp +61 -0
  329. mqt/core/include/nlohmann/detail/iterators/json_reverse_iterator.hpp +130 -0
  330. mqt/core/include/nlohmann/detail/iterators/primitive_iterator.hpp +132 -0
  331. mqt/core/include/nlohmann/detail/json_custom_base_class.hpp +39 -0
  332. mqt/core/include/nlohmann/detail/json_pointer.hpp +988 -0
  333. mqt/core/include/nlohmann/detail/json_ref.hpp +78 -0
  334. mqt/core/include/nlohmann/detail/macro_scope.hpp +595 -0
  335. mqt/core/include/nlohmann/detail/macro_unscope.hpp +46 -0
  336. mqt/core/include/nlohmann/detail/meta/call_std/begin.hpp +17 -0
  337. mqt/core/include/nlohmann/detail/meta/call_std/end.hpp +17 -0
  338. mqt/core/include/nlohmann/detail/meta/cpp_future.hpp +171 -0
  339. mqt/core/include/nlohmann/detail/meta/detected.hpp +70 -0
  340. mqt/core/include/nlohmann/detail/meta/identity_tag.hpp +21 -0
  341. mqt/core/include/nlohmann/detail/meta/is_sax.hpp +159 -0
  342. mqt/core/include/nlohmann/detail/meta/std_fs.hpp +29 -0
  343. mqt/core/include/nlohmann/detail/meta/type_traits.hpp +795 -0
  344. mqt/core/include/nlohmann/detail/meta/void_t.hpp +24 -0
  345. mqt/core/include/nlohmann/detail/output/binary_writer.hpp +1850 -0
  346. mqt/core/include/nlohmann/detail/output/output_adapters.hpp +147 -0
  347. mqt/core/include/nlohmann/detail/output/serializer.hpp +988 -0
  348. mqt/core/include/nlohmann/detail/string_concat.hpp +146 -0
  349. mqt/core/include/nlohmann/detail/string_escape.hpp +72 -0
  350. mqt/core/include/nlohmann/detail/string_utils.hpp +37 -0
  351. mqt/core/include/nlohmann/detail/value_t.hpp +118 -0
  352. mqt/core/include/nlohmann/json.hpp +5306 -0
  353. mqt/core/include/nlohmann/json_fwd.hpp +75 -0
  354. mqt/core/include/nlohmann/ordered_map.hpp +359 -0
  355. mqt/core/include/nlohmann/thirdparty/hedley/hedley.hpp +2045 -0
  356. mqt/core/include/nlohmann/thirdparty/hedley/hedley_undef.hpp +158 -0
  357. mqt/core/include/qdmi/qdmi/client.h +990 -0
  358. mqt/core/include/qdmi/qdmi/constants.h +1139 -0
  359. mqt/core/include/qdmi/qdmi/device.h +602 -0
  360. mqt/core/include/qdmi/qdmi/types.h +78 -0
  361. mqt/core/include/spdlog/async.h +99 -0
  362. mqt/core/include/spdlog/async_logger-inl.h +84 -0
  363. mqt/core/include/spdlog/async_logger.h +74 -0
  364. mqt/core/include/spdlog/cfg/argv.h +40 -0
  365. mqt/core/include/spdlog/cfg/env.h +36 -0
  366. mqt/core/include/spdlog/cfg/helpers-inl.h +107 -0
  367. mqt/core/include/spdlog/cfg/helpers.h +29 -0
  368. mqt/core/include/spdlog/common-inl.h +68 -0
  369. mqt/core/include/spdlog/common.h +406 -0
  370. mqt/core/include/spdlog/details/backtracer-inl.h +63 -0
  371. mqt/core/include/spdlog/details/backtracer.h +45 -0
  372. mqt/core/include/spdlog/details/circular_q.h +115 -0
  373. mqt/core/include/spdlog/details/console_globals.h +28 -0
  374. mqt/core/include/spdlog/details/file_helper-inl.h +153 -0
  375. mqt/core/include/spdlog/details/file_helper.h +61 -0
  376. mqt/core/include/spdlog/details/fmt_helper.h +141 -0
  377. mqt/core/include/spdlog/details/log_msg-inl.h +44 -0
  378. mqt/core/include/spdlog/details/log_msg.h +40 -0
  379. mqt/core/include/spdlog/details/log_msg_buffer-inl.h +54 -0
  380. mqt/core/include/spdlog/details/log_msg_buffer.h +32 -0
  381. mqt/core/include/spdlog/details/mpmc_blocking_q.h +177 -0
  382. mqt/core/include/spdlog/details/null_mutex.h +35 -0
  383. mqt/core/include/spdlog/details/os-inl.h +606 -0
  384. mqt/core/include/spdlog/details/os.h +127 -0
  385. mqt/core/include/spdlog/details/periodic_worker-inl.h +26 -0
  386. mqt/core/include/spdlog/details/periodic_worker.h +58 -0
  387. mqt/core/include/spdlog/details/registry-inl.h +270 -0
  388. mqt/core/include/spdlog/details/registry.h +131 -0
  389. mqt/core/include/spdlog/details/synchronous_factory.h +22 -0
  390. mqt/core/include/spdlog/details/tcp_client-windows.h +135 -0
  391. mqt/core/include/spdlog/details/tcp_client.h +127 -0
  392. mqt/core/include/spdlog/details/thread_pool-inl.h +126 -0
  393. mqt/core/include/spdlog/details/thread_pool.h +117 -0
  394. mqt/core/include/spdlog/details/udp_client-windows.h +98 -0
  395. mqt/core/include/spdlog/details/udp_client.h +81 -0
  396. mqt/core/include/spdlog/details/windows_include.h +11 -0
  397. mqt/core/include/spdlog/fmt/bin_to_hex.h +224 -0
  398. mqt/core/include/spdlog/fmt/bundled/args.h +220 -0
  399. mqt/core/include/spdlog/fmt/bundled/base.h +2989 -0
  400. mqt/core/include/spdlog/fmt/bundled/chrono.h +2330 -0
  401. mqt/core/include/spdlog/fmt/bundled/color.h +637 -0
  402. mqt/core/include/spdlog/fmt/bundled/compile.h +539 -0
  403. mqt/core/include/spdlog/fmt/bundled/core.h +5 -0
  404. mqt/core/include/spdlog/fmt/bundled/fmt.license.rst +27 -0
  405. mqt/core/include/spdlog/fmt/bundled/format-inl.h +1948 -0
  406. mqt/core/include/spdlog/fmt/bundled/format.h +4244 -0
  407. mqt/core/include/spdlog/fmt/bundled/os.h +427 -0
  408. mqt/core/include/spdlog/fmt/bundled/ostream.h +167 -0
  409. mqt/core/include/spdlog/fmt/bundled/printf.h +633 -0
  410. mqt/core/include/spdlog/fmt/bundled/ranges.h +850 -0
  411. mqt/core/include/spdlog/fmt/bundled/std.h +728 -0
  412. mqt/core/include/spdlog/fmt/bundled/xchar.h +369 -0
  413. mqt/core/include/spdlog/fmt/chrono.h +23 -0
  414. mqt/core/include/spdlog/fmt/compile.h +23 -0
  415. mqt/core/include/spdlog/fmt/fmt.h +30 -0
  416. mqt/core/include/spdlog/fmt/ostr.h +23 -0
  417. mqt/core/include/spdlog/fmt/ranges.h +23 -0
  418. mqt/core/include/spdlog/fmt/std.h +24 -0
  419. mqt/core/include/spdlog/fmt/xchar.h +23 -0
  420. mqt/core/include/spdlog/formatter.h +17 -0
  421. mqt/core/include/spdlog/fwd.h +18 -0
  422. mqt/core/include/spdlog/logger-inl.h +198 -0
  423. mqt/core/include/spdlog/logger.h +379 -0
  424. mqt/core/include/spdlog/mdc.h +52 -0
  425. mqt/core/include/spdlog/pattern_formatter-inl.h +1340 -0
  426. mqt/core/include/spdlog/pattern_formatter.h +118 -0
  427. mqt/core/include/spdlog/sinks/android_sink.h +137 -0
  428. mqt/core/include/spdlog/sinks/ansicolor_sink-inl.h +142 -0
  429. mqt/core/include/spdlog/sinks/ansicolor_sink.h +116 -0
  430. mqt/core/include/spdlog/sinks/base_sink-inl.h +59 -0
  431. mqt/core/include/spdlog/sinks/base_sink.h +51 -0
  432. mqt/core/include/spdlog/sinks/basic_file_sink-inl.h +48 -0
  433. mqt/core/include/spdlog/sinks/basic_file_sink.h +66 -0
  434. mqt/core/include/spdlog/sinks/callback_sink.h +56 -0
  435. mqt/core/include/spdlog/sinks/daily_file_sink.h +254 -0
  436. mqt/core/include/spdlog/sinks/dist_sink.h +81 -0
  437. mqt/core/include/spdlog/sinks/dup_filter_sink.h +91 -0
  438. mqt/core/include/spdlog/sinks/hourly_file_sink.h +193 -0
  439. mqt/core/include/spdlog/sinks/kafka_sink.h +119 -0
  440. mqt/core/include/spdlog/sinks/mongo_sink.h +108 -0
  441. mqt/core/include/spdlog/sinks/msvc_sink.h +68 -0
  442. mqt/core/include/spdlog/sinks/null_sink.h +41 -0
  443. mqt/core/include/spdlog/sinks/ostream_sink.h +43 -0
  444. mqt/core/include/spdlog/sinks/qt_sinks.h +304 -0
  445. mqt/core/include/spdlog/sinks/ringbuffer_sink.h +67 -0
  446. mqt/core/include/spdlog/sinks/rotating_file_sink-inl.h +179 -0
  447. mqt/core/include/spdlog/sinks/rotating_file_sink.h +93 -0
  448. mqt/core/include/spdlog/sinks/sink-inl.h +22 -0
  449. mqt/core/include/spdlog/sinks/sink.h +34 -0
  450. mqt/core/include/spdlog/sinks/stdout_color_sinks-inl.h +38 -0
  451. mqt/core/include/spdlog/sinks/stdout_color_sinks.h +49 -0
  452. mqt/core/include/spdlog/sinks/stdout_sinks-inl.h +127 -0
  453. mqt/core/include/spdlog/sinks/stdout_sinks.h +84 -0
  454. mqt/core/include/spdlog/sinks/syslog_sink.h +104 -0
  455. mqt/core/include/spdlog/sinks/systemd_sink.h +121 -0
  456. mqt/core/include/spdlog/sinks/tcp_sink.h +75 -0
  457. mqt/core/include/spdlog/sinks/udp_sink.h +69 -0
  458. mqt/core/include/spdlog/sinks/win_eventlog_sink.h +260 -0
  459. mqt/core/include/spdlog/sinks/wincolor_sink-inl.h +172 -0
  460. mqt/core/include/spdlog/sinks/wincolor_sink.h +82 -0
  461. mqt/core/include/spdlog/spdlog-inl.h +96 -0
  462. mqt/core/include/spdlog/spdlog.h +357 -0
  463. mqt/core/include/spdlog/stopwatch.h +66 -0
  464. mqt/core/include/spdlog/tweakme.h +148 -0
  465. mqt/core/include/spdlog/version.h +11 -0
  466. mqt/core/ir/__init__.pyi +2078 -0
  467. mqt/core/ir/operations.pyi +1011 -0
  468. mqt/core/ir/registers.pyi +91 -0
  469. mqt/core/ir/symbolic.pyi +177 -0
  470. mqt/core/ir.cpython-314t-darwin.so +0 -0
  471. mqt/core/lib/libmqt-core-algorithms.3.3.2.dylib +0 -0
  472. mqt/core/lib/libmqt-core-algorithms.3.3.dylib +0 -0
  473. mqt/core/lib/libmqt-core-algorithms.dylib +0 -0
  474. mqt/core/lib/libmqt-core-circuit-optimizer.3.3.2.dylib +0 -0
  475. mqt/core/lib/libmqt-core-circuit-optimizer.3.3.dylib +0 -0
  476. mqt/core/lib/libmqt-core-circuit-optimizer.dylib +0 -0
  477. mqt/core/lib/libmqt-core-dd.3.3.2.dylib +0 -0
  478. mqt/core/lib/libmqt-core-dd.3.3.dylib +0 -0
  479. mqt/core/lib/libmqt-core-dd.dylib +0 -0
  480. mqt/core/lib/libmqt-core-ds.3.3.2.dylib +0 -0
  481. mqt/core/lib/libmqt-core-ds.3.3.dylib +0 -0
  482. mqt/core/lib/libmqt-core-ds.dylib +0 -0
  483. mqt/core/lib/libmqt-core-fomac.3.3.2.dylib +0 -0
  484. mqt/core/lib/libmqt-core-fomac.3.3.dylib +0 -0
  485. mqt/core/lib/libmqt-core-fomac.dylib +0 -0
  486. mqt/core/lib/libmqt-core-ir.3.3.2.dylib +0 -0
  487. mqt/core/lib/libmqt-core-ir.3.3.dylib +0 -0
  488. mqt/core/lib/libmqt-core-ir.dylib +0 -0
  489. mqt/core/lib/libmqt-core-na-fomac.3.3.2.dylib +0 -0
  490. mqt/core/lib/libmqt-core-na-fomac.3.3.dylib +0 -0
  491. mqt/core/lib/libmqt-core-na-fomac.dylib +0 -0
  492. mqt/core/lib/libmqt-core-na.3.3.2.dylib +0 -0
  493. mqt/core/lib/libmqt-core-na.3.3.dylib +0 -0
  494. mqt/core/lib/libmqt-core-na.dylib +0 -0
  495. mqt/core/lib/libmqt-core-qasm.3.3.2.dylib +0 -0
  496. mqt/core/lib/libmqt-core-qasm.3.3.dylib +0 -0
  497. mqt/core/lib/libmqt-core-qasm.dylib +0 -0
  498. mqt/core/lib/libmqt-core-qdmi-driver.3.3.2.dylib +0 -0
  499. mqt/core/lib/libmqt-core-qdmi-driver.3.3.dylib +0 -0
  500. mqt/core/lib/libmqt-core-qdmi-driver.dylib +0 -0
  501. mqt/core/lib/libmqt-core-qdmi-na-device-gen.a +0 -0
  502. mqt/core/lib/libmqt-core-qdmi-na-device.3.3.2.dylib +0 -0
  503. mqt/core/lib/libmqt-core-qdmi-na-device.3.3.dylib +0 -0
  504. mqt/core/lib/libmqt-core-qdmi-na-device.dylib +0 -0
  505. mqt/core/lib/libmqt-core-zx.3.3.2.dylib +0 -0
  506. mqt/core/lib/libmqt-core-zx.3.3.dylib +0 -0
  507. mqt/core/lib/libmqt-core-zx.dylib +0 -0
  508. mqt/core/lib/libspdlog.a +0 -0
  509. mqt/core/lib/pkgconfig/spdlog.pc +13 -0
  510. mqt/core/na/__init__.py +12 -0
  511. mqt/core/na/fomac.cpython-314t-darwin.so +0 -0
  512. mqt/core/na/fomac.pyi +117 -0
  513. mqt/core/plugins/__init__.py +9 -0
  514. mqt/core/plugins/qiskit/__init__.py +19 -0
  515. mqt/core/plugins/qiskit/mqt_to_qiskit.py +420 -0
  516. mqt/core/plugins/qiskit/qiskit_to_mqt.py +562 -0
  517. mqt/core/py.typed +2 -0
  518. mqt/core/share/cmake/mqt-core/AddMQTPythonBinding.cmake +55 -0
  519. mqt/core/share/cmake/mqt-core/Cache.cmake +33 -0
  520. mqt/core/share/cmake/mqt-core/FindGMP.cmake +103 -0
  521. mqt/core/share/cmake/mqt-core/PackageAddTest.cmake +46 -0
  522. mqt/core/share/cmake/mqt-core/PreventInSourceBuilds.cmake +25 -0
  523. mqt/core/share/cmake/mqt-core/StandardProjectSettings.cmake +87 -0
  524. mqt/core/share/cmake/mqt-core/mqt-core-config-version.cmake +85 -0
  525. mqt/core/share/cmake/mqt-core/mqt-core-config.cmake +52 -0
  526. mqt/core/share/cmake/mqt-core/mqt-core-targets-release.cmake +141 -0
  527. mqt/core/share/cmake/mqt-core/mqt-core-targets.cmake +446 -0
  528. mqt/core/share/cmake/nlohmann_json/nlohmann_jsonConfig.cmake +15 -0
  529. mqt/core/share/cmake/nlohmann_json/nlohmann_jsonConfigVersion.cmake +20 -0
  530. mqt/core/share/cmake/nlohmann_json/nlohmann_jsonTargets.cmake +109 -0
  531. mqt/core/share/cmake/qdmi/Cache.cmake +44 -0
  532. mqt/core/share/cmake/qdmi/PrefixHandling.cmake +78 -0
  533. mqt/core/share/cmake/qdmi/prefix_defs.txt +26 -0
  534. mqt/core/share/cmake/qdmi/qdmi-config-version.cmake +85 -0
  535. mqt/core/share/cmake/qdmi/qdmi-config.cmake +42 -0
  536. mqt/core/share/cmake/qdmi/qdmi-targets.cmake +129 -0
  537. mqt/core/share/cmake/spdlog/spdlogConfig.cmake +44 -0
  538. mqt/core/share/cmake/spdlog/spdlogConfigTargets-release.cmake +19 -0
  539. mqt/core/share/cmake/spdlog/spdlogConfigTargets.cmake +118 -0
  540. mqt/core/share/cmake/spdlog/spdlogConfigVersion.cmake +65 -0
  541. mqt/core/share/pkgconfig/nlohmann_json.pc +7 -0
  542. mqt_core-3.3.2.dist-info/METADATA +210 -0
  543. mqt_core-3.3.2.dist-info/RECORD +546 -0
  544. mqt_core-3.3.2.dist-info/WHEEL +6 -0
  545. mqt_core-3.3.2.dist-info/entry_points.txt +4 -0
  546. mqt_core-3.3.2.dist-info/licenses/LICENSE.md +22 -0
@@ -0,0 +1,760 @@
1
+ ///////////////////////////////////////////////////////////////
2
+ // Copyright 2012 John Maddock. Distributed under the Boost
3
+ // Software License, Version 1.0. (See accompanying file
4
+ // LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt
5
+
6
+ #ifndef BOOST_MP_DEBUG_ADAPTOR_HPP
7
+ #define BOOST_MP_DEBUG_ADAPTOR_HPP
8
+
9
+ #include <boost/multiprecision/detail/standalone_config.hpp>
10
+ #include <boost/multiprecision/traits/extract_exponent_type.hpp>
11
+ #include <boost/multiprecision/detail/integer_ops.hpp>
12
+
13
+ namespace boost {
14
+ namespace multiprecision {
15
+ namespace backends {
16
+
17
+ template <class Backend>
18
+ struct debug_adaptor
19
+ {
20
+ using signed_types = typename Backend::signed_types ;
21
+ using unsigned_types = typename Backend::unsigned_types;
22
+ using float_types = typename Backend::float_types ;
23
+ using exponent_type = typename extract_exponent_type<Backend, number_category<Backend>::value>::type;
24
+
25
+ private:
26
+ std::string debug_value;
27
+ Backend m_value;
28
+
29
+ public:
30
+ void update_view()
31
+ {
32
+ #ifndef BOOST_NO_EXCEPTIONS
33
+ try
34
+ {
35
+ #endif
36
+ debug_value = m_value.str(0, static_cast<std::ios_base::fmtflags>(0));
37
+ #ifndef BOOST_NO_EXCEPTIONS
38
+ }
39
+ catch (const std::exception& e)
40
+ {
41
+ debug_value = "String conversion failed with message: \"";
42
+ debug_value += e.what();
43
+ debug_value += "\"";
44
+ }
45
+ #endif
46
+ }
47
+ debug_adaptor()
48
+ {
49
+ update_view();
50
+ }
51
+ debug_adaptor(const debug_adaptor& o) : debug_value(o.debug_value), m_value(o.m_value)
52
+ {
53
+ }
54
+ debug_adaptor& operator=(const debug_adaptor& o)
55
+ {
56
+ debug_value = o.debug_value;
57
+ m_value = o.m_value;
58
+ return *this;
59
+ }
60
+ template <class T>
61
+ debug_adaptor(const T& i, const typename std::enable_if<std::is_convertible<T, Backend>::value>::type* = nullptr)
62
+ : m_value(i)
63
+ {
64
+ update_view();
65
+ }
66
+ template <class T>
67
+ debug_adaptor(const debug_adaptor<T>& i, const typename std::enable_if<std::is_convertible<T, Backend>::value>::type* = nullptr)
68
+ : m_value(i.value())
69
+ {
70
+ update_view();
71
+ }
72
+ template <class T, class U>
73
+ debug_adaptor(const T& i, const U& j, typename std::enable_if<std::is_constructible<Backend, const T&, const U&>::value>::type* = nullptr)
74
+ : m_value(i, j)
75
+ {
76
+ update_view();
77
+ }
78
+ template <class B2>
79
+ debug_adaptor(const B2& i, unsigned digits10, typename std::enable_if<std::is_same<B2, Backend>::value && std::is_constructible<Backend, const Backend&, unsigned>::value>::type* = nullptr)
80
+ : m_value(i, digits10)
81
+ {
82
+ update_view();
83
+ }
84
+ template <class T>
85
+ typename std::enable_if<boost::multiprecision::detail::is_arithmetic<T>::value || std::is_assignable<Backend, T>::value, debug_adaptor&>::type operator=(const T& i)
86
+ {
87
+ m_value = i;
88
+ update_view();
89
+ return *this;
90
+ }
91
+ debug_adaptor& operator=(const char* s)
92
+ {
93
+ m_value = s;
94
+ update_view();
95
+ return *this;
96
+ }
97
+ void swap(debug_adaptor& o)
98
+ {
99
+ std::swap(m_value, o.value());
100
+ std::swap(debug_value, o.debug_value);
101
+ }
102
+ std::string str(std::streamsize digits, std::ios_base::fmtflags f) const
103
+ {
104
+ return m_value.str(digits, f);
105
+ }
106
+ void negate()
107
+ {
108
+ m_value.negate();
109
+ update_view();
110
+ }
111
+ int compare(const debug_adaptor& o) const
112
+ {
113
+ return m_value.compare(o.value());
114
+ }
115
+ template <class T>
116
+ int compare(const T& i) const
117
+ {
118
+ return m_value.compare(i);
119
+ }
120
+ Backend& value()
121
+ {
122
+ return m_value;
123
+ }
124
+ const Backend& value() const
125
+ {
126
+ return m_value;
127
+ }
128
+
129
+ #ifndef BOOST_MP_STANDALONE
130
+ template <class Archive>
131
+ void serialize(Archive& ar, const unsigned int /*version*/)
132
+ {
133
+ ar & boost::make_nvp("value", m_value);
134
+ using tag = typename Archive::is_loading;
135
+ if (tag::value)
136
+ update_view();
137
+ }
138
+ #endif
139
+
140
+ static unsigned default_precision() noexcept
141
+ {
142
+ return Backend::default_precision();
143
+ }
144
+ static void default_precision(unsigned v) noexcept
145
+ {
146
+ Backend::default_precision(v);
147
+ }
148
+ static unsigned thread_default_precision() noexcept
149
+ {
150
+ return Backend::thread_default_precision();
151
+ }
152
+ static void thread_default_precision(unsigned v) noexcept
153
+ {
154
+ Backend::thread_default_precision(v);
155
+ }
156
+ unsigned precision() const noexcept
157
+ {
158
+ return value().precision();
159
+ }
160
+ void precision(unsigned digits10) noexcept
161
+ {
162
+ value().precision(digits10);
163
+ }
164
+ //
165
+ // Variable precision options:
166
+ //
167
+ static constexpr variable_precision_options default_variable_precision_options()noexcept
168
+ {
169
+ return Backend::default_variable_precision_options();
170
+ }
171
+ static constexpr variable_precision_options thread_default_variable_precision_options()noexcept
172
+ {
173
+ return Backend::thread_default_variable_precision_options();
174
+ }
175
+ static BOOST_MP_CXX14_CONSTEXPR void default_variable_precision_options(variable_precision_options opts)
176
+ {
177
+ Backend::default_variable_precision_options(opts);
178
+ }
179
+ static BOOST_MP_CXX14_CONSTEXPR void thread_default_variable_precision_options(variable_precision_options opts)
180
+ {
181
+ Backend::thread_default_variable_precision_options(opts);
182
+ }
183
+ };
184
+
185
+ template <class Backend>
186
+ inline Backend const& unwrap_debug_type(debug_adaptor<Backend> const& val)
187
+ {
188
+ return val.value();
189
+ }
190
+ template <class T>
191
+ inline const T& unwrap_debug_type(const T& val)
192
+ {
193
+ return val;
194
+ }
195
+
196
+ template <class Backend, class V, class U>
197
+ inline BOOST_MP_CXX14_CONSTEXPR void assign_components(debug_adaptor<Backend>& result, const V& v1, const U& v2)
198
+ {
199
+ using default_ops::assign_components;
200
+ assign_components(result.value(), unwrap_debug_type(v1), unwrap_debug_type(v2));
201
+ result.update_view();
202
+ }
203
+
204
+ #define NON_MEMBER_OP1(name, str) \
205
+ template <class Backend> \
206
+ inline void BOOST_JOIN(eval_, name)(debug_adaptor<Backend> & result) \
207
+ { \
208
+ using default_ops::BOOST_JOIN(eval_, name); \
209
+ BOOST_JOIN(eval_, name) \
210
+ (result.value()); \
211
+ result.update_view(); \
212
+ }
213
+
214
+ #define NON_MEMBER_OP2(name, str) \
215
+ template <class Backend, class T> \
216
+ inline void BOOST_JOIN(eval_, name)(debug_adaptor<Backend> & result, const T& a) \
217
+ { \
218
+ using default_ops::BOOST_JOIN(eval_, name); \
219
+ BOOST_JOIN(eval_, name) \
220
+ (result.value(), unwrap_debug_type(a)); \
221
+ result.update_view(); \
222
+ } \
223
+ template <class Backend> \
224
+ inline void BOOST_JOIN(eval_, name)(debug_adaptor<Backend> & result, const debug_adaptor<Backend>& a) \
225
+ { \
226
+ using default_ops::BOOST_JOIN(eval_, name); \
227
+ BOOST_JOIN(eval_, name) \
228
+ (result.value(), unwrap_debug_type(a)); \
229
+ result.update_view(); \
230
+ }
231
+
232
+ #define NON_MEMBER_OP3(name, str) \
233
+ template <class Backend, class T, class U> \
234
+ inline void BOOST_JOIN(eval_, name)(debug_adaptor<Backend> & result, const T& a, const U& b) \
235
+ { \
236
+ using default_ops::BOOST_JOIN(eval_, name); \
237
+ BOOST_JOIN(eval_, name) \
238
+ (result.value(), unwrap_debug_type(a), unwrap_debug_type(b)); \
239
+ result.update_view(); \
240
+ } \
241
+ template <class Backend, class T> \
242
+ inline void BOOST_JOIN(eval_, name)(debug_adaptor<Backend> & result, const debug_adaptor<Backend>& a, const T& b) \
243
+ { \
244
+ using default_ops::BOOST_JOIN(eval_, name); \
245
+ BOOST_JOIN(eval_, name) \
246
+ (result.value(), unwrap_debug_type(a), unwrap_debug_type(b)); \
247
+ result.update_view(); \
248
+ } \
249
+ template <class Backend, class T> \
250
+ inline void BOOST_JOIN(eval_, name)(debug_adaptor<Backend> & result, const T& a, const debug_adaptor<Backend>& b) \
251
+ { \
252
+ using default_ops::BOOST_JOIN(eval_, name); \
253
+ BOOST_JOIN(eval_, name) \
254
+ (result.value(), unwrap_debug_type(a), unwrap_debug_type(b)); \
255
+ result.update_view(); \
256
+ } \
257
+ template <class Backend> \
258
+ inline void BOOST_JOIN(eval_, name)(debug_adaptor<Backend> & result, const debug_adaptor<Backend>& a, const debug_adaptor<Backend>& b) \
259
+ { \
260
+ using default_ops::BOOST_JOIN(eval_, name); \
261
+ BOOST_JOIN(eval_, name) \
262
+ (result.value(), unwrap_debug_type(a), unwrap_debug_type(b)); \
263
+ result.update_view(); \
264
+ }
265
+
266
+ #define NON_MEMBER_OP4(name, str) \
267
+ template <class Backend, class T, class U, class V> \
268
+ inline void BOOST_JOIN(eval_, name)(debug_adaptor<Backend> & result, const T& a, const U& b, const V& c) \
269
+ { \
270
+ using default_ops::BOOST_JOIN(eval_, name); \
271
+ BOOST_JOIN(eval_, name) \
272
+ (result.value(), unwrap_debug_type(a), unwrap_debug_type(b), unwrap_debug_type(c)); \
273
+ result.update_view(); \
274
+ } \
275
+ template <class Backend, class T> \
276
+ inline void BOOST_JOIN(eval_, name)(debug_adaptor<Backend> & result, const debug_adaptor<Backend>& a, const debug_adaptor<Backend>& b, const T& c) \
277
+ { \
278
+ using default_ops::BOOST_JOIN(eval_, name); \
279
+ BOOST_JOIN(eval_, name) \
280
+ (result.value(), unwrap_debug_type(a), unwrap_debug_type(b), unwrap_debug_type(c)); \
281
+ result.update_view(); \
282
+ } \
283
+ template <class Backend, class T> \
284
+ inline void BOOST_JOIN(eval_, name)(debug_adaptor<Backend> & result, const debug_adaptor<Backend>& a, const T& b, const debug_adaptor<Backend>& c) \
285
+ { \
286
+ using default_ops::BOOST_JOIN(eval_, name); \
287
+ BOOST_JOIN(eval_, name) \
288
+ (result.value(), unwrap_debug_type(a), unwrap_debug_type(b), unwrap_debug_type(c)); \
289
+ result.update_view(); \
290
+ } \
291
+ template <class Backend, class T> \
292
+ inline void BOOST_JOIN(eval_, name)(debug_adaptor<Backend> & result, const T& a, const debug_adaptor<Backend>& b, const debug_adaptor<Backend>& c) \
293
+ { \
294
+ using default_ops::BOOST_JOIN(eval_, name); \
295
+ BOOST_JOIN(eval_, name) \
296
+ (result.value(), unwrap_debug_type(a), unwrap_debug_type(b), unwrap_debug_type(c)); \
297
+ result.update_view(); \
298
+ } \
299
+ template <class Backend> \
300
+ inline void BOOST_JOIN(eval_, name)(debug_adaptor<Backend> & result, const debug_adaptor<Backend>& a, const debug_adaptor<Backend>& b, const debug_adaptor<Backend>& c) \
301
+ { \
302
+ using default_ops::BOOST_JOIN(eval_, name); \
303
+ BOOST_JOIN(eval_, name) \
304
+ (result.value(), unwrap_debug_type(a), unwrap_debug_type(b), unwrap_debug_type(c)); \
305
+ result.update_view(); \
306
+ } \
307
+ template <class Backend, class T, class U> \
308
+ inline void BOOST_JOIN(eval_, name)(debug_adaptor<Backend> & result, const debug_adaptor<Backend>& a, const T& b, const U& c) \
309
+ { \
310
+ using default_ops::BOOST_JOIN(eval_, name); \
311
+ BOOST_JOIN(eval_, name) \
312
+ (result.value(), unwrap_debug_type(a), unwrap_debug_type(b), unwrap_debug_type(c)); \
313
+ result.update_view(); \
314
+ }
315
+
316
+ NON_MEMBER_OP2(add, "+=")
317
+ NON_MEMBER_OP2(subtract, "-=")
318
+ NON_MEMBER_OP2(multiply, "*=")
319
+ NON_MEMBER_OP2(divide, "/=")
320
+
321
+ template <class Backend, class R>
322
+ inline void eval_convert_to(R* result, const debug_adaptor<Backend>& val)
323
+ {
324
+ using default_ops::eval_convert_to;
325
+ eval_convert_to(result, val.value());
326
+ }
327
+ template <class Backend, class R>
328
+ inline void eval_convert_to(debug_adaptor<R>* result, const debug_adaptor<Backend>& val)
329
+ {
330
+ using default_ops::eval_convert_to;
331
+ eval_convert_to(&result->value(), val.value());
332
+ }
333
+ template <class Backend, class R>
334
+ inline void eval_convert_to(debug_adaptor<R>* result, const Backend& val)
335
+ {
336
+ using default_ops::eval_convert_to;
337
+ eval_convert_to(&result->value(), val);
338
+ }
339
+
340
+ template <class Backend>
341
+ inline void eval_convert_to(std::complex<float>* result, const debug_adaptor<Backend>& val)
342
+ {
343
+ using default_ops::eval_convert_to;
344
+ eval_convert_to(result, val.value());
345
+ }
346
+ template <class Backend>
347
+ inline void eval_convert_to(std::complex<double>* result, const debug_adaptor<Backend>& val)
348
+ {
349
+ using default_ops::eval_convert_to;
350
+ eval_convert_to(result, val.value());
351
+ }
352
+ template <class Backend>
353
+ inline void eval_convert_to(std::complex<long double>* result, const debug_adaptor<Backend>& val)
354
+ {
355
+ using default_ops::eval_convert_to;
356
+ eval_convert_to(result, val.value());
357
+ }
358
+
359
+
360
+
361
+ template <class Backend, class Exp>
362
+ inline void eval_frexp(debug_adaptor<Backend>& result, const debug_adaptor<Backend>& arg, Exp* exp)
363
+ {
364
+ eval_frexp(result.value(), arg.value(), exp);
365
+ result.update_view();
366
+ }
367
+
368
+ template <class Backend, class Exp>
369
+ inline void eval_ldexp(debug_adaptor<Backend>& result, const debug_adaptor<Backend>& arg, Exp exp)
370
+ {
371
+ eval_ldexp(result.value(), arg.value(), exp);
372
+ result.update_view();
373
+ }
374
+
375
+ template <class Backend, class Exp>
376
+ inline void eval_scalbn(debug_adaptor<Backend>& result, const debug_adaptor<Backend>& arg, Exp exp)
377
+ {
378
+ using default_ops::eval_scalbn;
379
+ eval_scalbn(result.value(), arg.value(), exp);
380
+ result.update_view();
381
+ }
382
+
383
+ template <class Backend>
384
+ inline typename Backend::exponent_type eval_ilogb(const debug_adaptor<Backend>& arg)
385
+ {
386
+ using default_ops::eval_ilogb;
387
+ return eval_ilogb(arg.value());
388
+ }
389
+
390
+ NON_MEMBER_OP2(floor, "floor")
391
+ NON_MEMBER_OP2(ceil, "ceil")
392
+ NON_MEMBER_OP2(sqrt, "sqrt")
393
+ NON_MEMBER_OP2(logb, "logb")
394
+
395
+ template <class Backend>
396
+ inline int eval_fpclassify(const debug_adaptor<Backend>& arg)
397
+ {
398
+ using default_ops::eval_fpclassify;
399
+ return eval_fpclassify(arg.value());
400
+ }
401
+
402
+ /*********************************************************************
403
+ *
404
+ * Optional arithmetic operations come next:
405
+ *
406
+ *********************************************************************/
407
+
408
+ NON_MEMBER_OP3(add, "+")
409
+ NON_MEMBER_OP3(subtract, "-")
410
+ NON_MEMBER_OP3(multiply, "*")
411
+ NON_MEMBER_OP3(divide, "/")
412
+ NON_MEMBER_OP3(multiply_add, "fused-multiply-add")
413
+ NON_MEMBER_OP3(multiply_subtract, "fused-multiply-subtract")
414
+ NON_MEMBER_OP4(multiply_add, "fused-multiply-add")
415
+ NON_MEMBER_OP4(multiply_subtract, "fused-multiply-subtract")
416
+
417
+ NON_MEMBER_OP1(increment, "increment")
418
+ NON_MEMBER_OP1(decrement, "decrement")
419
+
420
+ /*********************************************************************
421
+ *
422
+ * Optional integer operations come next:
423
+ *
424
+ *********************************************************************/
425
+
426
+ NON_MEMBER_OP2(modulus, "%=")
427
+ NON_MEMBER_OP3(modulus, "%")
428
+ NON_MEMBER_OP2(bitwise_or, "|=")
429
+ NON_MEMBER_OP3(bitwise_or, "|")
430
+ NON_MEMBER_OP2(bitwise_and, "&=")
431
+ NON_MEMBER_OP3(bitwise_and, "&")
432
+ NON_MEMBER_OP2(bitwise_xor, "^=")
433
+ NON_MEMBER_OP3(bitwise_xor, "^")
434
+ NON_MEMBER_OP4(qr, "quotient-and-remainder")
435
+ NON_MEMBER_OP2(complement, "~")
436
+
437
+ template <class Backend>
438
+ inline void eval_left_shift(debug_adaptor<Backend>& arg, std::size_t a)
439
+ {
440
+ using default_ops::eval_left_shift;
441
+ eval_left_shift(arg.value(), a);
442
+ arg.update_view();
443
+ }
444
+ template <class Backend>
445
+ inline void eval_left_shift(debug_adaptor<Backend>& arg, const debug_adaptor<Backend>& a, std::size_t b)
446
+ {
447
+ using default_ops::eval_left_shift;
448
+ eval_left_shift(arg.value(), a.value(), b);
449
+ arg.update_view();
450
+ }
451
+ template <class Backend>
452
+ inline void eval_right_shift(debug_adaptor<Backend>& arg, std::size_t a)
453
+ {
454
+ using default_ops::eval_right_shift;
455
+ eval_right_shift(arg.value(), a);
456
+ arg.update_view();
457
+ }
458
+ template <class Backend>
459
+ inline void eval_right_shift(debug_adaptor<Backend>& arg, const debug_adaptor<Backend>& a, std::size_t b)
460
+ {
461
+ using default_ops::eval_right_shift;
462
+ eval_right_shift(arg.value(), a.value(), b);
463
+ arg.update_view();
464
+ }
465
+
466
+ template <class Backend, class T>
467
+ inline T eval_integer_modulus(const debug_adaptor<Backend>& arg, const T& a)
468
+ {
469
+ using default_ops::eval_integer_modulus;
470
+ return eval_integer_modulus(arg.value(), a);
471
+ }
472
+
473
+ template <class Backend>
474
+ inline std::size_t eval_lsb(const debug_adaptor<Backend>& arg)
475
+ {
476
+ using default_ops::eval_lsb;
477
+ return eval_lsb(arg.value());
478
+ }
479
+
480
+ template <class Backend>
481
+ inline std::size_t eval_msb(const debug_adaptor<Backend>& arg)
482
+ {
483
+ using default_ops::eval_msb;
484
+ return eval_msb(arg.value());
485
+ }
486
+
487
+ template <class Backend>
488
+ inline bool eval_bit_test(const debug_adaptor<Backend>& arg, std::size_t a)
489
+ {
490
+ using default_ops::eval_bit_test;
491
+ return eval_bit_test(arg.value(), a);
492
+ }
493
+
494
+ template <class Backend>
495
+ inline void eval_bit_set(const debug_adaptor<Backend>& arg, std::size_t a)
496
+ {
497
+ using default_ops::eval_bit_set;
498
+ eval_bit_set(arg.value(), a);
499
+ arg.update_view();
500
+ }
501
+ template <class Backend>
502
+ inline void eval_bit_unset(const debug_adaptor<Backend>& arg, std::size_t a)
503
+ {
504
+ using default_ops::eval_bit_unset;
505
+ eval_bit_unset(arg.value(), a);
506
+ arg.update_view();
507
+ }
508
+ template <class Backend>
509
+ inline void eval_bit_flip(const debug_adaptor<Backend>& arg, std::size_t a)
510
+ {
511
+ using default_ops::eval_bit_flip;
512
+ eval_bit_flip(arg.value(), a);
513
+ arg.update_view();
514
+ }
515
+
516
+ NON_MEMBER_OP3(gcd, "gcd")
517
+ NON_MEMBER_OP3(lcm, "lcm")
518
+ NON_MEMBER_OP4(powm, "powm")
519
+
520
+ /*********************************************************************
521
+ *
522
+ * abs/fabs:
523
+ *
524
+ *********************************************************************/
525
+
526
+ NON_MEMBER_OP2(abs, "abs")
527
+ NON_MEMBER_OP2(fabs, "fabs")
528
+
529
+ /*********************************************************************
530
+ *
531
+ * Floating point functions:
532
+ *
533
+ *********************************************************************/
534
+
535
+ NON_MEMBER_OP2(trunc, "trunc")
536
+ NON_MEMBER_OP2(round, "round")
537
+ NON_MEMBER_OP2(exp, "exp")
538
+ NON_MEMBER_OP2(log, "log")
539
+ NON_MEMBER_OP2(log10, "log10")
540
+ NON_MEMBER_OP2(sin, "sin")
541
+ NON_MEMBER_OP2(cos, "cos")
542
+ NON_MEMBER_OP2(tan, "tan")
543
+ NON_MEMBER_OP2(asin, "asin")
544
+ NON_MEMBER_OP2(acos, "acos")
545
+ NON_MEMBER_OP2(atan, "atan")
546
+ NON_MEMBER_OP2(sinh, "sinh")
547
+ NON_MEMBER_OP2(cosh, "cosh")
548
+ NON_MEMBER_OP2(tanh, "tanh")
549
+ NON_MEMBER_OP2(asinh, "asinh")
550
+ NON_MEMBER_OP2(acosh, "acosh")
551
+ NON_MEMBER_OP2(atanh, "atanh")
552
+ NON_MEMBER_OP3(fmod, "fmod")
553
+ NON_MEMBER_OP3(pow, "pow")
554
+ NON_MEMBER_OP3(atan2, "atan2")
555
+ NON_MEMBER_OP2(conj, "conj")
556
+
557
+ template <class Backend>
558
+ int eval_signbit(const debug_adaptor<Backend>& val)
559
+ {
560
+ using default_ops::eval_signbit;
561
+ return eval_signbit(val.value());
562
+ }
563
+
564
+ template <class Backend>
565
+ std::size_t hash_value(const debug_adaptor<Backend>& val)
566
+ {
567
+ return hash_value(val.value());
568
+ }
569
+
570
+ template <class Backend, expression_template_option ExpressionTemplates>
571
+ inline typename std::enable_if<number_category<Backend>::value == number_kind_rational, typename number<debug_adaptor<Backend>, ExpressionTemplates>::value_type>::type
572
+ numerator(const number<debug_adaptor<Backend>, ExpressionTemplates>& arg)
573
+ {
574
+ number<Backend, ExpressionTemplates> t(arg.backend().value());
575
+ return numerator(t).backend();
576
+ }
577
+ template <class Backend, expression_template_option ExpressionTemplates>
578
+ inline typename std::enable_if<number_category<Backend>::value == number_kind_rational, typename number<debug_adaptor<Backend>, ExpressionTemplates>::value_type>::type
579
+ denominator(const number<debug_adaptor<Backend>, ExpressionTemplates>& arg)
580
+ {
581
+ number<Backend, ExpressionTemplates> t(arg.backend().value());
582
+ return denominator(t).backend();
583
+ }
584
+
585
+ template <class To, class From>
586
+ inline BOOST_MP_CXX14_CONSTEXPR void eval_real(To& to, const debug_adaptor<From>& from)
587
+ {
588
+ using default_ops::eval_real;
589
+ eval_real(to, from.value());
590
+ }
591
+ template <class To, class From>
592
+ inline BOOST_MP_CXX14_CONSTEXPR void eval_real(debug_adaptor<To>& to, const debug_adaptor<From>& from)
593
+ {
594
+ using default_ops::eval_real;
595
+ eval_real(to.value(), from.value());
596
+ to.update_view();
597
+ }
598
+ template <class To, class From>
599
+ inline BOOST_MP_CXX14_CONSTEXPR void eval_real(debug_adaptor<To>& to, const From& from)
600
+ {
601
+ using default_ops::eval_real;
602
+ eval_real(to.value(), from);
603
+ to.update_view();
604
+ }
605
+
606
+ template <class To, class From>
607
+ inline BOOST_MP_CXX14_CONSTEXPR void eval_imag(To& to, const debug_adaptor<From>& from)
608
+ {
609
+ using default_ops::eval_imag;
610
+ eval_imag(to, from.value());
611
+ }
612
+ template <class To, class From>
613
+ inline BOOST_MP_CXX14_CONSTEXPR void eval_imag(debug_adaptor<To>& to, const debug_adaptor<From>& from)
614
+ {
615
+ using default_ops::eval_imag;
616
+ eval_imag(to.value(), from.value());
617
+ to.update_view();
618
+ }
619
+ template <class To, class From>
620
+ inline BOOST_MP_CXX14_CONSTEXPR void eval_imag(debug_adaptor<To>& to, const From& from)
621
+ {
622
+ using default_ops::eval_imag;
623
+ eval_imag(to.value(), from);
624
+ to.update_view();
625
+ }
626
+
627
+ template <class To, class From>
628
+ inline BOOST_MP_CXX14_CONSTEXPR void eval_set_real(To& to, const debug_adaptor<From>& from)
629
+ {
630
+ using default_ops::eval_set_real;
631
+ eval_set_real(to, from.value());
632
+ }
633
+ template <class To, class From>
634
+ inline BOOST_MP_CXX14_CONSTEXPR void eval_set_real(debug_adaptor<To>& to, const debug_adaptor<From>& from)
635
+ {
636
+ using default_ops::eval_set_real;
637
+ eval_set_real(to.value(), from.value());
638
+ to.update_view();
639
+ }
640
+ template <class To, class From>
641
+ inline BOOST_MP_CXX14_CONSTEXPR void eval_set_real(debug_adaptor<To>& to, const From& from)
642
+ {
643
+ using default_ops::eval_set_real;
644
+ eval_set_real(to.value(), from);
645
+ to.update_view();
646
+ }
647
+
648
+ template <class To, class From>
649
+ inline BOOST_MP_CXX14_CONSTEXPR void eval_set_imag(To& to, const debug_adaptor<From>& from)
650
+ {
651
+ using default_ops::eval_set_imag;
652
+ eval_set_imag(to, from.value());
653
+ }
654
+ template <class To, class From>
655
+ inline BOOST_MP_CXX14_CONSTEXPR void eval_set_imag(debug_adaptor<To>& to, const debug_adaptor<From>& from)
656
+ {
657
+ using default_ops::eval_set_imag;
658
+ eval_set_imag(to.value(), from.value());
659
+ to.update_view();
660
+ }
661
+ template <class To, class From>
662
+ inline BOOST_MP_CXX14_CONSTEXPR void eval_set_imag(debug_adaptor<To>& to, const From& from)
663
+ {
664
+ using default_ops::eval_set_imag;
665
+ eval_set_imag(to.value(), from);
666
+ to.update_view();
667
+ }
668
+
669
+
670
+ } // namespace backends
671
+
672
+ namespace detail {
673
+ template <class Backend>
674
+ struct is_variable_precision<debug_adaptor<Backend> > : public is_variable_precision<Backend>
675
+ {};
676
+ #ifdef BOOST_HAS_INT128
677
+ template <class Backend>
678
+ struct is_convertible_arithmetic<int128_type, debug_adaptor<Backend> > : public is_convertible_arithmetic<int128_type, Backend>
679
+ {};
680
+ template <class Backend>
681
+ struct is_convertible_arithmetic<uint128_type, debug_adaptor<Backend> > : public is_convertible_arithmetic<uint128_type, Backend>
682
+ {};
683
+ #endif
684
+ #ifdef BOOST_HAS_FLOAT128
685
+ template <class Backend>
686
+ struct is_convertible_arithmetic<float128_type, debug_adaptor<Backend> > : public is_convertible_arithmetic<float128_type, Backend>
687
+ {};
688
+ #endif
689
+ } // namespace detail
690
+
691
+ template <class Backend>
692
+ struct number_category<backends::debug_adaptor<Backend> > : public number_category<Backend>
693
+ {};
694
+
695
+ template <class Backend, expression_template_option ExpressionTemplates>
696
+ struct component_type<number<debug_adaptor<Backend>, ExpressionTemplates>>
697
+ {
698
+ //
699
+ // We'll make the component_type also a debug_adaptor:
700
+ //
701
+ using base_component_type = typename component_type<number<Backend, ExpressionTemplates>>::type;
702
+ using base_component_backend = typename base_component_type::backend_type;
703
+ using type = number<debug_adaptor<base_component_backend>, ExpressionTemplates>;
704
+ };
705
+
706
+ template <class Backend>
707
+ struct is_interval_number<backends::debug_adaptor<Backend> > : public is_interval_number<Backend> {};
708
+
709
+ }} // namespace boost::multiprecision
710
+
711
+ namespace std {
712
+
713
+ template <class Backend, boost::multiprecision::expression_template_option ExpressionTemplates>
714
+ class numeric_limits<boost::multiprecision::number<boost::multiprecision::backends::debug_adaptor<Backend>, ExpressionTemplates> >
715
+ : public std::numeric_limits<boost::multiprecision::number<Backend, ExpressionTemplates> >
716
+ {
717
+ using base_type = std::numeric_limits<boost::multiprecision::number<Backend, ExpressionTemplates> > ;
718
+ using number_type = boost::multiprecision::number<boost::multiprecision::backends::debug_adaptor<Backend>, ExpressionTemplates>;
719
+
720
+ public:
721
+ static number_type(min)() noexcept { return (base_type::min)(); }
722
+ static number_type(max)() noexcept { return (base_type::max)(); }
723
+ static number_type lowest() noexcept { return -(max)(); }
724
+ static number_type epsilon() noexcept { return base_type::epsilon(); }
725
+ static number_type round_error() noexcept { return epsilon() / 2; }
726
+ static number_type infinity() noexcept { return base_type::infinity(); }
727
+ static number_type quiet_NaN() noexcept { return base_type::quiet_NaN(); }
728
+ static number_type signaling_NaN() noexcept { return base_type::signaling_NaN(); }
729
+ static number_type denorm_min() noexcept { return base_type::denorm_min(); }
730
+ };
731
+
732
+ } // namespace std
733
+
734
+ #ifdef BOOST_MP_MATH_AVAILABLE
735
+ namespace boost {
736
+ namespace math {
737
+
738
+ namespace policies {
739
+
740
+ template <class Backend, boost::multiprecision::expression_template_option ExpressionTemplates, class Policy>
741
+ struct precision<boost::multiprecision::number<boost::multiprecision::debug_adaptor<Backend>, ExpressionTemplates>, Policy>
742
+ : public precision<boost::multiprecision::number<Backend, ExpressionTemplates>, Policy>
743
+ {};
744
+
745
+ #undef NON_MEMBER_OP1
746
+ #undef NON_MEMBER_OP2
747
+ #undef NON_MEMBER_OP3
748
+ #undef NON_MEMBER_OP4
749
+
750
+ }
751
+
752
+ }} // namespace boost::math::policies
753
+ #else
754
+ #undef NON_MEMBER_OP1
755
+ #undef NON_MEMBER_OP2
756
+ #undef NON_MEMBER_OP3
757
+ #undef NON_MEMBER_OP4
758
+ #endif // BOOST_MP_MATH_AVAILABLE
759
+
760
+ #endif