You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Hypothesis中设置DataFrame的最小与最大生成长度?

调整Hypothesis生成的基因组DataFrame大小:最小1行,更大平均长度

要解决你的需求——禁止空DataFrame、生成更长的平均长度DataFrame——只需要在data_frames的行策略外层包裹st.lists,并通过min_size、average_size(可选max_size)参数来精确控制行数范围。

修改后的完整代码

from hypothesis.extra.pandas import columns, data_frames, column
import hypothesis.strategies as st

def mysort(tp):
    key = [-1, tp[1], tp[2], int(1e10)]
    return [x for _, x in sorted(zip(key, tp))]

positions = st.integers(min_value=0, max_value=int(1e7))
strands = st.sampled_from("+ -".split())
chromosomes = st.sampled_from(elements=["chr{}".format(str(e)) for e in list(range(1, 23)) + "X Y M".split()])

# 核心调整:用st.lists包裹行策略,控制行数
row_strategy = st.tuples(chromosomes, positions, positions, strands).map(mysort)
genomics_data = data_frames(
    columns=columns(["Chromosome", "Start", "End", "Strand"], dtype=int),
    rows=st.lists(row_strategy, min_size=1, average_size=50, max_size=200)
)

关键调整说明

  • min_size=1:强制生成的DataFrame至少有1行,彻底避免空DataFrame的情况。
  • average_size=50:告诉Hypothesis你期望生成的DataFrame平均有50行(可以根据你的测试需求调整这个数值,比如改成100、200)。
  • max_size=200(可选):限制生成的DataFrame最大行数,防止出现过大的数据集拖慢测试速度,如果不需要限制可以去掉这个参数。

为什么这样有效?

Hypothesis的data_frames函数的rows参数既可以接受单个行策略(此时会默认生成长度随机的列表,平均长度约10),也可以直接接受一个列表策略(st.lists返回的对象),这让我们能完全掌控生成的行数范围和分布。

通过st.lists的这些参数,你可以精准平衡测试的覆盖性(足够多的行来模拟真实场景)和测试效率(不会生成过大的数据集)。

内容的提问来源于stack exchange,提问作者The Unfun Cat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:42:34