gpt4 book ai didi

python - Pytest:用假设生成总和为 1 的 float 列表

转载 作者:行者123 更新时间:2023-12-04 16:45:30 25 4
gpt4 key购买 nike

对于单元测试,我想生成一个 listfloat使用 hypothesis图书馆。有一些重要的限制:

  • 列表中的成分股数量必须大于 1 且小于 15
  • 最小值必须大于 0
  • 最大值必须小于 1
  • 所有成分的总和必须完全等于一 (1)

  • 到目前为止,我能够满足前三个约束条件。
    @given(
    strategies.lists(
    st.floats(min_value=0, max_value=1, exclude_min=True, exclude_max=True),
    min_size=2,
    max_size=15,
    )
    )
    我怎样才能满足第四个约束?

    最佳答案

    我不认为您可以直接添加约束,但您可以调整数据以使它们满足条件,例如:

    def normalize(float_list):
    s = sum(float_list)
    return [f / s for f in float_list]


    @given(
    strategies.lists(
    st.floats(min_value=0, max_value=1, exclude_min=True,
    exclude_max=True),
    min_size=2,
    max_size=15,
    ).map(normalize)
    )
    def test_sum(f):
    assert abs(sum(f) - 1) < 0.0000001
    例如。您自己标准化结果列表,以便它通过条件。
    请注意,这可能不会为您提供恰好为 1 的数字(由于浮点数精度)。此外,假设可能会选择一些边缘情况(例如一些非常小的数字),这些情况在映射后可能不是边缘情况——这对您来说可能是也可能不是问题。

    关于python - Pytest:用假设生成总和为 1 的 float 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64029340/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com