code: def _get_optimizer(self, optimizer):
      if isinstance(optimizer, str):
          if optimizer.lower() == "adam":
              optimizer = torch.optim.Adam
          elif optimizer.lower() == "sgd":
              optimizer = torch.optim.SGD
          else:
              raise ValueError(
                  "Currently not support optimizer {}".format(optimizer)
              )
      elif isinstance(optimizer, type) and issubclass(
          optimizer, torch.optim.Optimizer
      ):
          optimizer = optimizer
      else:
          raise ValueError(
              "Currently not support optimizer {}".format(optimizer)
          )
      return optimizer
  
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 20 for calling the BaseContrastiveTrainer obj's underlying member method code with example usage: obj._get_optimizer(optimizer) and returns: optimizer