| 29 | namespace { |
| 30 | |
| 31 | Result<DLDataType> GetDLDataType(const DataType& type) { |
| 32 | DLDataType dtype; |
| 33 | dtype.lanes = 1; |
| 34 | dtype.bits = type.bit_width(); |
| 35 | switch (type.id()) { |
| 36 | case Type::INT8: |
| 37 | case Type::INT16: |
| 38 | case Type::INT32: |
| 39 | case Type::INT64: |
| 40 | dtype.code = DLDataTypeCode::kDLInt; |
| 41 | return dtype; |
| 42 | case Type::UINT8: |
| 43 | case Type::UINT16: |
| 44 | case Type::UINT32: |
| 45 | case Type::UINT64: |
| 46 | dtype.code = DLDataTypeCode::kDLUInt; |
| 47 | return dtype; |
| 48 | case Type::HALF_FLOAT: |
| 49 | case Type::FLOAT: |
| 50 | case Type::DOUBLE: |
| 51 | dtype.code = DLDataTypeCode::kDLFloat; |
| 52 | return dtype; |
| 53 | case Type::BOOL: |
| 54 | // DLPack supports byte-packed boolean values |
| 55 | return Status::TypeError("Bit-packed boolean data type not supported by DLPack."); |
| 56 | default: |
| 57 | return Status::TypeError("DataType is not compatible with DLPack spec: ", |
| 58 | type.ToString()); |
| 59 | } |
| 60 | } |
| 61 | |
| 62 | struct ManagerCtx { |
| 63 | std::shared_ptr<ArrayData> array; |