72#include "runtime/types.h"
94constexpr inline std::size_t
dsizeof(type type) {
96 case boolean:
return 0;
97 case int8:
return sizeof(int8_t);
98 case int16:
return sizeof(int16_t);
99 case int32:
return sizeof(int32_t);
100 case int64:
return sizeof(int64_t);
101 case float16:
return sizeof(float) / 2;
102 case float32:
return sizeof(float);
103 case float64:
return 2 *
sizeof(float);
104 case complex64:
return 2 *
sizeof(float);
105 case complex128:
return 2 *
sizeof(double);
129constexpr inline std::size_t
nbytesof(type dtype, std::size_t nelements) {
130 if (dtype ==
boolean) {
131 return (nelements + 7) / 8;
133 return dsizeof(dtype) * nelements;
148constexpr inline std::string
dnameof(type type) {
150 case boolean:
return "boolean";
151 case int8:
return "int8";
152 case int16:
return "int16";
153 case int32:
return "int32";
154 case int64:
return "int64";
155 case float16:
return "float16";
156 case float32:
return "float32";
157 case float64:
return "float64";
158 case complex64:
return "complex64";
159 case complex128:
return "complex128";
160 default:
return "none";
187 case boolean:
return 1;
188 case int8:
return 12;
189 case int16:
return 13;
190 case int32:
return 14;
191 case int64:
return 15;
192 case float16:
return 23;
193 case float32:
return 24;
194 case float64:
return 25;
195 case complex64:
return 35;
196 case complex128:
return 36;
214 case 1 :
return boolean;
215 case 12:
return int8;
216 case 13:
return int16;
217 case 14:
return int32;
218 case 15:
return int64;
219 case 23:
return float16;
220 case 24:
return float32;
221 case 25:
return float64;
222 case 35:
return complex64;
223 case 36:
return complex128;
224 default:
return unknown;
230 if constexpr (std::is_same_v<T, bool>)
return boolean;
231 else if constexpr (std::is_same_v<T, int8_t>)
return int8;
232 else if constexpr (std::is_same_v<T, int16_t>)
return int16;
233 else if constexpr (std::is_same_v<T, int32_t>)
return int32;
234 else if constexpr (std::is_same_v<T, int64_t>)
return int64;
235 else if constexpr (std::is_same_v<T, float16_t>)
return float16;
236 else if constexpr (std::is_same_v<T, float>)
return float32;
237 else if constexpr (std::is_same_v<T, double>)
return float64;
238 else if constexpr (std::is_same_v<T, std::complex<float>>)
return complex64;
239 else if constexpr (std::is_same_v<T, std::complex<double>>)
return complex128;
243inline std::ostream&
operator<<(std::ostream& ostream, type type) {
244 return ostream <<
dnameof(type);
Definition: buffer.hpp:41
constexpr std::string dnameof(type type)
Returns the string name of a given tensor data type.
Definition: types.hpp:148
constexpr type dtypeof()
Definition: types.hpp:229
constexpr uint8_t dcodeof(type type)
Returns the numeric code used for serialization of a data type.
Definition: types.hpp:185
std::ostream & operator<<(std::ostream &os, Shape const &shape)
Definition: shape.hpp:313
constexpr std::size_t nbytesof(type dtype, std::size_t nelements)
Returns the total number of bytes required to store nelements elements of the given data type.
Definition: types.hpp:129
constexpr std::size_t dsizeof(type type)
Returns the size in bytes of a given tensor data type.
Definition: types.hpp:94