'Returns True if the the signature is "matching".
A formal signature is "matching" if the actual signature matches exactly
or if the formal signature is a compatible generic signature.'

def _match_arglist(self, formal_args, actual_args):

    if (formal_args and isinstance(formal_args[(-1)], types.VarArg)):
        ndiff = ((len(actual_args) - len(formal_args)) + 1)
        formal_args = (formal_args[:(-1)] + ((formal_args[(-1)].dtype,) * ndiff))
    if (len(formal_args) != len(actual_args)):
        return False
    for (formal, actual) in zip(formal_args, actual_args):
        if (not self._match(formal, actual)):
            return False
    return True
