From eae999006bd3bf3e4f80b014533a70c191c38ee9 Mon Sep 17 00:00:00 2001 From: malmans2 Date: Fri, 28 May 2021 08:32:30 +0100 Subject: [PATCH 1/3] don't drop unreduced variables --- xarray/core/dataset.py | 3 ++- xarray/tests/test_dataset.py | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/xarray/core/dataset.py b/xarray/core/dataset.py index 1697a7c67aa..03901102725 100644 --- a/xarray/core/dataset.py +++ b/xarray/core/dataset.py @@ -4986,7 +4986,8 @@ def reduce( variables[name] = var else: if ( - not numeric_only + not reduce_dims + or not numeric_only or np.issubdtype(var.dtype, np.number) or (var.dtype == np.bool_) ): diff --git a/xarray/tests/test_dataset.py b/xarray/tests/test_dataset.py index 00a6fb825c7..e2b72385f94 100644 --- a/xarray/tests/test_dataset.py +++ b/xarray/tests/test_dataset.py @@ -4947,15 +4947,16 @@ def test_reduce_cumsum_test_dims(self, reduct, expected, func): def test_reduce_non_numeric(self): data1 = create_test_data(seed=44) data2 = create_test_data(seed=44) - add_vars = {"var4": ["dim1", "dim2"]} + add_vars = {"var4": ["dim1", "dim2"], "var5": ["dim1"]} for v, dims in sorted(add_vars.items()): size = tuple(data1.dims[d] for d in dims) data = np.random.randint(0, 100, size=size).astype(np.str_) data1[v] = (dims, data, {"foo": "variable"}) - assert "var4" not in data1.mean() + assert all(var not in data1.mean() for var in add_vars) assert_equal(data1.mean(), data2.mean()) assert_equal(data1.mean(dim="dim1"), data2.mean(dim="dim1")) + assert "var4" not in data1.mean(dim="dim2") and "var5" in data1.mean(dim="dim2") @pytest.mark.filterwarnings( "ignore:Once the behaviour of DataArray:DeprecationWarning" From 47dece1d0e4dee6d577a578bc3386e1f0983db8a Mon Sep 17 00:00:00 2001 From: Mattia Almansi Date: Mon, 31 May 2021 09:19:14 +0100 Subject: [PATCH 2/3] Update xarray/tests/test_dataset.py Co-authored-by: keewis --- xarray/tests/test_dataset.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xarray/tests/test_dataset.py b/xarray/tests/test_dataset.py index e2b72385f94..83d6f4568cb 100644 --- a/xarray/tests/test_dataset.py +++ b/xarray/tests/test_dataset.py @@ -4953,7 +4953,7 @@ def test_reduce_non_numeric(self): data = np.random.randint(0, 100, size=size).astype(np.str_) data1[v] = (dims, data, {"foo": "variable"}) - assert all(var not in data1.mean() for var in add_vars) + assert "var4" not in data1.mean() and "var5" not in data1.mean() assert_equal(data1.mean(), data2.mean()) assert_equal(data1.mean(dim="dim1"), data2.mean(dim="dim1")) assert "var4" not in data1.mean(dim="dim2") and "var5" in data1.mean(dim="dim2") From da25df9e287a98541e9e054cb76c7b098ab5bbb6 Mon Sep 17 00:00:00 2001 From: malmans2 Date: Fri, 11 Jun 2021 19:12:32 +0100 Subject: [PATCH 3/3] add comment --- xarray/core/dataset.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/xarray/core/dataset.py b/xarray/core/dataset.py index a94bbb0156f..e1cddb02008 100644 --- a/xarray/core/dataset.py +++ b/xarray/core/dataset.py @@ -4987,6 +4987,8 @@ def reduce( variables[name] = var else: if ( + # Some reduction functions (e.g. std, var) need to run on variables + # that don't have the reduce dims: PR5393 not reduce_dims or not numeric_only or np.issubdtype(var.dtype, np.number)