假设检验:如何从另一个策略的值中抽取_?

2024-09-21 00:50:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须用一个样本数据测试一些函数:

data = [
    [[10, 20, 30], 10],
    [[20, 30], 20],
    [[40], 30],
]

其中,每行的第一个元素list包含N=(1到5)个随机整数元素,这些元素通过:

^{pr2}$

每行中的第二个元素包含从所有生成列表中的所有唯一整数集合中随机抽取的样本。在

因此,对于我的data示例:

  • 列表包含来自唯一集合(10,20,30,40)的值
  • 每行中的第二个元素包含来自该集合的随机整数样本

我如何用假设检验框架来实现这样的策略?在

这个不起作用:

int_list = st.integers(min_value=10)

@given(st.lists(
    elements=st.tuples(
        int_list, 
        st.sampled_from(int_list))

Tags: 函数框架元素示例列表data整数策略
1条回答
网友
1楼 · 发布于 2024-09-21 00:50:12

签出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): ...

相关问题 更多 >

    热门问题