|
1 | 1 | import functools
|
2 | 2 | import inspect
|
3 | 3 | import itertools
|
4 |
| -import textwrap |
5 | 4 | import warnings
|
6 | 5 | from collections import ChainMap
|
7 | 6 | from typing import (
|
@@ -398,18 +397,13 @@ def _get_measure(da: Union[DataArray, Dataset], key: str) -> List[str]:
|
398 | 397 | }
|
399 | 398 |
|
400 | 399 |
|
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. """ |
406 | 402 | varnames = []
|
407 |
| - counts = dict.fromkeys(name, 0) |
408 | 403 | for vname, var in ds.variables.items():
|
409 | 404 | stdname = var.attrs.get("standard_name", None)
|
410 |
| - if stdname in name: |
| 405 | + if stdname == name: |
411 | 406 | varnames.append(str(vname))
|
412 |
| - counts[stdname] += 1 |
413 | 407 |
|
414 | 408 | return varnames
|
415 | 409 |
|
@@ -848,11 +842,11 @@ def describe(self):
|
848 | 842 | if isinstance(self._obj, DataArray):
|
849 | 843 | text += "\tunsupported\n"
|
850 | 844 | 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 | + |
856 | 850 | print(text)
|
857 | 851 |
|
858 | 852 | def get_valid_keys(self) -> Set[str]:
|
@@ -902,11 +896,13 @@ def get_standard_names(self) -> List[str]:
|
902 | 896 | elif isinstance(self._obj, DataArray):
|
903 | 897 | variables = self._obj.coords
|
904 | 898 | 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 | + ) |
910 | 906 | )
|
911 | 907 |
|
912 | 908 | def get_associated_variable_names(self, name: Hashable) -> Dict[str, List[str]]:
|
@@ -1013,7 +1009,7 @@ def __getitem__(self, key: Union[str, List[str]]):
|
1013 | 1009 | if measure:
|
1014 | 1010 | varnames.extend(measure)
|
1015 | 1011 | elif not isinstance(self._obj, DataArray):
|
1016 |
| - stdnames = _filter_by_standard_names(self._obj, k) |
| 1012 | + stdnames = _get_with_standard_name(self._obj, k) |
1017 | 1013 | successful[k] = bool(stdnames)
|
1018 | 1014 | varnames.extend(stdnames)
|
1019 | 1015 | coords.extend(list(set(stdnames) & set(self._obj.coords)))
|
|
0 commit comments