code: def test_get_data_automatic_split(
      cfg_mock,
      read_dataframe_drop_missing_labels_mock,
      conversation_chain_ids_mock,
  ):
      cfg_mock.dataset.validation_strategy = "automatic"
      train_df, val_df = load_train_valid_data(cfg_mock)
      train_ids = set(train_df["id"].tolist())
      val_ids = set(val_df["id"].tolist())
  
      assert len(train_ids.intersection(val_ids)) == 0
      assert len(train_ids) + len(val_ids) == 100
  
      shared_groups = [
          i
          for i in groups
          if not train_ids.isdisjoint(i) and not val_ids.isdisjoint(i)
      ]
      assert len(shared_groups) == 0
  
file_path: h2o-llmstudio/tests/src/utils/test_data_utils.py
imports: import os
  import pathlib
  import random
  import unittest
  from unittest.mock import MagicMock
  import pandas
  import pytest
  from llm_studio.app_utils.default_datasets import prepare_default_dataset_causal_language_modeling
  from llm_studio.src.datasets.conversation_chain_handler import ConversationChainHandler
  from llm_studio.src.utils.data_utils import load_train_valid_data
label_desc: Use image node_id 5 for calling a global function with example usage: test_get_data_automatic_split(cfg_mock, read_dataframe_drop_missing_labels_mock, conversation_chain_ids_mock) without return types