class_docstr: Cosine learning rate scheduler: https://arxiv.org/abs/1608.03983
code: def get_lr(self, epoch: int, curr_iter: int) -> float:
      if curr_iter < self.warmup_iterations:
          curr_lr = self.warmup_init_lr + curr_iter * self.warmup_step
          self.warmup_epochs = epoch
      else:
          if self.is_iter_based:
              curr_iter = curr_iter - self.warmup_iterations
              curr_lr = self.min_lr + 0.5 * (
                  self.max_lr - self.min_lr
              ) * (1 + math.cos(math.pi * curr_iter / self.period))
          else:
              adjust_num = (
                  self.warmup_epochs + 1 if self.adjust_period else 0
              )
              adjust_den = (
                  self.warmup_epochs if self.adjust_period else 0
              )
              curr_lr = self.min_lr + 0.5 * (
                  self.max_lr - self.min_lr
              ) * (
                  1
                  + math.cos(
                      math.pi
                      * (epoch - adjust_num)
                      / (self.period - adjust_den)
                  )
              )
      return max(0.0, curr_lr)
  
file_path: ml-cvnets/optim/scheduler/cosine.py
imports: import argparse
  import math
  from optim.scheduler import SCHEDULER_REGISTRY
  from optim.scheduler.base_scheduler import BaseLRScheduler
label_desc: Use image node_id 3 for calling the CosineScheduler obj's underlying member method code with example usage: obj.get_lr(epoch, curr_iter) and returns: max