def process_vector_args(args):
    """
    A helper function to process vector arguments so callables can take
    vectors or individual components. Essentially unravels the arguments.
    """
    new_args = []
    for arg in args:
        if hasattr(arg, 'shape') and len(arg.shape) > 0:
            shape = arg.shape
            if min(shape) != 1 and len(shape) == 2 or len(shape) > 2:
                raise AttributeError('Arguments should only contain vectors')
            for i in range(max(shape)):
                if len(shape) == 1:
                    new_args.append(arg[i])
                elif shape[0] == 1:
                    new_args.append(arg[0, i])
                elif shape[1] == 1:
                    new_args.append(arg[i, 0])
        elif isinstance(arg, (list, tuple)):
            for element in arg:
                if isinstance(element, (list, tuple)):
                    raise AttributeError('Arguments should not be nested ' +
                        'lists/tuples')
                new_args.append(element)
        else:
            new_args.append(arg)
    return tuple(new_args)
