code: def forecastAllModels(self, iAllLevelsDataset, H, iDateColumn):
      lForecast_DF = pd.DataFrame()
      for level in sorted(self.mModels.keys()):
          for signal in sorted(self.mModels[level].keys()):
              lEngine = self.mModels[level][signal]
              dfapp_in = iAllLevelsDataset[[iDateColumn, signal]].copy()
              # dfapp_in.tail()
              dfapp_out = lEngine.forecast(dfapp_in, H)
              if iDateColumn not in lForecast_DF.columns:
                  lForecast_DF[iDateColumn] = dfapp_out[iDateColumn]
              # print("Forecast Columns " , dfapp_out.columns);
              lForecast_DF[signal] = dfapp_out[signal]
              lForecast_DF[str(signal) + "_Forecast"] = dfapp_out[
                  str(signal) + "_Forecast"
              ]
      # print(lForecast_DF.columns);
      # print(lForecast_DF.head());
      # print(lForecast_DF.tail());
      return lForecast_DF
  
imports: import pandas
  import numpy
  from ..None import ForecastEngine
  from .None import Options
  from .None import Perf
  from .None import Utils
  from .None import Plots
  import time
label_desc: Use image node_id 15 for calling the cSignalHierarchy obj's underlying member method code with example usage: obj.forecastAllModels(iAllLevelsDataset, H, iDateColumn) and returns: lForecast_DF