docstr: Perform the inverse transformation for all engineer steps in :attr:`steps` in sequence
  on `data`
  
  Parameters
  ----------
  data: Array-like
      Data to inverse transform with any inversions present in :attr:`steps`
  
  Returns
  -------
  Array-like
      Result of sequentially calling inverse transformations in :attr:`steps` on `data`. If
      any step has :attr:`EngineerStep.inversion` = None, `data` is unmodified for that step,
      and proceeds to next engineer step inversion
code: def inverse_transform(self, data):
      """Perform the inverse transformation for all engineer steps in :attr:`steps` in sequence
      on `data`
  
      Parameters
      ----------
      data: Array-like
          Data to inverse transform with any inversions present in :attr:`steps`
  
      Returns
      -------
      Array-like
          Result of sequentially calling inverse transformations in :attr:`steps` on `data`. If
          any step has :attr:`EngineerStep.inversion` = None, `data` is unmodified for that step,
          and proceeds to next engineer step inversion"""
      inverted_data = data
  
      # TODO: Make sure "pre_cv"-stage steps are inverted first, then "intra_cv"-stage
      for i, step in enumerate(self.steps):
          inverted_data = step.inverse_transform(inverted_data)
  
      return inverted_data
  
imports: from hyperparameter_hunter.keys.hashing import make_hash_sha256
  from hyperparameter_hunter.space.dimensions import Categorical, RejectedOptional
  from hyperparameter_hunter.utils.boltons_utils import remap, default_visit, default_enter
  from hyperparameter_hunter.utils.general_utils import subdict
  import ast
  from contextlib import suppress
  from inspect import getsource
  import numpy
  import pandas
  from typing import List, Callable, Dict, Union, Tuple
label_desc: Use image node_id 4 for calling the FeatureEngineer obj's underlying member method code with example usage: obj.inverse_transform(data) and returns: inverted_data