我必须使用示例数据测试某些功能:
data = [
[[10, 20, 30], 10],
[[20, 30], 20],
[[40], 30],
]
其中每行中的第一个元素列出,包含 N=(1 到 5)个通过以下方式生成的随机整数元素:
st.lists(
st.integers(min_value=10),
min_size=2,
max_size=5,
unique=True)
每行中的第二个元素包含来自所有生成列表的一组所有唯一整数的随机样本。
对于我的数据
示例:
- 列表包含唯一集合 (10,20,30,40) 中的值;
- 每行中的第二个元素包含该集合中的随机整数样本;
如何使用假设检验框架实现这样的策略?
这个不起作用:
int_list = st.integers(min_value=10)
@given(st.lists(
elements=st.tuples(
int_list,
st.sampled_from(int_list))
最佳答案
查看the docs on adapting strategies - 您可以使用 .flatmap(...)
执行此操作,但使用 @composite
定义自定义策略可能会更简单。
# With flatmap
elem_strat = lists(
integers(), min_size=2, max_size=5, unique=True
).flatmap(
lambda xs: tuples(just(xs), sampled_from(xs)).map(list)
)
# With @composite
@composite
def elem_strat_func(draw):
xs = draw(lists(
integers(), min_size=2, max_size=5, unique=True
)
an_int = draw(sampled_from(xs))
return [xs, an_int]
elem_strat = elem_strat_func()
# then use either as
@given(lists(elem_strat))
def test_something(xs): ...
关于python - 假设检验 : how to sample_from values from another strategy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52404844/