[docs]classRenameFeatureGenerator(AbstractFeatureGenerator):""" RenameFeatureGenerator renames the columns without altering their values. This can be used to avoid column name collisions when transforming the same feature in multiple ways, or to highlight that a feature was derived from a particular pipeline. Parameters ---------- name_prefix : str, default None Name prefix to add to all output feature names. name_suffix : str, default None Name suffix to add to all output feature names. inplace : bool, default False If True, then the column names are renamed inplace without copying the input data. This will alter the input data outside of the scope of this function. **kwargs : Refer to :class:`AbstractFeatureGenerator` documentation for details on valid key word arguments. """def__init__(self,name_prefix=None,name_suffix=None,inplace=False,**kwargs):super().__init__(**kwargs)self._name_prefix=name_prefixself._name_suffix=name_suffixself.inplace=inplaceself._is_updated_name=Nonedef_fit_transform(self,X:DataFrame,**kwargs)->(DataFrame,dict):column_rename_map,self._is_updated_name=self._get_renamed_features(X)ifnotself.inplace:X=copy.deepcopy(X)X.columns=[column_rename_map.get(col,col)forcolinX.columns]feature_metadata_out=self.feature_metadata_in.rename_features(column_rename_map)returnX,feature_metadata_out.type_group_map_specialdef_transform(self,X:DataFrame)->DataFrame:ifself._is_updated_name:ifnotself.inplace:X=copy.deepcopy(X)X.columns=self.features_outreturnXdef_get_renamed_features(self,X:DataFrame)->(DataFrame,dict):X_columns_orig=list(X.columns)X_columns_new=list(X.columns)ifself._name_prefix:X_columns_new=[self._name_prefix+columnforcolumninX_columns_new]ifself._name_suffix:X_columns_new=[column+self._name_suffixforcolumninX_columns_new]ifX_columns_orig!=X_columns_new:is_updated_name=Trueelse:is_updated_name=Falsecolumn_rename_map={orig:newfororig,newinzip(X_columns_orig,X_columns_new)}returncolumn_rename_map,is_updated_name@staticmethoddefget_default_infer_features_in_args()->dict:returndict()def_more_tags(self):return{"feature_interactions":False,"allow_post_generators":False,# TODO: This might not be necessary anymore}