code: def predict(self,h=5,oos_data=None):        
               
  
          if self.latent_variables.estimated is False:
              raise Exception("No latent variables estimated!")
          else:
              # Sort/manipulate the out-of-sample data
              _, X_oos = dmatrices(self.formula, oos_data)
              X_oos = np.array([X_oos])[0]
              full_X = self.X.copy()
              full_X = np.append(full_X,X_oos,axis=0)
              Z = full_X
              a = self.states
  
              # Retrieve data, dates and (transformed) latent variables         
              smoothed_series = np.zeros(h)
              for t in range(h):
                  smoothed_series[t] = self.link(np.dot(Z[self.y.shape[0]+t],a[:,-1]))
  
              date_index = self.shift_dates(h)
  
              result = pd.DataFrame(smoothed_series)
              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?
  
          oos_data : pd.DataFrame
              Data for the variables to be used out of sample (ys can be NaNs)
  
          Returns
          ----------
          - pd.DataFrame with predictions