Skip to content

Commit d827dd0

Browse files
authored
Ensure Dataset.dims wraps a normal dict, not an OrderedDict (#923)
* Ensure Dataset.dims wraps a normal dict, not an OrderedDict This was introduced by GH857. * Alternate fix
1 parent 7a7c3d5 commit d827dd0

File tree

4 files changed

+10
-3
lines changed

4 files changed

+10
-3
lines changed

xarray/core/coordinates.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ def _update_coords(self, coords):
164164

165165
self._data._variables = variables
166166
self._data._coord_names.update(updated_coord_names)
167-
self._data._dims = dims
167+
self._data._dims = dict(dims)
168168

169169
def __delitem__(self, key):
170170
if key in self:

xarray/core/dataset.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,7 @@ def _construct_direct(cls, variables, coord_names, dims=None, attrs=None,
351351

352352
@classmethod
353353
def _from_vars_and_coord_names(cls, variables, coord_names):
354-
dims = calculate_dimensions(variables)
354+
dims = dict(calculate_dimensions(variables))
355355
return cls._construct_direct(variables, coord_names, dims)
356356

357357
def _replace_vars_and_dims(self, variables, coord_names=None, dims=None,

xarray/core/merge.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -395,7 +395,7 @@ def merge_core(objs, compat='broadcast_equals', join='outer', priority_arg=None,
395395
'coordinates or not in the merged result: %s'
396396
% ambiguous_coords)
397397

398-
return variables, coord_names, dims
398+
return variables, coord_names, dict(dims)
399399

400400

401401
def merge(objects, compat='broadcast_equals', join='outer'):

xarray/test/test_dataset.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,13 @@ def test_properties(self):
297297
ds = create_test_data()
298298
self.assertEqual(ds.dims,
299299
{'dim1': 8, 'dim2': 9, 'dim3': 10, 'time': 20})
300+
self.assertEqual(list(ds.dims), sorted(ds.dims))
301+
302+
# These exact types aren't public API, but this makes sure we don't
303+
# change them inadvertently:
304+
self.assertIsInstance(ds.dims, utils.Frozen)
305+
self.assertIsInstance(ds.dims.mapping, utils.SortedKeysDict)
306+
self.assertIs(type(ds.dims.mapping.mapping), dict)
300307

301308
self.assertItemsEqual(ds, list(ds.variables))
302309
self.assertItemsEqual(ds.keys(), list(ds.variables))

0 commit comments

Comments
 (0)