docstr: Parameters
  ----------
  model : AbstractModel
      Model to perform permutation feature importance recursive feature elimination with.
  time_limit : float
      Time budget for the entire feature selection procedure.
  problem_type : str
      Problem type (Ex. binary, regression, ...).
  seed : int, default 0
      Random seed for generating reproducible results.
  raise_exception : bool, default False
      Whether to crash AutoGluon if there is an error in feature selection. If False, return the current best feature subset.
docstr_tok: ["Parameters","--","--","--","--","--","model",":","AbstractModel","Model","to","perform","permutation","feature","importance","recursive","feature","elimination","with",".","time_limit",":","float","Time","budget","for","the","entire","feature","selection","procedure",".","problem_type",":","str","Problem","type","(","Ex",".","binary",",","regression",",","...",")",".","seed",":","int",",","default","0","Random","seed","for","generating","reproducible","results",".","raise_exception",":","bool",",","default","False","Whether","to","crash","AutoGluon","if","there","is","an","error","in","feature","selection",".","If","False",",","return","the","current","best","feature","subset","."]
code: def __init__(
      self,
      model: AbstractModel,
      time_limit: float,
      problem_type: str,
      seed: int = 0,
      raise_exception=False,
  ) -> None:
      """
      Parameters
      ----------
      model : AbstractModel
          Model to perform permutation feature importance recursive feature elimination with.
      time_limit : float
          Time budget for the entire feature selection procedure.
      problem_type : str
          Problem type (Ex. binary, regression, ...).
      seed : int, default 0
          Random seed for generating reproducible results.
      raise_exception : bool, default False
          Whether to crash AutoGluon if there is an error in feature selection. If False, return the current best feature subset.
      """
      # TODO: Make this work with unlabelled data
      assert time_limit is not None, "Time limit cannot be unspecified."
      self.is_bagged = isinstance(model, BaggedEnsembleModel)
  
      self.model_class = model.__class__
      self.model_params = model.get_params()
      self.model_name = "FeatureSelector_" + self.model_params["name"]
      self.model_params["name"] = self.model_name
      if self.is_bagged:
          # required for feature importance computation
          self.model_params["hyperparameters"]["use_child_oof"] = False
          self.model_params["hyperparameters"]["save_bag_folds"] = True
      del model
  
      self.time_limit = time_limit
      self.time_start = time.time()
      self.problem_type = problem_type
      self.rng = np.random.default_rng(seed)
      self.fit_score_time = None
      self.model_predict_time = None
      self.attempted_removals = set()
      self.replace_bag = False
      self.max_n_shuffle = 20
      self.min_prune_ratio = 0.01
      self.raise_exception = raise_exception
  
imports: import logging
  import time
  import traceback
  import uuid
  from copy import deepcopy
  from typing import List, Set, Tuple, Union
  import numpy
  import pandas
  from autogluon.common.features.types import R_FLOAT
  from ..models.abstract.abstract_model import AbstractModel
  from ..models.ensemble.bagged_ensemble_model import BaggedEnsembleModel
  from ..utils.exceptions import TimeLimitExceeded
  from ..utils.utils import generate_train_test_split, unevaluated_fi_df_template
label_desc: Use image node_id 1 to create a new FeatureSelector object  with example: obj = FeatureSelector(model, time_limit, problem_type, seed, raise_exception)