docs: def weighted_median(data, weights=None):
      """Calculate the weighted median of a list."""
      if weights is None:
          return median(data)
      midpoint = 0.5 * sum(weights)
      if any([j > midpoint for j in weights]):
          return data[weights.index(max(weights))]
      if any([j > 0 for j in weights]):
          sorted_data, sorted_weights = zip(*sorted(zip(data, weights)))
          cumulative_weight = 0
          below_midpoint_index = 0
          while cumulative_weight <= midpoint:
              below_midpoint_index += 1
              cumulative_weight += sorted_weights[below_midpoint_index-1]
          cumulative_weight -= sorted_weights[below_midpoint_index-1]
          if cumulative_weight - midpoint < sys.float_info.epsilon:
              bounds = sorted_data[below_midpoint_index-2:below_midpoint_index]
              return sum(bounds) / float(len(bounds))
          return sorted_data[below_midpoint_index-1]