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 [ ]: