| 111 | } |
| 112 | |
| 113 | void RecursiveParseAndAssign(PyObject* object, char* data, const int& ndims, const int& dim, |
| 114 | const ShapeView& shape, const DimVector& strides, |
| 115 | const DataType& dtype) { |
| 116 | if (dim == ndims) { return ParseScalar(object, data, dtype); } |
| 117 | auto seq = PyObjectPtr(PySequence_Fast(object, "Expected a sequence.")); |
| 118 | int64_t size = PySequence_Fast_GET_SIZE(seq.get()); |
| 119 | CHECK_EQ_OR_THROW(size, shape.At(dim)) << "Sequence size is " << size << " at dimemsion " << dim |
| 120 | << ", but expected " << shape.At(dim); |
| 121 | for (int64_t i = 0; i < size; ++i) { |
| 122 | PyObject* item = PySequence_Fast_GET_ITEM(seq.get(), i); |
| 123 | RecursiveParseAndAssign(item, data, ndims, dim + 1, shape, strides, dtype); |
| 124 | data += strides.at(dim) * GetSizeOfDataType(dtype); |
| 125 | } |
| 126 | } |
| 127 | |
| 128 | void ParseArrayToTensor(PyObject* object, |
| 129 | const std::shared_ptr<vm::EagerBlobObject>& eager_blob_object) { |
no test coverage detected