gpt4 book ai didi

Python 假设 : How to compose generators that are dependent on each other?

转载 作者:太空宇宙 更新时间:2023-11-04 05:11:16 26 4
gpt4 key购买 nike

我有一个使用 python 假设的生成器,如下所示:

@st.composite
def generate_network_fault_only(draw):
fault = {
"impaired": st.just(True), # need to detect if all faults are None to switch this back.
"limit": draw(NetworkFaultGen.generate_limit()),
"delay": draw(NetworkFaultGen.generate_delay()),
"loss_random": draw(NetworkFaultGen.generate_loss_random()),
"corrupt": draw(NetworkFaultGen.generate_corrupt()),
"duplicate": draw(NetworkFaultGen.generate_duplicate()),
"reorder": draw(NetworkFaultGen.generate_reorder()),
"rate": draw(NetworkFaultGen.generate_rate())
}

return draw(st.fixed_dictionaries(fault))

上面的每个函数都会返回如下内容:

@st.composite
def generate_reorder(draw):
"""
This must only happen if delay is applied
"""
return st.one_of(st.fixed_dictionaries(
{"percent": st.integers(min_value=0, max_value=100),
"correlation": st.integers(min_value=0, max_value=100),
"distance": st.integers(min_value=0)}),st.none())

我在 reorder 值和 delay 值之间存在依赖关系,只有当 delay 不是 None 时才能指定重新排序。

我不确定如何完成此操作。过滤似乎会遇到性能问题。而此时代码中的 delay 值还不是具体值。

最佳答案

如果您希望每个示例在全局范围内仅指定一次延迟(即每次给定调用您的测试函数时固定为单个值,但不同调用之间可能不同),您可以使用 shared 来做到这一点? https://hypothesis.readthedocs.io/en/latest/data.html#hypothesis.strategies.shared

即如果您执行诸如 delay = shared(my_base_strategy, key='network.delay') 之类的操作,那么所有其他依赖延迟的策略都可以从中提取并获得一个一致的值。

关于Python 假设 : How to compose generators that are dependent on each other?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42942512/

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