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,728 @@
1
+ // Formatting library for C++ - formatters for standard library types
2
+ //
3
+ // Copyright (c) 2012 - present, Victor Zverovich
4
+ // All rights reserved.
5
+ //
6
+ // For the license information refer to format.h.
7
+
8
+ #ifndef FMT_STD_H_
9
+ #define FMT_STD_H_
10
+
11
+ #include "format.h"
12
+ #include "ostream.h"
13
+
14
+ #ifndef FMT_MODULE
15
+ # include <atomic>
16
+ # include <bitset>
17
+ # include <complex>
18
+ # include <cstdlib>
19
+ # include <exception>
20
+ # include <functional>
21
+ # include <memory>
22
+ # include <thread>
23
+ # include <type_traits>
24
+ # include <typeinfo>
25
+ # include <utility>
26
+ # include <vector>
27
+
28
+ // Check FMT_CPLUSPLUS to suppress a bogus warning in MSVC.
29
+ # if FMT_CPLUSPLUS >= 201703L
30
+ # if FMT_HAS_INCLUDE(<filesystem>) && \
31
+ (!defined(FMT_CPP_LIB_FILESYSTEM) || FMT_CPP_LIB_FILESYSTEM != 0)
32
+ # include <filesystem>
33
+ # endif
34
+ # if FMT_HAS_INCLUDE(<variant>)
35
+ # include <variant>
36
+ # endif
37
+ # if FMT_HAS_INCLUDE(<optional>)
38
+ # include <optional>
39
+ # endif
40
+ # endif
41
+ // Use > instead of >= in the version check because <source_location> may be
42
+ // available after C++17 but before C++20 is marked as implemented.
43
+ # if FMT_CPLUSPLUS > 201703L && FMT_HAS_INCLUDE(<source_location>)
44
+ # include <source_location>
45
+ # endif
46
+ # if FMT_CPLUSPLUS > 202002L && FMT_HAS_INCLUDE(<expected>)
47
+ # include <expected>
48
+ # endif
49
+ #endif // FMT_MODULE
50
+
51
+ #if FMT_HAS_INCLUDE(<version>)
52
+ # include <version>
53
+ #endif
54
+
55
+ // GCC 4 does not support FMT_HAS_INCLUDE.
56
+ #if FMT_HAS_INCLUDE(<cxxabi.h>) || defined(__GLIBCXX__)
57
+ # include <cxxabi.h>
58
+ // Android NDK with gabi++ library on some architectures does not implement
59
+ // abi::__cxa_demangle().
60
+ # ifndef __GABIXX_CXXABI_H__
61
+ # define FMT_HAS_ABI_CXA_DEMANGLE
62
+ # endif
63
+ #endif
64
+
65
+ // For older Xcode versions, __cpp_lib_xxx flags are inaccurately defined.
66
+ #ifndef FMT_CPP_LIB_FILESYSTEM
67
+ # ifdef __cpp_lib_filesystem
68
+ # define FMT_CPP_LIB_FILESYSTEM __cpp_lib_filesystem
69
+ # else
70
+ # define FMT_CPP_LIB_FILESYSTEM 0
71
+ # endif
72
+ #endif
73
+
74
+ #ifndef FMT_CPP_LIB_VARIANT
75
+ # ifdef __cpp_lib_variant
76
+ # define FMT_CPP_LIB_VARIANT __cpp_lib_variant
77
+ # else
78
+ # define FMT_CPP_LIB_VARIANT 0
79
+ # endif
80
+ #endif
81
+
82
+ #if FMT_CPP_LIB_FILESYSTEM
83
+ FMT_BEGIN_NAMESPACE
84
+
85
+ namespace detail {
86
+
87
+ template <typename Char, typename PathChar>
88
+ auto get_path_string(const std::filesystem::path& p,
89
+ const std::basic_string<PathChar>& native) {
90
+ if constexpr (std::is_same_v<Char, char> && std::is_same_v<PathChar, wchar_t>)
91
+ return to_utf8<wchar_t>(native, to_utf8_error_policy::replace);
92
+ else
93
+ return p.string<Char>();
94
+ }
95
+
96
+ template <typename Char, typename PathChar>
97
+ void write_escaped_path(basic_memory_buffer<Char>& quoted,
98
+ const std::filesystem::path& p,
99
+ const std::basic_string<PathChar>& native) {
100
+ if constexpr (std::is_same_v<Char, char> &&
101
+ std::is_same_v<PathChar, wchar_t>) {
102
+ auto buf = basic_memory_buffer<wchar_t>();
103
+ write_escaped_string<wchar_t>(std::back_inserter(buf), native);
104
+ bool valid = to_utf8<wchar_t>::convert(quoted, {buf.data(), buf.size()});
105
+ FMT_ASSERT(valid, "invalid utf16");
106
+ } else if constexpr (std::is_same_v<Char, PathChar>) {
107
+ write_escaped_string<std::filesystem::path::value_type>(
108
+ std::back_inserter(quoted), native);
109
+ } else {
110
+ write_escaped_string<Char>(std::back_inserter(quoted), p.string<Char>());
111
+ }
112
+ }
113
+
114
+ } // namespace detail
115
+
116
+ template <typename Char> struct formatter<std::filesystem::path, Char> {
117
+ private:
118
+ format_specs specs_;
119
+ detail::arg_ref<Char> width_ref_;
120
+ bool debug_ = false;
121
+ char path_type_ = 0;
122
+
123
+ public:
124
+ FMT_CONSTEXPR void set_debug_format(bool set = true) { debug_ = set; }
125
+
126
+ FMT_CONSTEXPR auto parse(parse_context<Char>& ctx) {
127
+ auto it = ctx.begin(), end = ctx.end();
128
+ if (it == end) return it;
129
+
130
+ it = detail::parse_align(it, end, specs_);
131
+ if (it == end) return it;
132
+
133
+ Char c = *it;
134
+ if ((c >= '0' && c <= '9') || c == '{')
135
+ it = detail::parse_width(it, end, specs_, width_ref_, ctx);
136
+ if (it != end && *it == '?') {
137
+ debug_ = true;
138
+ ++it;
139
+ }
140
+ if (it != end && (*it == 'g')) path_type_ = detail::to_ascii(*it++);
141
+ return it;
142
+ }
143
+
144
+ template <typename FormatContext>
145
+ auto format(const std::filesystem::path& p, FormatContext& ctx) const {
146
+ auto specs = specs_;
147
+ auto path_string =
148
+ !path_type_ ? p.native()
149
+ : p.generic_string<std::filesystem::path::value_type>();
150
+
151
+ detail::handle_dynamic_spec(specs.dynamic_width(), specs.width, width_ref_,
152
+ ctx);
153
+ if (!debug_) {
154
+ auto s = detail::get_path_string<Char>(p, path_string);
155
+ return detail::write(ctx.out(), basic_string_view<Char>(s), specs);
156
+ }
157
+ auto quoted = basic_memory_buffer<Char>();
158
+ detail::write_escaped_path(quoted, p, path_string);
159
+ return detail::write(ctx.out(),
160
+ basic_string_view<Char>(quoted.data(), quoted.size()),
161
+ specs);
162
+ }
163
+ };
164
+
165
+ class path : public std::filesystem::path {
166
+ public:
167
+ auto display_string() const -> std::string {
168
+ const std::filesystem::path& base = *this;
169
+ return fmt::format(FMT_STRING("{}"), base);
170
+ }
171
+ auto system_string() const -> std::string { return string(); }
172
+
173
+ auto generic_display_string() const -> std::string {
174
+ const std::filesystem::path& base = *this;
175
+ return fmt::format(FMT_STRING("{:g}"), base);
176
+ }
177
+ auto generic_system_string() const -> std::string { return generic_string(); }
178
+ };
179
+
180
+ FMT_END_NAMESPACE
181
+ #endif // FMT_CPP_LIB_FILESYSTEM
182
+
183
+ FMT_BEGIN_NAMESPACE
184
+ template <std::size_t N, typename Char>
185
+ struct formatter<std::bitset<N>, Char>
186
+ : nested_formatter<basic_string_view<Char>, Char> {
187
+ private:
188
+ // Functor because C++11 doesn't support generic lambdas.
189
+ struct writer {
190
+ const std::bitset<N>& bs;
191
+
192
+ template <typename OutputIt>
193
+ FMT_CONSTEXPR auto operator()(OutputIt out) -> OutputIt {
194
+ for (auto pos = N; pos > 0; --pos) {
195
+ out = detail::write<Char>(out, bs[pos - 1] ? Char('1') : Char('0'));
196
+ }
197
+
198
+ return out;
199
+ }
200
+ };
201
+
202
+ public:
203
+ template <typename FormatContext>
204
+ auto format(const std::bitset<N>& bs, FormatContext& ctx) const
205
+ -> decltype(ctx.out()) {
206
+ return this->write_padded(ctx, writer{bs});
207
+ }
208
+ };
209
+
210
+ template <typename Char>
211
+ struct formatter<std::thread::id, Char> : basic_ostream_formatter<Char> {};
212
+ FMT_END_NAMESPACE
213
+
214
+ #ifdef __cpp_lib_optional
215
+ FMT_BEGIN_NAMESPACE
216
+ template <typename T, typename Char>
217
+ struct formatter<std::optional<T>, Char,
218
+ std::enable_if_t<is_formattable<T, Char>::value>> {
219
+ private:
220
+ formatter<T, Char> underlying_;
221
+ static constexpr basic_string_view<Char> optional =
222
+ detail::string_literal<Char, 'o', 'p', 't', 'i', 'o', 'n', 'a', 'l',
223
+ '('>{};
224
+ static constexpr basic_string_view<Char> none =
225
+ detail::string_literal<Char, 'n', 'o', 'n', 'e'>{};
226
+
227
+ template <class U>
228
+ FMT_CONSTEXPR static auto maybe_set_debug_format(U& u, bool set)
229
+ -> decltype(u.set_debug_format(set)) {
230
+ u.set_debug_format(set);
231
+ }
232
+
233
+ template <class U>
234
+ FMT_CONSTEXPR static void maybe_set_debug_format(U&, ...) {}
235
+
236
+ public:
237
+ FMT_CONSTEXPR auto parse(parse_context<Char>& ctx) {
238
+ maybe_set_debug_format(underlying_, true);
239
+ return underlying_.parse(ctx);
240
+ }
241
+
242
+ template <typename FormatContext>
243
+ auto format(const std::optional<T>& opt, FormatContext& ctx) const
244
+ -> decltype(ctx.out()) {
245
+ if (!opt) return detail::write<Char>(ctx.out(), none);
246
+
247
+ auto out = ctx.out();
248
+ out = detail::write<Char>(out, optional);
249
+ ctx.advance_to(out);
250
+ out = underlying_.format(*opt, ctx);
251
+ return detail::write(out, ')');
252
+ }
253
+ };
254
+ FMT_END_NAMESPACE
255
+ #endif // __cpp_lib_optional
256
+
257
+ #if defined(__cpp_lib_expected) || FMT_CPP_LIB_VARIANT
258
+
259
+ FMT_BEGIN_NAMESPACE
260
+ namespace detail {
261
+
262
+ template <typename Char, typename OutputIt, typename T>
263
+ auto write_escaped_alternative(OutputIt out, const T& v) -> OutputIt {
264
+ if constexpr (has_to_string_view<T>::value)
265
+ return write_escaped_string<Char>(out, detail::to_string_view(v));
266
+ if constexpr (std::is_same_v<T, Char>) return write_escaped_char(out, v);
267
+ return write<Char>(out, v);
268
+ }
269
+
270
+ } // namespace detail
271
+
272
+ FMT_END_NAMESPACE
273
+ #endif
274
+
275
+ #ifdef __cpp_lib_expected
276
+ FMT_BEGIN_NAMESPACE
277
+
278
+ template <typename T, typename E, typename Char>
279
+ struct formatter<std::expected<T, E>, Char,
280
+ std::enable_if_t<(std::is_void<T>::value ||
281
+ is_formattable<T, Char>::value) &&
282
+ is_formattable<E, Char>::value>> {
283
+ FMT_CONSTEXPR auto parse(parse_context<Char>& ctx) -> const Char* {
284
+ return ctx.begin();
285
+ }
286
+
287
+ template <typename FormatContext>
288
+ auto format(const std::expected<T, E>& value, FormatContext& ctx) const
289
+ -> decltype(ctx.out()) {
290
+ auto out = ctx.out();
291
+
292
+ if (value.has_value()) {
293
+ out = detail::write<Char>(out, "expected(");
294
+ if constexpr (!std::is_void<T>::value)
295
+ out = detail::write_escaped_alternative<Char>(out, *value);
296
+ } else {
297
+ out = detail::write<Char>(out, "unexpected(");
298
+ out = detail::write_escaped_alternative<Char>(out, value.error());
299
+ }
300
+ *out++ = ')';
301
+ return out;
302
+ }
303
+ };
304
+ FMT_END_NAMESPACE
305
+ #endif // __cpp_lib_expected
306
+
307
+ #ifdef __cpp_lib_source_location
308
+ FMT_BEGIN_NAMESPACE
309
+ template <> struct formatter<std::source_location> {
310
+ FMT_CONSTEXPR auto parse(parse_context<>& ctx) { return ctx.begin(); }
311
+
312
+ template <typename FormatContext>
313
+ auto format(const std::source_location& loc, FormatContext& ctx) const
314
+ -> decltype(ctx.out()) {
315
+ auto out = ctx.out();
316
+ out = detail::write(out, loc.file_name());
317
+ out = detail::write(out, ':');
318
+ out = detail::write<char>(out, loc.line());
319
+ out = detail::write(out, ':');
320
+ out = detail::write<char>(out, loc.column());
321
+ out = detail::write(out, ": ");
322
+ out = detail::write(out, loc.function_name());
323
+ return out;
324
+ }
325
+ };
326
+ FMT_END_NAMESPACE
327
+ #endif
328
+
329
+ #if FMT_CPP_LIB_VARIANT
330
+ FMT_BEGIN_NAMESPACE
331
+ namespace detail {
332
+
333
+ template <typename T>
334
+ using variant_index_sequence =
335
+ std::make_index_sequence<std::variant_size<T>::value>;
336
+
337
+ template <typename> struct is_variant_like_ : std::false_type {};
338
+ template <typename... Types>
339
+ struct is_variant_like_<std::variant<Types...>> : std::true_type {};
340
+
341
+ // formattable element check.
342
+ template <typename T, typename C> class is_variant_formattable_ {
343
+ template <std::size_t... Is>
344
+ static std::conjunction<
345
+ is_formattable<std::variant_alternative_t<Is, T>, C>...>
346
+ check(std::index_sequence<Is...>);
347
+
348
+ public:
349
+ static constexpr const bool value =
350
+ decltype(check(variant_index_sequence<T>{}))::value;
351
+ };
352
+
353
+ } // namespace detail
354
+
355
+ template <typename T> struct is_variant_like {
356
+ static constexpr const bool value = detail::is_variant_like_<T>::value;
357
+ };
358
+
359
+ template <typename T, typename C> struct is_variant_formattable {
360
+ static constexpr const bool value =
361
+ detail::is_variant_formattable_<T, C>::value;
362
+ };
363
+
364
+ template <typename Char> struct formatter<std::monostate, Char> {
365
+ FMT_CONSTEXPR auto parse(parse_context<Char>& ctx) -> const Char* {
366
+ return ctx.begin();
367
+ }
368
+
369
+ template <typename FormatContext>
370
+ auto format(const std::monostate&, FormatContext& ctx) const
371
+ -> decltype(ctx.out()) {
372
+ return detail::write<Char>(ctx.out(), "monostate");
373
+ }
374
+ };
375
+
376
+ template <typename Variant, typename Char>
377
+ struct formatter<
378
+ Variant, Char,
379
+ std::enable_if_t<std::conjunction_v<
380
+ is_variant_like<Variant>, is_variant_formattable<Variant, Char>>>> {
381
+ FMT_CONSTEXPR auto parse(parse_context<Char>& ctx) -> const Char* {
382
+ return ctx.begin();
383
+ }
384
+
385
+ template <typename FormatContext>
386
+ auto format(const Variant& value, FormatContext& ctx) const
387
+ -> decltype(ctx.out()) {
388
+ auto out = ctx.out();
389
+
390
+ out = detail::write<Char>(out, "variant(");
391
+ FMT_TRY {
392
+ std::visit(
393
+ [&](const auto& v) {
394
+ out = detail::write_escaped_alternative<Char>(out, v);
395
+ },
396
+ value);
397
+ }
398
+ FMT_CATCH(const std::bad_variant_access&) {
399
+ detail::write<Char>(out, "valueless by exception");
400
+ }
401
+ *out++ = ')';
402
+ return out;
403
+ }
404
+ };
405
+ FMT_END_NAMESPACE
406
+ #endif // FMT_CPP_LIB_VARIANT
407
+
408
+ FMT_BEGIN_NAMESPACE
409
+ template <> struct formatter<std::error_code> {
410
+ private:
411
+ format_specs specs_;
412
+ detail::arg_ref<char> width_ref_;
413
+ bool debug_ = false;
414
+
415
+ public:
416
+ FMT_CONSTEXPR auto parse(parse_context<>& ctx) -> const char* {
417
+ auto it = ctx.begin(), end = ctx.end();
418
+ if (it == end) return it;
419
+
420
+ it = detail::parse_align(it, end, specs_);
421
+
422
+ char c = *it;
423
+ if (it != end && ((c >= '0' && c <= '9') || c == '{'))
424
+ it = detail::parse_width(it, end, specs_, width_ref_, ctx);
425
+
426
+ if (it != end && *it == '?') {
427
+ debug_ = true;
428
+ ++it;
429
+ }
430
+ if (it != end && *it == 's') {
431
+ specs_.set_type(presentation_type::string);
432
+ ++it;
433
+ }
434
+ return it;
435
+ }
436
+
437
+ template <typename FormatContext>
438
+ FMT_CONSTEXPR20 auto format(const std::error_code& ec,
439
+ FormatContext& ctx) const -> decltype(ctx.out()) {
440
+ auto specs = specs_;
441
+ detail::handle_dynamic_spec(specs.dynamic_width(), specs.width, width_ref_,
442
+ ctx);
443
+ auto buf = memory_buffer();
444
+ if (specs_.type() == presentation_type::string) {
445
+ buf.append(ec.message());
446
+ } else {
447
+ buf.append(string_view(ec.category().name()));
448
+ buf.push_back(':');
449
+ detail::write<char>(appender(buf), ec.value());
450
+ }
451
+ auto quoted = memory_buffer();
452
+ auto str = string_view(buf.data(), buf.size());
453
+ if (debug_) {
454
+ detail::write_escaped_string<char>(std::back_inserter(quoted), str);
455
+ str = string_view(quoted.data(), quoted.size());
456
+ }
457
+ return detail::write<char>(ctx.out(), str, specs);
458
+ }
459
+ };
460
+
461
+ #if FMT_USE_RTTI
462
+ namespace detail {
463
+
464
+ template <typename Char, typename OutputIt>
465
+ auto write_demangled_name(OutputIt out, const std::type_info& ti) -> OutputIt {
466
+ # ifdef FMT_HAS_ABI_CXA_DEMANGLE
467
+ int status = 0;
468
+ std::size_t size = 0;
469
+ std::unique_ptr<char, void (*)(void*)> demangled_name_ptr(
470
+ abi::__cxa_demangle(ti.name(), nullptr, &size, &status), &std::free);
471
+
472
+ string_view demangled_name_view;
473
+ if (demangled_name_ptr) {
474
+ demangled_name_view = demangled_name_ptr.get();
475
+
476
+ // Normalization of stdlib inline namespace names.
477
+ // libc++ inline namespaces.
478
+ // std::__1::* -> std::*
479
+ // std::__1::__fs::* -> std::*
480
+ // libstdc++ inline namespaces.
481
+ // std::__cxx11::* -> std::*
482
+ // std::filesystem::__cxx11::* -> std::filesystem::*
483
+ if (demangled_name_view.starts_with("std::")) {
484
+ char* begin = demangled_name_ptr.get();
485
+ char* to = begin + 5; // std::
486
+ for (char *from = to, *end = begin + demangled_name_view.size();
487
+ from < end;) {
488
+ // This is safe, because demangled_name is NUL-terminated.
489
+ if (from[0] == '_' && from[1] == '_') {
490
+ char* next = from + 1;
491
+ while (next < end && *next != ':') next++;
492
+ if (next[0] == ':' && next[1] == ':') {
493
+ from = next + 2;
494
+ continue;
495
+ }
496
+ }
497
+ *to++ = *from++;
498
+ }
499
+ demangled_name_view = {begin, detail::to_unsigned(to - begin)};
500
+ }
501
+ } else {
502
+ demangled_name_view = string_view(ti.name());
503
+ }
504
+ return detail::write_bytes<Char>(out, demangled_name_view);
505
+ # elif FMT_MSC_VERSION
506
+ const string_view demangled_name(ti.name());
507
+ for (std::size_t i = 0; i < demangled_name.size(); ++i) {
508
+ auto sub = demangled_name;
509
+ sub.remove_prefix(i);
510
+ if (sub.starts_with("enum ")) {
511
+ i += 4;
512
+ continue;
513
+ }
514
+ if (sub.starts_with("class ") || sub.starts_with("union ")) {
515
+ i += 5;
516
+ continue;
517
+ }
518
+ if (sub.starts_with("struct ")) {
519
+ i += 6;
520
+ continue;
521
+ }
522
+ if (*sub.begin() != ' ') *out++ = *sub.begin();
523
+ }
524
+ return out;
525
+ # else
526
+ return detail::write_bytes<Char>(out, string_view(ti.name()));
527
+ # endif
528
+ }
529
+
530
+ } // namespace detail
531
+
532
+ template <typename Char>
533
+ struct formatter<std::type_info, Char // DEPRECATED! Mixing code unit types.
534
+ > {
535
+ public:
536
+ FMT_CONSTEXPR auto parse(parse_context<Char>& ctx) -> const Char* {
537
+ return ctx.begin();
538
+ }
539
+
540
+ template <typename Context>
541
+ auto format(const std::type_info& ti, Context& ctx) const
542
+ -> decltype(ctx.out()) {
543
+ return detail::write_demangled_name<Char>(ctx.out(), ti);
544
+ }
545
+ };
546
+ #endif
547
+
548
+ template <typename T, typename Char>
549
+ struct formatter<
550
+ T, Char, // DEPRECATED! Mixing code unit types.
551
+ typename std::enable_if<std::is_base_of<std::exception, T>::value>::type> {
552
+ private:
553
+ bool with_typename_ = false;
554
+
555
+ public:
556
+ FMT_CONSTEXPR auto parse(parse_context<Char>& ctx) -> const Char* {
557
+ auto it = ctx.begin();
558
+ auto end = ctx.end();
559
+ if (it == end || *it == '}') return it;
560
+ if (*it == 't') {
561
+ ++it;
562
+ with_typename_ = FMT_USE_RTTI != 0;
563
+ }
564
+ return it;
565
+ }
566
+
567
+ template <typename Context>
568
+ auto format(const std::exception& ex, Context& ctx) const
569
+ -> decltype(ctx.out()) {
570
+ auto out = ctx.out();
571
+ #if FMT_USE_RTTI
572
+ if (with_typename_) {
573
+ out = detail::write_demangled_name<Char>(out, typeid(ex));
574
+ *out++ = ':';
575
+ *out++ = ' ';
576
+ }
577
+ #endif
578
+ return detail::write_bytes<Char>(out, string_view(ex.what()));
579
+ }
580
+ };
581
+
582
+ namespace detail {
583
+
584
+ template <typename T, typename Enable = void>
585
+ struct has_flip : std::false_type {};
586
+
587
+ template <typename T>
588
+ struct has_flip<T, void_t<decltype(std::declval<T>().flip())>>
589
+ : std::true_type {};
590
+
591
+ template <typename T> struct is_bit_reference_like {
592
+ static constexpr const bool value =
593
+ std::is_convertible<T, bool>::value &&
594
+ std::is_nothrow_assignable<T, bool>::value && has_flip<T>::value;
595
+ };
596
+
597
+ #ifdef _LIBCPP_VERSION
598
+
599
+ // Workaround for libc++ incompatibility with C++ standard.
600
+ // According to the Standard, `bitset::operator[] const` returns bool.
601
+ template <typename C>
602
+ struct is_bit_reference_like<std::__bit_const_reference<C>> {
603
+ static constexpr const bool value = true;
604
+ };
605
+
606
+ #endif
607
+
608
+ } // namespace detail
609
+
610
+ // We can't use std::vector<bool, Allocator>::reference and
611
+ // std::bitset<N>::reference because the compiler can't deduce Allocator and N
612
+ // in partial specialization.
613
+ template <typename BitRef, typename Char>
614
+ struct formatter<BitRef, Char,
615
+ enable_if_t<detail::is_bit_reference_like<BitRef>::value>>
616
+ : formatter<bool, Char> {
617
+ template <typename FormatContext>
618
+ FMT_CONSTEXPR auto format(const BitRef& v, FormatContext& ctx) const
619
+ -> decltype(ctx.out()) {
620
+ return formatter<bool, Char>::format(v, ctx);
621
+ }
622
+ };
623
+
624
+ template <typename T, typename Deleter>
625
+ auto ptr(const std::unique_ptr<T, Deleter>& p) -> const void* {
626
+ return p.get();
627
+ }
628
+ template <typename T> auto ptr(const std::shared_ptr<T>& p) -> const void* {
629
+ return p.get();
630
+ }
631
+
632
+ template <typename T, typename Char>
633
+ struct formatter<std::atomic<T>, Char,
634
+ enable_if_t<is_formattable<T, Char>::value>>
635
+ : formatter<T, Char> {
636
+ template <typename FormatContext>
637
+ auto format(const std::atomic<T>& v, FormatContext& ctx) const
638
+ -> decltype(ctx.out()) {
639
+ return formatter<T, Char>::format(v.load(), ctx);
640
+ }
641
+ };
642
+
643
+ #ifdef __cpp_lib_atomic_flag_test
644
+ template <typename Char>
645
+ struct formatter<std::atomic_flag, Char> : formatter<bool, Char> {
646
+ template <typename FormatContext>
647
+ auto format(const std::atomic_flag& v, FormatContext& ctx) const
648
+ -> decltype(ctx.out()) {
649
+ return formatter<bool, Char>::format(v.test(), ctx);
650
+ }
651
+ };
652
+ #endif // __cpp_lib_atomic_flag_test
653
+
654
+ template <typename T, typename Char> struct formatter<std::complex<T>, Char> {
655
+ private:
656
+ detail::dynamic_format_specs<Char> specs_;
657
+
658
+ template <typename FormatContext, typename OutputIt>
659
+ FMT_CONSTEXPR auto do_format(const std::complex<T>& c,
660
+ detail::dynamic_format_specs<Char>& specs,
661
+ FormatContext& ctx, OutputIt out) const
662
+ -> OutputIt {
663
+ if (c.real() != 0) {
664
+ *out++ = Char('(');
665
+ out = detail::write<Char>(out, c.real(), specs, ctx.locale());
666
+ specs.set_sign(sign::plus);
667
+ out = detail::write<Char>(out, c.imag(), specs, ctx.locale());
668
+ if (!detail::isfinite(c.imag())) *out++ = Char(' ');
669
+ *out++ = Char('i');
670
+ *out++ = Char(')');
671
+ return out;
672
+ }
673
+ out = detail::write<Char>(out, c.imag(), specs, ctx.locale());
674
+ if (!detail::isfinite(c.imag())) *out++ = Char(' ');
675
+ *out++ = Char('i');
676
+ return out;
677
+ }
678
+
679
+ public:
680
+ FMT_CONSTEXPR auto parse(parse_context<Char>& ctx) -> const Char* {
681
+ if (ctx.begin() == ctx.end() || *ctx.begin() == '}') return ctx.begin();
682
+ return parse_format_specs(ctx.begin(), ctx.end(), specs_, ctx,
683
+ detail::type_constant<T, Char>::value);
684
+ }
685
+
686
+ template <typename FormatContext>
687
+ auto format(const std::complex<T>& c, FormatContext& ctx) const
688
+ -> decltype(ctx.out()) {
689
+ auto specs = specs_;
690
+ if (specs.dynamic()) {
691
+ detail::handle_dynamic_spec(specs.dynamic_width(), specs.width,
692
+ specs.width_ref, ctx);
693
+ detail::handle_dynamic_spec(specs.dynamic_precision(), specs.precision,
694
+ specs.precision_ref, ctx);
695
+ }
696
+
697
+ if (specs.width == 0) return do_format(c, specs, ctx, ctx.out());
698
+ auto buf = basic_memory_buffer<Char>();
699
+
700
+ auto outer_specs = format_specs();
701
+ outer_specs.width = specs.width;
702
+ outer_specs.copy_fill_from(specs);
703
+ outer_specs.set_align(specs.align());
704
+
705
+ specs.width = 0;
706
+ specs.set_fill({});
707
+ specs.set_align(align::none);
708
+
709
+ do_format(c, specs, ctx, basic_appender<Char>(buf));
710
+ return detail::write<Char>(ctx.out(),
711
+ basic_string_view<Char>(buf.data(), buf.size()),
712
+ outer_specs);
713
+ }
714
+ };
715
+
716
+ template <typename T, typename Char>
717
+ struct formatter<std::reference_wrapper<T>, Char,
718
+ enable_if_t<is_formattable<remove_cvref_t<T>, Char>::value>>
719
+ : formatter<remove_cvref_t<T>, Char> {
720
+ template <typename FormatContext>
721
+ auto format(std::reference_wrapper<T> ref, FormatContext& ctx) const
722
+ -> decltype(ctx.out()) {
723
+ return formatter<remove_cvref_t<T>, Char>::format(ref.get(), ctx);
724
+ }
725
+ };
726
+
727
+ FMT_END_NAMESPACE
728
+ #endif // FMT_STD_H_