From 61f20b890ba832051c8b0a3b96dc5da97d2298c7 Mon Sep 17 00:00:00 2001 From: Iason Krommydas Date: Fri, 13 Mar 2026 11:05:16 -0500 Subject: [PATCH 1/2] use array_equal here --- src/awkward/operations/ak_almost_equal.py | 6 +++++- tests/properties/operations/test_to_from_buffers.py | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/awkward/operations/ak_almost_equal.py b/src/awkward/operations/ak_almost_equal.py index 329dbb778d..60a2317b52 100644 --- a/src/awkward/operations/ak_almost_equal.py +++ b/src/awkward/operations/ak_almost_equal.py @@ -221,7 +221,11 @@ def visitor(left, right) -> bool: ): return ( (left.dtype == right.dtype) - and backend.nplike.all(left.data == right.data) + and backend.nplike.array_equal( + left.data, + right.data, + equal_nan=equal_nan, + ) and left.shape == right.shape ) elif exact_eq: diff --git a/tests/properties/operations/test_to_from_buffers.py b/tests/properties/operations/test_to_from_buffers.py index 29a99b9980..9080c9d709 100644 --- a/tests/properties/operations/test_to_from_buffers.py +++ b/tests/properties/operations/test_to_from_buffers.py @@ -9,9 +9,9 @@ @settings(max_examples=1000) -@given(a=st_ak.constructors.arrays()) +@given(a=st_ak.constructors.arrays(allow_nan=True)) def test_roundtrip(a: ak.Array) -> None: """`to_buffers` followed by `from_buffers` reconstructs the array.""" sent = ak.to_buffers(a) returned = ak.from_buffers(*sent) - assert ak.array_equal(a, returned) + assert ak.array_equal(a, returned, equal_nan=True) From a28ad8fc84fe62b2a8f0f04db1a71387d35187f7 Mon Sep 17 00:00:00 2001 From: Iason Krommydas Date: Fri, 13 Mar 2026 11:11:29 -0500 Subject: [PATCH 2/2] add test --- ...3921_array_equal_datetime_and_timedelta.py | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 tests/test_3921_array_equal_datetime_and_timedelta.py diff --git a/tests/test_3921_array_equal_datetime_and_timedelta.py b/tests/test_3921_array_equal_datetime_and_timedelta.py new file mode 100644 index 0000000000..57c636b81f --- /dev/null +++ b/tests/test_3921_array_equal_datetime_and_timedelta.py @@ -0,0 +1,21 @@ +# 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(): + array = ak.Array(np.array(["2020-01-01", "2020-01-02"], dtype="datetime64[D]")) + assert ak.array_equal(array, array) + + array1 = ak.Array(np.array(["2020-01-01", "2020-01-02"], dtype="datetime64[D]")) + array2 = ak.Array(np.array(["2020-01-03", "2020-01-04"], dtype="datetime64[D]")) + assert not ak.array_equal(array1, array2) + + array1 = ak.Array(np.array(["2020-01-01", "NaT"], dtype="datetime64[D]")) + array2 = ak.Array(np.array(["2020-01-01", "NaT"], dtype="datetime64[D]")) + assert not ak.array_equal(array1, array2, equal_nan=False) + assert ak.array_equal(array1, array2, equal_nan=True)