docs: def percentile(sorted_values, p):
      """Calculate the percentile using the nearest rank method.
  
      >>> percentile([15, 20, 35, 40, 50], 50)
      35
  
      >>> percentile([15, 20, 35, 40, 50], 40)
      20
  
      >>> percentile([], 90)
      Traceback (most recent call last):
          ...
      ValueError: Too few data points (0) for 90th percentile
      """
      size = len(sorted_values)
      idx = (p / 100.0) * size - 0.5
      if idx < 0 or idx > size:
          raise ValueError('Too few data points ({}) for {}th percentile'.format(size, p))
      return sorted_values[int(idx)]