Подтвердить что ты не робот

Что это за функция import_umath?

При компиляции сгенерированных Cython файлов C, которые взаимодействуют с Numpy, я получаю предупреждение:

/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(), который избавляется от связанного предупреждения (и на самом деле требуется для использования API Numpy C), я попробовал np.import_umath() в верхнего уровня, но предупреждение сохраняется. Как я могу избавиться от него?

(Cython 0.17.4, Numpy 1.6.2.)

4b9b3361

Ответ 1

Там есть поток в списке рассылки Cython, который немного об этом говорит. Я считаю, что обсуждение касалось набора тестов Cython, но я думаю, что те же идеи могут быть применены к сгенерированным файлам.

В сущности, проблема связана с хаком, который был сделан для того, чтобы избежать предупреждений компилятора C о неиспользуемых функциях.

файл кода, о котором идет речь, выглядит следующим образом:

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

if FALSE:
    import_array()
#    import_umath()

В прошлом части import_umath() были без комментариев, но, как оказалось, это вызывало ошибки при построении в режиме С++. Таким образом, кажется, что было принято решение, что предупреждение о компиляторе намного лучше, чем сломанная сборка.

Короче говоря, похоже, что это особое предупреждение существует для совместимости с С++ и может быть безопасно проигнорировано. Я полагаю, что если вы действительно любите его, и если вы строите в режиме C, то вы можете попробовать сделать то же хак, импортируя подобный .pxi файл с вызовом import_umath() внутри вашего кода Cython.

Ответ 2

Хорошо, что он говорит, заключается в том, что в коде есть функция, которая объявлена, но не используется, поэтому, возможно, она устарела и не должна быть там. Поскольку это просто предупреждение, а не очень опасное (если вы не оставите много таких функций, сбивая код, увеличивая использование бара, двоичный размер и т.д.), Я бы просто проигнорировал его - скорее всего, это не стоит вашего времени;)