def resolve_overloads(o, scope, bound): """ Resolve the signatures of overloaded methods in the given scope. Further resolve any type variables listed in `bound` by their replacement. """ result = Dispatcher() for (f, signature, kwds) in o.overloads: new_sig = resolve(signature, scope, bound) new_sig = to_blaze(new_sig) # Use blaze's coercion rules for now overload(new_sig, result, **kwds)(f) return result
def decorator(f): func = lookup_previous(f) if isinstance(func, Kernel): func = func.dispatcher elif isinstance(func, types.FunctionType): raise TypeError( "Function %s in current scope is not overloadable" % (func,)) else: func = Dispatcher() dispatcher = overload(signature, func=func)(f) if isinstance(f, types.FunctionType): kernel = Kernel(dispatcher) else: assert isinstance(f, Kernel), f kernel = f kernel.add_metadata(metadata) return kernel
def decorator(f): func = lookup_previous(f) if isinstance(func, BlazeFunc): func = func.dispatcher elif isinstance(func, types.FunctionType): raise TypeError( "Function %s in current scope is not overloadable" % (func,)) else: func = Dispatcher() dispatcher = overload(signature, func=func)(f) if isinstance(f, types.FunctionType): kernel = BlazeFunc(dispatcher) else: assert isinstance(f, BlazeFunc), f kernel = f metadata.setdefault('elementwise', True) kernel.add_metadata(metadata) if impl != 'python': kernel.implement(f, signature, impl, f) return kernel