Skip to content

Commit f1547f9

Browse files
committed
WIP: make _check_dims public, generalize to accept sequences and add error message
1 parent 0835a3f commit f1547f9

File tree

1 file changed

+30
-8
lines changed

1 file changed

+30
-8
lines changed

xarray/core/utils.py

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -989,7 +989,7 @@ def parse_dims(
989989
if isinstance(dim, str):
990990
dim = (dim,)
991991
if check_exists:
992-
_check_dims(set(dim), set(all_dims))
992+
check_dims(set(dim), set(all_dims))
993993
return tuple(dim)
994994

995995

@@ -1051,7 +1051,7 @@ def parse_ordered_dims(
10511051
dims_set: set[Hashable | ellipsis] = set(dim)
10521052
all_dims_set = set(all_dims)
10531053
if check_exists:
1054-
_check_dims(dims_set, all_dims_set)
1054+
check_dims(dims_set, all_dims_set)
10551055
if len(all_dims_set) != len(all_dims):
10561056
raise ValueError("Cannot use ellipsis with repeated dims")
10571057
dims = tuple(dim)
@@ -1070,13 +1070,35 @@ def parse_ordered_dims(
10701070
)
10711071

10721072

1073-
def _check_dims(dim: set[Hashable | ellipsis], all_dims: set[Hashable]) -> None:
1074-
wrong_dims = dim - all_dims
1073+
def check_dims(
1074+
dims: Sequence[Hashable | ellipsis],
1075+
all_dims: Sequence[Hashable],
1076+
message_fmt: str | None = None,
1077+
obj: Any = None,
1078+
exc_type: Exception = ValueError,
1079+
) -> None:
1080+
"""
1081+
Check if any of the dimensions in 'dims' is missing from 'all_dims'.
1082+
1083+
Parameters
1084+
----------
1085+
dims : Sequence of Hashable or "..."
1086+
Dimension(s) to check. "..." is ignored.
1087+
all_dims : Sequence of Hashable
1088+
The expected dimensions to check against.
1089+
message_fmt : str
1090+
Error message of the exception raised if some of 'dims' can not be
1091+
found in 'all_dims'. Will be formatted with two arguments: the missing
1092+
dimensions and the expected dimensions. If not given, a default message
1093+
is used.
1094+
exc_type : Exception
1095+
The texception type to raise.
1096+
"""
1097+
if message_fmt is None:
1098+
message_fmt = "Dimension(s) {!r} not found in data dimensions {}"
1099+
wrong_dims = set(dims) - set(all_dims)
10751100
if wrong_dims and wrong_dims != {...}:
1076-
wrong_dims_str = ", ".join(f"'{d!s}'" for d in wrong_dims)
1077-
raise ValueError(
1078-
f"Dimension(s) {wrong_dims_str} do not exist. Expected one or more of {all_dims}"
1079-
)
1101+
raise exc_type(message_fmt.format(tuple(wrong_dims), tuple(all_dims)))
10801102

10811103

10821104
_Accessor = TypeVar("_Accessor")

0 commit comments

Comments
 (0)