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

Mik*_*ike 8 coverage.py pytest numba

我已经编写了一个python模块@numba.jit为了提高速度,其中大部分都包装在装饰器中。我还为此模块编写了很多测试,并使用(在Travis-CI上)运行了该模块py.test。现在,我想看看这些测试的覆盖范围,使用pytest-cov,这仅仅是依赖于一个插件coverage(与整合所有这一切的希望工作服)。

不幸的是,似乎numba.jit在所有这些功能上使用都会使人们coverage认为这些功能从未使用过-就是这种情况。因此,我的测试基本上没有报告的报道。这并不是什么大的惊喜,因为numba正在获取该代码并对其进行编译,因此该代码本身实际上从未使用过。但是我希望有时会在python中看到一些神奇的东西...

有什么有用的方法可以将这两个出色的工具结合起来?如果失败,还有其他工具可以用来衡量numba的覆盖率吗?

[我做了一个最小的工作示例,在这里显示了区别。)

Ned*_*der 6

最好的办法是在覆盖率测量期间禁用numba JIT。这依赖于您信任Python代码和JIT版本代码之间的对应关系,但是无论如何您都需要信任它。

  • 具体来说,您可以通过将环境变量NUMBA_DISABLE_JIT设置为非零值来禁用jit。 (3认同)
  • 是的,我担心情况会如此。不幸的是,即使使用numba,我的测试也要花费大约15分钟,而我估计如果不使用numba,它们大约需要一天的时间,因此禁用numba对我来说是行不通的。而且我看不出有什么方法可以减少不减少覆盖面的时间。无论如何,感谢您的回答和一段非常不错的代码!:) (2认同)

Mik*_*ike 5

这并不是说这回答了问题,但我认为我应该宣传另一种可能有人感兴趣的方式。可能可以使用 来完成一些非常美丽的事情llvm-cov。据推测,这必须在 numba 中实现,并且必须对 llvm 代码进行检测,这需要在某处设置一些标志。但既然 numba 知道 python 代码行和 llvm 代码行之间的对应关系,那么肯定有比我更聪明的人可以实现的东西。