code: def split(
      self,
      df: DataFrame,
      backend: Backend,
      random_seed: float = default_random_seed,
  ) -> Tuple[DataFrame, DataFrame, DataFrame]:
      df[self.column] = df[self.column].astype(np.int8)
      dfs = split_dataset_ttv(df, self.column)
      train, test, val = tuple(
          df.drop(columns=self.column) if df is not None else None
          for df in dfs
      )
      return train, val, test
  
imports: import logging
  from abc import ABC, abstractmethod
  from typing import List, Optional, Tuple, TYPE_CHECKING
  from zlib import crc32
  import numpy
  from sklearn.model_selection import train_test_split
  from ludwig.api_annotations import DeveloperAPI
  from ludwig.backend.base import Backend
  from ludwig.constants import BINARY, CATEGORY, DATE, MIN_DATASET_SPLIT_ROWS, SPLIT
  from ludwig.error import ConfigValidationError
  from ludwig.schema.split import DateTimeSplitConfig, FixedSplitConfig, HashSplitConfig, RandomSplitConfig, StratifySplitConfig
  from ludwig.types import ModelConfigDict, PreprocessingConfigDict
  from ludwig.utils.data_utils import hash_dict, split_dataset_ttv
  from ludwig.utils.defaults import default_random_seed
  from ludwig.utils.registry import Registry
  from ludwig.utils.types import DataFrame
label_desc: Use image node_id 2 for calling the FixedSplitter obj's underlying member method code with example usage: obj.split(df, backend, random_seed) and returns: train,  val,  test