mqt-core 3.3.2__cp314-cp314t-macosx_11_0_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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,637 @@
1
+ // Formatting library for C++ - color support
2
+ //
3
+ // Copyright (c) 2018 - present, Victor Zverovich and fmt contributors
4
+ // All rights reserved.
5
+ //
6
+ // For the license information refer to format.h.
7
+
8
+ #ifndef FMT_COLOR_H_
9
+ #define FMT_COLOR_H_
10
+
11
+ #include "format.h"
12
+
13
+ FMT_BEGIN_NAMESPACE
14
+ FMT_BEGIN_EXPORT
15
+
16
+ enum class color : uint32_t {
17
+ alice_blue = 0xF0F8FF, // rgb(240,248,255)
18
+ antique_white = 0xFAEBD7, // rgb(250,235,215)
19
+ aqua = 0x00FFFF, // rgb(0,255,255)
20
+ aquamarine = 0x7FFFD4, // rgb(127,255,212)
21
+ azure = 0xF0FFFF, // rgb(240,255,255)
22
+ beige = 0xF5F5DC, // rgb(245,245,220)
23
+ bisque = 0xFFE4C4, // rgb(255,228,196)
24
+ black = 0x000000, // rgb(0,0,0)
25
+ blanched_almond = 0xFFEBCD, // rgb(255,235,205)
26
+ blue = 0x0000FF, // rgb(0,0,255)
27
+ blue_violet = 0x8A2BE2, // rgb(138,43,226)
28
+ brown = 0xA52A2A, // rgb(165,42,42)
29
+ burly_wood = 0xDEB887, // rgb(222,184,135)
30
+ cadet_blue = 0x5F9EA0, // rgb(95,158,160)
31
+ chartreuse = 0x7FFF00, // rgb(127,255,0)
32
+ chocolate = 0xD2691E, // rgb(210,105,30)
33
+ coral = 0xFF7F50, // rgb(255,127,80)
34
+ cornflower_blue = 0x6495ED, // rgb(100,149,237)
35
+ cornsilk = 0xFFF8DC, // rgb(255,248,220)
36
+ crimson = 0xDC143C, // rgb(220,20,60)
37
+ cyan = 0x00FFFF, // rgb(0,255,255)
38
+ dark_blue = 0x00008B, // rgb(0,0,139)
39
+ dark_cyan = 0x008B8B, // rgb(0,139,139)
40
+ dark_golden_rod = 0xB8860B, // rgb(184,134,11)
41
+ dark_gray = 0xA9A9A9, // rgb(169,169,169)
42
+ dark_green = 0x006400, // rgb(0,100,0)
43
+ dark_khaki = 0xBDB76B, // rgb(189,183,107)
44
+ dark_magenta = 0x8B008B, // rgb(139,0,139)
45
+ dark_olive_green = 0x556B2F, // rgb(85,107,47)
46
+ dark_orange = 0xFF8C00, // rgb(255,140,0)
47
+ dark_orchid = 0x9932CC, // rgb(153,50,204)
48
+ dark_red = 0x8B0000, // rgb(139,0,0)
49
+ dark_salmon = 0xE9967A, // rgb(233,150,122)
50
+ dark_sea_green = 0x8FBC8F, // rgb(143,188,143)
51
+ dark_slate_blue = 0x483D8B, // rgb(72,61,139)
52
+ dark_slate_gray = 0x2F4F4F, // rgb(47,79,79)
53
+ dark_turquoise = 0x00CED1, // rgb(0,206,209)
54
+ dark_violet = 0x9400D3, // rgb(148,0,211)
55
+ deep_pink = 0xFF1493, // rgb(255,20,147)
56
+ deep_sky_blue = 0x00BFFF, // rgb(0,191,255)
57
+ dim_gray = 0x696969, // rgb(105,105,105)
58
+ dodger_blue = 0x1E90FF, // rgb(30,144,255)
59
+ fire_brick = 0xB22222, // rgb(178,34,34)
60
+ floral_white = 0xFFFAF0, // rgb(255,250,240)
61
+ forest_green = 0x228B22, // rgb(34,139,34)
62
+ fuchsia = 0xFF00FF, // rgb(255,0,255)
63
+ gainsboro = 0xDCDCDC, // rgb(220,220,220)
64
+ ghost_white = 0xF8F8FF, // rgb(248,248,255)
65
+ gold = 0xFFD700, // rgb(255,215,0)
66
+ golden_rod = 0xDAA520, // rgb(218,165,32)
67
+ gray = 0x808080, // rgb(128,128,128)
68
+ green = 0x008000, // rgb(0,128,0)
69
+ green_yellow = 0xADFF2F, // rgb(173,255,47)
70
+ honey_dew = 0xF0FFF0, // rgb(240,255,240)
71
+ hot_pink = 0xFF69B4, // rgb(255,105,180)
72
+ indian_red = 0xCD5C5C, // rgb(205,92,92)
73
+ indigo = 0x4B0082, // rgb(75,0,130)
74
+ ivory = 0xFFFFF0, // rgb(255,255,240)
75
+ khaki = 0xF0E68C, // rgb(240,230,140)
76
+ lavender = 0xE6E6FA, // rgb(230,230,250)
77
+ lavender_blush = 0xFFF0F5, // rgb(255,240,245)
78
+ lawn_green = 0x7CFC00, // rgb(124,252,0)
79
+ lemon_chiffon = 0xFFFACD, // rgb(255,250,205)
80
+ light_blue = 0xADD8E6, // rgb(173,216,230)
81
+ light_coral = 0xF08080, // rgb(240,128,128)
82
+ light_cyan = 0xE0FFFF, // rgb(224,255,255)
83
+ light_golden_rod_yellow = 0xFAFAD2, // rgb(250,250,210)
84
+ light_gray = 0xD3D3D3, // rgb(211,211,211)
85
+ light_green = 0x90EE90, // rgb(144,238,144)
86
+ light_pink = 0xFFB6C1, // rgb(255,182,193)
87
+ light_salmon = 0xFFA07A, // rgb(255,160,122)
88
+ light_sea_green = 0x20B2AA, // rgb(32,178,170)
89
+ light_sky_blue = 0x87CEFA, // rgb(135,206,250)
90
+ light_slate_gray = 0x778899, // rgb(119,136,153)
91
+ light_steel_blue = 0xB0C4DE, // rgb(176,196,222)
92
+ light_yellow = 0xFFFFE0, // rgb(255,255,224)
93
+ lime = 0x00FF00, // rgb(0,255,0)
94
+ lime_green = 0x32CD32, // rgb(50,205,50)
95
+ linen = 0xFAF0E6, // rgb(250,240,230)
96
+ magenta = 0xFF00FF, // rgb(255,0,255)
97
+ maroon = 0x800000, // rgb(128,0,0)
98
+ medium_aquamarine = 0x66CDAA, // rgb(102,205,170)
99
+ medium_blue = 0x0000CD, // rgb(0,0,205)
100
+ medium_orchid = 0xBA55D3, // rgb(186,85,211)
101
+ medium_purple = 0x9370DB, // rgb(147,112,219)
102
+ medium_sea_green = 0x3CB371, // rgb(60,179,113)
103
+ medium_slate_blue = 0x7B68EE, // rgb(123,104,238)
104
+ medium_spring_green = 0x00FA9A, // rgb(0,250,154)
105
+ medium_turquoise = 0x48D1CC, // rgb(72,209,204)
106
+ medium_violet_red = 0xC71585, // rgb(199,21,133)
107
+ midnight_blue = 0x191970, // rgb(25,25,112)
108
+ mint_cream = 0xF5FFFA, // rgb(245,255,250)
109
+ misty_rose = 0xFFE4E1, // rgb(255,228,225)
110
+ moccasin = 0xFFE4B5, // rgb(255,228,181)
111
+ navajo_white = 0xFFDEAD, // rgb(255,222,173)
112
+ navy = 0x000080, // rgb(0,0,128)
113
+ old_lace = 0xFDF5E6, // rgb(253,245,230)
114
+ olive = 0x808000, // rgb(128,128,0)
115
+ olive_drab = 0x6B8E23, // rgb(107,142,35)
116
+ orange = 0xFFA500, // rgb(255,165,0)
117
+ orange_red = 0xFF4500, // rgb(255,69,0)
118
+ orchid = 0xDA70D6, // rgb(218,112,214)
119
+ pale_golden_rod = 0xEEE8AA, // rgb(238,232,170)
120
+ pale_green = 0x98FB98, // rgb(152,251,152)
121
+ pale_turquoise = 0xAFEEEE, // rgb(175,238,238)
122
+ pale_violet_red = 0xDB7093, // rgb(219,112,147)
123
+ papaya_whip = 0xFFEFD5, // rgb(255,239,213)
124
+ peach_puff = 0xFFDAB9, // rgb(255,218,185)
125
+ peru = 0xCD853F, // rgb(205,133,63)
126
+ pink = 0xFFC0CB, // rgb(255,192,203)
127
+ plum = 0xDDA0DD, // rgb(221,160,221)
128
+ powder_blue = 0xB0E0E6, // rgb(176,224,230)
129
+ purple = 0x800080, // rgb(128,0,128)
130
+ rebecca_purple = 0x663399, // rgb(102,51,153)
131
+ red = 0xFF0000, // rgb(255,0,0)
132
+ rosy_brown = 0xBC8F8F, // rgb(188,143,143)
133
+ royal_blue = 0x4169E1, // rgb(65,105,225)
134
+ saddle_brown = 0x8B4513, // rgb(139,69,19)
135
+ salmon = 0xFA8072, // rgb(250,128,114)
136
+ sandy_brown = 0xF4A460, // rgb(244,164,96)
137
+ sea_green = 0x2E8B57, // rgb(46,139,87)
138
+ sea_shell = 0xFFF5EE, // rgb(255,245,238)
139
+ sienna = 0xA0522D, // rgb(160,82,45)
140
+ silver = 0xC0C0C0, // rgb(192,192,192)
141
+ sky_blue = 0x87CEEB, // rgb(135,206,235)
142
+ slate_blue = 0x6A5ACD, // rgb(106,90,205)
143
+ slate_gray = 0x708090, // rgb(112,128,144)
144
+ snow = 0xFFFAFA, // rgb(255,250,250)
145
+ spring_green = 0x00FF7F, // rgb(0,255,127)
146
+ steel_blue = 0x4682B4, // rgb(70,130,180)
147
+ tan = 0xD2B48C, // rgb(210,180,140)
148
+ teal = 0x008080, // rgb(0,128,128)
149
+ thistle = 0xD8BFD8, // rgb(216,191,216)
150
+ tomato = 0xFF6347, // rgb(255,99,71)
151
+ turquoise = 0x40E0D0, // rgb(64,224,208)
152
+ violet = 0xEE82EE, // rgb(238,130,238)
153
+ wheat = 0xF5DEB3, // rgb(245,222,179)
154
+ white = 0xFFFFFF, // rgb(255,255,255)
155
+ white_smoke = 0xF5F5F5, // rgb(245,245,245)
156
+ yellow = 0xFFFF00, // rgb(255,255,0)
157
+ yellow_green = 0x9ACD32 // rgb(154,205,50)
158
+ }; // enum class color
159
+
160
+ enum class terminal_color : uint8_t {
161
+ black = 30,
162
+ red,
163
+ green,
164
+ yellow,
165
+ blue,
166
+ magenta,
167
+ cyan,
168
+ white,
169
+ bright_black = 90,
170
+ bright_red,
171
+ bright_green,
172
+ bright_yellow,
173
+ bright_blue,
174
+ bright_magenta,
175
+ bright_cyan,
176
+ bright_white
177
+ };
178
+
179
+ enum class emphasis : uint8_t {
180
+ bold = 1,
181
+ faint = 1 << 1,
182
+ italic = 1 << 2,
183
+ underline = 1 << 3,
184
+ blink = 1 << 4,
185
+ reverse = 1 << 5,
186
+ conceal = 1 << 6,
187
+ strikethrough = 1 << 7,
188
+ };
189
+
190
+ // rgb is a struct for red, green and blue colors.
191
+ // Using the name "rgb" makes some editors show the color in a tooltip.
192
+ struct rgb {
193
+ constexpr rgb() : r(0), g(0), b(0) {}
194
+ constexpr rgb(uint8_t r_, uint8_t g_, uint8_t b_) : r(r_), g(g_), b(b_) {}
195
+ constexpr rgb(uint32_t hex)
196
+ : r((hex >> 16) & 0xFF), g((hex >> 8) & 0xFF), b(hex & 0xFF) {}
197
+ constexpr rgb(color hex)
198
+ : r((uint32_t(hex) >> 16) & 0xFF),
199
+ g((uint32_t(hex) >> 8) & 0xFF),
200
+ b(uint32_t(hex) & 0xFF) {}
201
+ uint8_t r;
202
+ uint8_t g;
203
+ uint8_t b;
204
+ };
205
+
206
+ namespace detail {
207
+
208
+ // A bit-packed variant of an RGB color, a terminal color, or unset color.
209
+ // see text_style for the bit-packing scheme.
210
+ struct color_type {
211
+ constexpr color_type() noexcept = default;
212
+ constexpr color_type(color rgb_color) noexcept
213
+ : value_(static_cast<uint32_t>(rgb_color) | (1 << 24)) {}
214
+ constexpr color_type(rgb rgb_color) noexcept
215
+ : color_type(static_cast<color>(
216
+ (static_cast<uint32_t>(rgb_color.r) << 16) |
217
+ (static_cast<uint32_t>(rgb_color.g) << 8) | rgb_color.b)) {}
218
+ constexpr color_type(terminal_color term_color) noexcept
219
+ : value_(static_cast<uint32_t>(term_color) | (3 << 24)) {}
220
+
221
+ constexpr auto is_terminal_color() const noexcept -> bool {
222
+ return (value_ & (1 << 25)) != 0;
223
+ }
224
+
225
+ constexpr auto value() const noexcept -> uint32_t {
226
+ return value_ & 0xFFFFFF;
227
+ }
228
+
229
+ constexpr color_type(uint32_t value) noexcept : value_(value) {}
230
+
231
+ uint32_t value_ = 0;
232
+ };
233
+ } // namespace detail
234
+
235
+ /// A text style consisting of foreground and background colors and emphasis.
236
+ class text_style {
237
+ // The information is packed as follows:
238
+ // ┌──┐
239
+ // │ 0│─┐
240
+ // │..│ ├── foreground color value
241
+ // │23│─┘
242
+ // ├──┤
243
+ // │24│─┬── discriminator for the above value. 00 if unset, 01 if it's
244
+ // │25│─┘ an RGB color, or 11 if it's a terminal color (10 is unused)
245
+ // ├──┤
246
+ // │26│──── overflow bit, always zero (see below)
247
+ // ├──┤
248
+ // │27│─┐
249
+ // │..│ │
250
+ // │50│ │
251
+ // ├──┤ │
252
+ // │51│ ├── background color (same format as the foreground color)
253
+ // │52│ │
254
+ // ├──┤ │
255
+ // │53│─┘
256
+ // ├──┤
257
+ // │54│─┐
258
+ // │..│ ├── emphases
259
+ // │61│─┘
260
+ // ├──┤
261
+ // │62│─┬── unused
262
+ // │63│─┘
263
+ // └──┘
264
+ // The overflow bits are there to make operator|= efficient.
265
+ // When ORing, we must throw if, for either the foreground or background,
266
+ // one style specifies a terminal color and the other specifies any color
267
+ // (terminal or RGB); in other words, if one discriminator is 11 and the
268
+ // other is 11 or 01.
269
+ //
270
+ // We do that check by adding the styles. Consider what adding does to each
271
+ // possible pair of discriminators:
272
+ // 00 + 00 = 000
273
+ // 01 + 00 = 001
274
+ // 11 + 00 = 011
275
+ // 01 + 01 = 010
276
+ // 11 + 01 = 100 (!!)
277
+ // 11 + 11 = 110 (!!)
278
+ // In the last two cases, the ones we want to catch, the third bit——the
279
+ // overflow bit——is set. Bingo.
280
+ //
281
+ // We must take into account the possible carry bit from the bits
282
+ // before the discriminator. The only potentially problematic case is
283
+ // 11 + 00 = 011 (a carry bit would make it 100, not good!), but a carry
284
+ // bit is impossible in that case, because 00 (unset color) means the
285
+ // 24 bits that precede the discriminator are all zero.
286
+ //
287
+ // This test can be applied to both colors simultaneously.
288
+
289
+ public:
290
+ FMT_CONSTEXPR text_style(emphasis em = emphasis()) noexcept
291
+ : style_(static_cast<uint64_t>(em) << 54) {}
292
+
293
+ FMT_CONSTEXPR auto operator|=(text_style rhs) -> text_style& {
294
+ if (((style_ + rhs.style_) & ((1ULL << 26) | (1ULL << 53))) != 0)
295
+ report_error("can't OR a terminal color");
296
+ style_ |= rhs.style_;
297
+ return *this;
298
+ }
299
+
300
+ friend FMT_CONSTEXPR auto operator|(text_style lhs, text_style rhs)
301
+ -> text_style {
302
+ return lhs |= rhs;
303
+ }
304
+
305
+ FMT_CONSTEXPR auto operator==(text_style rhs) const noexcept -> bool {
306
+ return style_ == rhs.style_;
307
+ }
308
+
309
+ FMT_CONSTEXPR auto operator!=(text_style rhs) const noexcept -> bool {
310
+ return !(*this == rhs);
311
+ }
312
+
313
+ FMT_CONSTEXPR auto has_foreground() const noexcept -> bool {
314
+ return (style_ & (1 << 24)) != 0;
315
+ }
316
+ FMT_CONSTEXPR auto has_background() const noexcept -> bool {
317
+ return (style_ & (1ULL << 51)) != 0;
318
+ }
319
+ FMT_CONSTEXPR auto has_emphasis() const noexcept -> bool {
320
+ return (style_ >> 54) != 0;
321
+ }
322
+ FMT_CONSTEXPR auto get_foreground() const noexcept -> detail::color_type {
323
+ FMT_ASSERT(has_foreground(), "no foreground specified for this style");
324
+ return style_ & 0x3FFFFFF;
325
+ }
326
+ FMT_CONSTEXPR auto get_background() const noexcept -> detail::color_type {
327
+ FMT_ASSERT(has_background(), "no background specified for this style");
328
+ return (style_ >> 27) & 0x3FFFFFF;
329
+ }
330
+ FMT_CONSTEXPR auto get_emphasis() const noexcept -> emphasis {
331
+ FMT_ASSERT(has_emphasis(), "no emphasis specified for this style");
332
+ return static_cast<emphasis>(style_ >> 54);
333
+ }
334
+
335
+ private:
336
+ FMT_CONSTEXPR text_style(uint64_t style) noexcept : style_(style) {}
337
+
338
+ friend FMT_CONSTEXPR auto fg(detail::color_type foreground) noexcept
339
+ -> text_style;
340
+
341
+ friend FMT_CONSTEXPR auto bg(detail::color_type background) noexcept
342
+ -> text_style;
343
+
344
+ uint64_t style_ = 0;
345
+ };
346
+
347
+ /// Creates a text style from the foreground (text) color.
348
+ FMT_CONSTEXPR inline auto fg(detail::color_type foreground) noexcept
349
+ -> text_style {
350
+ return foreground.value_;
351
+ }
352
+
353
+ /// Creates a text style from the background color.
354
+ FMT_CONSTEXPR inline auto bg(detail::color_type background) noexcept
355
+ -> text_style {
356
+ return static_cast<uint64_t>(background.value_) << 27;
357
+ }
358
+
359
+ FMT_CONSTEXPR inline auto operator|(emphasis lhs, emphasis rhs) noexcept
360
+ -> text_style {
361
+ return text_style(lhs) | rhs;
362
+ }
363
+
364
+ namespace detail {
365
+
366
+ template <typename Char> struct ansi_color_escape {
367
+ FMT_CONSTEXPR ansi_color_escape(color_type text_color,
368
+ const char* esc) noexcept {
369
+ // If we have a terminal color, we need to output another escape code
370
+ // sequence.
371
+ if (text_color.is_terminal_color()) {
372
+ bool is_background = esc == string_view("\x1b[48;2;");
373
+ uint32_t value = text_color.value();
374
+ // Background ASCII codes are the same as the foreground ones but with
375
+ // 10 more.
376
+ if (is_background) value += 10u;
377
+
378
+ size_t index = 0;
379
+ buffer[index++] = static_cast<Char>('\x1b');
380
+ buffer[index++] = static_cast<Char>('[');
381
+
382
+ if (value >= 100u) {
383
+ buffer[index++] = static_cast<Char>('1');
384
+ value %= 100u;
385
+ }
386
+ buffer[index++] = static_cast<Char>('0' + value / 10u);
387
+ buffer[index++] = static_cast<Char>('0' + value % 10u);
388
+
389
+ buffer[index++] = static_cast<Char>('m');
390
+ buffer[index++] = static_cast<Char>('\0');
391
+ return;
392
+ }
393
+
394
+ for (int i = 0; i < 7; i++) {
395
+ buffer[i] = static_cast<Char>(esc[i]);
396
+ }
397
+ rgb color(text_color.value());
398
+ to_esc(color.r, buffer + 7, ';');
399
+ to_esc(color.g, buffer + 11, ';');
400
+ to_esc(color.b, buffer + 15, 'm');
401
+ buffer[19] = static_cast<Char>(0);
402
+ }
403
+ FMT_CONSTEXPR ansi_color_escape(emphasis em) noexcept {
404
+ uint8_t em_codes[num_emphases] = {};
405
+ if (has_emphasis(em, emphasis::bold)) em_codes[0] = 1;
406
+ if (has_emphasis(em, emphasis::faint)) em_codes[1] = 2;
407
+ if (has_emphasis(em, emphasis::italic)) em_codes[2] = 3;
408
+ if (has_emphasis(em, emphasis::underline)) em_codes[3] = 4;
409
+ if (has_emphasis(em, emphasis::blink)) em_codes[4] = 5;
410
+ if (has_emphasis(em, emphasis::reverse)) em_codes[5] = 7;
411
+ if (has_emphasis(em, emphasis::conceal)) em_codes[6] = 8;
412
+ if (has_emphasis(em, emphasis::strikethrough)) em_codes[7] = 9;
413
+
414
+ size_t index = 0;
415
+ for (size_t i = 0; i < num_emphases; ++i) {
416
+ if (!em_codes[i]) continue;
417
+ buffer[index++] = static_cast<Char>('\x1b');
418
+ buffer[index++] = static_cast<Char>('[');
419
+ buffer[index++] = static_cast<Char>('0' + em_codes[i]);
420
+ buffer[index++] = static_cast<Char>('m');
421
+ }
422
+ buffer[index++] = static_cast<Char>(0);
423
+ }
424
+ FMT_CONSTEXPR operator const Char*() const noexcept { return buffer; }
425
+
426
+ FMT_CONSTEXPR auto begin() const noexcept -> const Char* { return buffer; }
427
+ FMT_CONSTEXPR20 auto end() const noexcept -> const Char* {
428
+ return buffer + basic_string_view<Char>(buffer).size();
429
+ }
430
+
431
+ private:
432
+ static constexpr size_t num_emphases = 8;
433
+ Char buffer[7u + 3u * num_emphases + 1u];
434
+
435
+ static FMT_CONSTEXPR void to_esc(uint8_t c, Char* out,
436
+ char delimiter) noexcept {
437
+ out[0] = static_cast<Char>('0' + c / 100);
438
+ out[1] = static_cast<Char>('0' + c / 10 % 10);
439
+ out[2] = static_cast<Char>('0' + c % 10);
440
+ out[3] = static_cast<Char>(delimiter);
441
+ }
442
+ static FMT_CONSTEXPR auto has_emphasis(emphasis em, emphasis mask) noexcept
443
+ -> bool {
444
+ return static_cast<uint8_t>(em) & static_cast<uint8_t>(mask);
445
+ }
446
+ };
447
+
448
+ template <typename Char>
449
+ FMT_CONSTEXPR auto make_foreground_color(color_type foreground) noexcept
450
+ -> ansi_color_escape<Char> {
451
+ return ansi_color_escape<Char>(foreground, "\x1b[38;2;");
452
+ }
453
+
454
+ template <typename Char>
455
+ FMT_CONSTEXPR auto make_background_color(color_type background) noexcept
456
+ -> ansi_color_escape<Char> {
457
+ return ansi_color_escape<Char>(background, "\x1b[48;2;");
458
+ }
459
+
460
+ template <typename Char>
461
+ FMT_CONSTEXPR auto make_emphasis(emphasis em) noexcept
462
+ -> ansi_color_escape<Char> {
463
+ return ansi_color_escape<Char>(em);
464
+ }
465
+
466
+ template <typename Char> inline void reset_color(buffer<Char>& buffer) {
467
+ auto reset_color = string_view("\x1b[0m");
468
+ buffer.append(reset_color.begin(), reset_color.end());
469
+ }
470
+
471
+ template <typename T> struct styled_arg : view {
472
+ const T& value;
473
+ text_style style;
474
+ styled_arg(const T& v, text_style s) : value(v), style(s) {}
475
+ };
476
+
477
+ template <typename Char>
478
+ void vformat_to(buffer<Char>& buf, text_style ts, basic_string_view<Char> fmt,
479
+ basic_format_args<buffered_context<Char>> args) {
480
+ if (ts.has_emphasis()) {
481
+ auto emphasis = make_emphasis<Char>(ts.get_emphasis());
482
+ buf.append(emphasis.begin(), emphasis.end());
483
+ }
484
+ if (ts.has_foreground()) {
485
+ auto foreground = make_foreground_color<Char>(ts.get_foreground());
486
+ buf.append(foreground.begin(), foreground.end());
487
+ }
488
+ if (ts.has_background()) {
489
+ auto background = make_background_color<Char>(ts.get_background());
490
+ buf.append(background.begin(), background.end());
491
+ }
492
+ vformat_to(buf, fmt, args);
493
+ if (ts != text_style()) reset_color<Char>(buf);
494
+ }
495
+ } // namespace detail
496
+
497
+ inline void vprint(FILE* f, text_style ts, string_view fmt, format_args args) {
498
+ auto buf = memory_buffer();
499
+ detail::vformat_to(buf, ts, fmt, args);
500
+ print(f, FMT_STRING("{}"), string_view(buf.begin(), buf.size()));
501
+ }
502
+
503
+ /**
504
+ * Formats a string and prints it to the specified file stream using ANSI
505
+ * escape sequences to specify text formatting.
506
+ *
507
+ * **Example**:
508
+ *
509
+ * fmt::print(fmt::emphasis::bold | fg(fmt::color::red),
510
+ * "Elapsed time: {0:.2f} seconds", 1.23);
511
+ */
512
+ template <typename... T>
513
+ void print(FILE* f, text_style ts, format_string<T...> fmt, T&&... args) {
514
+ vprint(f, ts, fmt.str, vargs<T...>{{args...}});
515
+ }
516
+
517
+ /**
518
+ * Formats a string and prints it to stdout using ANSI escape sequences to
519
+ * specify text formatting.
520
+ *
521
+ * **Example**:
522
+ *
523
+ * fmt::print(fmt::emphasis::bold | fg(fmt::color::red),
524
+ * "Elapsed time: {0:.2f} seconds", 1.23);
525
+ */
526
+ template <typename... T>
527
+ void print(text_style ts, format_string<T...> fmt, T&&... args) {
528
+ return print(stdout, ts, fmt, std::forward<T>(args)...);
529
+ }
530
+
531
+ inline auto vformat(text_style ts, string_view fmt, format_args args)
532
+ -> std::string {
533
+ auto buf = memory_buffer();
534
+ detail::vformat_to(buf, ts, fmt, args);
535
+ return fmt::to_string(buf);
536
+ }
537
+
538
+ /**
539
+ * Formats arguments and returns the result as a string using ANSI escape
540
+ * sequences to specify text formatting.
541
+ *
542
+ * **Example**:
543
+ *
544
+ * ```
545
+ * #include <fmt/color.h>
546
+ * std::string message = fmt::format(fmt::emphasis::bold | fg(fmt::color::red),
547
+ * "The answer is {}", 42);
548
+ * ```
549
+ */
550
+ template <typename... T>
551
+ inline auto format(text_style ts, format_string<T...> fmt, T&&... args)
552
+ -> std::string {
553
+ return fmt::vformat(ts, fmt.str, vargs<T...>{{args...}});
554
+ }
555
+
556
+ /// Formats a string with the given text_style and writes the output to `out`.
557
+ template <typename OutputIt,
558
+ FMT_ENABLE_IF(detail::is_output_iterator<OutputIt, char>::value)>
559
+ auto vformat_to(OutputIt out, text_style ts, string_view fmt, format_args args)
560
+ -> OutputIt {
561
+ auto&& buf = detail::get_buffer<char>(out);
562
+ detail::vformat_to(buf, ts, fmt, args);
563
+ return detail::get_iterator(buf, out);
564
+ }
565
+
566
+ /**
567
+ * Formats arguments with the given text style, writes the result to the output
568
+ * iterator `out` and returns the iterator past the end of the output range.
569
+ *
570
+ * **Example**:
571
+ *
572
+ * std::vector<char> out;
573
+ * fmt::format_to(std::back_inserter(out),
574
+ * fmt::emphasis::bold | fg(fmt::color::red), "{}", 42);
575
+ */
576
+ template <typename OutputIt, typename... T,
577
+ FMT_ENABLE_IF(detail::is_output_iterator<OutputIt, char>::value)>
578
+ inline auto format_to(OutputIt out, text_style ts, format_string<T...> fmt,
579
+ T&&... args) -> OutputIt {
580
+ return vformat_to(out, ts, fmt.str, vargs<T...>{{args...}});
581
+ }
582
+
583
+ template <typename T, typename Char>
584
+ struct formatter<detail::styled_arg<T>, Char> : formatter<T, Char> {
585
+ template <typename FormatContext>
586
+ auto format(const detail::styled_arg<T>& arg, FormatContext& ctx) const
587
+ -> decltype(ctx.out()) {
588
+ const auto& ts = arg.style;
589
+ auto out = ctx.out();
590
+
591
+ bool has_style = false;
592
+ if (ts.has_emphasis()) {
593
+ has_style = true;
594
+ auto emphasis = detail::make_emphasis<Char>(ts.get_emphasis());
595
+ out = detail::copy<Char>(emphasis.begin(), emphasis.end(), out);
596
+ }
597
+ if (ts.has_foreground()) {
598
+ has_style = true;
599
+ auto foreground =
600
+ detail::make_foreground_color<Char>(ts.get_foreground());
601
+ out = detail::copy<Char>(foreground.begin(), foreground.end(), out);
602
+ }
603
+ if (ts.has_background()) {
604
+ has_style = true;
605
+ auto background =
606
+ detail::make_background_color<Char>(ts.get_background());
607
+ out = detail::copy<Char>(background.begin(), background.end(), out);
608
+ }
609
+ out = formatter<T, Char>::format(arg.value, ctx);
610
+ if (has_style) {
611
+ auto reset_color = string_view("\x1b[0m");
612
+ out = detail::copy<Char>(reset_color.begin(), reset_color.end(), out);
613
+ }
614
+ return out;
615
+ }
616
+ };
617
+
618
+ /**
619
+ * Returns an argument that will be formatted using ANSI escape sequences,
620
+ * to be used in a formatting function.
621
+ *
622
+ * **Example**:
623
+ *
624
+ * fmt::print("Elapsed time: {0:.2f} seconds",
625
+ * fmt::styled(1.23, fmt::fg(fmt::color::green) |
626
+ * fmt::bg(fmt::color::blue)));
627
+ */
628
+ template <typename T>
629
+ FMT_CONSTEXPR auto styled(const T& value, text_style ts)
630
+ -> detail::styled_arg<remove_cvref_t<T>> {
631
+ return detail::styled_arg<remove_cvref_t<T>>{value, ts};
632
+ }
633
+
634
+ FMT_END_EXPORT
635
+ FMT_END_NAMESPACE
636
+
637
+ #endif // FMT_COLOR_H_