[docs]defrename_with_bookkeeping(xarray_obj:Dataset,name_dict:Mapping|None=None,attrs:list[str]|None=None,)->Dataset:"""Find and update all instances of a given variable to a new name. Parameters can be referenced in the attributes of separate parameter (e.g. ``ancillary_variables``) and need to be updated appropriately when renaming variables. :param xarray.Dataset xarray_obj: A Dataset containing variables, flags, etc. :param typing.Mapping name_dict: Mapping of old variable names to new. :param typing.List[str] attrs: Names of variable attributes to search through. :rtype: xarray.Dataset """# lets just noop this caseifname_dictisNone:returnxarray_obj# easy partrenamed=xarray_obj.rename(name_dict)# no bookkeeping to doifattrsisNone:returnrenamed# find and search through all variables which have attrforattrinattrs:forvar,dsinrenamed.filter_by_attrs(**{attr:is_not_none}).items():attr_values=ds.attrs[attr].split(" ")forkey,valueinname_dict.items():foridx,attr_valueinenumerate(attr_values):ifkey==attr_value:attr_values[idx]=attr_value.replace(key,value)renamed[var].attrs[attr]=" ".join(attr_values)returnrenamed