code: def test_experiment(
      raw_dataset_fp: str, random_seed: int, second_seed_offset: int
  ) -> None:
      """Test reproducibility of experiment API.
  
      Args:
          raw_dataset_fp (str): file path for data to be used as part of this test
          random_seed(int): random seed integer to use for test
          second_seed_offset(int): zero to use same random seed for second test, non-zero to use a different
              seed for the second run.
  
      Returns: None
      """
      # perform first model experiment
      model1 = LudwigModel(config=CONFIG, logging_level=logging.WARN)
      (
          evaluation_statistics1,
          training_statistics1,
          preprocessed_data1,
          _,
      ) = model1.experiment(
          dataset=raw_dataset_fp,
          random_seed=random_seed,
          skip_save_processed_input=True,
      )
  
      # perform second model experiment
      model2 = LudwigModel(config=CONFIG, logging_level=logging.WARN)
      (
          evaluation_statistics2,
          training_statistics2,
          preprocessed_data2,
          _,
      ) = model2.experiment(
          dataset=raw_dataset_fp,
          random_seed=random_seed + second_seed_offset,
          skip_save_processed_input=True,
      )
  
      # confirm data splits are reproducible
      for i in range(3):
          for k in preprocessed_data1[i].dataset:
              if second_seed_offset == 0:
                  # same seeds should result in same output
                  assert np.all(
                      preprocessed_data1[i].dataset[k]
                      == preprocessed_data2[i].dataset[k]
                  )
              else:
                  # non-zero second_seed_offset uses different seeds and should result in different output
                  assert not np.all(
                      preprocessed_data1[i].dataset[k]
                      == preprocessed_data2[i].dataset[k]
                  )
  
      # confirm results reproducibility/non-reproducibility of results
      if second_seed_offset == 0:
          # same seeds should result in same output
          assert training_statistics1 == training_statistics2
          assert evaluation_statistics1 == evaluation_statistics2
      else:
          # non-zero second_seed_offset uses different seeds and should result in different output
          assert training_statistics1 != training_statistics2
          assert evaluation_statistics1 != evaluation_statistics2
  
file_path: ludwig/tests/integration_tests/test_reproducibility.py
imports: import logging
  import os
  import pathlib
  import random
  import numpy
  import pytest
  import torch
  from ludwig.api import LudwigModel
  from ludwig.data.dataset_synthesizer import cli_synthesize_dataset
label_desc: Use image node_id 6 for calling a global function with example usage: test_experiment(raw_dataset_fp, random_seed, second_seed_offset) without return types