Hello, I’m trying to use values stored in a dict as indices for a list but I am getting an error when I try to use the get() function instead of brackets so that I can used default values. I assume that there is some kind of typing issue here but I can’t figure it out. My Numba version is 0.57.1, my Python version is 3.10
A workaround is to add 0 to the returned value for implicit casting but i would like to fix the problem not the symptom.
Here is an example:
from numba.experimental import jitclass
from numba import types, typed
spec = [
('numba_list', types.ListType(types.int64)),
('numba_dict', types.DictType(
types.int64,
types.int64)),
]
@jitclass(spec)
class Example(object):
def __init__(self):
self.numba_list = typed.List.empty_list(types.int64)
self.numba_list.append(2)
self.numba_list.append(4)
self.numba_dict = typed.Dict.empty(
types.int64,
types.int64)
self.numba_dict[0] = 1
def getValue(self):
return self.numba_list[self.numba_dict[0]]
def getError(self):
return self.numba_list[self.numba_dict.get(0, -1)] # Same behavior without default value
example = Example()
print(example.getValue())
print(example.getError())
this leads to
/home/gas/PycharmProjects/pythonProject/venv/bin/python /home/gas/PycharmProjects/pythonProject/main.py
4
Traceback (most recent call last):
File "/home/gas/PycharmProjects/pythonProject/main.py", line 33, in <module>
print(example.getError())
File "/home/gas/PycharmProjects/pythonProject/venv/lib/python3.10/site-packages/numba/experimental/jitclass/boxing.py", line 61, in wrapper
return method(*args, **kwargs)
File "/home/gas/PycharmProjects/pythonProject/venv/lib/python3.10/site-packages/numba/core/dispatcher.py", line 468, in _compile_for_args
error_rewrite(e, 'typing')
File "/home/gas/PycharmProjects/pythonProject/venv/lib/python3.10/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)
- Resolution failure for literal arguments:
Failed in nopython mode pipeline (step: nopython frontend)
list indices must be integers or slices
During: typing of intrinsic-call at /home/gas/PycharmProjects/pythonProject/main.py (26)
File "main.py", line 26:
def getError(self):
return self.numba_list[self.numba_dict.get(0, -1)]
^
- Resolution failure for non-literal arguments:
None
During: resolving callee type: BoundFunction((<class 'numba.core.types.misc.ClassInstanceType'>, 'getError') for instance.jitclass.Example#7fc55cebbbb0<numba_list:ListType[int64],numba_dict:DictType[int64,int64]<iv=None>>)
During: typing of call at <string> (3)
File "<string>", line 3:
<source missing, REPL/exec in use?>
Process finished with exit code 1