code: def addPredictionIntervals(self, iInputDS, iForecastFrame, iHorizon):
      lSignalColumn = self.mOriginalSignal
  
      N = iInputDS.shape[0]
      lForecastColumn = str(lSignalColumn) + "_Forecast"
      lLowerBoundName = lForecastColumn + "_Lower_Bound"
      lUpperBoundName = lForecastColumn + "_Upper_Bound"
      iForecastFrame[lLowerBoundName] = np.nan
      iForecastFrame[lUpperBoundName] = np.nan
  
      lConfidence = 1.96
      # 0.95
      # the prediction intervals are only computed for the training horizon
      lHorizon = min(iHorizon, self.mTimeInfo.mHorizon)
      for h in range(0, lHorizon):
          lHorizonName = lForecastColumn + "_" + str(h + 1)
          lWidth = (
              lConfidence
              * self.mPredictionIntervalsEstimator.mForecastPerformances[
                  lHorizonName
              ].mL2
          )
          iForecastFrame.loc[N + h, lLowerBoundName] = (
              iForecastFrame.loc[N + h, lForecastColumn] - lWidth
          )
          iForecastFrame.loc[N + h, lUpperBoundName] = (
              iForecastFrame.loc[N + h, lForecastColumn] + lWidth
          )
  
      return iForecastFrame
  
imports: import pandas
  import numpy
  from .None import PredictionIntervals
  from .None import Plots
  from .None import Perf
  from .None import Utils
label_desc: Use image node_id 12 for calling the cTimeSeriesModel obj's underlying member method code with example usage: obj.addPredictionIntervals(iInputDS, iForecastFrame, iHorizon) and returns: iForecastFrame