Program Listing for File dtype.hpp

Return to documentation for file (morpheus/_lib/include/morpheus/objects/dtype.hpp)

Copy
Copied!
            

/* * SPDX-FileCopyrightText: Copyright (c) 2021-2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved. * SPDX-License-Identifier: Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once #include <cudf/types.hpp> #include <climits> // for CHAR_BIT #include <cstddef> // for size_t #include <cstdint> // for int32_t #include <string> // for string namespace morpheus { // Pulled from cuDF template <typename T> constexpr std::size_t size_in_bits() { static_assert(CHAR_BIT == 8, "Size of a byte must be 8 bits."); return sizeof(T) * CHAR_BIT; } // Pulled from cudf #pragma GCC visibility push(default) enum class TypeId : int32_t { EMPTY, INT8, INT16, INT32, INT64, UINT8, UINT16, UINT32, UINT64, FLOAT32, FLOAT64, BOOL8, STRING, // TIMESTAMP_DAYS, ///< point in time in days since Unix Epoch in int32 // TIMESTAMP_SECONDS, ///< point in time in seconds since Unix Epoch in int64 // TIMESTAMP_MILLISECONDS, ///< point in time in milliseconds since Unix Epoch in int64 // TIMESTAMP_MICROSECONDS, ///< point in time in microseconds since Unix Epoch in int64 // TIMESTAMP_NANOSECONDS, ///< point in time in nanoseconds since Unix Epoch in int64 // DURATION_DAYS, ///< time interval of days in int32 // DURATION_SECONDS, ///< time interval of seconds in int64 // DURATION_MILLISECONDS, ///< time interval of milliseconds in int64 // DURATION_MICROSECONDS, ///< time interval of microseconds in int64 // DURATION_NANOSECONDS, ///< time interval of nanoseconds in int64 // DICTIONARY32, ///< Dictionary type using int32 indices // LIST, ///< List elements // DECIMAL32, ///< Fixed-point type with int32_t // DECIMAL64, ///< Fixed-point type with int64_t // STRUCT, ///< Struct elements // `NUM_TYPE_IDS` must be last! NUM_TYPE_IDS }; /****** DType****************************************/ struct DType { DType(TypeId tid); DType(const DType& dtype) = default; bool operator==(const DType& other) const; TypeId type_id() const; // Number of bytes per item size_t item_size() const; // Pretty print std::string name() const; // Returns the numpy string representation std::string type_str() const; // Cudf representation cudf::type_id cudf_type_id() const; // Returns the triton string representation std::string triton_str() const; // From cudf static DType from_cudf(cudf::type_id tid); // From numpy static DType from_numpy(const std::string& numpy_str); // From triton static DType from_triton(const std::string& type_str); // from template template <typename T> static DType create() { if constexpr (std::is_integral_v<T> && std::is_signed_v<T> && size_in_bits<T>() == 8) { return {TypeId::INT8}; } else if constexpr (std::is_integral_v<T> && std::is_signed_v<T> && size_in_bits<T>() == 16) { return {TypeId::INT16}; } else if constexpr (std::is_integral_v<T> && std::is_signed_v<T> && size_in_bits<T>() == 32) { return {TypeId::INT32}; } else if constexpr (std::is_integral_v<T> && std::is_signed_v<T> && size_in_bits<T>() == 64) { return {TypeId::INT64}; } else if constexpr (std::is_integral_v<T> && std::is_unsigned_v<T> && size_in_bits<T>() == 8) { return {TypeId::UINT8}; } else if constexpr (std::is_integral_v<T> && std::is_unsigned_v<T> && size_in_bits<T>() == 16) { return {TypeId::UINT16}; } else if constexpr (std::is_integral_v<T> && std::is_unsigned_v<T> && size_in_bits<T>() == 32) { return {TypeId::UINT32}; } else if constexpr (std::is_integral_v<T> && std::is_unsigned_v<T> && size_in_bits<T>() == 64) { return {TypeId::UINT64}; } else if constexpr (std::is_floating_point_v<T> && size_in_bits<T>() == 32) { return {TypeId::FLOAT32}; } else if constexpr (std::is_floating_point_v<T> && size_in_bits<T>() == 64) { return {TypeId::FLOAT64}; } else if constexpr (std::is_same_v<T, bool>) { return {TypeId::BOOL8}; } else if constexpr (std::is_same_v<T, std::string>) { return {TypeId::STRING}; } else { static_assert(!sizeof(T), "Type not implemented"); } // To hide compiler warnings return {TypeId::EMPTY}; } private: char type_char() const; TypeId m_type_id; }; // end of group #pragma GCC visibility pop } // namespace morpheus

© Copyright 2023, NVIDIA. Last updated on Feb 2, 2024.