From d5bc3048a78a907a0548fa685673bea3b556050c Mon Sep 17 00:00:00 2001 From: Massimiliano Galli Date: Wed, 31 Jul 2024 10:43:58 -0500 Subject: [PATCH] fix: proposal for #2947 (#3191) * fix: cast numpy integers to integers in ak.from_buffers (fixes https://github.com/scikit-hep/awkward/issues/2947) * Add test for 3502225e9246ce0197d6143c9d94c9e1aeec88b8 * style: pre-commit fixes --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- src/awkward/operations/ak_from_buffers.py | 3 +++ tests/test_2947_to_list_numpy_integer.py | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 tests/test_2947_to_list_numpy_integer.py diff --git a/src/awkward/operations/ak_from_buffers.py b/src/awkward/operations/ak_from_buffers.py index eed547b60d..72e5ba48b6 100644 --- a/src/awkward/operations/ak_from_buffers.py +++ b/src/awkward/operations/ak_from_buffers.py @@ -136,6 +136,9 @@ def _impl( elif isinstance(form, dict): form = ak.forms.from_dict(form) + if isinstance(length, np.integer): + length = int(length) + if not (is_integer(length) and length >= 0): raise TypeError("'length' argument must be a non-negative integer") diff --git a/tests/test_2947_to_list_numpy_integer.py b/tests/test_2947_to_list_numpy_integer.py new file mode 100644 index 0000000000..e65eb18333 --- /dev/null +++ b/tests/test_2947_to_list_numpy_integer.py @@ -0,0 +1,18 @@ +# BSD 3-Clause License; see https://github.com/scikit-hep/awkward/blob/main/LICENSE +from __future__ import annotations + +import numpy as np + +import awkward as ak + + +def test(): + """Check that to_list() does not break when the array is built from buffers + with a length of type np.int64. + """ + awk = ak.Array(np.ones((7, 0))) + form, length, container = ak.to_buffers(ak.to_packed(awk)) + awk_from_buf = ak.from_buffers(form, np.int64(length), container) + lst = awk_from_buf.to_list() + + assert len(lst) == length