docstr: Produce a dict of critical attributes describing the :class:`FeatureEngineer` instance
  for use by key-making classes
  
  Returns
  -------
  Dict
      Important attributes describing this :class:`FeatureEngineer` instance
code: def get_key_data(self) -> dict:
      """Produce a dict of critical attributes describing the :class:`FeatureEngineer` instance
      for use by key-making classes
  
      Returns
      -------
      Dict
          Important attributes describing this :class:`FeatureEngineer` instance
      """
      return dict(
          steps=[
              _.get_key_data() if isinstance(_, EngineerStep) else _
              for _ in self.steps
          ],
          do_validate=self.do_validate,
          datasets=self.datasets,
      )
  
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 7 for calling the FeatureEngineer obj's underlying member method code with example usage: obj.get_key_data() and returns: dict