| 73 | // (the NPY_TYPES enum and related defines) |
| 74 | |
| 75 | static inline std::string GetNumPyTypeName(int npy_type) { |
| 76 | #define TYPE_CASE(TYPE, NAME) \ |
| 77 | case NPY_##TYPE: \ |
| 78 | return NAME; |
| 79 | |
| 80 | switch (npy_type) { |
| 81 | TYPE_CASE(BOOL, "bool") |
| 82 | TYPE_CASE(INT8, "int8") |
| 83 | TYPE_CASE(INT16, "int16") |
| 84 | TYPE_CASE(INT32, "int32") |
| 85 | TYPE_CASE(INT64, "int64") |
| 86 | #if !NPY_INT32_IS_INT |
| 87 | TYPE_CASE(INT, "intc") |
| 88 | #endif |
| 89 | #if !NPY_INT64_IS_LONG_LONG |
| 90 | TYPE_CASE(LONGLONG, "longlong") |
| 91 | #endif |
| 92 | TYPE_CASE(UINT8, "uint8") |
| 93 | TYPE_CASE(UINT16, "uint16") |
| 94 | TYPE_CASE(UINT32, "uint32") |
| 95 | TYPE_CASE(UINT64, "uint64") |
| 96 | #if !NPY_INT32_IS_INT |
| 97 | TYPE_CASE(UINT, "uintc") |
| 98 | #endif |
| 99 | #if !NPY_INT64_IS_LONG_LONG |
| 100 | TYPE_CASE(ULONGLONG, "ulonglong") |
| 101 | #endif |
| 102 | TYPE_CASE(FLOAT16, "float16") |
| 103 | TYPE_CASE(FLOAT32, "float32") |
| 104 | TYPE_CASE(FLOAT64, "float64") |
| 105 | TYPE_CASE(DATETIME, "datetime64") |
| 106 | TYPE_CASE(TIMEDELTA, "timedelta64") |
| 107 | TYPE_CASE(OBJECT, "object") |
| 108 | TYPE_CASE(VOID, "void") |
| 109 | default: |
| 110 | break; |
| 111 | } |
| 112 | |
| 113 | #undef TYPE_CASE |
| 114 | std::stringstream ss; |
| 115 | ss << "unrecognized type (" << npy_type << ") in GetNumPyTypeName"; |
| 116 | return ss.str(); |
| 117 | } |
| 118 | |
| 119 | #define TYPE_VISIT_INLINE(TYPE) \ |
| 120 | case NPY_##TYPE: \ |