这个import_umath函数是什么?

时间:2013-01-07 17:43:27

标签: python numpy cython

在编译一堆与Numpy交互的Cython生成的C文件时,我收到警告:

/usr/lib/pymodules/python2.7/numpy/core/include/numpy/__ufunc_api.h:226:1: warning: ‘_import_umath’ defined but not used [-Wunused-function]

我似乎无法摆脱这种情况。确定这个可能类似于np.import_array(),它消除了相关警告(实际上required使用Numpy C API),我在顶级尝试了np.import_umath(),但警告仍然存在。我该如何摆脱它?

(Cython 0.17.4,Numpy 1.6.2。)

2 个答案:

答案 0 :(得分:5)

有一个thread on the Cython mailing list可以对此进行一些讨论。我相信讨论涉及Cython测试套件,但我认为相同的想法可以应用于生成的文件。

本质上,该问题涉及为避免C编译器警告未使用的函数而进行的黑客攻击。

code file in question目前看起来像这样:

cdef extern from *:
   bint FALSE "0"
   void import_array()
#   void import_umath()

if FALSE:
    import_array()
#    import_umath()

过去,import_umath()部分未被注释,但事实证明,这在使用C ++模式构建时会导致错误。所以it was decided似乎编译器警告比破坏的构建要好得多。

简而言之,为了C ++兼容性,似乎存在此特殊警告,并且可以安全地忽略。我想如果你真的不喜欢它,并且如果你在C模式下构建,那么你可以通过调用{导入类似的.pxi文件来尝试做同样的黑客攻击{1}}在你的Cython代码中。

答案 1 :(得分:0)

嗯,它说的是,代码中有一个函数,它被声明但未被使用,所以也许它过时了,不应该存在。因为它只是一个警告,而不是非常危险的(除非你会留下很多这样的功能,破坏代码,增加ram使用,二进制大小等)我会忽略它 - 最可能它不值得你的时间;)