def construct_blaze_kernel(py_func, signature): """ Parameters ========== function: blaze.function.BlazeFunc overload: blaze.overloading.Overload """ nb_argtypes = [to_numba(a.measure) for a in signature.argtypes] nb_restype = to_numba(signature.restype.measure) return frompyfunc(py_func, (nb_argtypes, nb_restype), signature.argtypes)
def converter(blaze_dtype, blaze_argtype): """ Generate an element-wise conversion function that numba can jit-compile. """ dtype = to_numba(blaze_dtype.measure) argtype = to_numba(blaze_argtype.measure) @jit(dtype(argtype)) def convert(value): return dtype(value) return convert
def construct_blaze_kernel(function, overload): """ Parameters ========== function: blaze.function.BlazeFunc overload: blaze.overloading.Overload """ monosig = overload.resolved_sig argtypes = monosig.argtypes # Try a numba implementation py_func, signature = find_impl(function, 'numba', argtypes, monosig) if py_func is not None: nb_argtypes = [to_numba(a.measure) for a in signature.argtypes] nb_restype = to_numba(signature.restype.measure) return frompyfunc(py_func, (nb_argtypes, nb_restype), argtypes) # Try an LLVM implementation py_func, signature = find_impl(function, 'numba', argtypes, monosig) if py_func is not None: return BlazeElementKernel(py_func, signature.argtypes)
def leaf_arg(type): kind = llvm_array.SCALAR rank = 0 llvmtype = to_numba(type.measure).to_llvm() tree = Argument(type, kind, rank, llvmtype) return tree