code: def GCN_Aadj_feats_op(features, A, k=1, method="gcn"):
      """
      This function applies the matrix transformations on the adjacency matrix, which are required by GCN.
      GCN requires that the input adjacency matrix should be symmetric, with self-loops, and normalized.
      The features and adjacency matrix will be manipulated by either ``gcn`` (applying localpool filter as a default), or
      ``sgcn`` filters.
  
      For more information about "localpool" and "smoothed" filters, please read details:
          [1] https://arxiv.org/abs/1609.02907
          [2] https://arxiv.org/abs/1902.07153
  
      Args:
          features: node features in the graph
          A: adjacency matrix
          k (int or None): If method is ``sgcn`` then it should be an integer indicating the power to raise the
          normalised adjacency matrix with self loops before multiplying the node features matrix.
          method: to specify the filter to use with gcn. If ``method="gcn"``, default filter is localpool, other options are ``sgcn``.
  
      Returns:
          features, transformed adjacency matrix
      """
  
      def preprocess_adj(adj, symmetric=True):
          adj = adj + sp.diags(np.ones(adj.shape[0]) - adj.diagonal())
          adj = normalize_adj(adj, symmetric)
          return adj
  
      # build symmetric adjacency matrix
      A = A + A.T.multiply(A.T > A) - A.multiply(A.T > A)
  
      if method == "gcn":
          # Local pooling filters (see 'renormalization trick' in Kipf & Welling, arXiv 2016) """
          print("Using GCN (local pooling) filters...")
          A = preprocess_adj(A)
      elif method == "chebyshev":
          raise ValueError(
              "method 'chebyshev' did not behave correctly and has been removed"
          )
      elif method == "sgc":
          # Smoothing filter (Simplifying Graph Convolutional Networks)
          if isinstance(k, int) and k > 0:
              print(
                  "Calculating {}-th power of normalized A...".format(k)
              )
              A = preprocess_adj(A)
              A = A**k  # return scipy.sparse.csr_matrix
          else:
              raise ValueError(
                  "k should be positive integer for method='sgcn'; but received type {} with value {}.".format(
                      type(k).__name__, k
                  )
              )
  
      return features, A
  
file_path: stellargraph/stellargraph/core/utils.py
imports: import collections
  import scipy.sparse
  from scipy.sparse.linalg import ArpackNoConvergence, eigsh
  import numpy
label_desc: Use image node_id 10 for calling a global function with example usage: GCN_Aadj_feats_op(features, A, k, method) and returns: features,  A, adj