@@ -3560,6 +3560,48 @@ def _rename_all(
35603560
35613561 return variables , coord_names , dims , indexes
35623562
3563+ def _rename (
3564+ self : T_Dataset ,
3565+ name_dict : Mapping [Any , Hashable ] | None = None ,
3566+ ** names : Hashable ,
3567+ ) -> T_Dataset :
3568+ """Also used internally by DataArray so that the warning (if any)
3569+ is raised at the right stack level.
3570+ """
3571+ name_dict = either_dict_or_kwargs (name_dict , names , "rename" )
3572+ for k in name_dict .keys ():
3573+ if k not in self and k not in self .dims :
3574+ raise ValueError (
3575+ f"cannot rename { k !r} because it is not a "
3576+ "variable or dimension in this dataset"
3577+ )
3578+
3579+ create_dim_coord = False
3580+ new_k = name_dict [k ]
3581+
3582+ if k in self .dims and new_k in self ._coord_names :
3583+ coord_dims = self ._variables [name_dict [k ]].dims
3584+ if coord_dims == (k ,):
3585+ create_dim_coord = True
3586+ elif k in self ._coord_names and new_k in self .dims :
3587+ coord_dims = self ._variables [k ].dims
3588+ if coord_dims == (new_k ,):
3589+ create_dim_coord = True
3590+
3591+ if create_dim_coord :
3592+ warnings .warn (
3593+ f"rename { k !r} to { name_dict [k ]!r} does not create an index "
3594+ "anymore. Try using swap_dims instead or use set_index "
3595+ "after rename to create an indexed coordinate." ,
3596+ UserWarning ,
3597+ stacklevel = 3 ,
3598+ )
3599+
3600+ variables , coord_names , dims , indexes = self ._rename_all (
3601+ name_dict = name_dict , dims_dict = name_dict
3602+ )
3603+ return self ._replace (variables , coord_names , dims = dims , indexes = indexes )
3604+
35633605 def rename (
35643606 self : T_Dataset ,
35653607 name_dict : Mapping [Any , Hashable ] | None = None ,
@@ -3588,18 +3630,7 @@ def rename(
35883630 Dataset.rename_dims
35893631 DataArray.rename
35903632 """
3591- name_dict = either_dict_or_kwargs (name_dict , names , "rename" )
3592- for k in name_dict .keys ():
3593- if k not in self and k not in self .dims :
3594- raise ValueError (
3595- f"cannot rename { k !r} because it is not a "
3596- "variable or dimension in this dataset"
3597- )
3598-
3599- variables , coord_names , dims , indexes = self ._rename_all (
3600- name_dict = name_dict , dims_dict = name_dict
3601- )
3602- return self ._replace (variables , coord_names , dims = dims , indexes = indexes )
3633+ return self ._rename (name_dict = name_dict , ** names )
36033634
36043635 def rename_dims (
36053636 self : T_Dataset ,
0 commit comments