code: def evaluate(self, x):
          
  
          if not hasattr(self, '_coefficients'):
              # Graph Fourier transform -> modulation -> inverse GFT.
              c = self.G.igft(self._kernels.evaluate(self.G.e).squeeze())
              c = np.sqrt(self.G.n_vertices) * self.G.U * c[:, np.newaxis]
              self._coefficients = self.G.gft(c)
  
          shape = x.shape
          x = x.flatten()
          y = np.full((self.n_features_out, x.size), np.nan)
          for i in range(len(x)):
              query = self._coefficients[x[i] == self.G.e]
              if len(query) != 0:
                  y[:, i] = query[0]
          return y.reshape((self.n_features_out,) + shape)
docs: TODO: will become _evaluate once polynomial filtering is merged.