code: def test_categorical(
      self,
      dataset: tm.TestDataset,
      exact_parameters: Dict[str, Any],
      hist_parameters: Dict[str, Any],
      cat_parameters: Dict[str, Any],
      n_rounds: int,
      tree_method: str,
  ) -> None:
      cat_parameters.update(exact_parameters)
      cat_parameters.update(hist_parameters)
      cat_parameters["tree_method"] = tree_method
  
      results = train_result(
          cat_parameters, dataset.get_dmat(), n_rounds
      )
      tm.non_increasing(results["train"]["rmse"])
  
imports: import json
  from string import ascii_lowercase
  from typing import Any, Dict
  import numpy
  import pytest
  from hypothesis import given, note, settings, strategies
  import xgboost
  from xgboost import testing
  from xgboost.testing.params import cat_parameter_strategy, exact_parameter_strategy, hist_cache_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
label_desc: Use image node_id 13 for calling the TestTreeMethod obj's underlying member method code with example usage: obj.test_categorical(dataset, exact_parameters, hist_parameters, cat_parameters, n_rounds, tree_method) without return types