You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by we...@apache.org on 2020/08/22 17:55:06 UTC

[arrow] branch master updated: ARROW-9490: [Python][C++] Bug in pa.array when input mixes int8 with float

This is an automated email from the ASF dual-hosted git repository.

wesm pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow.git


The following commit(s) were added to refs/heads/master by this push:
     new 085b44d  ARROW-9490: [Python][C++] Bug in pa.array when input mixes int8 with float
085b44d is described below

commit 085b44d916cd1266911c05850a2369f30dd1fd65
Author: arw2019 <an...@gmail.com>
AuthorDate: Sat Aug 22 12:54:05 2020 -0500

    ARROW-9490: [Python][C++] Bug in pa.array when input mixes int8 with float
    
    Closes #8017 from arw2019/ARROW-9490
    
    Authored-by: arw2019 <an...@gmail.com>
    Signed-off-by: Wes McKinney <we...@apache.org>
---
 cpp/src/arrow/python/helpers.cc              | 2 ++
 python/pyarrow/tests/test_convert_builtin.py | 9 ++++++++-
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/cpp/src/arrow/python/helpers.cc b/cpp/src/arrow/python/helpers.cc
index 852bf76..1845aa1 100644
--- a/cpp/src/arrow/python/helpers.cc
+++ b/cpp/src/arrow/python/helpers.cc
@@ -328,6 +328,8 @@ Status UnboxIntegerAsInt64(PyObject* obj, int64_t* out) {
     if (overflow) {
       return Status::Invalid("PyLong is too large to fit int64");
     }
+  } else if (PyArray_IsScalar(obj, Byte)) {
+    *out = reinterpret_cast<PyByteScalarObject*>(obj)->obval;
   } else if (PyArray_IsScalar(obj, UByte)) {
     *out = reinterpret_cast<PyUByteScalarObject*>(obj)->obval;
   } else if (PyArray_IsScalar(obj, Short)) {
diff --git a/python/pyarrow/tests/test_convert_builtin.py b/python/pyarrow/tests/test_convert_builtin.py
index 788675a..f62a941 100644
--- a/python/pyarrow/tests/test_convert_builtin.py
+++ b/python/pyarrow/tests/test_convert_builtin.py
@@ -390,10 +390,17 @@ def test_broken_integers(seq):
 
 
 def test_numpy_scalars_mixed_type():
+
     # ARROW-4324
     data = [np.int32(10), np.float32(0.5)]
     arr = pa.array(data)
-    expected = pa.array([10, 0.5], type='float64')
+    expected = pa.array([10, 0.5], type="float64")
+    assert arr.equals(expected)
+
+    # ARROW-9490
+    data = [np.int8(10), np.float32(0.5)]
+    arr = pa.array(data)
+    expected = pa.array([10, 0.5], type="float32")
     assert arr.equals(expected)