code: def concatenate_files(
      train_fname, vali_fname, test_fname, read_fn, backend
  ):
      df_lib = backend.df_engine.df_lib
  
      logger.info("Loading training file...")
      train_df = read_fn(train_fname, df_lib)
      logger.info("done")
  
      logger.info("Loading validation file..")
      vali_df = (
          read_fn(vali_fname, df_lib)
          if vali_fname is not None
          else None
      )
      logger.info("done")
  
      logger.info("Loading test file..")
      test_df = (
          read_fn(test_fname, df_lib)
          if test_fname is not None
          else None
      )
      logger.info("done")
  
      logger.info("Concatenating files..")
      concatenated_df = concatenate_df(
          train_df, vali_df, test_df, backend
      )
      logger.info("done")
  
      return concatenated_df
  
file_path: ludwig/ludwig/data/concatenate_datasets.py
imports: import argparse
  import logging
  import numpy
  from ludwig.backend import LOCAL_BACKEND
  from ludwig.constants import SPLIT
  from ludwig.utils.data_utils import read_csv
label_desc: Use image node_id 2 for calling a global function with example usage: concatenate_files(train_fname, vali_fname, test_fname, read_fn, backend) and returns: concatenated_df