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,834 @@
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_LOGGED_ADAPTER_HPP
7
+ #define BOOST_MP_LOGGED_ADAPTER_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
+
16
+ template <class Backend>
17
+ inline void log_postfix_event(const Backend&, const char* /*event_description*/)
18
+ {
19
+ }
20
+ template <class Backend, class T>
21
+ inline void log_postfix_event(const Backend&, const T&, const char* /*event_description*/)
22
+ {
23
+ }
24
+ template <class Backend>
25
+ inline void log_prefix_event(const Backend&, const char* /*event_description*/)
26
+ {
27
+ }
28
+ template <class Backend, class T>
29
+ inline void log_prefix_event(const Backend&, const T&, const char* /*event_description*/)
30
+ {
31
+ }
32
+ template <class Backend, class T, class U>
33
+ inline void log_prefix_event(const Backend&, const T&, const U&, const char* /*event_description*/)
34
+ {
35
+ }
36
+ template <class Backend, class T, class U, class V>
37
+ inline void log_prefix_event(const Backend&, const T&, const U&, const V&, const char* /*event_description*/)
38
+ {
39
+ }
40
+
41
+ namespace backends {
42
+
43
+ template <class Backend>
44
+ struct logged_adaptor
45
+ {
46
+ using signed_types = typename Backend::signed_types ;
47
+ using unsigned_types = typename Backend::unsigned_types;
48
+ using float_types = typename Backend::float_types ;
49
+ using exponent_type = typename extract_exponent_type<Backend, number_category<Backend>::value>::type;
50
+
51
+ private:
52
+ Backend m_value;
53
+
54
+ public:
55
+ logged_adaptor()
56
+ {
57
+ log_postfix_event(m_value, "Default construct");
58
+ }
59
+ logged_adaptor(const logged_adaptor& o)
60
+ {
61
+ log_prefix_event(m_value, o.value(), "Copy construct");
62
+ m_value = o.m_value;
63
+ log_postfix_event(m_value, "Copy construct");
64
+ }
65
+ // rvalue copy
66
+ logged_adaptor(logged_adaptor&& o)
67
+ {
68
+ log_prefix_event(m_value, o.value(), "Move construct");
69
+ m_value = static_cast<Backend&&>(o.m_value);
70
+ log_postfix_event(m_value, "Move construct");
71
+ }
72
+ logged_adaptor& operator=(logged_adaptor&& o)
73
+ {
74
+ log_prefix_event(m_value, o.value(), "Move Assignment");
75
+ m_value = static_cast<Backend&&>(o.m_value);
76
+ log_postfix_event(m_value, "Move construct");
77
+ return *this;
78
+ }
79
+ logged_adaptor& operator=(const logged_adaptor& o)
80
+ {
81
+ log_prefix_event(m_value, o.value(), "Assignment");
82
+ m_value = o.m_value;
83
+ log_postfix_event(m_value, "Copy construct");
84
+ return *this;
85
+ }
86
+ template <class T>
87
+ logged_adaptor(const T& i, const typename std::enable_if<std::is_convertible<T, Backend>::value>::type* = nullptr)
88
+ : m_value(i)
89
+ {
90
+ log_postfix_event(m_value, "construct from arithmetic type");
91
+ }
92
+ template <class T>
93
+ logged_adaptor(const logged_adaptor<T>& i, const typename std::enable_if<std::is_convertible<T, Backend>::value>::type* = nullptr)
94
+ : m_value(i.value())
95
+ {
96
+ log_postfix_event(m_value, "construct from arithmetic type");
97
+ }
98
+ template <class T, class U>
99
+ logged_adaptor(const T& i, const U& j, typename std::enable_if<std::is_constructible<Backend, const T&, const U&>::value>::type* = nullptr)
100
+ : m_value(i, j)
101
+ {
102
+ log_postfix_event(m_value, "construct from a pair of arithmetic types");
103
+ }
104
+ template <class D = Backend>
105
+ logged_adaptor(const Backend& i, unsigned digits10, typename std::enable_if<std::is_constructible<D, Backend const&, unsigned>::value>::type const* = nullptr)
106
+ : m_value(i, digits10)
107
+ {
108
+ log_postfix_event(m_value, "construct from arithmetic type and precision");
109
+ }
110
+ template <class D = Backend>
111
+ logged_adaptor(const logged_adaptor<Backend>& i, unsigned digits10, typename std::enable_if<std::is_constructible<D, Backend const&, unsigned>::value>::type const* = nullptr)
112
+ : m_value(i.value(), digits10)
113
+ {
114
+ log_postfix_event(m_value, "construct from arithmetic type and precision");
115
+ }
116
+ template <class T>
117
+ typename std::enable_if<boost::multiprecision::detail::is_arithmetic<T>::value || std::is_assignable<Backend, T>::value, logged_adaptor&>::type operator=(const T& i)
118
+ {
119
+ log_prefix_event(m_value, i, "Assignment from arithmetic type");
120
+ m_value = i;
121
+ log_postfix_event(m_value, "Assignment from arithmetic type");
122
+ return *this;
123
+ }
124
+ logged_adaptor& operator=(const char* s)
125
+ {
126
+ log_prefix_event(m_value, s, "Assignment from string type");
127
+ m_value = s;
128
+ log_postfix_event(m_value, "Assignment from string type");
129
+ return *this;
130
+ }
131
+ void swap(logged_adaptor& o)
132
+ {
133
+ log_prefix_event(m_value, o.value(), "swap");
134
+ std::swap(m_value, o.value());
135
+ log_postfix_event(m_value, "swap");
136
+ }
137
+ std::string str(std::streamsize digits, std::ios_base::fmtflags f) const
138
+ {
139
+ log_prefix_event(m_value, "Conversion to string");
140
+ std::string s = m_value.str(digits, f);
141
+ log_postfix_event(m_value, s, "Conversion to string");
142
+ return s;
143
+ }
144
+ void negate()
145
+ {
146
+ log_prefix_event(m_value, "negate");
147
+ m_value.negate();
148
+ log_postfix_event(m_value, "negate");
149
+ }
150
+ int compare(const logged_adaptor& o) const
151
+ {
152
+ log_prefix_event(m_value, o.value(), "compare");
153
+ int r = m_value.compare(o.value());
154
+ log_postfix_event(m_value, r, "compare");
155
+ return r;
156
+ }
157
+ template <class T>
158
+ int compare(const T& i) const
159
+ {
160
+ log_prefix_event(m_value, i, "compare");
161
+ int r = m_value.compare(i);
162
+ log_postfix_event(m_value, r, "compare");
163
+ return r;
164
+ }
165
+ Backend& value()
166
+ {
167
+ return m_value;
168
+ }
169
+ const Backend& value() const
170
+ {
171
+ return m_value;
172
+ }
173
+
174
+ #ifndef BOOST_MP_STANDALONE
175
+ template <class Archive>
176
+ void serialize(Archive& ar, const unsigned int /*version*/)
177
+ {
178
+ log_prefix_event(m_value, "serialize");
179
+ ar& boost::make_nvp("value", m_value);
180
+ log_postfix_event(m_value, "serialize");
181
+ }
182
+ #endif
183
+
184
+ static unsigned default_precision() noexcept
185
+ {
186
+ return Backend::default_precision();
187
+ }
188
+ static void default_precision(unsigned v) noexcept
189
+ {
190
+ Backend::default_precision(v);
191
+ }
192
+ static unsigned thread_default_precision() noexcept
193
+ {
194
+ return Backend::thread_default_precision();
195
+ }
196
+ static void thread_default_precision(unsigned v) noexcept
197
+ {
198
+ Backend::thread_default_precision(v);
199
+ }
200
+ unsigned precision() const noexcept
201
+ {
202
+ return value().precision();
203
+ }
204
+ void precision(unsigned digits10) noexcept
205
+ {
206
+ value().precision(digits10);
207
+ }
208
+ //
209
+ // Variable precision options:
210
+ //
211
+ static constexpr variable_precision_options default_variable_precision_options()noexcept
212
+ {
213
+ return Backend::default_variable_precision_options();
214
+ }
215
+ static constexpr variable_precision_options thread_default_variable_precision_options()noexcept
216
+ {
217
+ return Backend::thread_default_variable_precision_options();
218
+ }
219
+ static BOOST_MP_CXX14_CONSTEXPR void default_variable_precision_options(variable_precision_options opts)
220
+ {
221
+ Backend::default_variable_precision_options(opts);
222
+ }
223
+ static BOOST_MP_CXX14_CONSTEXPR void thread_default_variable_precision_options(variable_precision_options opts)
224
+ {
225
+ Backend::thread_default_variable_precision_options(opts);
226
+ }
227
+ };
228
+
229
+ template <class T>
230
+ inline const T& unwrap_logged_type(const T& a) { return a; }
231
+ template <class Backend>
232
+ inline const Backend& unwrap_logged_type(const logged_adaptor<Backend>& a) { return a.value(); }
233
+
234
+ #define NON_MEMBER_OP1(name, str) \
235
+ template <class Backend> \
236
+ inline void BOOST_JOIN(eval_, name)(logged_adaptor<Backend> & result) \
237
+ { \
238
+ using default_ops::BOOST_JOIN(eval_, name); \
239
+ log_prefix_event(result.value(), str); \
240
+ BOOST_JOIN(eval_, name) \
241
+ (result.value()); \
242
+ log_postfix_event(result.value(), str); \
243
+ }
244
+
245
+ #define NON_MEMBER_OP2(name, str) \
246
+ template <class Backend, class T> \
247
+ inline void BOOST_JOIN(eval_, name)(logged_adaptor<Backend> & result, const T& a) \
248
+ { \
249
+ using default_ops::BOOST_JOIN(eval_, name); \
250
+ log_prefix_event(result.value(), unwrap_logged_type(a), str); \
251
+ BOOST_JOIN(eval_, name) \
252
+ (result.value(), unwrap_logged_type(a)); \
253
+ log_postfix_event(result.value(), str); \
254
+ } \
255
+ template <class Backend> \
256
+ inline void BOOST_JOIN(eval_, name)(logged_adaptor<Backend> & result, const logged_adaptor<Backend>& a) \
257
+ { \
258
+ using default_ops::BOOST_JOIN(eval_, name); \
259
+ log_prefix_event(result.value(), unwrap_logged_type(a), str); \
260
+ BOOST_JOIN(eval_, name) \
261
+ (result.value(), unwrap_logged_type(a)); \
262
+ log_postfix_event(result.value(), str); \
263
+ }
264
+
265
+ #define NON_MEMBER_OP3(name, str) \
266
+ template <class Backend, class T, class U> \
267
+ inline void BOOST_JOIN(eval_, name)(logged_adaptor<Backend> & result, const T& a, const U& b) \
268
+ { \
269
+ using default_ops::BOOST_JOIN(eval_, name); \
270
+ log_prefix_event(result.value(), unwrap_logged_type(a), unwrap_logged_type(b), str); \
271
+ BOOST_JOIN(eval_, name) \
272
+ (result.value(), unwrap_logged_type(a), unwrap_logged_type(b)); \
273
+ log_postfix_event(result.value(), str); \
274
+ } \
275
+ template <class Backend, class T> \
276
+ inline void BOOST_JOIN(eval_, name)(logged_adaptor<Backend> & result, const logged_adaptor<Backend>& a, const T& b) \
277
+ { \
278
+ using default_ops::BOOST_JOIN(eval_, name); \
279
+ log_prefix_event(result.value(), unwrap_logged_type(a), unwrap_logged_type(b), str); \
280
+ BOOST_JOIN(eval_, name) \
281
+ (result.value(), unwrap_logged_type(a), unwrap_logged_type(b)); \
282
+ log_postfix_event(result.value(), str); \
283
+ } \
284
+ template <class Backend, class T> \
285
+ inline void BOOST_JOIN(eval_, name)(logged_adaptor<Backend> & result, const T& a, const logged_adaptor<Backend>& b) \
286
+ { \
287
+ using default_ops::BOOST_JOIN(eval_, name); \
288
+ log_prefix_event(result.value(), unwrap_logged_type(a), unwrap_logged_type(b), str); \
289
+ BOOST_JOIN(eval_, name) \
290
+ (result.value(), unwrap_logged_type(a), unwrap_logged_type(b)); \
291
+ log_postfix_event(result.value(), str); \
292
+ } \
293
+ template <class Backend> \
294
+ inline void BOOST_JOIN(eval_, name)(logged_adaptor<Backend> & result, const logged_adaptor<Backend>& a, const logged_adaptor<Backend>& b) \
295
+ { \
296
+ using default_ops::BOOST_JOIN(eval_, name); \
297
+ log_prefix_event(result.value(), unwrap_logged_type(a), unwrap_logged_type(b), str); \
298
+ BOOST_JOIN(eval_, name) \
299
+ (result.value(), unwrap_logged_type(a), unwrap_logged_type(b)); \
300
+ log_postfix_event(result.value(), str); \
301
+ }
302
+
303
+ #define NON_MEMBER_OP4(name, str) \
304
+ template <class Backend, class T, class U, class V> \
305
+ inline void BOOST_JOIN(eval_, name)(logged_adaptor<Backend> & result, const T& a, const U& b, const V& c) \
306
+ { \
307
+ using default_ops::BOOST_JOIN(eval_, name); \
308
+ log_prefix_event(result.value(), unwrap_logged_type(a), unwrap_logged_type(b), unwrap_logged_type(c), str); \
309
+ BOOST_JOIN(eval_, name) \
310
+ (result.value(), unwrap_logged_type(a), unwrap_logged_type(b), unwrap_logged_type(c)); \
311
+ log_postfix_event(result.value(), str); \
312
+ } \
313
+ template <class Backend, class T> \
314
+ inline void BOOST_JOIN(eval_, name)(logged_adaptor<Backend> & result, const logged_adaptor<Backend>& a, const logged_adaptor<Backend>& b, const T& c) \
315
+ { \
316
+ using default_ops::BOOST_JOIN(eval_, name); \
317
+ log_prefix_event(result.value(), unwrap_logged_type(a), unwrap_logged_type(b), unwrap_logged_type(c), str); \
318
+ BOOST_JOIN(eval_, name) \
319
+ (result.value(), unwrap_logged_type(a), unwrap_logged_type(b), unwrap_logged_type(c)); \
320
+ log_postfix_event(result.value(), str); \
321
+ } \
322
+ template <class Backend, class T> \
323
+ inline void BOOST_JOIN(eval_, name)(logged_adaptor<Backend> & result, const logged_adaptor<Backend>& a, const T& b, const logged_adaptor<Backend>& c) \
324
+ { \
325
+ using default_ops::BOOST_JOIN(eval_, name); \
326
+ log_prefix_event(result.value(), unwrap_logged_type(a), unwrap_logged_type(b), unwrap_logged_type(c), str); \
327
+ BOOST_JOIN(eval_, name) \
328
+ (result.value(), unwrap_logged_type(a), unwrap_logged_type(b), unwrap_logged_type(c)); \
329
+ log_postfix_event(result.value(), str); \
330
+ } \
331
+ template <class Backend, class T> \
332
+ inline void BOOST_JOIN(eval_, name)(logged_adaptor<Backend> & result, const T& a, const logged_adaptor<Backend>& b, const logged_adaptor<Backend>& c) \
333
+ { \
334
+ using default_ops::BOOST_JOIN(eval_, name); \
335
+ log_prefix_event(result.value(), unwrap_logged_type(a), unwrap_logged_type(b), unwrap_logged_type(c), str); \
336
+ BOOST_JOIN(eval_, name) \
337
+ (result.value(), unwrap_logged_type(a), unwrap_logged_type(b), unwrap_logged_type(c)); \
338
+ log_postfix_event(result.value(), str); \
339
+ } \
340
+ template <class Backend> \
341
+ inline void BOOST_JOIN(eval_, name)(logged_adaptor<Backend> & result, const logged_adaptor<Backend>& a, const logged_adaptor<Backend>& b, const logged_adaptor<Backend>& c) \
342
+ { \
343
+ using default_ops::BOOST_JOIN(eval_, name); \
344
+ log_prefix_event(result.value(), unwrap_logged_type(a), unwrap_logged_type(b), unwrap_logged_type(c), str); \
345
+ BOOST_JOIN(eval_, name) \
346
+ (result.value(), unwrap_logged_type(a), unwrap_logged_type(b), unwrap_logged_type(c)); \
347
+ log_postfix_event(result.value(), str); \
348
+ } \
349
+ template <class Backend, class T, class U> \
350
+ inline void BOOST_JOIN(eval_, name)(logged_adaptor<Backend> & result, const logged_adaptor<Backend>& a, const T& b, const U& c) \
351
+ { \
352
+ using default_ops::BOOST_JOIN(eval_, name); \
353
+ log_prefix_event(result.value(), unwrap_logged_type(a), unwrap_logged_type(b), unwrap_logged_type(c), str); \
354
+ BOOST_JOIN(eval_, name) \
355
+ (result.value(), unwrap_logged_type(a), unwrap_logged_type(b), unwrap_logged_type(c)); \
356
+ log_postfix_event(result.value(), str); \
357
+ }
358
+
359
+ NON_MEMBER_OP2(add, "+=")
360
+ NON_MEMBER_OP2(subtract, "-=")
361
+ NON_MEMBER_OP2(multiply, "*=")
362
+ NON_MEMBER_OP2(divide, "/=")
363
+
364
+ template <class Backend, class R>
365
+ inline void eval_convert_to(R* result, const logged_adaptor<Backend>& val)
366
+ {
367
+ using default_ops::eval_convert_to;
368
+ log_prefix_event(val.value(), "convert_to");
369
+ eval_convert_to(result, val.value());
370
+ log_postfix_event(val.value(), *result, "convert_to");
371
+ }
372
+
373
+ template <class Backend, class R>
374
+ inline void eval_convert_to(logged_adaptor<R>* result, const logged_adaptor<Backend>& val)
375
+ {
376
+ using default_ops::eval_convert_to;
377
+ log_prefix_event(val.value(), "convert_to");
378
+ eval_convert_to(&result->value(), val.value());
379
+ log_postfix_event(val.value(), &result->value(), "convert_to");
380
+ }
381
+ template <class Backend, class R>
382
+ inline void eval_convert_to(logged_adaptor<R>* result, const Backend& val)
383
+ {
384
+ using default_ops::eval_convert_to;
385
+ log_prefix_event(val, "convert_to");
386
+ eval_convert_to(&result->value(), val);
387
+ log_postfix_event(val, &result->value(), "convert_to");
388
+ }
389
+
390
+ template <class Backend>
391
+ inline void eval_convert_to(std::complex<float>* result, const logged_adaptor<Backend>& val)
392
+ {
393
+ using default_ops::eval_convert_to;
394
+ log_prefix_event(val.value(), "convert_to");
395
+ eval_convert_to(result, val.value());
396
+ log_postfix_event(val.value(), *result, "convert_to");
397
+ }
398
+ template <class Backend>
399
+ inline void eval_convert_to(std::complex<double>* result, const logged_adaptor<Backend>& val)
400
+ {
401
+ using default_ops::eval_convert_to;
402
+ log_prefix_event(val.value(), "convert_to");
403
+ eval_convert_to(result, val.value());
404
+ log_postfix_event(val.value(), *result, "convert_to");
405
+ }
406
+ template <class Backend>
407
+ inline void eval_convert_to(std::complex<long double>* result, const logged_adaptor<Backend>& val)
408
+ {
409
+ using default_ops::eval_convert_to;
410
+ log_prefix_event(val.value(), "convert_to");
411
+ eval_convert_to(result, val.value());
412
+ log_postfix_event(val.value(), *result, "convert_to");
413
+ }
414
+
415
+
416
+ template <class Backend, class Exp>
417
+ inline void eval_frexp(logged_adaptor<Backend>& result, const logged_adaptor<Backend>& arg, Exp* exp)
418
+ {
419
+ log_prefix_event(arg.value(), "frexp");
420
+ eval_frexp(result.value(), arg.value(), exp);
421
+ log_postfix_event(result.value(), *exp, "frexp");
422
+ }
423
+
424
+ template <class Backend, class Exp>
425
+ inline void eval_ldexp(logged_adaptor<Backend>& result, const logged_adaptor<Backend>& arg, Exp exp)
426
+ {
427
+ log_prefix_event(arg.value(), "ldexp");
428
+ eval_ldexp(result.value(), arg.value(), exp);
429
+ log_postfix_event(result.value(), exp, "ldexp");
430
+ }
431
+
432
+ template <class Backend, class Exp>
433
+ inline void eval_scalbn(logged_adaptor<Backend>& result, const logged_adaptor<Backend>& arg, Exp exp)
434
+ {
435
+ using default_ops::eval_scalbn;
436
+ log_prefix_event(arg.value(), "scalbn");
437
+ eval_scalbn(result.value(), arg.value(), exp);
438
+ log_postfix_event(result.value(), exp, "scalbn");
439
+ }
440
+
441
+ template <class Backend>
442
+ inline typename Backend::exponent_type eval_ilogb(const logged_adaptor<Backend>& arg)
443
+ {
444
+ using default_ops::eval_ilogb;
445
+ log_prefix_event(arg.value(), "ilogb");
446
+ typename Backend::exponent_type r = eval_ilogb(arg.value());
447
+ log_postfix_event(arg.value(), "ilogb");
448
+ return r;
449
+ }
450
+
451
+ NON_MEMBER_OP2(floor, "floor")
452
+ NON_MEMBER_OP2(ceil, "ceil")
453
+ NON_MEMBER_OP2(sqrt, "sqrt")
454
+
455
+ template <class Backend>
456
+ inline int eval_fpclassify(const logged_adaptor<Backend>& arg)
457
+ {
458
+ using default_ops::eval_fpclassify;
459
+ log_prefix_event(arg.value(), "fpclassify");
460
+ int r = eval_fpclassify(arg.value());
461
+ log_postfix_event(arg.value(), r, "fpclassify");
462
+ return r;
463
+ }
464
+
465
+ /*********************************************************************
466
+ *
467
+ * Optional arithmetic operations come next:
468
+ *
469
+ *********************************************************************/
470
+
471
+ NON_MEMBER_OP3(add, "+")
472
+ NON_MEMBER_OP3(subtract, "-")
473
+ NON_MEMBER_OP3(multiply, "*")
474
+ NON_MEMBER_OP3(divide, "/")
475
+ NON_MEMBER_OP3(multiply_add, "fused-multiply-add")
476
+ NON_MEMBER_OP3(multiply_subtract, "fused-multiply-subtract")
477
+ NON_MEMBER_OP4(multiply_add, "fused-multiply-add")
478
+ NON_MEMBER_OP4(multiply_subtract, "fused-multiply-subtract")
479
+
480
+ NON_MEMBER_OP1(increment, "increment")
481
+ NON_MEMBER_OP1(decrement, "decrement")
482
+
483
+ /*********************************************************************
484
+ *
485
+ * Optional integer operations come next:
486
+ *
487
+ *********************************************************************/
488
+
489
+ NON_MEMBER_OP2(modulus, "%=")
490
+ NON_MEMBER_OP3(modulus, "%")
491
+ NON_MEMBER_OP2(bitwise_or, "|=")
492
+ NON_MEMBER_OP3(bitwise_or, "|")
493
+ NON_MEMBER_OP2(bitwise_and, "&=")
494
+ NON_MEMBER_OP3(bitwise_and, "&")
495
+ NON_MEMBER_OP2(bitwise_xor, "^=")
496
+ NON_MEMBER_OP3(bitwise_xor, "^")
497
+ NON_MEMBER_OP4(qr, "quotient-and-remainder")
498
+ NON_MEMBER_OP2(complement, "~")
499
+
500
+ template <class Backend>
501
+ inline void eval_left_shift(logged_adaptor<Backend>& arg, std::size_t a)
502
+ {
503
+ using default_ops::eval_left_shift;
504
+ log_prefix_event(arg.value(), a, "<<=");
505
+ eval_left_shift(arg.value(), a);
506
+ log_postfix_event(arg.value(), "<<=");
507
+ }
508
+ template <class Backend>
509
+ inline void eval_left_shift(logged_adaptor<Backend>& arg, const logged_adaptor<Backend>& a, std::size_t b)
510
+ {
511
+ using default_ops::eval_left_shift;
512
+ log_prefix_event(arg.value(), a, b, "<<");
513
+ eval_left_shift(arg.value(), a.value(), b);
514
+ log_postfix_event(arg.value(), "<<");
515
+ }
516
+ template <class Backend>
517
+ inline void eval_right_shift(logged_adaptor<Backend>& arg, std::size_t a)
518
+ {
519
+ using default_ops::eval_right_shift;
520
+ log_prefix_event(arg.value(), a, ">>=");
521
+ eval_right_shift(arg.value(), a);
522
+ log_postfix_event(arg.value(), ">>=");
523
+ }
524
+ template <class Backend>
525
+ inline void eval_right_shift(logged_adaptor<Backend>& arg, const logged_adaptor<Backend>& a, std::size_t b)
526
+ {
527
+ using default_ops::eval_right_shift;
528
+ log_prefix_event(arg.value(), a, b, ">>");
529
+ eval_right_shift(arg.value(), a.value(), b);
530
+ log_postfix_event(arg.value(), ">>");
531
+ }
532
+
533
+ template <class Backend, class T>
534
+ inline T eval_integer_modulus(const logged_adaptor<Backend>& arg, const T& a)
535
+ {
536
+ using default_ops::eval_integer_modulus;
537
+ log_prefix_event(arg.value(), a, "integer-modulus");
538
+ T r = eval_integer_modulus(arg.value(), a);
539
+ log_postfix_event(arg.value(), r, "integer-modulus");
540
+ return r;
541
+ }
542
+
543
+ template <class Backend>
544
+ inline std::size_t eval_lsb(const logged_adaptor<Backend>& arg)
545
+ {
546
+ using default_ops::eval_lsb;
547
+ log_prefix_event(arg.value(), "least-significant-bit");
548
+ std::size_t r = eval_lsb(arg.value());
549
+ log_postfix_event(arg.value(), r, "least-significant-bit");
550
+ return r;
551
+ }
552
+
553
+ template <class Backend>
554
+ inline std::size_t eval_msb(const logged_adaptor<Backend>& arg)
555
+ {
556
+ using default_ops::eval_msb;
557
+ log_prefix_event(arg.value(), "most-significant-bit");
558
+ std::size_t r = eval_msb(arg.value());
559
+ log_postfix_event(arg.value(), r, "most-significant-bit");
560
+ return r;
561
+ }
562
+
563
+ template <class Backend>
564
+ inline bool eval_bit_test(const logged_adaptor<Backend>& arg, std::size_t a)
565
+ {
566
+ using default_ops::eval_bit_test;
567
+ log_prefix_event(arg.value(), a, "bit-test");
568
+ bool r = eval_bit_test(arg.value(), a);
569
+ log_postfix_event(arg.value(), r, "bit-test");
570
+ return r;
571
+ }
572
+
573
+ template <class Backend>
574
+ inline void eval_bit_set(const logged_adaptor<Backend>& arg, std::size_t a)
575
+ {
576
+ using default_ops::eval_bit_set;
577
+ log_prefix_event(arg.value(), a, "bit-set");
578
+ eval_bit_set(arg.value(), a);
579
+ log_postfix_event(arg.value(), arg, "bit-set");
580
+ }
581
+ template <class Backend>
582
+ inline void eval_bit_unset(const logged_adaptor<Backend>& arg, std::size_t a)
583
+ {
584
+ using default_ops::eval_bit_unset;
585
+ log_prefix_event(arg.value(), a, "bit-unset");
586
+ eval_bit_unset(arg.value(), a);
587
+ log_postfix_event(arg.value(), arg, "bit-unset");
588
+ }
589
+ template <class Backend>
590
+ inline void eval_bit_flip(const logged_adaptor<Backend>& arg, std::size_t a)
591
+ {
592
+ using default_ops::eval_bit_flip;
593
+ log_prefix_event(arg.value(), a, "bit-flip");
594
+ eval_bit_flip(arg.value(), a);
595
+ log_postfix_event(arg.value(), arg, "bit-flip");
596
+ }
597
+
598
+ NON_MEMBER_OP3(gcd, "gcd")
599
+ NON_MEMBER_OP3(lcm, "lcm")
600
+ NON_MEMBER_OP4(powm, "powm")
601
+
602
+ /*********************************************************************
603
+ *
604
+ * abs/fabs:
605
+ *
606
+ *********************************************************************/
607
+
608
+ NON_MEMBER_OP2(abs, "abs")
609
+ NON_MEMBER_OP2(fabs, "fabs")
610
+
611
+ /*********************************************************************
612
+ *
613
+ * Floating point functions:
614
+ *
615
+ *********************************************************************/
616
+
617
+ NON_MEMBER_OP2(trunc, "trunc")
618
+ NON_MEMBER_OP2(round, "round")
619
+ NON_MEMBER_OP2(exp, "exp")
620
+ NON_MEMBER_OP2(log, "log")
621
+ NON_MEMBER_OP2(log10, "log10")
622
+ NON_MEMBER_OP2(sin, "sin")
623
+ NON_MEMBER_OP2(cos, "cos")
624
+ NON_MEMBER_OP2(tan, "tan")
625
+ NON_MEMBER_OP2(asin, "asin")
626
+ NON_MEMBER_OP2(acos, "acos")
627
+ NON_MEMBER_OP2(atan, "atan")
628
+ NON_MEMBER_OP2(sinh, "sinh")
629
+ NON_MEMBER_OP2(cosh, "cosh")
630
+ NON_MEMBER_OP2(tanh, "tanh")
631
+ NON_MEMBER_OP2(logb, "logb")
632
+ NON_MEMBER_OP3(fmod, "fmod")
633
+ NON_MEMBER_OP3(pow, "pow")
634
+ NON_MEMBER_OP3(atan2, "atan2")
635
+ NON_MEMBER_OP2(asinh, "asinh")
636
+ NON_MEMBER_OP2(acosh, "acosh")
637
+ NON_MEMBER_OP2(atanh, "atanh")
638
+ NON_MEMBER_OP2(conj, "conj")
639
+
640
+ template <class Backend>
641
+ int eval_signbit(const logged_adaptor<Backend>& val)
642
+ {
643
+ using default_ops::eval_signbit;
644
+ return eval_signbit(val.value());
645
+ }
646
+
647
+ template <class Backend>
648
+ std::size_t hash_value(const logged_adaptor<Backend>& val)
649
+ {
650
+ return hash_value(val.value());
651
+ }
652
+
653
+ template <class Backend, expression_template_option ExpressionTemplates>
654
+ inline typename std::enable_if<number_category<Backend>::value == number_kind_rational, typename number<logged_adaptor<Backend>, ExpressionTemplates>::value_type>::type
655
+ numerator(const number<logged_adaptor<Backend>, ExpressionTemplates>& arg)
656
+ {
657
+ number<Backend, ExpressionTemplates> t(arg.backend().value());
658
+ return numerator(t).backend();
659
+ }
660
+ template <class Backend, expression_template_option ExpressionTemplates>
661
+ inline typename std::enable_if<number_category<Backend>::value == number_kind_rational, typename number<logged_adaptor<Backend>, ExpressionTemplates>::value_type>::type
662
+ denominator(const number<logged_adaptor<Backend>, ExpressionTemplates>& arg)
663
+ {
664
+ number<Backend, ExpressionTemplates> t(arg.backend().value());
665
+ return denominator(t).backend();
666
+ }
667
+
668
+ template <class To, class From>
669
+ inline BOOST_MP_CXX14_CONSTEXPR void eval_set_real(To& to, const logged_adaptor<From>& from)
670
+ {
671
+ using default_ops::eval_set_real;
672
+ log_prefix_event(to, from.value(), "Set real part");
673
+ eval_set_real(to, from.value());
674
+ log_postfix_event(to, from.value(), "Set real part");
675
+ }
676
+ template <class To, class From>
677
+ inline BOOST_MP_CXX14_CONSTEXPR void eval_set_real(logged_adaptor<To>& to, const logged_adaptor<From>& from)
678
+ {
679
+ using default_ops::eval_set_real;
680
+ log_prefix_event(to.value(), from.value(), "Set real part");
681
+ eval_set_real(to.value(), from.value());
682
+ log_postfix_event(to.value(), from.value(), "Set real part");
683
+ }
684
+ template <class To, class From>
685
+ inline BOOST_MP_CXX14_CONSTEXPR void eval_set_real(logged_adaptor<To>& to, const From& from)
686
+ {
687
+ using default_ops::eval_set_real;
688
+ log_prefix_event(to.value(), from, "Set real part");
689
+ eval_set_real(to.value(), from);
690
+ log_postfix_event(to.value(), from, "Set real part");
691
+ }
692
+
693
+ template <class To, class From>
694
+ inline BOOST_MP_CXX14_CONSTEXPR void eval_set_imag(To& to, const logged_adaptor<From>& from)
695
+ {
696
+ using default_ops::eval_set_imag;
697
+ log_prefix_event(to, from.value(), "Set imag part");
698
+ eval_set_imag(to, from.value());
699
+ log_postfix_event(to, from.value(), "Set imag part");
700
+ }
701
+ template <class To, class From>
702
+ inline BOOST_MP_CXX14_CONSTEXPR void eval_set_imag(logged_adaptor<To>& to, const logged_adaptor<From>& from)
703
+ {
704
+ using default_ops::eval_set_imag;
705
+ log_prefix_event(to.value(), from.value(), "Set imag part");
706
+ eval_set_imag(to.value(), from.value());
707
+ log_postfix_event(to.value(), from.value(), "Set imag part");
708
+ }
709
+ template <class To, class From>
710
+ inline BOOST_MP_CXX14_CONSTEXPR void eval_set_imag(logged_adaptor<To>& to, const From& from)
711
+ {
712
+ using default_ops::eval_set_imag;
713
+ log_prefix_event(to.value(), from, "Set imag part");
714
+ eval_set_imag(to.value(), from);
715
+ log_postfix_event(to.value(), from, "Set imag part");
716
+ }
717
+
718
+
719
+ #define NON_MEMBER_COMPLEX_TO_REAL(name, str) \
720
+ template <class B1, class B2> \
721
+ inline void BOOST_JOIN(eval_, name)(logged_adaptor<B1> & result, const logged_adaptor<B2>& a) \
722
+ { \
723
+ using default_ops::BOOST_JOIN(eval_, name); \
724
+ log_prefix_event(a.value(), a.value(), str); \
725
+ BOOST_JOIN(eval_, name) \
726
+ (result.value(), a.value()); \
727
+ log_postfix_event(result.value(), str); \
728
+ } \
729
+ template <class B1, class B2> \
730
+ inline void BOOST_JOIN(eval_, name)(B1 & result, const logged_adaptor<B2>& a) \
731
+ { \
732
+ using default_ops::BOOST_JOIN(eval_, name); \
733
+ log_prefix_event(a.value(), a.value(), str); \
734
+ BOOST_JOIN(eval_, name) \
735
+ (result, a.value()); \
736
+ log_postfix_event(result, str); \
737
+ }
738
+
739
+ NON_MEMBER_COMPLEX_TO_REAL(real, "real")
740
+ NON_MEMBER_COMPLEX_TO_REAL(imag, "imag")
741
+
742
+ template <class T, class V, class U>
743
+ inline void assign_components(logged_adaptor<T>& result, const V& v1, const U& v2)
744
+ {
745
+ using default_ops::assign_components;
746
+ assign_components(result.value(), unwrap_logged_type(v1), unwrap_logged_type(v2));
747
+ }
748
+
749
+ } // namespace backends
750
+
751
+ namespace detail {
752
+ template <class Backend>
753
+ struct is_variable_precision<logged_adaptor<Backend> > : public is_variable_precision<Backend>
754
+ {};
755
+ #ifdef BOOST_HAS_INT128
756
+ template <class Backend>
757
+ struct is_convertible_arithmetic<int128_type, logged_adaptor<Backend> > : public is_convertible_arithmetic<int128_type, Backend>
758
+ {};
759
+ template <class Backend>
760
+ struct is_convertible_arithmetic<uint128_type, logged_adaptor<Backend> > : public is_convertible_arithmetic<uint128_type, Backend>
761
+ {};
762
+ #endif
763
+ #ifdef BOOST_HAS_FLOAT128
764
+ template <class Backend>
765
+ struct is_convertible_arithmetic<float128_type, logged_adaptor<Backend> > : public is_convertible_arithmetic<float128_type, Backend>
766
+ {};
767
+ #endif
768
+ } // namespace detail
769
+
770
+ template <class Backend>
771
+ struct number_category<backends::logged_adaptor<Backend> > : public number_category<Backend>
772
+ {};
773
+
774
+ template <class Backend, expression_template_option ExpressionTemplates>
775
+ struct component_type<number<logged_adaptor<Backend>, ExpressionTemplates>>
776
+ {
777
+ //
778
+ // We'll make the component_type also a logged_adaptor:
779
+ //
780
+ using base_component_type = typename component_type<number<Backend, ExpressionTemplates>>::type;
781
+ using base_component_backend = typename base_component_type::backend_type;
782
+ using type = number<logged_adaptor<base_component_backend>, ExpressionTemplates>;
783
+ };
784
+
785
+ template <class Backend>
786
+ struct is_interval_number<backends::logged_adaptor<Backend> > : public is_interval_number<Backend> {};
787
+
788
+ }} // namespace boost::multiprecision
789
+
790
+ namespace std {
791
+
792
+ template <class Backend, boost::multiprecision::expression_template_option ExpressionTemplates>
793
+ class numeric_limits<boost::multiprecision::number<boost::multiprecision::backends::logged_adaptor<Backend>, ExpressionTemplates> >
794
+ : public std::numeric_limits<boost::multiprecision::number<Backend, ExpressionTemplates> >
795
+ {
796
+ using base_type = std::numeric_limits<boost::multiprecision::number<Backend, ExpressionTemplates> > ;
797
+ using number_type = boost::multiprecision::number<boost::multiprecision::backends::logged_adaptor<Backend>, ExpressionTemplates>;
798
+
799
+ public:
800
+ static number_type(min)() noexcept { return (base_type::min)(); }
801
+ static number_type(max)() noexcept { return (base_type::max)(); }
802
+ static number_type lowest() noexcept { return -(max)(); }
803
+ static number_type epsilon() noexcept { return base_type::epsilon(); }
804
+ static number_type round_error() noexcept { return epsilon() / 2; }
805
+ static number_type infinity() noexcept { return base_type::infinity(); }
806
+ static number_type quiet_NaN() noexcept { return base_type::quiet_NaN(); }
807
+ static number_type signaling_NaN() noexcept { return base_type::signaling_NaN(); }
808
+ static number_type denorm_min() noexcept { return base_type::denorm_min(); }
809
+ };
810
+
811
+ } // namespace std
812
+
813
+ #ifdef BOOST_MP_MATH_AVAILABLE
814
+ namespace boost {
815
+ namespace math {
816
+
817
+ namespace policies {
818
+
819
+ template <class Backend, boost::multiprecision::expression_template_option ExpressionTemplates, class Policy>
820
+ struct precision<boost::multiprecision::number<boost::multiprecision::logged_adaptor<Backend>, ExpressionTemplates>, Policy>
821
+ : public precision<boost::multiprecision::number<Backend, ExpressionTemplates>, Policy>
822
+ {};
823
+
824
+ }
825
+
826
+ }} // namespace boost::math::policies
827
+ #endif // BOOST_MP_MATH_AVAILABLE
828
+
829
+ #undef NON_MEMBER_OP1
830
+ #undef NON_MEMBER_OP2
831
+ #undef NON_MEMBER_OP3
832
+ #undef NON_MEMBER_OP4
833
+
834
+ #endif