class_docstr: Abstract feature generator implementation from which all AutoGluon feature generators inherit.
  The purpose of a feature generator is to transform data from one form to another in a stateful manner.
  First, the generator is initialized with various arguments that dictate the way features are generated.
  Then, the generator is fit through either the `.fit()` or `.fit_transform()` methods using training data typically in pandas DataFrame format.
  Finally, the generator can transform new data with the same initial format as the training data through the `.transform()` method.
  
  Parameters
  ----------
  features_in : list, default None
      List of feature names the generator will expect and use in the fit and transform methods.
      Any feature in an incoming DataFrame that is not present in features_in is dropped and will not influence the transformation logic.
      If None, infer during fit from the _infer_features_in method.
      Equivalent to feature_metadata_in.get_features() post-fit.
  feature_metadata_in : :class:`autogluon.common.features.feature_metadata.FeatureMetadata`, default None
      :class:`FeatureMetadata` object corresponding to the training data input features.
      If None, infer during fit from the _infer_feature_metadata_in method.
      Any features not present in features_in (if provided) will be removed from feature_metadata_in.
  post_generators : list of FeatureGenerators, default None
      FeatureGenerators which will fit and transform sequentially after this object's transformation logic,
      feeding their output into the next generator's input.
      The output of the final FeatureGenerator will be the used as the transformed output.
  pre_enforce_types : bool, default False
      If True, the exact raw types (int64, float32, etc.) of the training data will be enforced on future data,
      either converting the types to the training types or raising an exception if unable.
      This is important to set to True on the outer feature generator in a feature generation pipeline to ensure
      incorrect dtypes are not passed downstream, but is often redundant when used on inner feature generators inside a pipeline.
  pre_drop_useless : bool, default False
      If True, features_in will be pruned at fit time of features containing only a single unique value across all rows.
  post_drop_duplicates : bool, default False
      If True, a :class:`DropDuplicatesFeatureGenerator` will be appended to post_generators.
      This feature generator will drop any duplicate features found in the data, keeping only one feature within any duplicate feature sets.
      Warning: For large datasets with many features, this may be very computationally expensive or even computationally infeasible.
  reset_index : bool, default False
      If True, for the duration of fit and transform, the input data's index is reset to be monotonically increasing from 0 to N-1 for a dataset of N rows.
      At the end of fit and transform, the original index is re-applied to the output data.
      This is important to set to True on the outer feature generator in a feature generation pipeline to ensure that a non-default
      index does not cause corruption of the inner feature generation if any inner feature generator does not properly handle non-default indices.
      This index reset is also applied to the y label data if provided during fit.
  column_names_as_str : bool, default True
      If True, the column names of the input data are converted to string if they were not already.
      This solves any issues related to downstream FeatureGenerators and models which cannot handle integer column names, and allows
      column name prefix and suffix operations to avoid errors.
      Note that for performance purposes, column names are only converted at transform time if they were not strings at fit time.
      Ensure consistent column names as input to avoid errors.
  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.
  infer_features_in_args : dict, default None
      Used as the kwargs input to FeatureMetadata.get_features(**kwargs) when inferring self.features_in.
      This is merged with the output dictionary of self.get_default_infer_features_in_args() depending on the value of infer_features_in_args_strategy.
      Only used when features_in is None.
      If None, then self.get_default_infer_features_in_args() is used directly.
      Refer to FeatureMetadata.get_features documentation for a full description of valid keys.
      Note: This is advanced functionality that is not necessary for most situations.
  infer_features_in_args_strategy : str, default 'overwrite'
      Determines how infer_features_in_args and self.get_default_infer_features_in_args() are combined to result in self._infer_features_in_args
      which dictates the features_in inference logic.
      If 'overwrite': infer_features_in_args is used exclusively and self.get_default_infer_features_in_args() is ignored.
      If 'update': self.get_default_infer_features_in_args() is dictionary updated by infer_features_in_args.
      If infer_features_in_args is None, this is ignored.
  banned_feature_special_types : List[str], default None
      List of feature special types to additionally exclude from input. Will update self.get_default_infer_features_in_args().
  log_prefix : str, default ''
      Prefix string added to all logging statements made by the generator.
  verbosity : int, default 2
      Controls the verbosity of logging.
      0 will silence logs, 1 will only log warnings, 2 will log info level information, and 3 will log info level information and provide detailed
      feature type input and output information.
      Logging is still controlled by the global logger configuration, and therefore a verbosity of 3 does not guarantee that logs will be output.
  
  Attributes
  ----------
  features_in : list of str
      List of feature names the generator will expect and use in the fit and transform methods.
      Equivalent to feature_metadata_in.get_features() post-fit.
  features_out : list of str
      List of feature names present in the output of fit_transform and transform methods.
      Equivalent to feature_metadata.get_features() post-fit.
  feature_metadata_in : FeatureMetadata
      The FeatureMetadata of data pre-transformation (data used as input to fit and transform methods).
  feature_metadata : FeatureMetadata
      The FeatureMetadata of data post-transformation (data outputted by fit_transform and transform methods).
  feature_metadata_real : FeatureMetadata
      The FeatureMetadata of data post-transformation consisting of the exact dtypes as opposed to the grouped raw dtypes found in feature_metadata_in,
      with grouped raw dtypes substituting for the special dtypes.
      This is only used in the print_feature_metadata_info method and is intended for introspection. It can be safely set to None to reduce memory and
      disk usage post-fit.
class_docstr_tok: ["Abstract","feature","generator","implementation","from","which","all","AutoGluon","feature","generators","inherit",".","The","purpose","of","a","feature","generator","is","to","transform","data","from","one","form","to","another","in","a","stateful","manner",".","First",",","the","generator","is","initialized","with","various","arguments","that","dictate","the","way","features","are","generated",".","Then",",","the","generator","is","fit","through","either","the","`",".fit","(",")","`","or","`",".fit_transform","(",")","`","methods","using","training","data","typically","in","pandas","DataFrame","format",".","Finally",",","the","generator","can","transform","new","data","with","the","same","initial","format","as","the","training","data","through","the","`",".transform","(",")","`","method",".","Parameters","--","--","--","--","--","features_in",":","list",",","default","None","List","of","feature","names","the","generator","will","expect","and","use","in","the","fit","and","transform","methods",".","Any","feature","in","an","incoming","DataFrame","that","is","not","present","in","features_in","is","dropped","and","will","not","influence","the","transformation","logic",".","If","None",",","infer","during","fit","from","the","_infer_features_in","method",".","Equivalent","to","feature_metadata_in.get_features","(",")","post-fit",".","feature_metadata_in",":",":","class",":","`","autogluon.common.features.feature_metadata.FeatureMetadata","`",",","default","None",":","class",":","`","FeatureMetadata","`","object","corresponding","to","the","training","data","input","features",".","If","None",",","infer","during","fit","from","the","_infer_feature_metadata_in","method",".","Any","features","not","present","in","features_in","(","if","provided",")","will","be","removed","from","feature_metadata_in",".","post_generators",":","list","of","FeatureGenerators",",","default","None","FeatureGenerators","which","will","fit","and","transform","sequentially","after","this","object","'s","transformation","logic",",","feeding","their","output","into","the","next","generator","'s","input",".","The","output","of","the","final","FeatureGenerator","will","be","the","used","as","the","transformed","output",".","pre_enforce_types",":","bool",",","default","False","If","True",",","the","exact","raw","types","(","int64",",","float32",",","etc",".",")","of","the","training","data","will","be","enforced","on","future","data",",","either","converting","the","types","to","the","training","types","or","raising","an","exception","if","unable",".","This","is","important","to","set","to","True","on","the","outer","feature","generator","in","a","feature","generation","pipeline","to","ensure","incorrect","dtypes","are","not","passed","downstream",",","but","is","often","redundant","when","used","on","inner","feature","generators","inside","a","pipeline",".","pre_drop_useless",":","bool",",","default","False","If","True",",","features_in","will","be","pruned","at","fit","time","of","features","containing","only","a","single","unique","value","across","all","rows",".","post_drop_duplicates",":","bool",",","default","False","If","True",",","a",":","class",":","`","DropDuplicatesFeatureGenerator","`","will","be","appended","to","post_generators",".","This","feature","generator","will","drop","any","duplicate","features","found","in","the","data",",","keeping","only","one","feature","within","any","duplicate","feature","sets",".","Warning",":","For","large","datasets","with","many","features",",","this","may","be","very","computationally","expensive","or","even","computationally","infeasible",".","reset_index",":","bool",",","default","False","If","True",",","for","the","duration","of","fit","and","transform",",","the","input","data","'s","index","is","reset","to","be","monotonically","increasing","from","0","to","N-1","for","a","dataset","of","N","rows",".","At","the","end","of","fit","and","transform",",","the","original","index","is","re-applied","to","the","output","data",".","This","is","important","to","set","to","True","on","the","outer","feature","generator","in","a","feature","generation","pipeline","to","ensure","that","a","non-default","index","does","not","cause","corruption","of","the","inner","feature","generation","if","any","inner","feature","generator","does","not","properly","handle","non-default","indices",".","This","index","reset","is","also","applied","to","the","y","label","data","if","provided","during","fit",".","column_names_as_str",":","bool",",","default","True","If","True",",","the","column","names","of","the","input","data","are","converted","to","string","if","they","were","not","already",".","This","solves","any","issues","related","to","downstream","FeatureGenerators","and","models","which","can","not","handle","integer","column","names",",","and","allows","column","name","prefix","and","suffix","operations","to","avoid","errors",".","Note","that","for","performance","purposes",",","column","names","are","only","converted","at","transform","time","if","they","were","not","strings","at","fit","time",".","Ensure","consistent","column","names","as","input","to","avoid","errors",".","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",".","infer_features_in_args",":","dict",",","default","None","Used","as","the","kwargs","input","to","FeatureMetadata.get_features","(","*","*","kwargs",")","when","inferring","self.features_in",".","This","is","merged","with","the","output","dictionary","of","self.get_default_infer_features_in_args","(",")","depending","on","the","value","of","infer_features_in_args_strategy",".","Only","used","when","features_in","is","None",".","If","None",",","then","self.get_default_infer_features_in_args","(",")","is","used","directly",".","Refer","to","FeatureMetadata.get_features","documentation","for","a","full","description","of","valid","keys",".","Note",":","This","is","advanced","functionality","that","is","not","necessary","for","most","situations",".","infer_features_in_args_strategy",":","str",",","default","'overwrite'","Determines","how","infer_features_in_args","and","self.get_default_infer_features_in_args","(",")","are","combined","to","result","in","self._infer_features_in_args","which","dictates","the","features_in","inference","logic",".","If","'overwrite","'",":","infer_features_in_args","is","used","exclusively","and","self.get_default_infer_features_in_args","(",")","is","ignored",".","If","'update","'",":","self.get_default_infer_features_in_args","(",")","is","dictionary","updated","by","infer_features_in_args",".","If","infer_features_in_args","is","None",",","this","is","ignored",".","banned_feature_special_types",":","List","[","str","]",",","default","None","List","of","feature","special","types","to","additionally","exclude","from","input",".","Will","update","self.get_default_infer_features_in_args","(",")",".","log_prefix",":","str",",","default","``","Prefix","string","added","to","all","logging","statements","made","by","the","generator",".","verbosity",":","int",",","default","2","Controls","the","verbosity","of","logging",".","0","will","silence","logs",",","1","will","only","log","warnings",",","2","will","log","info","level","information",",","and","3","will","log","info","level","information","and","provide","detailed","feature","type","input","and","output","information",".","Logging","is","still","controlled","by","the","global","logger","configuration",",","and","therefore","a","verbosity","of","3","does","not","guarantee","that","logs","will","be","output",".","Attributes","--","--","--","--","--","features_in",":","list","of","str","List","of","feature","names","the","generator","will","expect","and","use","in","the","fit","and","transform","methods",".","Equivalent","to","feature_metadata_in.get_features","(",")","post-fit",".","features_out",":","list","of","str","List","of","feature","names","present","in","the","output","of","fit_transform","and","transform","methods",".","Equivalent","to","feature_metadata.get_features","(",")","post-fit",".","feature_metadata_in",":","FeatureMetadata","The","FeatureMetadata","of","data","pre-transformation","(","data","used","as","input","to","fit","and","transform","methods",")",".","feature_metadata",":","FeatureMetadata","The","FeatureMetadata","of","data","post-transformation","(","data","outputted","by","fit_transform","and","transform","methods",")",".","feature_metadata_real",":","FeatureMetadata","The","FeatureMetadata","of","data","post-transformation","consisting","of","the","exact","dtypes","as","opposed","to","the","grouped","raw","dtypes","found","in","feature_metadata_in",",","with","grouped","raw","dtypes","substituting","for","the","special","dtypes",".","This","is","only","used","in","the","print_feature_metadata_info","method","and","is","intended","for","introspection",".","It","can","be","safely","set","to","None","to","reduce","memory","and","disk","usage","post-fit","."]
docstr: Outputs detailed logs of the generator, such as the fit runtime.
  
  Parameters
  ----------
  log_level : int, default 20
      Log level of the logging statements.
docstr_tok: ["Outputs","detailed","logs","of","the","generator",",","such","as","the","fit","runtime",".","Parameters","--","--","--","--","--","log_level",":","int",",","default","20","Log","level","of","the","logging","statements","."]
code: def print_generator_info(self, log_level: int = 20):
      """
      Outputs detailed logs of the generator, such as the fit runtime.
  
      Parameters
      ----------
      log_level : int, default 20
          Log level of the logging statements.
      """
      if self.fit_time:
          self._log(
              log_level, f"\t{round(self.fit_time, 1)}s = Fit runtime"
          )
          self._log(
              log_level,
              f"\t{len(self.features_in)} features in original data used to generate {len(self.features_out)} features in processed data.",
          )
  
imports: import copy
  import inspect
  import logging
  import time
  from collections import defaultdict
  from typing import Dict, List
  from pandas import DataFrame, Series
  from autogluon.common.features.feature_metadata import FeatureMetadata
  from autogluon.common.features.infer_types import get_type_group_map_special, get_type_map_raw, get_type_map_real
  from autogluon.common.savers import save_pkl
  from ..utils import is_useless_feature
label_desc: Use image node_id 32 for calling the AbstractFeatureGenerator obj's underlying member method code with example usage: obj.print_generator_info(log_level) without return types