code: def _get_sample_df(class_probs):
      nrows = 1000
      thresholds = np.cumsum((class_probs * nrows).astype(int))
  
      df = pd.DataFrame(
          np.random.randint(0, 100, size=(nrows, 3)),
          columns=["A", "B", "C"],
      )
  
      def get_category(v):
          if v < thresholds[0]:
              return 0
          if thresholds[0] <= v < thresholds[1]:
              return 1
          return 2
  
      df["category"] = df.index.map(get_category).astype(np.int8)
      return df
  
imports: import os
  import tempfile
  from typing import List, Set
  from unittest import mock
  import numpy
  import pandas
  import pytest
  from ludwig.api import LudwigModel
  from ludwig.constants import COLUMN, ENCODER, INPUT_FEATURES, NAME, OUTPUT_FEATURES, PREPROCESSING, SPLIT, TYPE
  from ludwig.schema.model_types.base import ModelConfig
  from ludwig.types import FeatureConfigDict, ModelConfigDict
  from ludwig.utils.misc_utils import merge_dict
  from tests.integration_tests.utils import binary_feature, category_feature, generate_data, image_feature, minio_test_creds, number_feature, private_param, remote_tmpdir, text_feature
  import dask.dataframe
  from ray.tune.experiment.trial import Trial
  from ludwig.automl import auto_train, create_auto_config, train_with_config
  from ludwig.automl.automl import OUTPUT_DIR
  from ludwig.hyperopt.execution import RayTuneExecutor
label_desc: Use image node_id 11 for calling a global function with example usage: _get_sample_df(class_probs) and returns: df, int, int, int