From e5cd39aa7e77309169cb64e8a950055f54046550 Mon Sep 17 00:00:00 2001 From: Justus Magin Date: Wed, 6 Dec 2023 10:44:42 +0100 Subject: [PATCH 1/2] explicitly skip using `__array_namespace__` for `numpy.ndarray` --- xarray/core/duck_array_ops.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/xarray/core/duck_array_ops.py b/xarray/core/duck_array_ops.py index b9f7db9737f..b5b0e6879a8 100644 --- a/xarray/core/duck_array_ops.py +++ b/xarray/core/duck_array_ops.py @@ -333,7 +333,8 @@ def fillna(data, other): def concatenate(arrays, axis=0): """concatenate() with better dtype promotion rules.""" - if hasattr(arrays[0], "__array_namespace__"): + # TODO: remove the additional check once `numpy` adds `concat` to its array namespace + if hasattr(arrays[0], "__array_namespace__") and not isinstance(arrays, np.ndarray): xp = get_array_namespace(arrays[0]) return xp.concat(as_shared_dtype(arrays, xp=xp), axis=axis) return _concatenate(as_shared_dtype(arrays), axis=axis) From d04a2e707e8eb61200ce98b61e7bbb5031958e2c Mon Sep 17 00:00:00 2001 From: Justus Magin Date: Wed, 6 Dec 2023 11:28:35 +0100 Subject: [PATCH 2/2] actually use the array in question --- xarray/core/duck_array_ops.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/xarray/core/duck_array_ops.py b/xarray/core/duck_array_ops.py index 51bc731a9b3..84cfd7f6fdc 100644 --- a/xarray/core/duck_array_ops.py +++ b/xarray/core/duck_array_ops.py @@ -336,7 +336,9 @@ def fillna(data, other): def concatenate(arrays, axis=0): """concatenate() with better dtype promotion rules.""" # TODO: remove the additional check once `numpy` adds `concat` to its array namespace - if hasattr(arrays[0], "__array_namespace__") and not isinstance(arrays, np.ndarray): + if hasattr(arrays[0], "__array_namespace__") and not isinstance( + arrays[0], np.ndarray + ): xp = get_array_namespace(arrays[0]) return xp.concat(as_shared_dtype(arrays, xp=xp), axis=axis) return _concatenate(as_shared_dtype(arrays), axis=axis)