text: """ Utility functions. """
  
  from colorsys import rgb_to_hsv, hsv_to_rgb
  
  from limitlessled import Color
  
  
  def hue_of_color(color):
      """
      Gets the hue of a color.
      :param color: The RGB color tuple.
      :return: The hue of the color (0.0-1.0).
      """
      return rgb_to_hsv(*[x / 255 for x in color])[0]
  
  
  def saturation_of_color(color):
      """
      Gets the saturation of a color.
      :param color: The RGB color tuple.
      :return: The saturation of the color (0.0-1.0).
      """
      return rgb_to_hsv(*[x / 255 for x in color])[1]
  
  
  def to_rgb(hue, saturation):
      """
      Converts hue and saturation to RGB color.
      :param hue: The hue of the color.
      :param saturation: The saturation of the color.
      :return: The RGB color tuple.
      """
      return Color(*hsv_to_rgb(hue, saturation, 1))
  
  
  def transition(value, maximum, start, end):
      """ Transition between two values.
  
      :param value: Current iteration.
      :param maximum: Maximum number of iterations.
      :param start: Start value.
      :param end: End value.
      :returns: Transitional value.
      """
      return round(start + (end - start) * value / maximum, 2)
  
  
  def steps(current, target, max_steps):
      """ Steps between two values.
  
      :param current: Current value (0.0-1.0).
      :param target: Target value (0.0-1.0).
      :param max_steps: Maximum number of steps.
      """
      if current < 0 or current > 1.0:
          raise ValueError("current value %s is out of bounds (0.0-1.0)", current)
      if target < 0 or target > 1.0:
          raise ValueError("target value %s is out of bounds (0.0-1.0)", target)
      return int(abs((current * max_steps) - (target * max_steps)))
  