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 __init__(
      self,
      full_dataset,
      train_mask=None,
      val_mask=None,
      test_mask=None,
      classifier="LogReg",
      metric="acc",
      device=None,
      log_interval=1,
      **kwargs,
  ):
      self.full_dataset = full_dataset
      self.train_mask = (
          full_dataset[0].train_mask
          if train_mask is None
          else train_mask
      )
      self.val_mask = (
          full_dataset[0].val_mask if val_mask is None else val_mask
      )
      self.test_mask = (
          full_dataset[0].test_mask if test_mask is None else test_mask
      )
      self.metric = metric
      self.device = device
      self.classifier = classifier
      self.log_interval = log_interval
      self.num_classes = full_dataset.num_classes
      if device is None:
          self.device = torch.device(
              "cuda" if torch.cuda.is_available() else "cpu"
          )
      elif isinstance(device, int):
          self.device = torch.device("cuda:%d" % device)
      else:
          self.device = device
  
      # Use default config if not further specified
      self.setup_train_config(**kwargs)
  
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 1 to create a new NodeUnsupervised object from inherited base classes: object with example: obj = NodeUnsupervised(full_dataset, train_mask, val_mask, test_mask, classifier, metric, device, log_interval)