¿Qué es esta función import_umath?

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 requiere 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 comstackdor 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 comstackdor es mucho mejor que una comstackció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 hack, importando un archivo .pxi similar con una llamada a import_umath() dentro de tu código Cython.

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. 😉