code: def evaluate(self):
          
  
          if self.opt['AccurateDFid']:
              if self.dmethod == 'fista':
                  D = self.dstep.getdict(crop=False)
              else:
                  D = self.dstep.var_y()
              if self.xmethod == 'fista':
                  X = self.xstep.getcoef()
              else:
                  X = self.xstep.var_y()
              Df = sl.rfftn(D, self.xstep.cri.Nv, self.xstep.cri.axisN)
              Xf = sl.rfftn(X, self.xstep.cri.Nv, self.xstep.cri.axisN)
              Sf = self.xstep.Sf
              Ef = sl.inner(Df, Xf, axis=self.xstep.cri.axisM) - Sf
              dfd = sl.rfl2norm2(Ef, self.xstep.S.shape,
                                 axis=self.xstep.cri.axisN) / 2.0
              rl1 = np.sum(np.abs(X))
              return dict(DFid=dfd, RegL1=rl1,
                          ObjFun=dfd + self.xstep.lmbda * rl1)
          else:
              return None
docs: Evaluate functional value of previous iteration.