分析numba包装函数的覆盖范围

时间:2014-11-11 21:46:34

标签: pytest numba coverage.py

我写过a python module,其中大部分都包含在@numba.jit装饰器中以提高速度。我还为这个模块写了很多测试,我用py.test运行(on Travis-CI)。现在,我正在尝试使用pytest-cov查看这些测试的覆盖范围,这只是一个依赖于coverage的插件(希望将所有这些集成coveralls

不幸的是,似乎在所有这些函数上使用numba.jit会使coverage认为函数从未使用过 - 这种情况就是这种情况。所以我的测试基本上没有报道覆盖率。这并不是一个巨大的惊喜,因为numba正在接受该代码并对其进行编译,因此代码本身实际上从未使用过。但是我希望有些时候你会看到python的一些魔力......

有没有什么有用的方法来结合这两个优秀的工具?如果不这样做,是否还有其他工具可以用来衡量numba的覆盖率?

[我做了一个最小的工作示例,显示了差异here。)

2 个答案:

答案 0 :(得分:4)

最好的办法可能是在覆盖测量期间禁用numba JIT。这依赖于您信任Python代码和JIT代码之间的对应关系,但无论如何您需要在某种程度上信任它。

答案 1 :(得分:1)

这不是回答这个问题,但我认为我应该宣传某人可能有兴趣继续工作的另一种方式。可能使用llvm-cov可以完成一些非常漂亮的事情。据推测,这必须在numba中实现,并且必须对llvm代码进行检测,这将需要某处标记。但是由于numba知道python代码行和llvm代码之间的对应关系,所以必须有一些东西可以由比我更聪明的人实现。