问题标签 [python-hypothesis]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
387 浏览

python-hypothesis - pip install hypothesis[pandas] 说hypothesis3.82.1不提供额外的'pandas'

当我运行 pip install hypothesis[pandas] 时,我得到以下信息:

Collecting hypothesis[pandas] Using cached https://files.pythonhosted.org/packages/36/58/222aafec5064d12c2b6123c69e512933b1e82a55ce49015371089d216f89/hypothesis-3.82.1-py3-none-any.whl hypothesis 3.82.1 does not provide the extra 'pandas'

pip install hypothesis[django] 似乎有效,hypothesis.extra 有 django 但没有 pandas。知道pip install for pandas 和 numpy extras 发生了什么吗?

0 投票
1 回答
222 浏览

python - 带有超时的 Python 属性测试

我有一定的时间来测试一个系统。我可以编写一个运行属性测试直到一小时结束的 Python 属性测试吗?我在hypothesis其中寻找解决方案,但找不到。

我想属性测试库有某种测试用例生成器,我可以从中提取并执行,直到超时。这将是一个可接受的惰性解决方案。

0 投票
2 回答
86 浏览

python - python-hypothesis:检索或重新格式化一个伪造的例子

测试失败后是否可以检索或重新格式化伪造的示例?重点是以不同的格式显示示例数据——策略生成的数据在代码中很容易使用,但对用户并不友好,所以我正在研究如何以不同的形式显示它。即使是使用示例数据库的事后分析工具也足够了,但似乎没有任何 API 允许这样做,或者我错过了什么?

0 投票
1 回答
186 浏览

python-hypothesis - 如何在假设中定义策略以生成一对相似的递归对象

我是假设的新手,我正在寻找一种方法来生成一对相似的递归对象。

我对单个对象的策略类似于假设文档中的这个示例

我想测试一个采用一对递归对象 A 和 B 的函数,这个函数的副作用应该是A==B.

我的第一种方法是编写一个获取两个独立对象的测试,例如:

但缺点是假设不知道这两个对象之间存在依赖关系,因此它们可能完全不同。这是一个有效的测试,我也想测试它。

但我也想测试只是略有不同的复杂递归对象。

也许该假设能够将测试失败的一对非常不同的对象缩小为测试以相同方式失败的一对仅略有不同的对象。

0 投票
1 回答
130 浏览

python-hypothesis - 假设和空数据帧

我正在使用假设来测试数据帧,当它们“空”时,我会遇到一些意想不到的行为。

在下面的示例中,我有一个包含所有 nans 的数据框,它被视为一个NoneType对象而不是数据框(因此它没有属性notnull()):

与 ipython 会话相比,其中所有 nans 的数据帧仍然是数据帧:

我正在明确测试notnull()以允许各种病理示例。有什么建议么?

0 投票
2 回答
359 浏览

python-hypothesis - Python-Hypothesis:指定和管理 NaN 值

我正在尝试使用 Hypothesis 生成一组我将合并在一起的数据框。我希望允许每个单独的列具有 NaN 值,并且我希望允许 Hypothesis 生成一些古怪的示例。

但我主要想关注每个数据帧中至少有一行具有实际值的示例 - 特别是,我希望能够生成具有在相应列之间共享的一些信息的数据帧,以便合并的数据帧是不是空的。(例如,我希望 store.csv 中 'store' 中的一些值与 train.csv 中 'store' 中的值重叠。)

我在这里有一些示例代码可以在各处生成 NaN 值和古怪的示例,但是大多数生成的示例都包含很少的非 NaN 值。(数据帧策略从第 57 行开始。)

关于如何创建更“现实”的例子有什么建议吗?谢谢!

0 投票
1 回答
331 浏览

python - 假设等效于 QuickCheck 频率发生器?

作为一个学习项目,我正在将一些 Haskell 代码(我不熟悉)翻译成 Python(我很熟悉)......

我正在翻译的 Haskell 库具有使用基于属性的 QuickCheck 测试的测试。在 Python 方面,我使用 Hypothesis 作为基于属性的测试库。

Haskell 测试使用如下所示的辅助函数:

我的问题是关于frequency这个助手中的生成器。 http://hackage.haskell.org/package/QuickCheck-2.12.6.1/docs/Test-QuickCheck-Gen.html#v:frequency

我理解它的意思是大多数时候它会vectorOf whitespace_char以预期的形式返回size,但 5 次中有 1 次会返回listOf whitespace_char,它可以是任何长度,包括零。

在库的上下文中,不尊重的缩进size将为被测函数建模错误的输入数据。所以我看到了偶尔产生这种输入的意义。

我目前不明白的是为什么 5:1 的比例有利于有效输入?我本来希望基于属性的测试框架生成各种有效和无效的输入。现在我假设这有点像优化,所以它不会花费大部分时间来生成无效示例?

我的问题的第二部分是如何将其转化为假设。AFAICT 假设没有任何等效的frequency生成器。

我想知道我是否应该尝试frequency从现有的假设策略中自己构建一个策略,或者习语本身是否不值得翻译,我应该让框架生成类似的有效和无效示例?

我目前拥有的是:

如果我在 shell 中生成一些示例,这似乎正是我认为应该做的。

但这是我第一次使用假设或基于属性的测试,我想知道通过用frequency简单的替换分布是否会丢失一些重要的东西one_of

0 投票
1 回答
64 浏览

python - 如何重构此递归策略表达式 Strategy 以参数化其长度?

语境

首先,感谢假设。它既非常强大又非常有用!

我编写了一个假设策略来生成以下形式的单调(ANDS 和 OR)策略表达式:

这可以被认为是一个树结构,其中 A、B 和 C 是叶节点的属性,而“和”和“或”是非叶节点。

该策略似乎可以根据需要生成表达式。

(也许可以改善示例的统计多样性,但这不是这个问题的本质)。

不等式也是有效的。例如:

我想约束或过滤示例,以便生成具有指定数量的叶节点(即属性)的策略表达式。

对于性能测试,我尝试过使用这样data.draw()filter东西:

其中extract_attributes()计算表达式中的叶节点数,n是所需的叶数。

该解决方案的问题在于,当n> 16 时,假设抛出:

我想用 100 个叶节点生成有效的策略表达式。

这种方法的另一个缺点是该假设被报道HealthCheck.filter_too_much并且变得丑陋。HealthCheck.too_slow@settings

我宁愿有一个参数要说policy_expressions(leaf_nodes=4)得到这样的例子:

我最初避免了这种情况,因为我无法看到如何使用递归策略代码来做到这一点。

问题

您能否提出一种重构此策略的方法,以便可以针对叶节点的数量对其进行参数化?

这是策略代码(无论如何它在 Charm Crypto 中的开源)

https://github.com/JHUISI/charm/blob/dev/charm/toolbox/policy_expression_spec.py

0 投票
2 回答
133 浏览

python-hypothesis - 假设中具有附加参数的递归策略

使用recursive,我可以生成简单的 AST,例如

现在我想改变它,这样我就可以生成除算术运算之外的布尔运算。我最初的想法是添加一个参数trees

到目前为止还好。但是我该如何混合它们呢?也就是说,我还想要比较运算符和三元运算符,也就是说,这需要“children使用不同的参数调用”。

树需要很好的类型:如果操作是'||'or '&&',两个参数都需要是布尔值,参数'+''<'需要是数字等。如果我只有两种类型,我可以使用filter(给定一个type_of函数):

但在实际情况下,这是不能接受的。

recursive支持这个吗?还是有其他方法?显然,我可以直接trees递归定义,但这会遇到标准问题

0 投票
1 回答
45 浏览

python - 基于属性的测试和浮点相等

因此,我试图将一个函数的两个实现与假设进行比较,以确定它们是否以相同的方式工作于我自己可能不会想到的大量不同输入。

我尝试使用numpy.testing.assert_allclose来比较输出,但假设只是反复超越它。我越是扩大可接受的容差,Hypothesis 对它抛出的值就越大,直到它失败,即使输出相似到足以被认为是相同的。

 

 

等等

所以我想我需要一个不同的“足够好”的相似性测试,或者我需要以某种方式限制输入值范围?但我不确定如何以一种不会错过真正错误答案的方式来做到这一点。有什么建议吗?