docs: def execute(self, eopatch):
          """ Computation of NDVI slope using finite central differences
  
          This implementation loops through every spatial location, considers the valid NDVI values and approximates their
          first order derivative using central differences. The argument of min and max is added to the eopatch.
  
          The NDVI slope at date t is comuted as $(NDVI_{t+1}-NDVI_{t-1})/(date_{t+1}-date_{t-1})$.
  
          :param eopatch: Input eopatch
          :return: eopatch with NDVI slope argmin/argmax features
          """
          # pylint: disable=invalid-name
          if self.mask_data:
              valid_data_mask = eopatch.mask['VALID_DATA']
          else:
              valid_data_mask = eopatch.mask['IS_DATA']
  
          ndvi = np.ma.array(eopatch.data[self.data_feature],
                             dtype=np.float32,
                             mask=~valid_data_mask.astype(np.bool))
  
          all_dates = np.asarray([x.toordinal() for x in eopatch.timestamp])
  
          if ndvi.ndim == 4:
              h, w = ndvi.shape[1: 3]
          else:
              raise ValueError('{} feature has incorrect number of dimensions'.format(self.data_feature))
  
          argmax_ndvi_slope, argmin_ndvi_slope = np.zeros((h, w, 1), dtype=np.uint8), np.zeros((h, w, 1), dtype=np.uint8)
  
          for ih, iw in it.product(range(h), range(w)):
  
              ndvi_curve = ndvi[:, ih, iw, :]
              valid_idx = np.where(~ndvi.mask[:, ih, iw])[0]
  
              ndvi_curve = ndvi_curve[valid_idx]
              valid_dates = all_dates[valid_idx]
  
              ndvi_slope = np.convolve(ndvi_curve.squeeze(), [1, 0, -1], 'valid') / np.convolve(valid_dates, [1, 0, -1],
                                                                                                'valid')
  
              # +1 to compensate for the 'valid' convolution which eliminates first and last
              argmax_ndvi_slope[ih, iw] = valid_idx[np.argmax(ndvi_slope) + 1]
              argmin_ndvi_slope[ih, iw] = valid_idx[np.argmin(ndvi_slope) + 1]
  
              del ndvi_curve, valid_idx, valid_dates, ndvi_slope
  
          eopatch.data_timeless[self.argmax_feature] = argmax_ndvi_slope
          eopatch.data_timeless[self.argmin_feature] = argmin_ndvi_slope
  
          return eopatch