from functools import wraps

import numpy as np

import statsmodels.tools.validation.validation as v


def array_like(pos, name, dtype=np.double, ndim=None, maxdim=None,
               shape=None, order='C', contiguous=False):
    def inner(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            if pos < len(args):
                arg = args[pos]
                arg = v.array_like(arg, name, dtype, ndim, maxdim, shape,
                                   order, contiguous)
                if pos == 0:
                    args = (arg,) + args[1:]
                else:
                    args = args[:pos] + (arg,) + args[pos + 1:]
            else:
                arg = kwargs[name]
                arg = v.array_like(arg, name, dtype, ndim, maxdim, shape,
                                   order, contiguous)
                kwargs[name] = arg

            return func(*args, **kwargs)
        return wrapper
    return inner
