code: def _get_views_fn(self, views_fn, aug_ratio):
      # GraphCL only need two kinds of augmentation methods
      if views_fn is None:
          return None
      final_views_fn = []
      for i, view in enumerate(views_fn):
          if isinstance(view, str):
              assert view in [
                  "dropN",
                  "permE",
                  "subgraph",
                  "maskN",
                  "random2",
                  "random3",
                  "random4",
              ]
              final_views_fn.append(
                  get_view_by_name(view, aug_ratio[i])
              )
          else:
              final_views_fn.append(view)
      return final_views_fn
  
imports: import os
  import torch
  import torch_geometric
  import logging
  import numpy
  import typing
  from tqdm import trange
  from typing import Union, Tuple, Sequence, Type, Callable
  import torch.nn.functional
  import torch.utils.data
  from torch.optim.lr_scheduler import StepLR, MultiStepLR, ExponentialLR, ReduceLROnPlateau
  from .losses import NTXent_loss
  from .utils import get_view_by_name
  from autogl.module.model.encoders.base_encoder import AutoHomogeneousEncoderMaintainer
  from ..base import BaseTrainer, EarlyStopping, _DummyModel
  from ..evaluation import Evaluation, get_feval, Acc
  from ...model import BaseAutoModel, BaseEncoderMaintainer, BaseDecoderMaintainer, EncoderUniversalRegistry, DecoderUniversalRegistry
  from ....utils import get_logger
  from ....datasets import utils
label_desc: Use image node_id 21 for calling the BaseContrastiveTrainer obj's underlying member method code with example usage: obj._get_views_fn(views_fn, aug_ratio) and returns: final_views_fn, None