class_docstr: Scheduling based on polynomial equation.
  
  s(t) = start_value for t < begin_step
  
       = end_value + [(start_value - end_value) * (1 - decay_term) ** exponent]
  
       where decay_term = (t - begin_step) / decay_steps
  
             for 0 <= 1 - decay_term <= 1
                 <-> 0 <= decay_term <= 1
                 <-> 0 <= (t - begin_step) / decay_steps <= 1
                 <-> 0 <= (t - begin_step) <= decay_steps
                 <-> begin_step <= t <= begin_step + decay_steps (=end_step)
  
       = end_value   for t > begin_step + decay_steps (=end_step)
code: def _after_begin_step(self, step: Union[int, tf.Tensor]) -> tf.Tensor:
      with tf.name_scope(self.name or "PolynomialDecay"):
          val = tf.cond(
              tf.math.greater(step, self.end_step),
              lambda: tf.cast(self.end_value, dtype=self.dtype),
              lambda: self._during_decay(step),
              name="end",
          )
      return val
  
file_path: model-optimization/tensorflow_model_optimization/python/core/common/keras/compression/schedules.py
imports: import abc
  from typing import Union, Optional
  import tensorflow
label_desc: Use image node_id 3 for calling the PolynomialDecay obj's underlying member method code with example usage: obj._after_begin_step(step) and returns: val