code: def test_pandas_sparse_column_split(self):
      rows = 100
      X = pd.DataFrame(
          {
              "A": pd.arrays.SparseArray(
                  np.random.randint(0, 10, size=rows)
              ),
              "B": pd.arrays.SparseArray(np.random.randn(rows)),
              "C": pd.arrays.SparseArray(
                  np.random.permutation([True, False] * (rows // 2))
              ),
          }
      )
      y = pd.Series(pd.arrays.SparseArray(np.random.randn(rows)))
  
      def verify_pandas_sparse():
          dtrain = xgb.DMatrix(X, y, data_split_mode=DataSplitMode.COL)
          booster = xgb.train({}, dtrain, num_boost_round=4)
          predt_sparse = booster.predict(
              xgb.DMatrix(X, data_split_mode=DataSplitMode.COL)
          )
          predt_dense = booster.predict(
              xgb.DMatrix(
                  X.sparse.to_dense(), data_split_mode=DataSplitMode.COL
              )
          )
          np.testing.assert_allclose(predt_sparse, predt_dense)
  
      tm.run_with_rabit(world_size=3, test_fn=verify_pandas_sparse)
  
imports: from typing import Type
  import numpy
  import pytest
  import xgboost
  from xgboost import testing
  from xgboost.core import DataSplitMode
  from xgboost.testing.data import pd_arrow_dtypes, pd_dtypes, run_base_margin_info
label_desc: Use image node_id 15 for calling the TestPandas obj's underlying member method code with example usage: obj.test_pandas_sparse_column_split() without return types