booleans (). example () всегда возвращает True - PullRequest
2 голосов
/ 14 мая 2019

Воспроизвести:

In [1]: from hypothesis import strategies as st

In [2]: bool_st = st.booleans()

In [3]: all(bool_st.example() for _ in range(1000))
Out[3]: True

Почему st.booleans().example() всегда возвращает True? Насколько я понимаю, метод example должен возвращать примеры того, что может быть выведено стратегией, и делает это несколько случайным образом.

Соответственно, st.sampled_from(...), похоже, никогда не возвращает первый элемент в итерируемом:

In [1]: from hypothesis import strategies as st

In [2]: from collections import Counter

In [3]: samp_st = st.sampled_from(list(range(10)))

In [4]: examples = [samp_st.example() for _ in range(1000)]

In [5]: cnt = Counter(examples)

In [6]: cnt.most_common()
Out[6]: [(1, 512), (2, 282), (3, 119), (4, 55), (5, 22), (6, 5), (7, 4), (8, 1)]

Так что здесь происходит?

Мне известно, что в документации по методу example говорится, что метод "не следует воспринимать слишком серьезно" (см. здесь ). Но это мало что дает для объяснения, и было бы неплохо лучше понять, почему это происходит.

1 Ответ

1 голос
/ 17 мая 2019

Simple: метод .example() позволяет избежать показа простейшего возможного примера из стратегии, потому что этот пример обычно тривиален. По общему признанию это менее полезно для st.booleans().example(), но именно поэтому!

Для ваших комментариев lists(...).example() продолжает создавать пустой список из-за ограничения в нашем обнаружении уникальности - см. Выпуски 1864, 1982 и PR 1961 для получения дополнительной информации; мы исправим это, как только у нас будет хороший способ сделать это.

Вы можете найти код для .example() здесь.

...