I want to speed up the calculation of a formula executing a list comprehension with Numba.
from numba import jit
# General function to generate overlapping windows from a dataframe
@jit
def overlapping_windows(index, wl=256, noverlap=128):
l = len(index)
res = [[s,s+wl] for s in xrange(0, l, noverlap) if s+wl < l]
return res
overlapping_windows([1,2,3,4,5,6,7,8,9,10],4,2)
However I get a NotImplementedError. Not sure why.
---------------------------------------------------------------------------
NotImplementedError Traceback (most recent call last)
<ipython-input-45-ce0579185abe> in <module>()
6 return res
7
----> 8 overlapping_windows([1,2,3,4,5,6,7,8,9,10],4,2)
~/anaconda/lib/python2.7/site-packages/numba/dispatcher.pyc in _compile_and_call(self, *args, **kws)
123 assert not kws
124 sig = tuple([typeof_pyval(a) for a in args])
--> 125 self.jit(sig)
126 return self(*args, **kws)
127
~/anaconda/lib/python2.7/site-packages/numba/dispatcher.pyc in jit(self, sig, **kws)
118 """Alias of compile(sig, **kws)
119 """
--> 120 return self.compile(sig, **kws)
121
122 def _compile_and_call(self, *args, **kws):
~/anaconda/lib/python2.7/site-packages/numba/dispatcher.pyc in compile(self, sig, locals, **targetoptions)
106 cres = compiler.compile_extra(typingctx, targetctx, self.py_func,
107 args=args, return_type=return_type,
--> 108 flags=flags, locals=locs)
109
110 # Check typing error if object mode is used
~/anaconda/lib/python2.7/site-packages/numba/compiler.pyc in compile_extra(typingctx, targetctx, func, args, return_type, flags, locals)
85 Use ``None`` to indicate
86 """
---> 87 bc = bytecode.ByteCode(func=func)
88 if config.DEBUG:
89 print(bc.dump())
~/anaconda/lib/python2.7/site-packages/numba/bytecode.pyc in __init__(self, func)
275 raise ByteCodeSupportError("does not support cellvars")
276
--> 277 table = utils.SortedMap(ByteCodeIter(code))
278 labels = set(dis.findlabels(code.co_code))
279 labels.add(0)
~/anaconda/lib/python2.7/site-packages/numba/utils.pyc in __init__(self, seq)
44 self._values = []
45 self._index = {}
---> 46 for i, (k, v) in enumerate(sorted(seq)):
47 self._index[k] = i
48 self._values.append((k, v))
~/anaconda/lib/python2.7/site-packages/numba/bytecode.pyc in next(self)
195 ts = "offset=%d opcode=%x opname=%s"
196 tv = offset, opcode, dis.opname[opcode]
--> 197 raise NotImplementedError(ts % tv)
198 if info.argsize:
199 arg = self.read_arg(info.argsize)
NotImplementedError: offset=66 opcode=5e opname=LIST_APPEND
It most likely means that the version of numba you are using does not support functions with list comprehensions.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With