Problem
Advanced indexing of a relatively huge (e.g., length 10K) 1D array returns UnboundLocalError: local variable 'shardfn' referenced before assignment, rather than NotImplementedError.
I understand that advanced indexing is mostly not yet implemented. Most related routines raise NotImplementedError to let users know about this situation. However, this particular use case raises this different error, which seems to be a bug to me.
To reproduce
- step 1: prepare
test.py:
from legate import numpy
a = numpy.arange(10000)
print(a[(1, 2, 3), ])
- step 2: run with, for example
$ legate --cpus 1 test.py
Output
Traceback (most recent call last):
File "<blahblah>/lib/python3.8/site-packages/legion_top.py", line 394, in legion_python_main
run_path(args[start], run_name='__main__')
File "<blahblah>/lib/python3.8/site-packages/legion_top.py", line 193, in run_path
exec(code, module.__dict__, module.__dict__)
File "./test.py", line 3, in <module>
print(a[(1, 2, 3), ])
File "<blahblah>/lib/python3.8/site-packages/legate/numpy/array.py", line 381, in __getitem__
shape=None, thunk=self._thunk.get_item(key, stacklevel=2)
File "<blahblah>/lib/python3.8/site-packages/legate/numpy/deferred.py", line 414, in get_item
copy = Copy(mapper=self.runtime.mapper_id, tag=shardfn)
UnboundLocalError: local variable 'shardfn' referenced before assignment
Expected results
Either [1, 2, 3] or NotImplementedError.
Notes
- Interestingly, smaller arrays do not have this issue. For example, if
a = numpy.arange(100), the code works fine.
- Another way to make it works is to use GPUs instead of CPUs. For example,
legate --gpus 1 test.py works fine. This is interesting, as the GPU implementation seems to be more stable than CPU implementation?
Problem
Advanced indexing of a relatively huge (e.g., length 10K) 1D array returns
UnboundLocalError: local variable 'shardfn' referenced before assignment, rather thanNotImplementedError.I understand that advanced indexing is mostly not yet implemented. Most related routines raise
NotImplementedErrorto let users know about this situation. However, this particular use case raises this different error, which seems to be a bug to me.To reproduce
test.py:Output
Expected results
Either
[1, 2, 3]orNotImplementedError.Notes
a = numpy.arange(100), the code works fine.legate --gpus 1 test.pyworks fine. This is interesting, as the GPU implementation seems to be more stable than CPU implementation?