code: def eval_grad(self):
          
  
          # Compute D X - S
          self.Ryf[:] = self.eval_Rf(self.Yf)
  
          # Map to spatial domain to multiply by mask
          Ry = sl.irfftn(self.Ryf, self.cri.Nv, self.cri.axisN)
          # Multiply by mask
          self.WRy[:] = (self.W**2) * Ry
          # Map back to frequency domain
          WRyf = sl.rfftn(self.WRy, self.cri.Nv, self.cri.axisN)
  
          gradf = np.conj(self.Df) * WRyf
  
          # Multiple channel signal, multiple channel dictionary
          if self.cri.Cd > 1:
              gradf = np.sum(gradf, axis=self.cri.axisC, keepdims=True)
  
          return gradf
docs: Compute gradient in Fourier domain.