From cc66365afdf0a5b3953c577603edf6aaf70c5ecf Mon Sep 17 00:00:00 2001 From: Joris Van den Bossche Date: Tue, 9 Jul 2019 15:07:07 -0400 Subject: [PATCH] ARROW-5790: [Python] raise error when trying to convert 0-dim array in pa.array --- cpp/src/arrow/python/numpy_to_arrow.cc | 3 +++ python/pyarrow/tests/test_array.py | 11 +++++++++++ 2 files changed, 14 insertions(+) diff --git a/cpp/src/arrow/python/numpy_to_arrow.cc b/cpp/src/arrow/python/numpy_to_arrow.cc index b353a1e02cf..811a31f5db8 100644 --- a/cpp/src/arrow/python/numpy_to_arrow.cc +++ b/cpp/src/arrow/python/numpy_to_arrow.cc @@ -800,6 +800,9 @@ Status NdarrayToArrow(MemoryPool* pool, PyObject* ao, PyObject* mo, bool from_pa if (!PyArray_Check(ao)) { return Status::Invalid("Input object was not a NumPy array"); } + if (PyArray_NDIM(reinterpret_cast(ao)) != 1) { + return Status::Invalid("only handle 1-dimensional arrays"); + } NumPyConverter converter(pool, ao, mo, type, from_pandas, cast_options); RETURN_NOT_OK(converter.Convert()); diff --git a/python/pyarrow/tests/test_array.py b/python/pyarrow/tests/test_array.py index f961c00b7ac..387b6502eb9 100644 --- a/python/pyarrow/tests/test_array.py +++ b/python/pyarrow/tests/test_array.py @@ -1147,6 +1147,17 @@ def test_array_from_masked(): pa.array(ma, mask=np.array([True, False, False, False])) +def test_array_from_invalid_dim_raises(): + msg = "only handle 1-dimensional arrays" + arr2d = np.array([[1, 2, 3], [4, 5, 6]]) + with pytest.raises(ValueError, match=msg): + pa.array(arr2d) + + arr0d = np.array(0) + with pytest.raises(ValueError, match=msg): + pa.array(arr0d) + + def test_buffers_primitive(): a = pa.array([1, 2, None, 4], type=pa.int16()) buffers = a.buffers()