code: def __call__(self, adj, d, use_eigenvalues=0, adj_norm=1):
      G = nx.from_scipy_sparse_matrix(adj)
      comp = list(nx.connected_components(G))
      results = np.zeros((adj.shape[0], d))
      for i in range(len(comp)):
          node_index = np.array(list(comp[i]))
          d_temp = min(len(node_index) - 2, d)
          if d_temp <= 0:
              continue
          temp_adj = adj[node_index, :][:, node_index].asfptype()
          if adj_norm == 1:
              temp_adj = self.__normalize_adj(temp_adj)
          lamb, X = scipy.sparse.linalg.eigs(temp_adj, d_temp)
          lamb, X = lamb.real, X.real
          temp_order = np.argsort(lamb)
          lamb, X = lamb[temp_order], X[:, temp_order]
          for i in range(X.shape[1]):
              if np.sum(X[:, i]) < 0:
                  X[:, i] = -X[:, i]
          if use_eigenvalues == 1:
              X = X.dot(np.diag(np.sqrt(np.absolute(lamb))))
          elif use_eigenvalues == 2:
              X = X.dot(np.diag(lamb))
          results[node_index, :d_temp] = X
      return results
  
file_path: AutoGL/autogl/module/feature/_generators/_eigen.py
imports: import autogl
  import numpy
  from scipy.sparse import csr_matrix
  import scipy.sparse
  import scipy.sparse.linalg
  import networkx
  import torch
  from ._basic import BaseFeatureGenerator
  from .._feature_engineer_registry import FeatureEngineerUniversalRegistry
label_desc: Use image node_id 3 for calling the _Eigen obj's underlying member method code with example usage: obj.__call__(adj, d, use_eigenvalues, adj_norm) and returns: results