@@ -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 exception 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