Я разработал код для bio python, который я хотел бы ускорить в своих собственных приложениях, добавляя файлы .pxd и компилируя с помощью Cython. Попутно я добавил подсказки типа, так как думал, что это будет улучшением (на самом деле я надеялся, что Cython будет автоматически использовать их, но это не так). Теперь я обнаружил, что подсказанный типом код несовместим с улучшением Cython, которое я намеревался. Например, взяв пример convolve_py.py из учебника cython numpy :
def naive_convolve(f, g):
, изменив значение на:
def naive_convolve(f: np.ndarray, g: np.ndarray) -> np.ndarray:
, когда я поставлю
cpdef np.ndarray[np.int_t, ndim=2] naive_convolve(np.ndarray[np.int_t, ndim=2] f, np.ndarray[np.int_t, ndim=2] g)
в соответствующем файле .pxd (он работает для случая без подсказок типов выше). Я получаю:
def naive_convolve(f: np.ndarray, g: np.ndarray) -> np.ndarray:
^
------------------------------------------------------------
convolve_py.py:4:19: Compiler crash in AnalyseDeclarationsTransform
У меня те же результаты с более простыми типами в моем собственном коде. Насколько я понимаю, Cython должен обрабатывать функции 3.x, а документация относится к подсказкам типов, есть ли другой подход или опция, которую я упускаю? Моя строка компиляции:
cythonize -3 -i convolve_py.py convolve_py.pxd