def validate_args(fname, args, max_fname_arg_count, compat_args):
_check_arg_length(fname, args, max_fname_arg_count, compat_args)<EOL>kwargs = dict(zip(compat_args, args))<EOL>_check_for_default_values(fname, kwargs, compat_args)<EOL>
Checks whether the length of the `*args` argument passed into a function
has at most `len(compat_args)` arguments and whether or not all of these
elements in `args` are set to their default values.

fname: str
    The name of the function being passed the `*args` parameter

args: tuple
    The `*args` parameter passed into a function

max_fname_arg_count: int
    The maximum number of arguments that the function `fname`
    can accept, excluding those in `args`. Used for displaying
    appropriate error messages. Must be non-negative.

compat_args: OrderedDict
    A ordered dictionary of keys and their associated default values.
    In order to accommodate buggy behaviour in some versions of `numpy`,
    where a signature displayed keyword arguments but then passed those
    arguments **positionally** internally when calling downstream
    implementations, an ordered dictionary ensures that the original
    order of the keyword arguments is enforced. Note that if there is
    only one key, a generic dict can be passed in as well.

Raises
------
TypeError if `args` contains more values than there are `compat_args`
ValueError if `args` contains values that do not correspond to those
of the default values specified in `compat_args`