code: def fit_transform(self, bundle: DataBundle) -> DataBundle:
      x_train: np.ndarray = bundle.x_train  # type: ignore
      y_train: np.ndarray = bundle.y_train  # type: ignore
      self.feature_types = {}
      self.label_types = {}
      self.num_unique_features = {}
      self.num_unique_labels = {}
      for idx, line in enumerate(x_train.T):
          self._fit(idx, line, False, self.config.custom_feature_types)
      for idx, line in enumerate(y_train.T):
          self._fit(idx, line, True, None)
      counter = 0
      self.index_mapping = {}
      for i in range(x_train.shape[-1]):
          str_i = str(i)
          if self.feature_types[str_i] == ColumnTypes.REDUNDANT:
              continue
          self.index_mapping[str_i] = counter
          counter += 1
      return self.transform(bundle, False)
  
imports: import numpy
  from typing import Any
  from typing import Dict
  from typing import Tuple
  from typing import Optional
  from dataclasses import dataclass
  from cftool.misc import print_warning
  from .file import FileParserBlock
  from ....schema import DataTypes
  from ....schema import DataBundle
  from ....schema import ColumnTypes
  from ....schema import INoInitDataBlock
label_desc: Use image node_id 3 for calling the RecognizerBlock obj's underlying member method code with example usage: obj.fit_transform(bundle) and returns: self