@@ -4334,9 +4334,9 @@ def rename_dims(
4334
4334
f"cannot rename { k !r} because it is not found "
4335
4335
f"in the dimensions of this dataset { tuple (self .dims )} "
4336
4336
)
4337
- if v in self .dims or v in self :
4337
+ if v in self .dims :
4338
4338
raise ValueError (
4339
- f"Cannot rename { k } to { v } because { v } already exists. "
4339
+ f"Cannot rename dimension { k } to { v } because dimension { v } already exists. "
4340
4340
"Try using swap_dims instead."
4341
4341
)
4342
4342
@@ -4464,33 +4464,16 @@ def swap_dims(
4464
4464
f"variable along the old dimension { current_name !r} "
4465
4465
)
4466
4466
4467
- result_dims = {dims_dict .get (dim , dim ) for dim in self .dims }
4467
+ result = self .rename_dims (dims_dict )
4468
+ result = result .drop_indexes (dims_dict .keys (), errors = "ignore" )
4469
+ for dim in dims_dict .values ():
4470
+ if dim in result ._variables :
4471
+ if dim not in result ._coord_names :
4472
+ result = result .set_coords (dim )
4473
+ if dim not in result ._indexes :
4474
+ result = result .set_xindex (dim )
4468
4475
4469
- coord_names = self ._coord_names .copy ()
4470
- coord_names .update ({dim for dim in dims_dict .values () if dim in self .variables })
4471
-
4472
- variables : dict [Hashable , Variable ] = {}
4473
- indexes : dict [Hashable , Index ] = {}
4474
- for current_name , current_variable in self .variables .items ():
4475
- dims = tuple (dims_dict .get (dim , dim ) for dim in current_variable .dims )
4476
- var : Variable
4477
- if current_name in result_dims :
4478
- var = current_variable .to_index_variable ()
4479
- var .dims = dims
4480
- if current_name in self ._indexes :
4481
- indexes [current_name ] = self ._indexes [current_name ]
4482
- variables [current_name ] = var
4483
- else :
4484
- index , index_vars = create_default_index_implicit (var )
4485
- indexes .update ({name : index for name in index_vars })
4486
- variables .update (index_vars )
4487
- coord_names .update (index_vars )
4488
- else :
4489
- var = current_variable .to_base_variable ()
4490
- var .dims = dims
4491
- variables [current_name ] = var
4492
-
4493
- return self ._replace_with_new_dims (variables , coord_names , indexes = indexes )
4476
+ return result
4494
4477
4495
4478
def expand_dims (
4496
4479
self ,
0 commit comments