<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_calling_prototype(acallable):
 """Returns actual working calling prototype This means that the prototype given can be used directly in the same way by bound method, method, function, lambda:: (['a', 'b', 'c'], (1,)) (['a', 'b'], ()) (['a'], (None,)) ([], ()) (['self', 'a', 'b', 'c'], (None,)) (['a', 'b', 'c'], (None,)) (['a', 'b', 'c'], (None,)) (['a', 'b', 'c'], (None,)) (['a', 'b', 'c'], (None,)) (['a', 'b', 'c'], (None,)) (['a', 'b', 'c'], (None,)) """

    assert callable(acallable)
    if inspect.ismethod(acallable) or inspect.isfunction(acallable):
        args, vargs, vkwargs, defaults = inspect.getargspec(acallable)
    elif not inspect.isfunction(acallable) and hasattr(acallable, "__call__"):
        ## a class instance ? which is callable...
        args, vargs, vkwargs, defaults = inspect.getargspec(acallable.__call__)
        ## remove the 'self' argument
        args = args[1:]
    else:
        raise ValueError("Hum, %r is a callable, but not a function/method, "
                         "nor a instance with __call__ arg..."
                         % acallable)

    if vargs or vkwargs:
        raise SyntaxError("variable *arg or **kwarg are not supported.")

    if is_bound(acallable):
        args = args[1:]

    if defaults is None:
        defaults = ()  ## be coherent

    return args, defaults