class_docstr: Defines a curve over time as a linear ramp + constant body + curvy tail.
  
  The body is a span of constant learning rate, and can be the entire curve.
  The warm-up, if present, is based on the line connecting points (0, 0) and
  (body_start, body_value). The tail, if defined, is a function from time to
  learning rate that is used for all training steps from tail_start on.
docstr: Returns the learning rate for the given step number.
docstr_tok: ["Returns","the","learning","rate","for","the","given","step","number","."]
code: def __call__(self, step_number):
      """Returns the learning rate for the given step number."""
      if step_number < self._body_start:
          return (step_number / self._body_start) * self._body_value
      elif (
          self._tail_start is not None
          and step_number >= self._tail_start
      ):
          return self._tail_fn(
              step_number, self._tail_start, self._body_value
          )
      else:
          return self._body_value
  
file_path: trax/trax/supervised/lr_schedules.py
imports: import math
  import gin
  from trax.fastmath import numpy
label_desc: Use image node_id 2 for calling the _BodyAndTail obj's underlying member method code with example usage: obj.__call__(step_number) and returns: unknown, self, self