py::list test_dtype_methods() { py::list list; auto dt1 = py::dtype::of<int32_t>(); auto dt2 = py::dtype::of<SimpleStruct>(); list.append(dt1); list.append(dt2); list.append(py::bool_(dt1.has_fields())); list.append(py::bool_(dt2.has_fields())); list.append(py::int_(dt1.itemsize())); list.append(py::int_(dt2.itemsize())); return list; }
inline Tensor new_qtensor_cpu( IntArrayRef sizes, const TensorOptions& options, QuantizerPtr quantizer) { AT_ASSERT(options.device().is_cpu()); native::check_size_nonnegative(sizes); auto* allocator = at::getCPUAllocator(); int64_t nelements = at::prod_intlist(sizes); auto dtype = options.dtype(); AT_CHECK(isQIntType(typeMetaToScalarType(dtype)), "ScalarType is not supported in new_qtensor_cpu."); auto storage = c10::make_intrusive<StorageImpl>( dtype, nelements, allocator->allocate(nelements * dtype.itemsize()), allocator, /*resizable=*/true); auto tensor = detail::make_tensor<QTensorImpl>( storage, at::QuantizedCPUTensorId(), quantizer); get_qtensorimpl(tensor)->set_sizes_contiguous(sizes); return tensor; }
std::vector<PybindT> arr2vec (ade::Shape& outshape, py::array data) { py::buffer_info info = data.request(); outshape = pyead::p2cshape(info.shape); size_t n = outshape.n_elems(); auto dtype = data.dtype(); char kind = dtype.kind(); py::ssize_t tbytes = dtype.itemsize(); std::vector<PybindT> vec; switch (kind) { case 'f': switch (tbytes) { case 4: // float32 { float* dptr = static_cast<float*>(info.ptr); vec = std::vector<PybindT>(dptr, dptr + n); } break; case 8: // float64 { double* dptr = static_cast<double*>(info.ptr); vec = std::vector<PybindT>(dptr, dptr + n); } break; default: logs::fatalf("unsupported float type with %d bytes", tbytes); } break; case 'i': switch (tbytes) { case 1: // int8 { int8_t* dptr = static_cast<int8_t*>(info.ptr); vec = std::vector<PybindT>(dptr, dptr + n); } break; case 2: // int16 { int16_t* dptr = static_cast<int16_t*>(info.ptr); vec = std::vector<PybindT>(dptr, dptr + n); } break; case 4: // int32 { int32_t* dptr = static_cast<int32_t*>(info.ptr); vec = std::vector<PybindT>(dptr, dptr + n); } break; case 8: // int64 { int64_t* dptr = static_cast<int64_t*>(info.ptr); vec = std::vector<PybindT>(dptr, dptr + n); } break; default: logs::fatalf("unsupported integer type with %d bytes", tbytes); } break; default: logs::fatalf("unknown dtype %c", kind); } return vec; }