'Produce linear minimum MSE forecasts for desired number of steps
ahead, using prior values y
Parameters
y : ndarray (p x k)
steps : int
Returns
forecasts : ndarray (steps x neqs)
Notes
Lutkepohl pp 37-38'

def forecast(self, y, steps, exog_future=None):

    if ((self.exog is None) and (exog_future is not None)):
        raise ValueError('No    exog    in    model,    so    no    exog_future    supported    in    forecast    method.')
    if ((self.exog is not None) and (exog_future is None)):
        raise ValueError('Please    provide    an    exog_future    argument    to    the    forecast    method.')
    trend_coefs = (None if (self.coefs_exog.size == 0) else self.coefs_exog.T)
    exogs = []
    if self.trend.startswith('c'):
        exogs.append(np.ones(steps))
    exog_lin_trend = np.arange((self.n_totobs + 1), ((self.n_totobs + 1) + steps))
    if ('t' in self.trend):
        exogs.append(exog_lin_trend)
    if ('tt' in self.trend):
        exogs.append((exog_lin_trend ** 2))
    if (exog_future is not None):
        exogs.append(exog_future)
    if (exogs == []):
        exog_future = None
    else:
        exog_future = np.column_stack(exogs)
    return forecast(y, self.coefs, trend_coefs, steps, exog_future)
