code: def test_gpu_hist_device_dmatrix(
      self, param: dict, num_rounds: int, dataset: tm.TestDataset
  ) -> None:
      # We cannot handle empty dataset yet
      assume(len(dataset.y) > 0)
      param["tree_method"] = "gpu_hist"
      param = dataset.set_params(param)
      result = train_result(
          param,
          dataset.get_device_dmat(max_bin=param.get("max_bin", None)),
          num_rounds,
      )
      note(str(result))
      assert tm.non_increasing(
          result["train"][dataset.metric], tolerance=1e-3
      )
  
imports: import sys
  from typing import Any, Dict
  import numpy
  import pytest
  from hypothesis import assume, given, note, settings, strategies
  import xgboost
  from xgboost import testing
  from xgboost.testing.params import cat_parameter_strategy, exact_parameter_strategy, hist_parameter_strategy
  from xgboost.testing.updater import check_categorical_missing, check_categorical_ohe, check_get_quantile_cut, check_init_estimation, check_quantile_loss, train_result
  import test_updaters
label_desc: Use image node_id 12 for calling the TestGPUUpdaters obj's underlying member method code with example usage: obj.test_gpu_hist_device_dmatrix(param, num_rounds, dataset) without return types