Backward recursion: compute mean/variance of marginal smoother.

        Performs the filter step in a preliminary step if needed.

def smoother(self):
        """Backward recursion: compute mean/variance of marginal smoother.

        Performs the filter step in a preliminary step if needed. 
        """
        if not self.filt:
            self.filter()
        self.smth = [self.filt[-1]]
        for t, f in reversed(list(enumerate(self.filt[:-1]))):
            self.smth += [smoother_step(self.ssm.F, f, self.pred[t + 1], 
                                        self.smth[t + 1])]
        self.smth.reverse()