Accept only keyword arguments in data iterator. (#9431)

This commit is contained in:
Jiaming Yuan 2023-08-03 12:44:16 +08:00 committed by GitHub
parent e93a274823
commit 7129988847
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 5 additions and 2 deletions

View File

@ -582,8 +582,8 @@ class DataIter(ABC): # pylint: disable=too-many-instance-attributes
@require_keyword_args(True) @require_keyword_args(True)
def input_data( def input_data(
data: Any,
*, *,
data: Any,
feature_names: Optional[FeatureNames] = None, feature_names: Optional[FeatureNames] = None,
feature_types: Optional[FeatureTypes] = None, feature_types: Optional[FeatureTypes] = None,
**kwargs: Any, **kwargs: Any,
@ -684,6 +684,9 @@ def require_keyword_args(
@wraps(func) @wraps(func)
def inner_f(*args: Any, **kwargs: Any) -> _T: def inner_f(*args: Any, **kwargs: Any) -> _T:
extra_args = len(args) - len(all_args) extra_args = len(args) - len(all_args)
if not all_args and extra_args > 0: # keyword argument only
raise TypeError("Keyword argument is required.")
if extra_args > 0: if extra_args > 0:
# ignore first 'self' argument for instance methods # ignore first 'self' argument for instance methods
args_msg = [ args_msg = [

View File

@ -212,7 +212,7 @@ class IteratorForTest(xgb.core.DataIter):
if self.it == len(self.X): if self.it == len(self.X):
return 0 return 0
with pytest.raises(TypeError, match="keyword args"): with pytest.raises(TypeError, match="Keyword argument"):
input_data(self.X[self.it], self.y[self.it], None) input_data(self.X[self.it], self.y[self.it], None)
# Use copy to make sure the iterator doesn't hold a reference to the data. # Use copy to make sure the iterator doesn't hold a reference to the data.