class_docstr: Linear learning rate scheduler with warm up.
code: def get_lr(self):
      if self._step_count <= self.warmup_updates:
          return [
              self._step_count / self.warmup_updates * base_lr
              for base_lr in self.base_lrs
          ]
      elif self._step_count >= self.max_updates:
          return [0.0 for _ in self.base_lrs]
      else:
          pct_remaining = (self.max_updates - self._step_count) / (
              self.max_updates - self.warmup_updates
          )
          return [base_lr * pct_remaining for base_lr in self.base_lrs]
  
imports: import math
  from typing import Optional, Tuple
  import torch
  import torch.nn.functional
  import torchaudio
  import torchaudio.models.wav2vec2.components
  from dataset import _get_lengths_librilightlimited, _get_lengths_librispeech, BucketizeBatchSampler, CollateFnHubert, CollateFnLibriLightLimited, DistributedBatchSampler, HuBERTDataSet
  from lightning.pytorch import LightningModule
  from loss import hubert_loss
  from torch import Tensor
  from torch.optim.optimizer import Optimizer
  from torch.utils.data import DataLoader
label_desc: Use image node_id 2 for calling the LinearDecayLRScheduler obj's underlying member method code with example usage: obj.get_lr() and returns: unknown, unknown, unknown