From e49e74322fd15ecd24fe0e3277883af5cf00c864 Mon Sep 17 00:00:00 2001 From: y Date: Fri, 14 Nov 2025 17:37:24 -0800 Subject: [PATCH 1/2] Fix forest raw dpnp class issues --- sklearnex/ensemble/_forest.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/sklearnex/ensemble/_forest.py b/sklearnex/ensemble/_forest.py index 1239a53e37..288307d294 100644 --- a/sklearnex/ensemble/_forest.py +++ b/sklearnex/ensemble/_forest.py @@ -110,10 +110,9 @@ def _onedal_fit(self, X, y, sample_weight=None, queue=None): y = xp.reshape(y, (-1, 1)) self._n_samples, self.n_outputs_ = y.shape - - if not use_raw_input: + if not use_raw_input: y, expanded_class_weight = self._validate_y_class_weight(y) - + if expanded_class_weight is not None: if sample_weight is not None: sample_weight = sample_weight * expanded_class_weight @@ -126,9 +125,16 @@ def _onedal_fit(self, X, y, sample_weight=None, queue=None): # numpy the way to yield unique values is via `unique_values` # This should be removed when refactored for gpu zero-copy try: - self.classes_ = xp.unique(y) + classes = xp.unique(y) except AttributeError: - self.classes_ = xp.unique_values(y) + classes = xp.unique_values(y) + # Convert to numpy for compatibility with later operations + if hasattr(classes, 'asnumpy'): + self.classes_ = classes.asnumpy() + elif hasattr(xp, 'to_numpy'): + self.classes_ = xp.to_numpy(classes) + else: + self.classes_ = np.asarray(classes) self.n_classes_ = len(self.classes_) self.n_features_in_ = X.shape[1] @@ -176,11 +182,6 @@ def _onedal_fit(self, X, y, sample_weight=None, queue=None): if isinstance(self.n_classes_, Iterable) else self.n_classes_ ) - self.classes_ = ( - self.classes_[0] - if isinstance(self.classes_[0], Iterable) - else self.classes_ - ) return self From f58abc74e0bfca8bf9b342b78c8a14876ba46795 Mon Sep 17 00:00:00 2001 From: y Date: Fri, 14 Nov 2025 17:40:20 -0800 Subject: [PATCH 2/2] fix formatting --- sklearnex/ensemble/_forest.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sklearnex/ensemble/_forest.py b/sklearnex/ensemble/_forest.py index 288307d294..821f21eb42 100644 --- a/sklearnex/ensemble/_forest.py +++ b/sklearnex/ensemble/_forest.py @@ -110,9 +110,9 @@ def _onedal_fit(self, X, y, sample_weight=None, queue=None): y = xp.reshape(y, (-1, 1)) self._n_samples, self.n_outputs_ = y.shape - if not use_raw_input: + if not use_raw_input: y, expanded_class_weight = self._validate_y_class_weight(y) - + if expanded_class_weight is not None: if sample_weight is not None: sample_weight = sample_weight * expanded_class_weight