Skip to content

Commit c1d3197

Browse files
authored
Update standard_name list in .describe() (#96)
* Update standard_name list in .describe() * bugfix
1 parent 0268a9b commit c1d3197

File tree

2 files changed

+22
-21
lines changed

2 files changed

+22
-21
lines changed

cf_xarray/accessor.py

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import functools
22
import inspect
33
import itertools
4-
import textwrap
54
import warnings
65
from collections import ChainMap
76
from typing import (
@@ -398,18 +397,13 @@ def _get_measure(da: Union[DataArray, Dataset], key: str) -> List[str]:
398397
}
399398

400399

401-
def _filter_by_standard_names(ds: Dataset, name: Union[str, List[str]]) -> List[str]:
402-
""" returns a list of variable names with standard names matching name. """
403-
if isinstance(name, str):
404-
name = [name]
405-
400+
def _get_with_standard_name(ds: Dataset, name: Union[str, List[str]]) -> List[str]:
401+
""" returns a list of variable names with standard name == name. """
406402
varnames = []
407-
counts = dict.fromkeys(name, 0)
408403
for vname, var in ds.variables.items():
409404
stdname = var.attrs.get("standard_name", None)
410-
if stdname in name:
405+
if stdname == name:
411406
varnames.append(str(vname))
412-
counts[stdname] += 1
413407

414408
return varnames
415409

@@ -848,11 +842,11 @@ def describe(self):
848842
if isinstance(self._obj, DataArray):
849843
text += "\tunsupported\n"
850844
else:
851-
stdnames = self.get_standard_names()
852-
text += "\t"
853-
text += "\n".join(
854-
textwrap.wrap(f"{stdnames!r}", 70, break_long_words=False)
855-
)
845+
stdnames = sorted(self.get_standard_names())
846+
for name in stdnames:
847+
if name not in _COORD_NAMES:
848+
text += f"\t{name}: {_get_with_standard_name(self._obj, name)}\n"
849+
856850
print(text)
857851

858852
def get_valid_keys(self) -> Set[str]:
@@ -902,11 +896,13 @@ def get_standard_names(self) -> List[str]:
902896
elif isinstance(self._obj, DataArray):
903897
variables = self._obj.coords
904898
return sorted(
905-
[
906-
v.attrs["standard_name"]
907-
for k, v in variables.items()
908-
if "standard_name" in v.attrs
909-
]
899+
set(
900+
[
901+
v.attrs["standard_name"]
902+
for k, v in variables.items()
903+
if "standard_name" in v.attrs
904+
]
905+
)
910906
)
911907

912908
def get_associated_variable_names(self, name: Hashable) -> Dict[str, List[str]]:
@@ -1013,7 +1009,7 @@ def __getitem__(self, key: Union[str, List[str]]):
10131009
if measure:
10141010
varnames.extend(measure)
10151011
elif not isinstance(self._obj, DataArray):
1016-
stdnames = _filter_by_standard_names(self._obj, k)
1012+
stdnames = _get_with_standard_name(self._obj, k)
10171013
successful[k] = bool(stdnames)
10181014
varnames.extend(stdnames)
10191015
coords.extend(list(set(stdnames) & set(self._obj.coords)))

cf_xarray/tests/test_accessor.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def test_describe(capsys):
2727
"\nCoordinates:\n\tlongitude: ['lon']\n\tlatitude: ['lat']"
2828
"\n\tvertical: []\n\ttime: ['time']\n"
2929
"\nCell Measures:\n\tarea: unsupported\n\tvolume: unsupported\n"
30-
"\nStandard Names:\n\t['air_temperature', 'latitude', 'longitude', 'time']\n"
30+
"\nStandard Names:\n\tair_temperature: ['air']\n\n"
3131
)
3232
assert actual == expected
3333

@@ -37,6 +37,11 @@ def test_get_standard_names():
3737
actual = airds.cf.get_standard_names()
3838
assert actual == expected
3939

40+
dsnew = xr.Dataset()
41+
dsnew["a"] = ("a", np.arange(10), {"standard_name": "a"})
42+
dsnew["b"] = ("a", np.arange(10), {"standard_name": "a"})
43+
assert dsnew.cf.get_standard_names() == ["a"]
44+
4045

4146
def test_getitem_standard_name():
4247
actual = airds.cf["air_temperature"]

0 commit comments

Comments
 (0)