code: def posterior_prediction(self):
          
          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
docs: 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