class_docstr: Edge perturbation on the given graph or batched graphs. Class objects callable via 
  method :meth:`views_fn`.
  
  Args:
      add (bool, optional): Set :obj:`True` if randomly add edges in a given graph.
          (default: :obj:`True`)
      drop (bool, optional): Set :obj:`True` if randomly drop edges in a given graph.
          (default: :obj:`False`)
      ratio (float, optional): Percentage of edges to add or drop. (default: :obj:`0.1`)
docstr: Method to be called when :class:`EdgePerturbation` object is called.
  
  Args:
      data (:class:`torch_geometric.data.Data`): The input graph or batched graphs.
      
  :rtype: :class:`torch_geometric.data.Data`.  
docstr_tok: ["Method","to","be","called","when",":","class",":","`","EdgePerturbation","`","object","is","called",".","Args",":","data","(",":","class",":","`","torch_geometric.data.Data","`",")",":","The","input","graph","or","batched","graphs",".",":","rtype",":",":","class",":","`","torch_geometric.data.Data","`","."]
code: def views_fn(self, data):
      r"""Method to be called when :class:`EdgePerturbation` object is called.
  
      Args:
          data (:class:`torch_geometric.data.Data`): The input graph or batched graphs.
  
      :rtype: :class:`torch_geometric.data.Data`.
      """
      if isinstance(data, Batch):
          dlist = [self.do_trans(d) for d in data.to_data_list()]
          return Batch.from_data_list(dlist)
      elif isinstance(data, Data):
          return self.do_trans(data)
  
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 4 for calling the EdgePerturbation obj's underlying member method code with example usage: obj.views_fn(data) and returns: Batch, self