code: def get_lr(self) -> List[float]:  # type: ignore
      if self.last_epoch > self.warmup_step:  # type: ignore
          if self.scheduler_afterwards is not None:
              if not self.finished_warmup:
                  self.finished_warmup = True
                  base_lrs = list(
                      map(self.lr_multiplier_func, self.base_lrs)  # type: ignore
                  )
                  self.scheduler_afterwards.base_lrs = base_lrs  # type: ignore
              return self.scheduler_afterwards.get_lr()  # type: ignore
          return list(map(self.lr_multiplier_func, self.base_lrs))
      return list(map(self.lr_warmup_func, self.base_lrs))
  
imports: import math
  import numpy
  from abc import abstractmethod
  from typing import Any
  from typing import Dict
  from typing import List
  from typing import Type
  from typing import Callable
  from typing import Optional
  from torch.optim import Optimizer
  from torch.optim.lr_scheduler import _LRScheduler
  from torch.optim.lr_scheduler import StepLR
  from torch.optim.lr_scheduler import CyclicLR
  from torch.optim.lr_scheduler import LambdaLR
  from torch.optim.lr_scheduler import ExponentialLR
  from torch.optim.lr_scheduler import CosineAnnealingLR
  from torch.optim.lr_scheduler import ReduceLROnPlateau
  from torch.optim.lr_scheduler import CosineAnnealingWarmRestarts
  from ..misc.toolkit import scheduler_requires_metric
label_desc: Use image node_id 4 for calling the WarmupScheduler obj's underlying member method code with example usage: obj.get_lr() and returns: list, list, self