code: def test_hash_pandas_dataframe_deterministic():
      pdf = pd.DataFrame(
          {
              "f1": [2, 3],
              "f2": [2.5, 3.5],
              "f3": [[6, 7], [8, 9]],
              "f4": [np.array([12, 13]), np.array([14, 15])],
              "f5": [np.array([12.5, 13.5]), np.array([14.5, 15.5])],
              "f6": [np.array([[22], [23]]), np.array([[24], [25]])],
              "f7": ["abc", "def"],
              "f8": [b"ghi", b"jkl"],
              "f9": [{"a1": 32, "b1": 33}, {"a2": 34, "b2": 35}],
              "f10": [{"a3": [42, 43]}, {"a4": [44, 45]}],
              "f11": pd.Series(["a5", "a6"], dtype="category"),
              "f13": [
                  pd.Timestamp("2017-01-01T12"),
                  pd.Timestamp("2017-02-01T11"),
              ],
              "f14": [True, False],
              "f15": [
                  pd.Period("2000-01-02", freq="D"),
                  pd.Period("2001-01-02", freq="M"),
              ],
              "f16": [pd.Interval(22.5, 23.5), pd.Interval(24.5, 25.5)],
          }
      )
      result = _hash_pandas_dataframe(pdf)
      assert result.tolist() == [
          17628718130518205164,
          1442560710956928490,
      ]
  
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 5 for calling a global function with example usage: test_hash_pandas_dataframe_deterministic() without return types