code: def test_xgb_regressor_with_categorical():
      n_samples = 100
      n_features = 8
      X, y = make_regression_with_categorical(
          n_samples=n_samples,
          n_features=n_features,
          n_categorical=4,
          n_informative=n_features,
          random_state=2022,
      )
  
      dtrain = xgb.DMatrix(X, y, enable_categorical=True)
      params = {
          "tree_method": "gpu_hist",
          "max_depth": 6,
          "base_score": 0.5,
          "seed": 0,
          "predictor": "gpu_predictor",
          "objective": "reg:squarederror",
          "eval_metric": "rmse",
      }
      xgb_model = xgb.train(
          params, dtrain, num_boost_round=10, evals=[(dtrain, "train")]
      )
      assert (
          count_categorical_split(
              treelite.Model.from_xgboost(xgb_model)
          )
          > 0
      )
  
      explainer = TreeExplainer(model=xgb_model)
      out = explainer.shap_values(X)
  
      ref_out = xgb_model.predict(dtrain, pred_contribs=True)
      ref_out, ref_expected_value = ref_out[:, :-1], ref_out[0, -1]
      np.testing.assert_almost_equal(out, ref_out, decimal=5)
      np.testing.assert_almost_equal(
          explainer.expected_value, ref_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 14 for calling a global function with example usage: test_xgb_regressor_with_categorical() without return types