class_docstr: Description
  -----------
  Introduced in `Combining Label Propagation and Simple Models Out-performs Graph Neural Networks <https://arxiv.org/abs/2010.13993>`_
  
  Parameters
  ----------
      num_correction_layers: int
          The number of correct propagations.
      correction_alpha: float
          The coefficient of correction.
      correction_adj: str
          'DAD': D^-0.5 * A * D^-0.5
          'DA': D^-1 * A
          'AD': A * D^-1
      num_smoothing_layers: int
          The number of smooth propagations.
      smoothing_alpha: float
          The coefficient of smoothing.
      smoothing_adj: str
          'DAD': D^-0.5 * A * D^-0.5
          'DA': D^-1 * A
          'AD': A * D^-1
      autoscale: bool, optional
          If set to True, will automatically determine the scaling factor :math:`\sigma`. Default is True.
      scale: float, optional
          The scaling factor :math:`\sigma`, in case :obj:`autoscale = False`. Default is 1.
code: def smooth(self, g, y_soft, y_true, mask):
      with g.local_scope():
          numel = (
              int(mask.sum())
              if mask.dtype == torch.bool
              else mask.size(0)
          )
          assert y_true.size(0) == numel
  
          if y_true.dtype == torch.long:
              y_true = F.one_hot(y_true.view(-1), y_soft.size(-1)).to(
                  y_soft.dtype
              )
  
          y_soft[mask] = y_true
          return self.prop2(g, y_soft)
  
imports: import dgl.function
  import torch
  import torch.nn
  import torch.nn.functional
label_desc: Use image node_id 3 for calling the CorrectAndSmooth obj's underlying member method code with example usage: obj.smooth(g, y_soft, y_true, mask) and returns: self