class_docstr: The evaluation interface for unsupervised graph representation learning evaluated with 
  linear classification. You can refer to `the benchmark code 
  <https://github.com/divelab/DIG/tree/dig/benchmarks/sslgraph>`_ 
  for examples of usage.
  
  Args:
      full_dataset (torch_geometric.data.Dataset): The graph classification dataset.
      train_mask (Tensor, optional): Boolean tensor of shape :obj:`[n_nodes,]`, indicating 
          nodes for training. Set to :obj:`None` if included in dataset.
          (default: :obj:`None`)
      val_mask (Tensor, optional): Boolean tensor of shape :obj:`[n_nodes,]`, indicating 
          nodes for validation. Set to :obj:`None` if included in dataset.
          (default: :obj:`None`)
      test_mask (Tensor, optional): Boolean tensor of shape :obj:`[n_nodes,]`, indicating 
          nodes for test. Set to :obj:`None` if included in dataset. (default: :obj:`None`)
      classifier (string, optional): Linear classifier for evaluation, :obj:`"SVC"` or 
          :obj:`"LogReg"`. (default: :obj:`"LogReg"`)
      log_interval (int, optional): Perform evaluation per k epochs. (default: :obj:`1`)
      device (int, or torch.device, optional): Device for computation. (default: :obj:`None`)
      **kwargs (optional): Training and evaluation configs in :meth:`setup_train_config`.
      
  Examples
  --------
  >>> node_dataset = get_node_dataset("Cora") # using default train/test split
  >>> evaluator = NodeUnsupervised(node_dataset, log_interval=10, device=0)
  >>> evaluator.evaluate(model, encoder)
  
  >>> node_dataset = SomeDataset()
  >>> # Using your own dataset or with different train/test split
  >>> train_mask, val_mask, test_mask = torch.Tensor([...]), torch.Tensor([...]), torch.Tensor([...])
  >>> evaluator = NodeUnsupervised(node_dataset, train_mask, val_mask, test_mask, log_interval=10, device=0)
  >>> evaluator.evaluate(model, encoder)
code: def setup_train_config(
      self,
      p_optim="Adam",
      p_lr=0.01,
      p_weight_decay=0,
      p_epoch=2000,
      logreg_wd=0,
      comp_embed_on="cpu",
  ):
      self.p_optim = p_optim
      self.p_lr = p_lr
      self.p_weight_decay = p_weight_decay
      self.p_epoch = p_epoch
  
      self.comp_embed_on = comp_embed_on
      self.logreg_wd = logreg_wd
  
imports: import copy
  import torch
  import numpy
  import torch.nn
  from torch_geometric.loader import DataLoader
  from sklearn import preprocessing
label_desc: Use image node_id 2 for calling the NodeUnsupervised obj's underlying member method code with example usage: obj.setup_train_config(p_optim, p_lr, p_weight_decay, p_epoch, logreg_wd, comp_embed_on) without return types