aboderinsamuel commented on code in PR #50203:
URL: https://github.com/apache/arrow/pull/50203#discussion_r3466989685


##########
python/pyarrow/src/arrow/python/python_to_arrow.cc:
##########
@@ -908,8 +908,20 @@ class PyListConverter : public ListConverter<T, 
PyConverter, PyConverterTrait> {
 
   Status AppendNdarray(PyObject* value) {
     PyArrayObject* ndarray = reinterpret_cast<PyArrayObject*>(value);
+    OwnedRef flattened;
     if (PyArray_NDIM(ndarray) != 1) {
-      return Status::Invalid("Can only convert 1-dimensional array values");
+      // GH-49644: a fixed-size list (e.g. the storage of a fixed-shape tensor)
+      // can be built from a multi-dimensional array by flattening it in C
+      // order. The total number of elements must still match the list size,
+      // which the builder validates below. 0-dimensional arrays and
+      // variable-sized lists remain restricted to 1-dimensional values.
+      if (PyArray_NDIM(ndarray) < 2 || this->list_type_->id() != 
Type::FIXED_SIZE_LIST) {
+        return Status::Invalid("Can only convert 1-dimensional array values");
+      }
+      flattened.reset(PyArray_Ravel(ndarray, NPY_CORDER));

Review Comment:
   Thanks for the pointer to the flags doc, @AlenkaF, really useful read 🙂
   
   Done: switched to PyArray_CheckFromAny with NPY_ARRAY_C_CONTIGUOUS | 
NPY_ARRAY_ALIGNED, then view it as 1-D and read in C order. The ALIGNED flag 
was the piece I'd have missed on my own, so thanks for steering me there! For 
byte order I kept the explicit ISBYTESWAPPED check (moved up top per @rok) 
instead of NPY_ARRAY_NOTSWAPPED, and left out WRITEABLE since we only read here.
   
   Really appreciate you and @rok taking the time on this, learning a ton from 
it.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to