问题标签 [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.
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 发生了什么吗?
python - 带有超时的 Python 属性测试
我有一定的时间来测试一个系统。我可以编写一个运行属性测试直到一小时结束的 Python 属性测试吗?我在hypothesis
其中寻找解决方案,但找不到。
我想属性测试库有某种测试用例生成器,我可以从中提取并执行,直到超时。这将是一个可接受的惰性解决方案。
python - python-hypothesis:检索或重新格式化一个伪造的例子
测试失败后是否可以检索或重新格式化伪造的示例?重点是以不同的格式显示示例数据——策略生成的数据在代码中很容易使用,但对用户并不友好,所以我正在研究如何以不同的形式显示它。即使是使用示例数据库的事后分析工具也足够了,但似乎没有任何 API 允许这样做,或者我错过了什么?
python-hypothesis - 假设和空数据帧
我正在使用假设来测试数据帧,当它们“空”时,我会遇到一些意想不到的行为。
在下面的示例中,我有一个包含所有 nans 的数据框,它被视为一个NoneType
对象而不是数据框(因此它没有属性notnull()
):
与 ipython 会话相比,其中所有 nans 的数据帧仍然是数据帧:
我正在明确测试notnull()
以允许各种病理示例。有什么建议么?
python-hypothesis - Python-Hypothesis:指定和管理 NaN 值
我正在尝试使用 Hypothesis 生成一组我将合并在一起的数据框。我希望允许每个单独的列具有 NaN 值,并且我希望允许 Hypothesis 生成一些古怪的示例。
但我主要想关注每个数据帧中至少有一行具有实际值的示例 - 特别是,我希望能够生成具有在相应列之间共享的一些信息的数据帧,以便合并的数据帧是不是空的。(例如,我希望 store.csv 中 'store' 中的一些值与 train.csv 中 'store' 中的值重叠。)
我在这里有一些示例代码可以在各处生成 NaN 值和古怪的示例,但是大多数生成的示例都包含很少的非 NaN 值。(数据帧策略从第 57 行开始。)
关于如何创建更“现实”的例子有什么建议吗?谢谢!
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
?
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
python-hypothesis - 假设中具有附加参数的递归策略
使用recursive
,我可以生成简单的 AST,例如
现在我想改变它,这样我就可以生成除算术运算之外的布尔运算。我最初的想法是添加一个参数trees
:
到目前为止还好。但是我该如何混合它们呢?也就是说,我还想要比较运算符和三元运算符,也就是说,这需要“children
使用不同的参数调用”。
树需要很好的类型:如果操作是'||'
or '&&'
,两个参数都需要是布尔值,参数'+'
或'<'
需要是数字等。如果我只有两种类型,我可以使用filter
(给定一个type_of
函数):
但在实际情况下,这是不能接受的。
recursive
支持这个吗?还是有其他方法?显然,我可以直接trees
递归定义,但这会遇到标准问题。