code: def test_xgb_classifier(objective, n_classes):
      n_samples = 100
      X, y = make_classification(
          n_samples=n_samples,
          n_features=8,
          n_informative=8,
          n_redundant=0,
          n_repeated=0,
          n_classes=n_classes,
          random_state=2021,
      )
      X, y = X.astype(np.float32), y.astype(np.float32)
      num_round = 10
      dtrain = xgb.DMatrix(X, label=y)
      params = {
          "objective": objective,
          "base_score": 0.5,
          "seed": 0,
          "max_depth": 6,
          "tree_method": "gpu_hist",
          "predictor": "gpu_predictor",
      }
      if objective.startswith("rank:"):
          dtrain.set_group([10] * 10)
      if n_classes > 2 and objective.startswith("multi:"):
          params["num_class"] = n_classes
      xgb_model = xgb.train(
          params, dtrain=dtrain, num_boost_round=num_round
      )
  
      # Insert NaN randomly into X
      X_test = X.copy()
      n_nan = int(np.floor(X.size * 0.1))
      rng = np.random.default_rng(seed=0)
      index_nan = rng.choice(X.size, size=n_nan, replace=False)
      X_test.ravel()[index_nan] = np.nan
  
      explainer = TreeExplainer(model=xgb_model)
      out = explainer.shap_values(X_test)
  
      ref_explainer = shap.explainers.Tree(model=xgb_model)
      correct_out = ref_explainer.shap_values(X_test)
      np.testing.assert_almost_equal(out, correct_out, decimal=5)
      np.testing.assert_almost_equal(
          explainer.expected_value,
          ref_explainer.expected_value,
          decimal=5,
      )
  
imports: from cuml.testing.utils import as_type
  import cuml
  from cuml.ensemble import RandomForestClassifier
  from cuml.ensemble import RandomForestRegressor
  from cuml.common.exceptions import NotFittedError
  from cuml.internals.import_utils import has_sklearn
  from cuml.internals.import_utils import has_lightgbm, has_shap
  from cuml.explainer.tree_shap import TreeExplainer
  from hypothesis import given, settings, assume, HealthCheck, strategies
  from cuml.internals.safe_imports import gpu_only_import
  import json
  import pytest
  import treelite
  from cuml.internals.safe_imports import cpu_only_import
label_desc: Use image node_id 6 for calling a global function with example usage: test_xgb_classifier(objective, n_classes) without return types