From eeb0f684f1bb75d765c1bbc5fc2ce9b8eea57ae9 Mon Sep 17 00:00:00 2001 From: Pavel Guzenfeld Date: Fri, 20 Mar 2026 00:42:57 +0200 Subject: [PATCH 1/2] [python-package] Replace bare Any with specific types in sklearn.py Replace generic Any annotations with ArrayLike for data parameters and DMatrix for return types in internal helper functions: - _wrap_evaluation_matrices: 13 params Any -> ArrayLike, return Tuple[Any, ...] -> Tuple[DMatrix, List[Tuple[DMatrix, str]]] - pick_ref_categories: X param Any -> ArrayLike - invalid_type: m param Any -> object Remaining Any usages (**kwargs, Dict[str, Any] for params) are intentional as they represent genuinely heterogeneous data. Follow-up to #6496. --- python-package/xgboost/sklearn.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/python-package/xgboost/sklearn.py b/python-package/xgboost/sklearn.py index b49f0ae85fcc..400d7d8214f9 100644 --- a/python-package/xgboost/sklearn.py +++ b/python-package/xgboost/sklearn.py @@ -649,7 +649,7 @@ def get_model_categories( def pick_ref_categories( - X: Any, + X: ArrayLike, model_cats: Optional[Union[FeatureTypes, Categories]], Xy_cats: Optional[Categories], ) -> Optional[Union[FeatureTypes, Categories]]: @@ -682,22 +682,22 @@ def pick_ref_categories( def _wrap_evaluation_matrices( *, missing: float, - X: Any, - y: Any, - group: Optional[Any], - qid: Optional[Any], - sample_weight: Optional[Any], - base_margin: Optional[Any], + X: ArrayLike, + y: ArrayLike, + group: Optional[ArrayLike], + qid: Optional[ArrayLike], + sample_weight: Optional[ArrayLike], + base_margin: Optional[ArrayLike], feature_weights: Optional[ArrayLike], - eval_set: Optional[Sequence[Tuple[Any, Any]]], - sample_weight_eval_set: Optional[Sequence[Any]], - base_margin_eval_set: Optional[Sequence[Any]], - eval_group: Optional[Sequence[Any]], - eval_qid: Optional[Sequence[Any]], + eval_set: Optional[Sequence[Tuple[ArrayLike, ArrayLike]]], + sample_weight_eval_set: Optional[Sequence[ArrayLike]], + base_margin_eval_set: Optional[Sequence[ArrayLike]], + eval_group: Optional[Sequence[ArrayLike]], + eval_qid: Optional[Sequence[ArrayLike]], create_dmatrix: Callable, enable_categorical: bool, feature_types: Optional[Union[FeatureTypes, Categories]], -) -> Tuple[Any, List[Tuple[Any, str]]]: +) -> Tuple[DMatrix, List[Tuple[DMatrix, str]]]: """Convert array_like evaluation matrices into DMatrix. Perform sanity checks on the way. @@ -1209,7 +1209,7 @@ def custom_metric(m: Callable) -> Metric: wrapped = _metric_decorator(m) return wrapped - def invalid_type(m: Any) -> None: + def invalid_type(m: object) -> None: msg = f"Invalid type for the `eval_metric`: {type(m)}" raise TypeError(msg) From 1b1a4ee8ffece27ec39745d60923a2d46ca7765f Mon Sep 17 00:00:00 2001 From: Pavel Guzenfeld Date: Fri, 20 Mar 2026 01:05:17 +0200 Subject: [PATCH 2/2] Keep return type as Any since DaskDMatrix does not extend DMatrix --- python-package/xgboost/sklearn.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python-package/xgboost/sklearn.py b/python-package/xgboost/sklearn.py index 400d7d8214f9..e253741334e6 100644 --- a/python-package/xgboost/sklearn.py +++ b/python-package/xgboost/sklearn.py @@ -697,7 +697,7 @@ def _wrap_evaluation_matrices( create_dmatrix: Callable, enable_categorical: bool, feature_types: Optional[Union[FeatureTypes, Categories]], -) -> Tuple[DMatrix, List[Tuple[DMatrix, str]]]: +) -> Tuple[Any, List[Tuple[Any, str]]]: """Convert array_like evaluation matrices into DMatrix. Perform sanity checks on the way.