def METHOD_NAME(*args):
    takes = len(inputs)
    got = len(args)
    if got != takes:
        raise TypeError(f"Function call takes exactly {takes} args ({got} given)")
    for arg, variable in zip(args, inputs):
        variable.data = arg
    thunk()
    if unpack_single:
        return to_return_values([variable.data for variable in outputs])
    else:
        return [variable.data for variable in outputs]