class_docstr: All training progress is divided in `cycles` (default=1.) parts of equal length.
  Every part follows a schedule with the first `warmup` fraction of the training steps linearly increasing from 0. to 1.,
  followed by a learning rate decreasing from 1. to 0. following a cosine curve.
code: def get_lr_(self, progress):
      progress = progress * self.cycles % 1.0
      if progress < self.warmup:
          return progress / self.warmup
      else:
          progress = (progress - self.warmup) / (
              1 - self.warmup
          )  # progress after warmup
          ret = 0.5 * (1.0 + math.cos(math.pi * progress))
          return ret
  
imports: import math
  import torch
  from torch.optim.optimizer import Optimizer
  from torch.nn.utils import clip_grad_norm_
  import logging
  import abc
  import sys
label_desc: Use image node_id 2 for calling the WarmupCosineWithWarmupRestartsSchedule obj's underlying member method code with example usage: obj.get_lr_(progress) and returns: unknown, ret