class_docstr: Represents the polynomial decay learning rate schedule.
  
  **During warmup:**
  
  .. math::
      \eta_t = \eta_{base} \frac{t}{T_{warmup}}
  
  **After warmup:**
  
  .. math::
      \eta_t = \eta_{final} + (\eta_{base} - \eta_{final}) (\frac{T - t}{T - T_{warmup}})^{p}
  
  This corresponds to increasing the learning rate linearly for the first
  :math:`T_{warmup}` training steps to the base learning rate, and decreasing
  it thereafter for :math:`T - T_{warmup}` steps to the final learning rate
  using a polynomial of degree :math:`p`.
  
  .. note::
      This scheduler is not chainable.
class_docstr_tok: ["Represents","the","polynomial","decay","learning","rate","schedule",".","*","*","During","warmup",":","*","*","..","math",":",":","\\eta_t","=","\\eta_","{","base","}","\\frac","{","t","}","{","T_","{","warmup","}","}","*","*","After","warmup",":","*","*","..","math",":",":","\\eta_t","=","\\eta_","{","final","}","+","(","\\eta_","{","base","}","-","\\eta_","{","final","}",")","(","\\frac","{","T","-","t","}","{","T","-","T_","{","warmup","}","}",")","^","{","p","}","This","corresponds","to","increasing","the","learning","rate","linearly","for","the","first",":","math",":","`","T_","{","warmup","}","`","training","steps","to","the","base","learning","rate",",","and","decreasing","it","thereafter","for",":","math",":","`","T","-","T_","{","warmup","}","`","steps","to","the","final","learning","rate","using","a","polynomial","of","degree",":","math",":","`","p","`",".","..","note",":",":","This","scheduler","is","not","chainable","."]
code: def _compute_lrs(self) -> List[float]:
      # The decay is already complete, return the final learning rate.
      if self.last_epoch >= self.num_steps:
          return [f for f in self.final_lrs]
  
      # Linearly increase the learning rate to its base value during warmup.
      if self.last_epoch <= self.num_warmup_steps:
          c = self.last_epoch / self.num_warmup_steps
  
          return [
              s + (b - s) * c
              for b, s in zip(self.base_lrs, self.start_lrs)
          ]
  
      # After the warmup, decay the learning rate to its final value.
      r = self.num_steps - self.last_epoch
      t = self.num_steps - self.num_warmup_steps
  
      c = (r / t) ** self.power
  
      return [
          f + (b - f) * c for b, f in zip(self.base_lrs, self.final_lrs)
      ]
  
imports: import math
  import warnings
  from abc import ABC, abstractmethod
  from typing import List, Sequence, Union, final
  from torch.optim import Optimizer
  from torch.optim.lr_scheduler import _LRScheduler
  from typing_extensions import TypeAlias
  from fairseq2.typing import finaloverride
label_desc: Use image node_id 2 for calling the PolynomialDecayLR obj's underlying member method code with example usage: obj._compute_lrs() and returns: unknown, unknown, unknown