class_docstr: Grover Atom Vocabulary Prediction Module.
  
  The GroverAtomVocabPredictor module is used for predicting atom-vocabulary
  for the self-supervision task in Grover architecture. In the self-supervision tasks,
  one task is to learn contextual-information of nodes (atoms).
  Contextual information are encoded as strings, like `C_N-DOUBLE1_O-SINGLE1`.
  The module accepts an atom encoding and learns to predict the contextual information
  of the atom as a multi-class classification problem.
  
  Example
  -------
  >>> from deepchem.models.torch_models.grover_layers import GroverAtomVocabPredictor
  >>> num_atoms, in_features, vocab_size = 30, 16, 10
  >>> layer = GroverAtomVocabPredictor(vocab_size, in_features)
  >>> embedding = torch.randn(num_atoms, in_features)
  >>> result = layer(embedding)
  >>> result.shape
  torch.Size([30, 10])
  
  Reference
  ---------
  .. Rong, Yu, et al. "Self-supervised graph transformer on large-scale molecular data." Advances in Neural Information Processing Systems 33 (2020): 12559-12571.
class_docstr_tok: ["Grover","Atom","Vocabulary","Prediction","Module",".","The","GroverAtomVocabPredictor","module","is","used","for","predicting","atom-vocabulary","for","the","self-supervision","task","in","Grover","architecture",".","In","the","self-supervision","tasks",",","one","task","is","to","learn","contextual-information","of","nodes","(","atoms",")",".","Contextual","information","are","encoded","as","strings",",","like","`","C_N-DOUBLE1_O-SINGLE1","`",".","The","module","accepts","an","atom","encoding","and","learns","to","predict","the","contextual","information","of","the","atom","as","a","multi-class","classification","problem",".","Example","--","--","--","-",">",">",">","from","deepchem.models.torch_models.grover_layers","import","GroverAtomVocabPredictor",">",">",">","num_atoms",",","in_features",",","vocab_size","=","30",",","16",",","10",">",">",">","layer","=","GroverAtomVocabPredictor","(","vocab_size",",","in_features",")",">",">",">","embedding","=","torch.randn","(","num_atoms",",","in_features",")",">",">",">","result","=","layer","(","embedding",")",">",">",">","result.shape","torch.Size","(","[","30",",","10","]",")","Reference","--","--","--","--","-","..","Rong",",","Yu",",","et","al",".","``","Self-supervised","graph","transformer","on","large-scale","molecular","data",".","''","Advances","in","Neural","Information","Processing","Systems","33","(","2020",")",":","12559-12571","."]
docstr: Parameters
  ----------
  embeddings: torch.Tensor
      the atom embeddings of shape (vocab_size, in_features)
  
  Returns
  -------
  logits: torch.Tensor
      the prediction for each atom of shape (num_bond, vocab_size)
code: def forward(self, embeddings):
      """
      Parameters
      ----------
      embeddings: torch.Tensor
          the atom embeddings of shape (vocab_size, in_features)
  
      Returns
      -------
      logits: torch.Tensor
          the prediction for each atom of shape (num_bond, vocab_size)
      """
      return self.logsoftmax(self.linear(embeddings))
  
imports: from typing import List, Dict
  import numpy
  from scipy import stats
  from deepchem.models.torch_models.readout import GroverReadout
  from deepchem.models.torch_models.layers import SublayerConnection, PositionwiseFeedForward
label_desc: Use image node_id 2 for calling the GroverAtomVocabPredictor obj's underlying member method code with example usage: obj.forward(embeddings) and returns: self