code: def predict(self, h=5):        
               
  
          if self.latent_variables.estimated is False:
              raise Exception("No latent variables estimated!")
          else:
              y_holder = self.y.copy() # holds past data and predicted data to create AR matrix
              full_X = self.X.copy()
              full_X = np.append(full_X,np.array([np.append(1.0, y_holder[-self.ar:][::-1])]), axis=0)
              Z = full_X
  
              for step in range(h):
                  a, P = self._forecast_model(self.latent_variables.get_z_values(),Z,step)
                  new_value = np.dot(Z[-1,:],a[:,self.y.shape[0]+step])
                  y_holder = np.append(y_holder, new_value)
                  Z = np.append(Z, np.array([np.append(1.0, y_holder[-self.ar:][::-1])]), axis=0)
  
              date_index = self.shift_dates(h)
  
              result = pd.DataFrame(y_holder[-h:])
              result.rename(columns={0:self.y_name}, inplace=True)
              result.index = date_index[-h:]
  
              return result
docs: Makes forecast with the estimated model
  
          Parameters
          ----------
          h : int (default : 5)
              How many steps ahead would you like to forecast?
  
          Returns
          ----------
          - pd.DataFrame with predictions