From 7ebdfc15057099de9c866b7f96e2d86047e5c2dd Mon Sep 17 00:00:00 2001 From: Spencer Jones <41342785+cspencerjones@users.noreply.github.com> Date: Thu, 22 Aug 2019 15:23:01 -0700 Subject: [PATCH 1/5] Update filter_by_attrs to use 'variables' instead of 'data_vars' This will allow `filter_by_attrs` to filter coordinates as well as variables. @ocefpaf --- xarray/core/dataset.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xarray/core/dataset.py b/xarray/core/dataset.py index 076b97e8623..e1628d7aac9 100644 --- a/xarray/core/dataset.py +++ b/xarray/core/dataset.py @@ -5139,7 +5139,7 @@ def filter_by_attrs(self, **kwargs): """ # noqa selection = [] - for var_name, variable in self.data_vars.items(): + for var_name, variable in self.variables.items(): has_value_flag = False for attr_name, pattern in kwargs.items(): attr_value = variable.attrs.get(attr_name) From 29ee0d19dadf46c04a5044fb15daadd7d458ddf1 Mon Sep 17 00:00:00 2001 From: Spencer Jones Date: Fri, 23 Aug 2019 13:37:45 -0400 Subject: [PATCH 2/5] added tests for filter_by_attrs acting on coords --- xarray/tests/test_dataset.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/xarray/tests/test_dataset.py b/xarray/tests/test_dataset.py index 55358e47e41..d7029671fcd 100644 --- a/xarray/tests/test_dataset.py +++ b/xarray/tests/test_dataset.py @@ -4920,7 +4920,7 @@ def test_filter_by_attrs(self): "temperature_10": (["t"], [0], temp10), "precipitation": (["t"], [0], precip), }, - coords={"time": (["t"], [0], dict(axis="T"))}, + coords={"time": (["t"], [0], dict(axis="T",standard_name="time_in_seconds"))}, ) # Test return empty Dataset. @@ -4934,6 +4934,11 @@ def test_filter_by_attrs(self): assert_equal(new_ds["precipitation"], ds["precipitation"]) + #Test filter coordinates + new_ds = ds.filter_by_attrs(standard_name="time_in_seconds") + assert new_ds["time"].standard_name == "time_in_seconds" + assert not bool(new_ds.data_vars) + # Test return more than one DataArray. new_ds = ds.filter_by_attrs(standard_name="air_potential_temperature") assert len(new_ds.data_vars) == 2 From e3b8125324ebf414bc12de1120a5c5cb244960e4 Mon Sep 17 00:00:00 2001 From: Spencer Jones Date: Fri, 23 Aug 2019 13:41:08 -0400 Subject: [PATCH 3/5] fixed pep8 issues --- xarray/tests/test_dataset.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/xarray/tests/test_dataset.py b/xarray/tests/test_dataset.py index d7029671fcd..160b00b102a 100644 --- a/xarray/tests/test_dataset.py +++ b/xarray/tests/test_dataset.py @@ -4920,7 +4920,7 @@ def test_filter_by_attrs(self): "temperature_10": (["t"], [0], temp10), "precipitation": (["t"], [0], precip), }, - coords={"time": (["t"], [0], dict(axis="T",standard_name="time_in_seconds"))}, + coords={"time": (["t"], [0], dict(axis="T", standard_name="time_in_seconds"))}, ) # Test return empty Dataset. @@ -4934,11 +4934,11 @@ def test_filter_by_attrs(self): assert_equal(new_ds["precipitation"], ds["precipitation"]) - #Test filter coordinates + # Test filter coordinates new_ds = ds.filter_by_attrs(standard_name="time_in_seconds") assert new_ds["time"].standard_name == "time_in_seconds" assert not bool(new_ds.data_vars) - + # Test return more than one DataArray. new_ds = ds.filter_by_attrs(standard_name="air_potential_temperature") assert len(new_ds.data_vars) == 2 From 7295c667c395d18ee4ee8a1fc538d5bacb3ea6f3 Mon Sep 17 00:00:00 2001 From: Spencer Jones Date: Fri, 23 Aug 2019 14:39:52 -0400 Subject: [PATCH 4/5] Change standard_name to long_name in filter_by_attrs test --- xarray/tests/test_dataset.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/xarray/tests/test_dataset.py b/xarray/tests/test_dataset.py index 160b00b102a..5d364a6f88f 100644 --- a/xarray/tests/test_dataset.py +++ b/xarray/tests/test_dataset.py @@ -4920,7 +4920,7 @@ def test_filter_by_attrs(self): "temperature_10": (["t"], [0], temp10), "precipitation": (["t"], [0], precip), }, - coords={"time": (["t"], [0], dict(axis="T", standard_name="time_in_seconds"))}, + coords={"time": (["t"], [0], dict(axis="T", long_name="time_in_seconds"))}, ) # Test return empty Dataset. @@ -4935,8 +4935,8 @@ def test_filter_by_attrs(self): assert_equal(new_ds["precipitation"], ds["precipitation"]) # Test filter coordinates - new_ds = ds.filter_by_attrs(standard_name="time_in_seconds") - assert new_ds["time"].standard_name == "time_in_seconds" + new_ds = ds.filter_by_attrs(long_name="time_in_seconds") + assert new_ds["time"].long_name == "time_in_seconds" assert not bool(new_ds.data_vars) # Test return more than one DataArray. From 47ea395fa2c86d2ac8e9d66044cead1574085bae Mon Sep 17 00:00:00 2001 From: Spencer Jones Date: Fri, 23 Aug 2019 15:03:20 -0400 Subject: [PATCH 5/5] remove whitespace --- 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 5d364a6f88f..fefea0eb08c 100644 --- a/xarray/tests/test_dataset.py +++ b/xarray/tests/test_dataset.py @@ -4938,7 +4938,7 @@ def test_filter_by_attrs(self): new_ds = ds.filter_by_attrs(long_name="time_in_seconds") assert new_ds["time"].long_name == "time_in_seconds" assert not bool(new_ds.data_vars) - + # Test return more than one DataArray. new_ds = ds.filter_by_attrs(standard_name="air_potential_temperature") assert len(new_ds.data_vars) == 2