code: def sample(weighted_objects, num_samples, seed):
      
      weights = []
      for obj in weighted_objects:
          w = obj.weight
          if isinstance(obj.weight, float):
              weights.append(w)
          else:
              weights.append(w['weight'])
      numpy.random.seed(seed)
      idxs = numpy.random.choice(len(weights), num_samples, p=weights)
      # NB: returning an array would break things
      return [weighted_objects[idx] for idx in idxs]
docs: Take random samples of a sequence of weighted objects
  
      :param weighted_objects:
          A finite sequence of objects with a `.weight` attribute.
          The weights must sum up to 1.
      :param num_samples:
          The number of samples to return
      :param seed:
          A random seed
      :return:
          A subsequence of the original sequence with `num_samples` elements