class_docstr: LR Scheduler in MMCV.
  
  Args:
      by_epoch (bool): LR changes epoch by epoch
      warmup (string): Type of warmup used. It can be None(use no warmup),
          'constant', 'linear' or 'exp'
      warmup_iters (int): The number of iterations or epochs that warmup
          lasts
      warmup_ratio (float): LR used at the beginning of warmup equals to
          warmup_ratio * initial_lr
      warmup_by_epoch (bool): When warmup_by_epoch == True, warmup_iters
          means the number of epochs that warmup lasts, otherwise means the
          number of iteration that warmup lasts
code: def get_regular_lr(self, runner):
      if isinstance(runner.optimizer, dict):
          lr_groups = {}
          for k in runner.optimizer.keys():
              _lr_group = [
                  self.get_lr(runner, _base_lr)
                  for _base_lr in self.base_lr[k]
              ]
              lr_groups.update({k: _lr_group})
  
          return lr_groups
      else:
          return [
              self.get_lr(runner, _base_lr) for _base_lr in self.base_lr
          ]
  
imports: import numbers
  from math import cos, pi
  import annotator.uniformer.mmcv
  from .hook import HOOKS, Hook
label_desc: Use image node_id 4 for calling the LrUpdaterHook obj's underlying member method code with example usage: obj.get_regular_lr(runner) and returns: lr_groups, unknown