def simple_dispatch(self, *args, **kwargs): assert self.f is not None args = flatargs(self.f, args, kwargs) types = list(map(T.typeof, args)) candidates = find_matches(self.overloads, types) if len(candidates) != 1: raise error.OverloadError( "Cannot perform simple dispatch with %d input types") [dst_sig, sig, func] = candidates # TODO: convert argument types using dst_sig return func(*args)
def lookup_dispatcher(self, args, kwargs, constraints=None): assert self.f is not None args = flatargs(self.f, tuple(args), kwargs) types = list(map(T.typeof, args)) match = best_match(self, types, constraints) return match, args