code: def get_m4_df(self) -> pd.DataFrame:
      train_csv = "https://raw.githubusercontent.com/Mcompetitions/M4-methods/master/Dataset/Train/Hourly-train.csv"
      test_csv = "https://raw.githubusercontent.com/Mcompetitions/M4-methods/master/Dataset/Test/Hourly-test.csv"
      train_set = pd.read_csv(train_csv).set_index("V1")
      test_set = pd.read_csv(test_csv).set_index("V1")
      ntrain = train_set.iloc[0, :].dropna().shape[0]
      sequence = pd.concat(
          (train_set.iloc[0, :].dropna(), test_set.iloc[0, :].dropna())
      )
      # raw data do not follow consistent timestamp format
      sequence.index = pd.date_range(
          start=0, periods=sequence.shape[0], freq="H"
      )
      sequence = sequence.to_frame()
      metadata = pd.DataFrame(
          {"trainval": sequence.index < sequence.index[ntrain]},
          index=sequence.index,
      )
      train = sequence[metadata.trainval]
      test = sequence[~metadata.trainval]
      train["train"] = 1
      test["train"] = 0
      df = pd.concat([train, test], axis=0)
      return df
  
imports: import os
  import time
  from unittest.mock import patch
  import pandas
  from mindsdb_sql import parse_sql
  from mindsdb.integrations.handlers.merlion_handler.adapters import DefaultForecasterAdapter, SarimaForecasterAdapter, ProphetForecasterAdapter, MSESForecasterAdapter, IsolationForestDetectorAdapter, WindStatsDetectorAdapter, ProphetDetectorAdapter
  from .executor_test_base import BaseExecutorTest
  import pandas
label_desc: Use image node_id 2 for calling the TestMerlion obj's underlying member method code with example usage: obj.get_m4_df() and returns: df