code: def test_arrow_train(self, DMatrixT):
      import pandas as pd
  
      rows = 100
      X = pd.DataFrame(
          {
              "A": np.random.randint(0, 10, size=rows),
              "B": np.random.randn(rows),
              "C": np.random.permutation([1, 0] * (rows // 2)),
          }
      )
      y = pd.Series(np.random.randn(rows))
  
      table = pa.Table.from_pandas(X)
      dtrain1 = DMatrixT(table)
      dtrain1.set_label(pa.Table.from_pandas(pd.DataFrame(y)))
      bst1 = xgb.train({}, dtrain1, num_boost_round=10)
      preds1 = bst1.predict(DMatrixT(X))
  
      dtrain2 = DMatrixT(X, y)
      bst2 = xgb.train({}, dtrain2, num_boost_round=10)
      preds2 = bst2.predict(DMatrixT(X))
  
      np.testing.assert_allclose(preds1, preds2)
  
      preds3 = bst2.inplace_predict(table)
      np.testing.assert_allclose(preds1, preds3)
      assert bst2.feature_names == ["A", "B", "C"]
      assert bst2.feature_types == ["int", "float", "int"]
  
file_path: xgboost/tests/python/test_with_arrow.py
imports: import os
  import sys
  import numpy
  import pytest
  import xgboost
  from xgboost import testing
  from xgboost.core import DataSplitMode
label_desc: Use image node_id 4 for calling the TestArrowTable obj's underlying member method code with example usage: obj.test_arrow_train(DMatrixT) without return types