Encodes a schedule tuple into a string.

  Args:
    schedule: A tuple containing (interpolation, steps, pmfs), where
      interpolation is a string specifying the interpolation strategy, steps
      is an int array_like of shape [N] specifying the global steps, and pmfs is
      an array_like of shape [N, M] where pmf[i] is the sampling distribution
      at global step steps[i]. N is the number of schedule requirements to
      interpolate and M is the size of the probability space.

  Returns:
    The string encoding of the schedule tuple.

def encode_schedule(schedule):
  """Encodes a schedule tuple into a string.

  Args:
    schedule: A tuple containing (interpolation, steps, pmfs), where
      interpolation is a string specifying the interpolation strategy, steps
      is an int array_like of shape [N] specifying the global steps, and pmfs is
      an array_like of shape [N, M] where pmf[i] is the sampling distribution
      at global step steps[i]. N is the number of schedule requirements to
      interpolate and M is the size of the probability space.

  Returns:
    The string encoding of the schedule tuple.
  """
  interpolation, steps, pmfs = schedule
  return interpolation + ' ' + ' '.join(
      '@' + str(s) + ' ' + ' '.join(map(str, p)) for s, p in zip(steps, pmfs))