class_docstr: Diffusion with node sampling on the given graph for node-level datasets, used in 
  `MVGRL <https://arxiv.org/pdf/2006.05582v1.pdf>`_.  Class objects callable via method 
  :meth:`views_fn`.
  
  Args:
      sample_size (int, optional): Number of nodes in the sampled subgraoh from a large graph.
          (default: :obj:`2000`)
      batch_size (int, optional): Number of subgraphs to sample. (default: :obj:`4`)
      mode (string, optional): Diffusion instantiation mode with two options:
          :obj:`"ppr"`: Personalized PageRank; :obj:`"heat"`: heat kernel; 
          (default: :obj:`"ppr"`)
      alpha (float, optinal): Teleport probability in a random walk. (default: :obj:`0.2`)
      t (float, optinal): Diffusion time. (default: :obj:`5`)
      add_self_loop (bool, optional): Set True to add self-loop to edge_index.
          (default: :obj:`True`)
code: def __init__(
      self,
      sample_size=2000,
      batch_size=4,
      mode="ppr",
      alpha=0.2,
      t=5,
      epsilon=False,
      add_self_loop=True,
  ):
      self.sample_size = sample_size
      self.batch_size = batch_size
      self.mode = mode
      self.alpha = alpha
      self.t = t
      self.epsilon = epsilon
      self.add_self_loop = add_self_loop
  
imports: import torch
  from torch_geometric.utils import to_dense_adj, dense_to_sparse, dropout_adj, degree, add_remaining_self_loops
  from sklearn.preprocessing import MinMaxScaler
  from torch_geometric.data import Batch, Data
  from dig.sslgraph.utils.adaptive import degree_drop_weights, pr_drop_weights, evc_drop_weights, drop_edge_weighted
label_desc: Use image node_id 1 to create a new DiffusionWithSample object  with example: obj = DiffusionWithSample(sample_size, batch_size, mode, alpha, t, epsilon, add__loop)