def _validate_usecols_arg(usecols):
msg = ("<STR_LIT>"<EOL>"<STR_LIT>")<EOL>if usecols is not None:<EOL><INDENT>if callable(usecols):<EOL><INDENT>return usecols, None<EOL><DEDENT>if not is_list_like(usecols):<EOL><INDENT>raise ValueError(msg)<EOL><DEDENT>usecols_dtype = lib.infer_dtype(usecols, skipna=False)<EOL>if usecols_dtype not in ("<STR_LIT>", "<STR_LIT>",<EOL>"<STR_LIT:string>", "<STR_LIT>"):<EOL><INDENT>raise ValueError(msg)<EOL><DEDENT>usecols = set(usecols)<EOL>return usecols, usecols_dtype<EOL><DEDENT>return usecols, None<EOL>
Validate the 'usecols' parameter.

Checks whether or not the 'usecols' parameter contains all integers
(column selection by index), strings (column by name) or is a callable.
Raises a ValueError if that is not the case.

Parameters
----------
usecols : list-like, callable, or None
    List of columns to use when parsing or a callable that can be used
    to filter a list of table columns.

Returns
-------
usecols_tuple : tuple
    A tuple of (verified_usecols, usecols_dtype).

    'verified_usecols' is either a set if an array-like is passed in or
    'usecols' if a callable or None is passed in.

    'usecols_dtype` is the inferred dtype of 'usecols' if an array-like
    is passed in or None if a callable or None is passed in.