Объявление кортежа переменной длины в Cython - PullRequest
0 голосов
/ 22 октября 2019

У меня есть функция Cython, которая требует создания кортежа, который будет использоваться в качестве ключа словаря. Чтобы ускорить процесс, я бы хотел, чтобы этот кортеж был ctuple таким, чтобы я мог воспользоваться преимуществами использования Cython. Без этого нет никакого смысла пытаться использовать Cython для этой функции вообще, так как я переписываю медленную функцию из ранее существующего пакета Python.

Я знаю тип значений кортежа:

cdef func(int size):
    cdef (int, int) dict_key
    ...

Проблема в том, что длина кортежа не определяется во время компиляции. Параметр size, передаваемый в функцию, будет определять длину кортежа - если size равен 3, тогда кортеж будет содержать 3 значения.

Это не проблема, если я просто объявляю cdef vector[int] dict_key. Но я не могу этого сделать - это будет использоваться в качестве ключа словаря и, следовательно, должно быть хешируемым. Список не.

Что я могу сделать здесь? Как я могу объявить кортеж известной, но переменной длины, или, альтернативно, как я могу использовать vector в качестве ключа словаря?

Или, альтернативно, альтернативно, есть ли какой-нибудь способ проверить ограниченностьнабор size значений и выставить соответствующие cdef s? Я бы действительно предпочел этого не делать. C

...