python numpy cython

subplot title python



¿Qué es esta función import_umath? (2)

Bueno, lo que dice es que hay una función en el código, que está declarada pero no se usa, por lo que quizás esté obsoleta y no debería estar allí. Ya que es solo una advertencia, y no muy peligrosa (a menos que deje muchas de estas funciones, golpeando el código, aumentando el uso del ram, el tamaño binario, etc.) simplemente lo ignoraría, probablemente no valga la pena. ;)

Cuando compilo un montón de archivos C generados por Cython que se interconectan con Numpy, recibo la advertencia:

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

Parece que no puedo deshacerme de eso. Suponiendo que esto podría ser similar a np.import_array() , que elimina una advertencia relacionada (y que en realidad se required para usar la API de Numpy C), probé np.import_umath() en el nivel superior, pero la advertencia persiste. ¿Como me deshago de esto?

(Cython 0.17.4, Numpy 1.6.2.)


Hay un hilo en la lista de correo de Cython que discute esto un poco. Creo que la discusión fue sobre el conjunto de pruebas de Cython, pero creo que las mismas ideas se pueden aplicar a los archivos generados.

En esencia, el problema involucró un truco que se realizó para evitar las advertencias del compilador de C sobre las funciones no utilizadas.

El archivo de código en cuestión actualmente se ve así:

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

En el pasado, las partes import_umath() tenían comentarios, pero resultó que esto estaba causando errores al construir en el modo C ++. Así que parece que se decidió que una advertencia del compilador es mucho mejor que una compilación rota.

En resumen, parece que esta advertencia en particular existe por el bien de la compatibilidad con C ++ y puede ignorarse de forma segura. Supongo que si realmente te disgusta, y si estás construyendo en modo C, entonces podrías intentar hacer el mismo truco, importando un archivo .pxi similar con una llamada a import_umath() dentro de tu código Cython.