get posterior forecast (prediction) variances

        Returns
        -------
        dict : dict
            a dictionary of forecast names, posterior variance pairs

        Note
        ----
        This method is not as easy to use as Schur.get_forecast_summary(), please
        use it instead

def posterior_prediction(self):
        """get posterior forecast (prediction) variances

        Returns
        -------
        dict : dict
            a dictionary of forecast names, posterior variance pairs

        Note
        ----
        This method is not as easy to use as Schur.get_forecast_summary(), please
        use it instead

        """
        if self.__posterior_prediction is not None:
            return self.__posterior_prediction
        else:
            if self.predictions is not None:
                self.log("propagating posterior to predictions")

                post_cov = self.predictions.T *\
                            self.posterior_parameter * self.predictions
                self.__posterior_prediction = {n:v for n,v in
                                          zip(post_cov.row_names,
                                              np.diag(post_cov.x))}
                self.log("propagating posterior to predictions")
            else:
                self.__posterior_prediction = {}
            return self.__posterior_prediction