docstr: Execute all feature engineering steps in :attr:`steps` for `stage`, with datasets
  `datasets` as inputs
  
  Parameters
  ----------
  stage: String in {"pre_cv", "intra_cv"}
       Feature engineering stage, specifying which :class:`EngineerStep` instances in
       :attr:`steps` should be executed
  datasets: DFDict
      Original dict of datasets, containing all datasets, some of which may be superfluous, or
      may require additional processing to resolve merged/coupled datasets
code: def __call__(self, stage: str, **datasets: DFDict):
      """Execute all feature engineering steps in :attr:`steps` for `stage`, with datasets
      `datasets` as inputs
  
      Parameters
      ----------
      stage: String in {"pre_cv", "intra_cv"}
           Feature engineering stage, specifying which :class:`EngineerStep` instances in
           :attr:`steps` should be executed
      datasets: DFDict
          Original dict of datasets, containing all datasets, some of which may be superfluous, or
          may require additional processing to resolve merged/coupled datasets
      """
      if datasets:
          self.datasets = datasets
  
      for i, step in enumerate(self.steps):
          if step.stage == stage:
              self.datasets = step(**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 2 for calling the FeatureEngineer obj's underlying member method code with example usage: obj.__call__(stage) without return types