code: def predict_is(self, h=5, fit_once=True, fit_method='MLE', intervals=False, **kwargs):
               
          predictions = []
  
          for t in range(0,h):
              x = NNAR(ar=self.ar, units=self.units, 
                  layers=self.layers, data=self.data_original[:-h+t], family=self.family)
              if fit_once is False:
                  x.fit(method=fit_method, printer=False)
              if t == 0:
                  if fit_once is True:
                      x.fit(method=fit_method, printer=False)
                      saved_lvs = x.latent_variables
                  predictions = x.predict(1, intervals=intervals)
              else:
                  if fit_once is True:
                      x.latent_variables = saved_lvs
                  predictions = pd.concat([predictions,x.predict(1, intervals=intervals)])
          
          if intervals is True:
              predictions.rename(columns={0:self.data_name, 1: "1% Prediction Interval", 
                  2: "5% Prediction Interval", 3: "95% Prediction Interval", 4: "99% Prediction Interval"}, inplace=True)
          else:
              predictions.rename(columns={0:self.data_name}, inplace=True)
  
          predictions.index = self.index[-h:]
  
          return predictions
docs: Makes dynamic out-of-sample predictions with the estimated model on in-sample data
  
          Parameters
          ----------
          h : int (default : 5)
              How many steps would you like to forecast?
  
          fit_once : boolean
              (default: True) Fits only once before the in-sample prediction; if False, fits after every new datapoint
  
          fit_method : string
              Which method to fit the model with
  
          intervals: boolean
              Whether to return prediction intervals
  
          Returns
          ----------
          - pd.DataFrame with predicted values