def METHOD_NAME(self, f_in):
    f = np.array(f_in)
    if len(f.shape) == 2:
        f = np.array([f])
    if self.non_art_id is None:
        self.non_art_id = np.arange(len(f[0])) != self.art_id
    f_art = (1.0 + self.gamma) * np.einsum("ij,nj->ni", self._R, f[:, self.art_id])
    if self.fix_layer:
        f[:, self.non_art_id] = np.einsum(
            "nmj,ij->nmi", f[:, self.non_art_id], np.identity(3) - self._R
        )
    else:
        f[:, self.non_art_id] += f_art[:, np.newaxis, :] / np.sum(
            self.non_art_id != False
        )
    f[:, self.art_id] -= f_art
    return f.reshape(np.array(f_in).shape)