code: def forecast(self, iInputDS, iHorizon):
      logger = tsutil.get_pyaf_logger()
      logger.info("START_HIERARCHICAL_FORECASTING")
      start_time = time.time()
  
      lForecast_DF = self.internal_forecast(iInputDS, iHorizon)
  
      lForecastTime = time.time() - start_time
      logger.info(
          "END_HIERARCHICAL_FORECAST_TIME_IN_SECONDS "
          + str(lForecastTime)
      )
      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 27 for calling the cSignalHierarchy obj's underlying member method code with example usage: obj.forecast(iInputDS, iHorizon) and returns: lForecast_DF