class_docstr: Perform spectral clustering by calculating spectral embeddings then run k-means clustering
  algorithm on the spectral embeddings.
class_docstr_tok: ["Perform","spectral","clustering","by","calculating","spectral","embeddings","then","run","k-means","clustering","algorithm","on","the","spectral","embeddings","."]
docstr: Call self.clusterSpectralEmbeddings() function to predict cluster labels.
  
  Args:
      X (Tensor):
          Affinity matrix input
  
  Returns:
      labels (Tensor):
          Clustering label output
code: def forward(self, X) -> torch.Tensor:
      """
      Call self.clusterSpectralEmbeddings() function to predict cluster labels.
  
      Args:
          X (Tensor):
              Affinity matrix input
  
      Returns:
          labels (Tensor):
              Clustering label output
      """
      if X.shape[0] != X.shape[1]:
          raise ValueError(
              "The affinity matrix is not a square matrix."
          )
      labels = self.clusterSpectralEmbeddings(
          X, cuda=self.cuda, device=self.device
      )
      return labels
  
imports: from typing import Dict, List, Tuple
  import torch
  from torch.linalg import eigh, eigvalsh
label_desc: Use image node_id 2 for calling the SpectralClustering obj's underlying member method code with example usage: obj.forward(X) and returns: labels