code: def bound_weights(weights, minimum=None, maximum=None):
      bounded_weights = weights[:]
      if minimum is not None and maximum is not None:
          if maximum < minimum:
              raise ValueError
          bounded_weights = [bw for bw in bounded_weights
                             if minimum <= bw[0] <= maximum]
      elif minimum is not None:
          bounded_weights = [bw for bw in bounded_weights
                             if minimum <= bw[0]]
      elif maximum is not None:
          bounded_weights = [bw for bw in bounded_weights
                             if bw[0] <= maximum]
      else:
          return bounded_weights
      if (bounded_weights[0][0] > weights[0][0] and
              bounded_weights[0][0] != minimum):
          bounded_weights.insert(0, (minimum, _linear_interp(weights, minimum)))
      if (bounded_weights[-1][0] < weights[-1][0] and
              bounded_weights[-1][0] != maximum):
          bounded_weights.append((maximum, _linear_interp(weights, maximum)))
      return bounded_weights