class_docstr: Preprocess one multimodal pd.DataFrame including image paths, image bytearrays, texts, numerical features,
  and categorical features. Each modality may have multiple columns.
  The preprocessor is designed to output model-agnostic features.
class_docstr_tok: ["Preprocess","one","multimodal","pd.DataFrame","including","image","paths",",","image","bytearrays",",","texts",",","numerical","features",",","and","categorical","features",".","Each","modality","may","have","multiple","columns",".","The","preprocessor","is","designed","to","output","model-agnostic","features","."]
docstr: Prepare ground-truth labels to compute metric scores in evaluation. Note that
  numerical values are not normalized since we want to evaluate the model performance
  on the raw numerical values.
  
  Parameters
  ----------
  df
      The multimodal pd.DataFrame for evaluation.
  
  Returns
  -------
  Ground-truth labels ready to compute metric scores.
code: def transform_label_for_metric(
      self,
      df: pd.DataFrame,
      tokenizer: Optional[Any] = None,
  ) -> NDArray:
      """
      Prepare ground-truth labels to compute metric scores in evaluation. Note that
      numerical values are not normalized since we want to evaluate the model performance
      on the raw numerical values.
  
      Parameters
      ----------
      df
          The multimodal pd.DataFrame for evaluation.
  
      Returns
      -------
      Ground-truth labels ready to compute metric scores.
      """
      assert (
          self._fit_called or self._fit_y_called
      ), "You will need to first call preprocessor.fit_y() before calling preprocessor.transform_label_for_metric."
      assert (
          self._label_column in df.columns
      ), f"Label {self._label_column} is not in the data. Cannot perform evaluation without ground truth labels."
      y_df = df[self._label_column]
      if self.label_type == CATEGORICAL:
          # need to encode to integer labels
          y = self._label_generator.transform(y_df)
      elif self.label_type == NUMERICAL:
          # need to compute the metric on the raw numerical values (no normalization)
          y = pd.to_numeric(y_df).to_numpy()
      elif self.label_type == NER_ANNOTATION:
          x_df = df[self.ner_feature_names[0]]
          y = self._label_generator.transform_label_for_metric(
              y_df, x_df, tokenizer
          )
      else:
          raise NotImplementedError
  
      return y
  
imports: import logging
  from typing import Any, Dict, List, Optional, Tuple, Union
  import numpy
  import pandas
  from nptyping import NDArray
  from omegaconf import DictConfig, OmegaConf
  from sklearn.base import BaseEstimator, TransformerMixin
  from sklearn.impute import SimpleImputer
  from sklearn.pipeline import Pipeline
  from sklearn.preprocessing import MinMaxScaler, StandardScaler
  from autogluon.features import CategoryFeatureGenerator
  from ..constants import AUTOMM, CATEGORICAL, DOCUMENT, DOCUMENT_IMAGE, IDENTIFIER, IMAGE, IMAGE_BYTEARRAY, IMAGE_PATH, LABEL, NER, NER_ANNOTATION, NULL, NUMERICAL, OVD, ROIS, SEMANTIC_SEGMENTATION, SEMANTIC_SEGMENTATION_GT, SEMANTIC_SEGMENTATION_IMG, TEXT, TEXT_NER
  from .label_encoder import CustomLabelEncoder
label_desc: Use image node_id 38 for calling the MultiModalFeaturePreprocessor obj's underlying member method code with example usage: obj.transform_label_for_metric(df, tokenizer) and returns: y