code: def _onedal_fit(self, X, y, queue):
      gpu_device = queue is not None and queue.sycl_device.is_gpu
      if self.effective_metric_ == "euclidean" and not gpu_device:
          params = self._get_daal_params(X)
          if self._fit_method == "brute":
              train_alg = bf_knn_classification_training
  
          else:
              train_alg = kdtree_knn_classification_training
  
          return train_alg(**params).compute(X, y).model
  
      policy = self._get_policy(queue, X, y)
      X, y = _convert_to_supported(policy, X, y)
      params = self._get_onedal_params(X, y)
      train_alg = _backend.neighbors.search.train(
          policy, params, to_table(X)
      )
  
      return train_alg.model
  
imports: from abc import ABCMeta
  from numbers import Integral
  import numpy
  from daal4py import bf_knn_classification_prediction, bf_knn_classification_training, kdtree_knn_classification_prediction, kdtree_knn_classification_training
  from onedal import _backend
  from ..common._estimator_checks import _check_is_fitted, _is_classifier, _is_regressor
  from ..common._mixin import ClassifierMixin, RegressorMixin
  from ..common._policy import _get_policy
  from ..datatypes import _convert_to_supported, from_table, to_table
  from ..utils import _check_array, _check_classification_targets, _check_n_features, _check_X_y, _column_or_1d, _num_samples
label_desc: Use image node_id 4 for calling the NearestNeighbors obj's underlying member method code with example usage: obj._onedal_fit(X, y, queue) and returns: train_alg, train_alg