Skip to content

Commit 3d9dc31

Browse files
author
Benoit Bovy
committed
check for level/var name conflicts in one place
1 parent 45cdb80 commit 3d9dc31

File tree

2 files changed

+8
-17
lines changed

2 files changed

+8
-17
lines changed

xarray/core/coordinates.py

-12
Original file line numberDiff line numberDiff line change
@@ -151,12 +151,6 @@ def to_dataset(self):
151151
def _update_coords(self, coords):
152152
from .dataset import calculate_dimensions
153153

154-
for key in coords:
155-
if key in self._data._level_coords:
156-
raise ValueError("%r is already a MultiIndex level of "
157-
"coordinate %r"
158-
% (key, self._data._level_coords[key]))
159-
160154
variables = self._data._variables.copy()
161155
variables.update(coords)
162156

@@ -203,12 +197,6 @@ def _names(self):
203197
def _update_coords(self, coords):
204198
from .dataset import calculate_dimensions
205199

206-
for key in coords:
207-
if key in self._data._level_coords:
208-
raise ValueError("%r is already a MultiIndex level of "
209-
"coordinate %r"
210-
% (key, self._data._level_coords[key]))
211-
212200
dims = calculate_dimensions(coords)
213201
if set(dims) != set(self.dims):
214202
raise ValueError('cannot add coordinates with new dimensions to '

xarray/core/variable.py

+8-5
Original file line numberDiff line numberDiff line change
@@ -1321,13 +1321,16 @@ def assert_unique_multiindex_level_names(variables):
13211321
idx_level_names = var.to_coord().level_names
13221322
if idx_level_names is not None:
13231323
for n in idx_level_names:
1324-
level_names[n].append(var_name)
1324+
level_names[n].append('%r (%s)' % (n, var_name))
1325+
1326+
for n in level_names:
1327+
if n in variables:
1328+
level_names[n].append('(%s)' % n)
13251329

13261330
duplicate_level_names = {k: v for k, v in level_names.items()
13271331
if len(v) > 1}
13281332
if duplicate_level_names:
1329-
duplicate_str = '\n'.join(['level %r found in %s'
1330-
% (k, ' and '.join(v))
1331-
for k, v in duplicate_level_names.items()])
1332-
raise ValueError('conflicting MultiIndex level names:\n%s'
1333+
duplicate_str = '\n'.join([', '.join(v)
1334+
for v in duplicate_level_names.values()])
1335+
raise ValueError('conflicting MultiIndex level name(s):\n%s'
13331336
% duplicate_str)

0 commit comments

Comments
 (0)