code: def perm_adjacency(A, indices):
      """
      Permute adjacency matrix, i.e. exchange node ids,
      so that binary unions form the clustering tree.
      """
      if indices is None:
          return A
  
      M, M = A.shape
      Mnew = len(indices)
      A = A.tocoo()
  
      # Add Mnew - M isolated vertices.
      rows = scipy.sparse.coo_matrix((Mnew - M, M), dtype=np.float32)
      cols = scipy.sparse.coo_matrix((Mnew, Mnew - M), dtype=np.float32)
      A = scipy.sparse.vstack([A, rows])
      A = scipy.sparse.hstack([A, cols])
  
      # Permute the rows and the columns.
      perm = np.argsort(indices)
      A.row = np.array(perm)[A.row]
      A.col = np.array(perm)[A.col]
  
      assert np.abs(A - A.T).mean() < 1e-8  # 1e-9
      assert type(A) is scipy.sparse.coo.coo_matrix
      return A
  
file_path: dgl/examples/pytorch/model_zoo/geometric/coarsening.py
imports: import numpy
  import scipy.sparse
  import sklearn.metrics
label_desc: Use image node_id 8 for calling a global function with example usage: perm_adjacency(A, indices) and returns: A, A