code: def test_make_elem_hashable():
      assert _make_elem_hashable(3) == 3
      assert _make_elem_hashable("abc") == "abc"
      assert _make_elem_hashable((2, 3)) == (2, 3)
      assert _make_elem_hashable([2, 3]) == (2, 3)
      assert _make_elem_hashable([[2, 3], [4, 5]]) == ((2, 3), (4, 5))
      assert _make_elem_hashable({"a": 2, "b": 3}) == (
          ("a", 2),
          ("b", 3),
      )
      assert _make_elem_hashable({"a": [2, 3]}) == (("a", (2, 3)),)
      assert _make_elem_hashable(np.array([2, 3])) == ((2,), (2, 3))
      assert _make_elem_hashable(np.array([[2, 3, 4], [5, 6, 7]])) == (
          (2, 3),
          (2, 3, 4, 5, 6, 7),
      )
  
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 4 for calling a global function with example usage: test_make_elem_hashable() without return types