Cython: неожиданный тип int_t и объект кортежа базового типа для индексации - PullRequest
0 голосов
/ 01 марта 2020

Я компилирую модуль 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. В чем дело? Как я могу правильно отладить это?

...