|
@@ -81,14 +81,6 @@ def check_sample(
|
|
|
return tuple(values)
|
|
|
|
|
|
|
|
|
-def choice(
|
|
|
- data: "ConjectureData", values: Sequence[T], *, forced: Optional[T] = None
|
|
|
-) -> T:
|
|
|
- forced_i = None if forced is None else values.index(forced)
|
|
|
- i = data.draw_integer(0, len(values) - 1, forced=forced_i)
|
|
|
- return values[i]
|
|
|
-
|
|
|
-
|
|
|
class Sampler:
|
|
|
"""Sampler based on Vose's algorithm for the alias method. See
|
|
|
http://www.keithschwarz.com/darts-dice-coins/ for a good explanation.
|
|
@@ -182,8 +174,8 @@ class Sampler:
|
|
|
if forced is None
|
|
|
else next((b, a, a_c) for (b, a, a_c) in self.table if forced in (b, a))
|
|
|
)
|
|
|
- base, alternate, alternate_chance = choice(
|
|
|
- data, self.table, forced=forced_choice
|
|
|
+ base, alternate, alternate_chance = data.choice(
|
|
|
+ self.table, forced=forced_choice
|
|
|
)
|
|
|
use_alternate = data.draw_boolean(
|
|
|
alternate_chance, forced=None if forced is None else forced == alternate
|