def _validate_if_using_arg_names(self, argnames, indirect):
default_arg_names = set(get_default_arg_names(self.function))<EOL>func_name = self.function.__name__<EOL>for arg in argnames:<EOL><INDENT>if arg not in self.fixturenames:<EOL><INDENT>if arg in default_arg_names:<EOL><INDENT>fail(<EOL>"<STR_LIT>".format(<EOL>func_name, arg<EOL>),<EOL>pytrace=False,<EOL>)<EOL><DEDENT>else:<EOL><INDENT>if isinstance(indirect, (tuple, list)):<EOL><INDENT>name = "<STR_LIT>" if arg in indirect else "<STR_LIT>"<EOL><DEDENT>else:<EOL><INDENT>name = "<STR_LIT>" if indirect else "<STR_LIT>"<EOL><DEDENT>fail(<EOL>"<STR_LIT>".format(func_name, name, arg),<EOL>pytrace=False,<EOL>)<EOL><DEDENT><DEDENT><DEDENT>
Check if all argnames are being used, by default values, or directly/indirectly.

:param List[str] argnames: list of argument names passed to ``parametrize()``.
:param indirect: same ``indirect`` parameter of ``parametrize()``.
:raise ValueError: if validation fails.