Аргумент Number – List() должен быть повторяемым.Python

Программы на Python
Ответить
Anonymous
 Аргумент Number – List() должен быть повторяемым.

Сообщение Anonymous »

Я хочу использовать numba для повышения производительности реализации BLAST. Это очень простая функция для получения всех k-меров и их позиций в последовательности

Код: Выделить всё

def preprocess_sequence(sequence, word_len):
word_positions = dict()

for i in range(0, len(sequence) - word_len + 1):
word = sequence[i:i+word_len]
if word not in word_positions:
word_positions[word] = [i]
else:
word_positions[word].append(i)

result = list(word_positions.items())
return result
Когда я меняю код на использование numba.njit, все ломается.

Код: Выделить всё

def preprocess_sequence(sequence, word_len):
word_positions = numba.typed.Dict.empty(
key_type=numba.types.unicode_type,
value_type=numba.types.ListType(numba.types.int64)
)

for i in range(0, len(sequence) - word_len + 1):
word = sequence[i:i+word_len]
if word not in word_positions:
positions = numba.typed.List([i])
word_positions[word] = positions
else:
word_positions[word].append(i)

result = list(word_positions.items())
return result
Ошибка:

Код: Выделить всё

  File "...\site-packages\numba\core\dispatcher.py", line 468, in _compile_for_args
error_rewrite(e, 'typing')
File "...\site-packages\numba\core\dispatcher.py", line 409, in error_rewrite
raise e.with_traceback(None)
numba.core.errors.TypingError: Failed in nopython mode pipeline (step: nopython frontend)
Failed in nopython mode pipeline (step: nopython frontend)
List() argument must be iterable
During: resolving callee type: typeref[]
During: typing of call at .\file.py (61)

File "file.py", line 61:
def preprocess_sequence(sequence, word_len):

key_type=numba.types.unicode_type,
value_type=numba.types.ListType(numba.types.int64)
^

During: resolving callee type: type(CPUDispatcher())
During: typing of call at .\file.py (102)

During: resolving callee type: type(CPUDispatcher())
During: typing of call at .\file.py (102)

File "file.py", line 102:
def search_sequence(words, sequence, threshold, scoring_matrix):


word_positions_list = preprocess_sequence(sequence, 3)
Я не знаю, что не так с кодом, каждый тип строго определен, и единственная ошибка, которую я могу извлечь из сообщения об ошибке, которая не является стеком вызовов, - это аргумент List(), который должен быть итерируемым . Но я передаю итерацию в typed.List()

Подробнее здесь: https://stackoverflow.com/questions/793 ... e-iterable
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»