|
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