code: def _uncythonized_mb_model(self, beta, mini_batch):
          
  
          rand_int =  np.random.randint(low=0, high=self.data.shape[0]-mini_batch-self.max_lag+1)
          sample = np.arange(start=rand_int, stop=rand_int+mini_batch)
  
          data = self.data[sample]
          X = self.X[sample, :]
          Y = data[self.max_lag:]
  
          parm = np.array([self.latent_variables.z_list[k].prior.transform(beta[k]) for k in range(beta.shape[0])])
          model_scale, model_shape, model_skewness = self._get_scale_and_shape(parm)
          theta = np.matmul(X[self.integ+self.max_lag:],parm[self.sc+self.ar:(self.sc+self.ar+len(self.X_names))])
  
          # Loop over time series
          theta, self.model_scores = gasx_recursion(parm, theta, self.model_scores, Y, self.ar, self.sc, Y.shape[0], self.family.score_function, 
              self.link, model_scale, model_shape, model_skewness, self.max_lag)
  
          return np.array(theta), Y, self.model_scores
docs: Creates the structure of the model
  
          Parameters
          ----------
          beta : np.array
              Contains untransformed starting values for latent variables
  
          mini_batch : int
              Size of each mini batch of data
  
          Returns
          ----------
          theta : np.array
              Contains the predicted values for the time series
  
          Y : np.array
              Contains the length-adjusted time series (accounting for lags)
  
          scores : np.array
              Contains the scores for the time series