MCPcopy Create free account
hub / github.com/MegEngine/MegEngine / pyseq2hval

Function pyseq2hval

imperative/python/src/tensor.cpp:226–254  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

224
225template <typename seq_type, typename ctype>
226bool pyseq2hval(seq_type obj, CompNode cn, DType dtype, HostTensorArgs& ret) {
227 auto size = obj.size();
228 if (size > MEGDNN_MAX_NDIM) {
229 return false;
230 }
231 ctype items[size];
232 for (size_t i = 0; i < size; ++i) {
233 py::handle item = obj[i];
234 if (item.get_type().is(py_type<py::int_>())) {
235 items[i] = (ctype)(dt_int32)item.template cast<py::int_>();
236 } else if (item.get_type().is(py_type<py::float_>())) {
237 items[i] = (ctype)(dt_float32)item.template cast<py::float_>();
238 } else {
239 return false;
240 }
241 }
242 mgb_assert(sizeof(ctype) == dtype.size());
243 auto* raw_ptr = new ctype[size];
244 std::shared_ptr<dt_byte> raw_storage = {
245 reinterpret_cast<dt_byte*>(raw_ptr),
246 [](dt_byte* ptr) { delete[] reinterpret_cast<ctype*>(ptr); }};
247 HostTensorStorage storage(cn);
248 storage.only_reset_raw_storage(cn, sizeof(ctype) * size, raw_storage, 0);
249 std::memcpy(storage.ptr(), items, sizeof(ctype) * size);
250 ret.dtype = dtype;
251 ret.shape = {size};
252 ret.storage = HostStorage::make(std::move(storage));
253 return true;
254}
255
256template <typename seq_type>
257bool pyseq2hval(seq_type obj, CompNode cn, HostTensorArgs& ret) {

Callers

nothing calls this directly

Calls 7

makeFunction · 0.50
sizeMethod · 0.45
isMethod · 0.45
get_typeMethod · 0.45
ptrMethod · 0.45
validMethod · 0.45

Tested by

no test coverage detected