In [45]:
import numpy as np
import numba
@numba.jit(nopython=True)
def select(condlist, choicelist):
"""
Return an array drawn from elements in choicelist, depending on conditions.
Parameters
----------
condlist : list of bool ndarrays
The list of conditions which determine from which array in `choicelist`
the output elements are taken. When multiple conditions are satisfied,
the first one encountered in `condlist` is used.
choicelist : list of ndarrays
The list of arrays from which the output elements are taken. It has
to be of the same length as `condlist`.
Returns
-------
output : ndarray
The output at position m is the m-th element of the array in
`choicelist` where the m-th element of the corresponding array in
`condlist` is True.
Examples
--------
>>> x = np.arange(10)
>>> condlist = [x<3, x>5]
>>> choicelist = [x, x**2]
>>> np.select(condlist, choicelist)
array([ 0, 1, 2, 0, 0, 0, 36, 49, 64, 81])
"""
result = choicelist[0].copy()
result[:] = 0.
# This is done in reverse order since the first choice should take precedence.
indices = np.arange(len(condlist)-1, -1, -1)
for idx in indices:
result = np.where(condlist[idx], choicelist[idx], result)
return result
In [46]:
x = np.arange(10)
condlist = (x<3, x>5)
choicelist = (x, x**2)
result = np.select(condlist, choicelist)
jit_result = select(condlist, choicelist)
expected = np.array([ 0, 1, 2, 0, 0, 0, 36, 49, 64, 81])
np.testing.assert_array_equal(result, expected)
np.testing.assert_array_equal(jit_result, expected)
---------------------------------------------------------------------------
LoweringError Traceback (most recent call last)
<ipython-input-46-b766f956e404> in <module>()
3 choicelist = (x, x**2)
4 result = np.select(condlist, choicelist)
----> 5 jit_result = select(condlist, choicelist)
6 expected = np.array([ 0, 1, 2, 0, 0, 0, 36, 49, 64, 81])
7 np.testing.assert_array_equal(result, expected)
/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/dispatcher.pyc in _compile_for_args(self, *args, **kws)
169 assert not kws
170 sig = tuple([self.typeof_pyval(a) for a in args])
--> 171 return self.compile(sig)
172
173 def inspect_llvm(self, signature=None):
/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/dispatcher.pyc in compile(self, sig)
347 self.py_func,
348 args=args, return_type=return_type,
--> 349 flags=flags, locals=self.locals)
350
351 # Check typing error if object mode is used
/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/compiler.pyc in compile_extra(typingctx, targetctx, func, args, return_type, flags, locals, library)
639 pipeline = Pipeline(typingctx, targetctx, library,
640 args, return_type, flags, locals)
--> 641 return pipeline.compile_extra(func)
642
643
/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/compiler.pyc in compile_extra(self, func)
356 raise e
357
--> 358 return self.compile_bytecode(bc, func_attr=self.func_attr)
359
360 def compile_bytecode(self, bc, lifted=(), lifted_from=None,
/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/compiler.pyc in compile_bytecode(self, bc, lifted, lifted_from, func_attr)
365 self.lifted_from = lifted_from
366 self.func_attr = func_attr
--> 367 return self._compile_bytecode()
368
369 def compile_internal(self, bc, func_attr=DEFAULT_FUNCTION_ATTRIBUTES):
/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/compiler.pyc in _compile_bytecode(self)
626
627 pm.finalize()
--> 628 return pm.run(self.status)
629
630
/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/compiler.pyc in run(self, status)
248 # No more fallback pipelines?
249 if is_final_pipeline:
--> 250 raise patched_exception
251 # Go to next fallback pipeline
252 else:
LoweringError: Caused By:
Traceback (most recent call last):
File "/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/compiler.py", line 242, in run
res = stage()
File "/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/compiler.py", line 584, in stage_nopython_backend
return self._backend(lowerfn, objectmode=False)
File "/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/compiler.py", line 537, in _backend
lowered = lowerfn()
File "/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/compiler.py", line 524, in backend_nopython_mode
self.flags)
File "/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/compiler.py", line 770, in native_lowering_stage
lower.lower()
File "/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/lowering.py", line 123, in lower
self.lower_normal_function(self.fndesc)
File "/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/lowering.py", line 158, in lower_normal_function
entry_block_tail = self.lower_function_body()
File "/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/lowering.py", line 183, in lower_function_body
self.lower_block(block)
File "/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/lowering.py", line 196, in lower_block
self.lower_inst(inst)
File "/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/lowering.py", line 238, in lower_inst
val = self.lower_assign(ty, inst)
File "/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/lowering.py", line 395, in lower_assign
return self.lower_expr(ty, value)
File "/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/lowering.py", line 609, in lower_expr
res = self.lower_call(resty, expr)
File "/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/lowering.py", line 575, in lower_call
res = impl(self.builder, argvals)
File "/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/targets/base.py", line 1122, in __call__
return self._imp(self._context, builder, self._sig, args)
File "/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/targets/arrayobj.py", line 1250, in array_where
res = context.compile_internal(builder, where_impl, sig, args)
File "/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/targets/base.py", line 862, in compile_internal
ty = self.compile_subroutine(builder, impl, sig, locals)
File "/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/targets/base.py", line 852, in compile_subroutine
locals=locals)
File "/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/targets/base.py", line 832, in compile_only_no_cache
locals=locals)
File "/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/compiler.py", line 658, in compile_internal
return pipeline.compile_extra(func)
File "/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/compiler.py", line 358, in compile_extra
return self.compile_bytecode(bc, func_attr=self.func_attr)
File "/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/compiler.py", line 367, in compile_bytecode
return self._compile_bytecode()
File "/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/compiler.py", line 628, in _compile_bytecode
return pm.run(self.status)
File "/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/compiler.py", line 250, in run
raise patched_exception
LoweringError: Caused By:
Traceback (most recent call last):
File "/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/compiler.py", line 242, in run
res = stage()
File "/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/compiler.py", line 584, in stage_nopython_backend
return self._backend(lowerfn, objectmode=False)
File "/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/compiler.py", line 537, in _backend
lowered = lowerfn()
File "/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/compiler.py", line 524, in backend_nopython_mode
self.flags)
File "/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/compiler.py", line 770, in native_lowering_stage
lower.lower()
File "/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/lowering.py", line 123, in lower
self.lower_normal_function(self.fndesc)
File "/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/lowering.py", line 158, in lower_normal_function
entry_block_tail = self.lower_function_body()
File "/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/lowering.py", line 183, in lower_function_body
self.lower_block(block)
File "/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/lowering.py", line 201, in lower_block
raise LoweringError(msg, inst.loc)
LoweringError: Internal error:
AssertionError: Storing i8 to ptr of i1 ('$124.4'). FE type bool
File "../../../dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/targets/arrayobj.py", line 1237
Failed at nopython (nopython mode backend)
Internal error:
AssertionError: Storing i8 to ptr of i1 ('$124.4'). FE type bool
File "../../../dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/targets/arrayobj.py", line 1237
Failed at nopython (nopython mode backend)
Caused By:
Traceback (most recent call last):
File "/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/compiler.py", line 242, in run
res = stage()
File "/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/compiler.py", line 584, in stage_nopython_backend
return self._backend(lowerfn, objectmode=False)
File "/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/compiler.py", line 537, in _backend
lowered = lowerfn()
File "/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/compiler.py", line 524, in backend_nopython_mode
self.flags)
File "/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/compiler.py", line 770, in native_lowering_stage
lower.lower()
File "/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/lowering.py", line 123, in lower
self.lower_normal_function(self.fndesc)
File "/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/lowering.py", line 158, in lower_normal_function
entry_block_tail = self.lower_function_body()
File "/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/lowering.py", line 183, in lower_function_body
self.lower_block(block)
File "/home/rotis/dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/lowering.py", line 201, in lower_block
raise LoweringError(msg, inst.loc)
LoweringError: Internal error:
AssertionError: Storing i8 to ptr of i1 ('$124.4'). FE type bool
File "../../../dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/targets/arrayobj.py", line 1237
Failed at nopython (nopython mode backend)
Internal error:
AssertionError: Storing i8 to ptr of i1 ('$124.4'). FE type bool
File "../../../dev/mynumba/lib/python2.7/site-packages/numba-0.21.0+167.g864ae61-py2.7-linux-x86_64.egg/numba/targets/arrayobj.py", line 1237
In [ ]:
Content source: richardotis/pycalphad-sandbox
Similar notebooks: