class_docstr: Description
  -----------
  Introduced in `Learning from Labeled and Unlabeled Data with Label Propagation <https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.14.3864&rep=rep1&type=pdf>`_
  
  .. math::
      \mathbf{Y}^{\prime} = \alpha \cdot \mathbf{D}^{-1/2} \mathbf{A}
      \mathbf{D}^{-1/2} \mathbf{Y} + (1 - \alpha) \mathbf{Y},
  
  where unlabeled data is inferred by labeled data via propagation.
  
  Parameters
  ----------
      num_layers: int
          The number of propagations.
      alpha: float
          The :math:`\alpha` coefficient.
      adj: str
          'DAD': D^-0.5 * A * D^-0.5
          'DA': D^-1 * A
          'AD': A * D^-1
code: def __init__(self, num_layers, alpha, adj="DAD"):
      super(LabelPropagation, self).__init__()
  
      self.num_layers = num_layers
      self.alpha = alpha
      self.adj = adj
  
imports: import dgl.function
  import torch
  import torch.nn
  import torch.nn.functional
label_desc: Use image node_id 1 to create a new LabelPropagation object from inherited base classes: nn with example: obj = LabelPropagation(num_layers, alpha, adj)