gpt4 book ai didi

python - 当特别要求不要时,假设策略会生成 inf

转载 作者:行者123 更新时间:2023-11-28 22:16:06 25 4
gpt4 key购买 nike

from functools import partial
import hypothesis as h
import hypothesis.strategies as hs
import hypothesis.extra.numpy as hnp
import numpy as np


floats_notnull = partial(hs.floats, allow_nan=False, allow_infinity=False)
complex_notnull = partial(hs.complex_numbers, allow_nan=False, allow_infinity=False)

data_strategy_real = hnp.arrays(
np.float64,
hs.tuples(hs.integers(min_value=2, max_value=50),
hs.integers(min_value=2, max_value=5)),
floats_notnull()
)

data_strategy_complex = hnp.arrays(
np.complex64,
hs.tuples(hs.integers(min_value=2, max_value=50), hs.just(1)),
complex_notnull()
)

data_strategy = hs.one_of(data_strategy_real, data_strategy_complex)

如果您多次运行 data_strategy.example(),您会注意到结果中的某些值具有无限实部或虚部。我在这里的目的是明确禁止无限或 NaN 部分。

我做错了什么?

更新:如果我使用

data_strategy = hs.lists(complex_notnull, min_size=2, max_size=50)

并将其转换为我测试中的数组,问题似乎消失了。复数溢出了吗?我没有收到关于假设溢出的常见弃用警告。

如果我使用

data_strategy = data_strategy_real

没有 inf 出现。

最佳答案

The complex64 type is too small and it's overflowing. Somehow Hypothesis is failing to catch this.

是的,这个问题的根本原因是您正在生成 64 位 有限 float ,然后将它们转换为 32 位(因为 complex64 是一对32 位 float )。您可以使用 floats()width=32 参数来解决这个问题:

floats_notnull_32 = partial(hs.floats, allow_nan=False, allow_infinity=False, width=32)

而且您没有得到通常的溢出检查,因为 it's only implemented for floats and integers眼下。我已经打开(编辑:并修复)issue #1591也可以检查复杂类型和字符串类型。

关于python - 当特别要求不要时,假设策略会生成 inf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52410975/

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