#pragma once
#include "src/cuda/cutlass/library.h"
namespace cutlass {
namespace library {
template <typename T>
T from_string(std::string const&);
char const* to_string(Provider provider, bool pretty = false);
template <>
Provider from_string<Provider>(std::string const& str);
char const* to_string(GemmKind type, bool pretty = false);
char const* to_string(OperationKind type, bool pretty = false);
template <>
OperationKind from_string<OperationKind>(std::string const& str);
char const* to_string(NumericTypeID type, bool pretty = false);
template <>
NumericTypeID from_string<NumericTypeID>(std::string const& str);
int sizeof_bits(NumericTypeID type);
bool is_complex_type(NumericTypeID type);
NumericTypeID get_real_type(NumericTypeID type);
bool is_integer_type(NumericTypeID type);
bool is_signed_type(NumericTypeID type);
bool is_signed_integer(NumericTypeID type);
bool is_unsigned_integer(NumericTypeID type);
bool is_float_type(NumericTypeID type);
char const* to_string(Status status, bool pretty = false);
char const* to_string(LayoutTypeID layout, bool pretty = false);
template <>
LayoutTypeID from_string<LayoutTypeID>(std::string const& str);
int get_layout_stride_rank(LayoutTypeID layout_id);
char const* to_string(OpcodeClassID type, bool pretty = false);
template <>
OpcodeClassID from_string<OpcodeClassID>(std::string const& str);
char const* to_string(ComplexTransform type, bool pretty = false);
template <>
ComplexTransform from_string<ComplexTransform>(std::string const& str);
char const* to_string(SplitKMode split_k_mode, bool pretty = false);
template <>
SplitKMode from_string<SplitKMode>(std::string const& str);
char const* to_string(ConvModeID type, bool pretty = false);
template <>
ConvModeID from_string<ConvModeID>(std::string const& str);
char const* to_string(IteratorAlgorithmID type, bool pretty = false);
template <>
IteratorAlgorithmID from_string<IteratorAlgorithmID>(std::string const& str);
char const* to_string(ConvKind type, bool pretty = false);
template <>
ConvKind from_string<ConvKind>(std::string const& str);
std::string lexical_cast(int64_t int_value);
bool lexical_cast(
std::vector<uint8_t>& bytes, NumericTypeID type, std::string const& str);
std::string lexical_cast(std::vector<uint8_t>& bytes, NumericTypeID type);
bool cast_from_int64(std::vector<uint8_t>& bytes, NumericTypeID type, int64_t src);
bool cast_from_uint64(std::vector<uint8_t>& bytes, NumericTypeID type, uint64_t src);
bool cast_from_double(std::vector<uint8_t>& bytes, NumericTypeID type, double src);
char const* to_string(conv::Operator conv_op, bool pretty = false);
char const* to_string(conv::ConvType type, bool pretty = false);
char const* to_string(ArchTagID tag, bool pretty = false);
char const* to_string(epilogue::EpilogueType type, bool pretty = false);
char const* to_string(ThreadblockSwizzleID threadblock_swizzle, bool pretty = false);
char const* to_string(bool val, bool pretty = false);
char const* to_string(MathOperationID math_op, bool pretty = false);
char const* to_string(conv::SpecialOptimizeDesc special_opt, bool pretty = false);
char const* to_string(conv::ImplicitGemmMode mode, bool pretty = false);
} }