code: def smoother(self):
          
          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()
docs: Backward recursion: compute mean/variance of marginal smoother.
  
          Performs the filter step in a preliminary step if needed.