code: def set_up_dataset(tmp_path, num_classes=2):
      ingest_output_dir = tmp_path / "steps" / "ingest" / "outputs"
      ingest_output_dir.mkdir(parents=True)
      split_output_dir = tmp_path / "steps" / "split" / "outputs"
      split_output_dir.mkdir(parents=True)
      num_rows = 1000
      num_good_rows = 900
      input_dataframe = pd.DataFrame(
          {
              "a": list(range(num_rows)),
              "b": [str(i) for i in range(num_rows)],
              "y": [
                  float(i % num_classes) if i < num_good_rows else None
                  for i in range(num_rows)
              ],
          }
      )
      input_dataframe.to_parquet(
          str(ingest_output_dir / "dataset.parquet")
      )
      return num_good_rows, split_output_dir, input_dataframe
  
imports: from pathlib import Path
  from unittest import mock
  from unittest.mock import Mock
  import numpy
  import pandas
  import pytest
  import mlflow
  from mlflow.environment_variables import MLFLOW_RECIPES_EXECUTION_DIRECTORY
  from mlflow.exceptions import MlflowException
  from mlflow.recipes.steps.split import _OUTPUT_TEST_FILE_NAME, _OUTPUT_TRAIN_FILE_NAME, _OUTPUT_VALIDATION_FILE_NAME, SplitStep, SplitValues, _get_split_df, _hash_pandas_dataframe, _make_elem_hashable, _validate_user_code_output
  from mlflow.recipes.utils import _RECIPE_CONFIG_FILE_NAME
  from mlflow.utils.file_utils import read_yaml
label_desc: Use image node_id 1 for calling a global function with example usage: set_up_dataset(tmp_path, num_classes) and returns: num_good_rows,  split_output_dir,  input_dataframe