def do_draw(self, data): n = len(self.element_strategies) if self.bias is None: i = cu.integer_range(data, 0, n - 1) else: def biased_i(random): while True: i = random.randint(0, n - 1) if random.random() <= self.weights[i]: return i i = cu.integer_range_with_distribution( data, 0, n - 1, biased_i) return data.draw(self.element_strategies[i])