Я использую подпись @jit, чтобы определить типы входящих аргументов. Но при вызове функции я получаю:
ValueError: cannot compute fingerprint of empty list
Я знаю, что список пуст, но моя подпись определяет его, поэтому я не уверен, почему Numba не использует эту подпись.
Я пыталсяразличные формы подписей (строковая форма и форма кортежа), и это все еще дает ошибку. Мне не понятно из документации, почему эти подписи не определяют аргументы как переданные, и все еще полагаются на выводящие типы.
@nb.jit("void(List(int64), int64, List(List(int64)))", nopython=True, cache=True)
def _set_indices(keys_as_int, n_keys, indices):
for i, k in enumerate(keys_as_int):
indices[k].append(i)
indices = [([np.array(elt) for elt in indices])]
def group_by(keys):
_, first_occurrences, keys_as_int = np.unique(keys, return_index=True, return_inverse=True)
n_keys = max(keys_as_int) + 1
indices = [[] for _ in range(max(keys_as_int) + 1)]
print(str(keys_as_int) + str(n_keys) + str(indices))
_set_indices(keys_as_int, n_keys, indices)
return indices
result = group_by(['aaa', 'aab', 'aac', 'aaa', 'aac'])
print(str(result))
Я ожидал, что подпись будет принудительно вводить данные при входящейаргументы без необходимости выводить типы данных. Фактическая ошибка
<ipython-input-274-401e07cd4e63> in <module>
----> 1 result = group_by(['aaa', 'aab', 'aac', 'aaa', 'aac'])
2 print(str(result))
<ipython-input-273-acdebb81069c> in group_by(keys)
4 indices = [[] for _ in range(max(keys_as_int) + 1)]
5 print(str(keys_as_int) + str(n_keys) + str(indices))
----> 6 _set_indices(keys_as_int, n_keys, indices)
7 return indices
ValueError: cannot compute fingerprint of empty list