Я компилирую модуль Cython, который выдает ошибку SIGSEGV
во время выполнения приложения. После установки boundscheck=False
в директивах компилятора я не могу больше компилировать (cythonize) и получать длинную трассировку стека, которая не указывает на мой собственный код:
warning: cpc_naive/cythonCode.pyx:319:27: Index should be typed for more efficient access
Traceback (most recent call last):
File "/home/pdiracdelta/Documents/UHasselt/PRiSM/src/CPC-naive/setup.py", line 48, in <module>
ext_modules=cythonize(ext_modules, compiler_directives=compiler_directives),
File "/home/pdiracdelta/.conda/envs/prism/lib/python3.6/site-packages/Cython/Build/Dependencies.py", line 1101, in cythonize
...
File "/home/pdiracdelta/.conda/envs/prism/lib/python3.6/site-packages/Cython/Compiler/ExprNodes.py", line 4029, in generate_result_code
self.type, self.base.type)
AssertionError: unexpected type int_t and base type tuple object for indexing
Как мне даже начать отлаживать это ? Сначала у меня были кортежи, выполняющие двухуровневую индексацию для двумерных массивов, например:
cdef double[:,:] my2darray
tuple mytuple
my2darray = np.zeros(shape=(3,3))
mytuple = (1,2)
print(my2darray[mytuple])
, но я развернул их все так (на самом деле я уже делал это раньше, потому что они выдавали CompileError
поговорку *) 1010 *):
print(my2darray[mytuple[0], mytuple[1]])
, и я все еще получаю то же сообщение AssertionError
. В чем дело? Как я могу правильно отладить это?