We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Remove inheritance of Modin DMatrix from xgb.DMatrix
Inheritance of Modin DMatrix from xgb.DMatrix doesn't include any benefits. Wrong documentation is provided to user using `help(modin.experimtenal.xgboost.DMatrix)` command.

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `modin/experimental/xgboost/xgboost.py`
Content:
```
1 # Licensed to Modin Development Team under one or more contributor license agreements.
2 # See the NOTICE file distributed with this work for additional information regarding
3 # copyright ownership.  The Modin Development Team licenses this file to you under the
4 # Apache License, Version 2.0 (the "License"); you may not use this file except in
5 # compliance with the License.  You may obtain a copy of the License at
6 #
7 #     http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software distributed under
10 # the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11 # ANY KIND, either express or implied. See the License for the specific language
12 # governing permissions and limitations under the License.
13 
14 """Module holds public interfaces for work Modin XGBoost."""
15 
16 import logging
17 from typing import Dict, Optional
18 
19 import xgboost as xgb
20 
21 from modin.config import Engine
22 from modin.distributed.dataframe.pandas import unwrap_partitions
23 import modin.pandas as pd
24 
25 LOGGER = logging.getLogger("[modin.xgboost]")
26 
27 
28 class DMatrix(xgb.DMatrix):
29     """
30     DMatrix holds references to partitions of Modin DataFrame.
31 
32     On init stage unwrapping partitions of Modin DataFrame is started.
33 
34     Parameters
35     ----------
36     data : modin.pandas.DataFrame
37         Data source of DMatrix.
38     label : modin.pandas.DataFrame or modin.pandas.Series
39         Labels used for training.
40 
41     Notes
42     -----
43     Currently DMatrix supports only `data` and `label` parameters.
44     """
45 
46     def __init__(self, data, label):
47         assert isinstance(
48             data, pd.DataFrame
49         ), f"Type of `data` is {type(data)}, but expected {pd.DataFrame}."
50         assert isinstance(
51             label, (pd.DataFrame, pd.Series)
52         ), f"Type of `data` is {type(label)}, but expected {pd.DataFrame} or {pd.Series}."
53 
54         self.data = unwrap_partitions(data, axis=0, get_ip=True)
55         self.label = unwrap_partitions(label, axis=0)
56 
57         self.metadata = (
58             data.index,
59             data.columns,
60             data._query_compiler._modin_frame._row_lengths,
61         )
62 
63     def __iter__(self):
64         """
65         Return unwrapped `self.data` and `self.label`.
66 
67         Yields
68         ------
69         list
70             List of `self.data` with pairs of references to IP of row partition
71             and row partition [(IP_ref0, partition_ref0), ..].
72         list
73             List of `self.label` with references to row partitions
74             [partition_ref0, ..].
75         """
76         yield self.data
77         yield self.label
78 
79 
80 class Booster(xgb.Booster):
81     """
82     A Modin Booster of XGBoost.
83 
84     Booster is the model of XGBoost, that contains low level routines for
85     training, prediction and evaluation.
86 
87     Parameters
88     ----------
89     params : dict, optional
90         Parameters for boosters.
91     cache : list, default: empty
92         List of cache items.
93     model_file : string/os.PathLike/xgb.Booster/bytearray, optional
94         Path to the model file if it's string or PathLike or xgb.Booster.
95     """
96 
97     def __init__(self, params=None, cache=(), model_file=None):  # noqa: MD01
98         super(Booster, self).__init__(params=params, cache=cache, model_file=model_file)
99 
100     def predict(
101         self,
102         data: DMatrix,
103         **kwargs,
104     ):
105         """
106         Run distributed prediction with a trained booster.
107 
108         During execution it runs ``xgb.predict`` on each worker for subset of `data`
109         and creates Modin DataFrame with prediction results.
110 
111         Parameters
112         ----------
113         data : modin.experimental.xgboost.DMatrix
114             Input data used for prediction.
115         **kwargs : dict
116             Other parameters are the same as for ``xgboost.Booster.predict``.
117 
118         Returns
119         -------
120         modin.pandas.DataFrame
121             Modin DataFrame with prediction results.
122         """
123         LOGGER.info("Prediction started")
124 
125         if Engine.get() == "Ray":
126             from .xgboost_ray import _predict
127         else:
128             raise ValueError("Current version supports only Ray engine.")
129 
130         assert isinstance(
131             data, DMatrix
132         ), f"Type of `data` is {type(data)}, but expected {DMatrix}."
133 
134         result = _predict(self.copy(), data, **kwargs)
135         LOGGER.info("Prediction finished")
136 
137         return result
138 
139 
140 def train(
141     params: Dict,
142     dtrain: DMatrix,
143     *args,
144     evals=(),
145     num_actors: Optional[int] = None,
146     evals_result: Optional[Dict] = None,
147     **kwargs,
148 ):
149     """
150     Run distributed training of XGBoost model.
151 
152     During work it evenly distributes `dtrain` between workers according
153     to IP addresses partitions (in case of not even distribution of `dtrain`
154     over nodes, some partitions will be re-distributed between nodes),
155     runs xgb.train on each worker for subset of `dtrain` and reduces training results
156     of each worker using Rabit Context.
157 
158     Parameters
159     ----------
160     params : dict
161         Booster params.
162     dtrain : modin.experimental.xgboost.DMatrix
163         Data to be trained against.
164     *args : iterable
165         Other parameters for `xgboost.train`.
166     evals : list of pairs (modin.experimental.xgboost.DMatrix, str), default: empty
167         List of validation sets for which metrics will evaluated during training.
168         Validation metrics will help us track the performance of the model.
169     num_actors : int, optional
170         Number of actors for training. If unspecified, this value will be
171         computed automatically.
172     evals_result : dict, optional
173         Dict to store evaluation results in.
174     **kwargs : dict
175         Other parameters are the same as `xgboost.train`.
176 
177     Returns
178     -------
179     modin.experimental.xgboost.Booster
180         A trained booster.
181     """
182     LOGGER.info("Training started")
183 
184     if Engine.get() == "Ray":
185         from .xgboost_ray import _train
186     else:
187         raise ValueError("Current version supports only Ray engine.")
188 
189     assert isinstance(
190         dtrain, DMatrix
191     ), f"Type of `dtrain` is {type(dtrain)}, but expected {DMatrix}."
192     result = _train(dtrain, params, *args, num_actors=num_actors, evals=evals, **kwargs)
193     if isinstance(evals_result, dict):
194         evals_result.update(result["history"])
195 
196     LOGGER.info("Training finished")
197     return Booster(model_file=result["booster"])
198
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/modin/experimental/xgboost/xgboost.py b/modin/experimental/xgboost/xgboost.py
--- a/modin/experimental/xgboost/xgboost.py
+++ b/modin/experimental/xgboost/xgboost.py
@@ -25,7 +25,7 @@
 LOGGER = logging.getLogger("[modin.xgboost]")
 
 
-class DMatrix(xgb.DMatrix):
+class DMatrix:
     """
     DMatrix holds references to partitions of Modin DataFrame.

{"golden_diff": "diff --git a/modin/experimental/xgboost/xgboost.py b/modin/experimental/xgboost/xgboost.py\n--- a/modin/experimental/xgboost/xgboost.py\n+++ b/modin/experimental/xgboost/xgboost.py\n@@ -25,7 +25,7 @@\n LOGGER = logging.getLogger(\"[modin.xgboost]\")\n \n \n-class DMatrix(xgb.DMatrix):\n+class DMatrix:\n     \"\"\"\n     DMatrix holds references to partitions of Modin DataFrame.\n", "issue": "Remove inheritance of Modin DMatrix from xgb.DMatrix\nInheritance of Modin DMatrix from xgb.DMatrix doesn't include any benefits. Wrong documentation is provided to user using `help(modin.experimtenal.xgboost.DMatrix)` command.\n", "before_files": [{"content": "# Licensed to Modin Development Team under one or more contributor license agreements.\n# See the NOTICE file distributed with this work for additional information regarding\n# copyright ownership.  The Modin Development Team licenses this file to you under the\n# Apache License, Version 2.0 (the \"License\"); you may not use this file except in\n# compliance with the License.  You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software distributed under\n# the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n# ANY KIND, either express or implied. See the License for the specific language\n# governing permissions and limitations under the License.\n\n\"\"\"Module holds public interfaces for work Modin XGBoost.\"\"\"\n\nimport logging\nfrom typing import Dict, Optional\n\nimport xgboost as xgb\n\nfrom modin.config import Engine\nfrom modin.distributed.dataframe.pandas import unwrap_partitions\nimport modin.pandas as pd\n\nLOGGER = logging.getLogger(\"[modin.xgboost]\")\n\n\nclass DMatrix(xgb.DMatrix):\n    \"\"\"\n    DMatrix holds references to partitions of Modin DataFrame.\n\n    On init stage unwrapping partitions of Modin DataFrame is started.\n\n    Parameters\n    ----------\n    data : modin.pandas.DataFrame\n        Data source of DMatrix.\n    label : modin.pandas.DataFrame or modin.pandas.Series\n        Labels used for training.\n\n    Notes\n    -----\n    Currently DMatrix supports only `data` and `label` parameters.\n    \"\"\"\n\n    def __init__(self, data, label):\n        assert isinstance(\n            data, pd.DataFrame\n        ), f\"Type of `data` is {type(data)}, but expected {pd.DataFrame}.\"\n        assert isinstance(\n            label, (pd.DataFrame, pd.Series)\n        ), f\"Type of `data` is {type(label)}, but expected {pd.DataFrame} or {pd.Series}.\"\n\n        self.data = unwrap_partitions(data, axis=0, get_ip=True)\n        self.label = unwrap_partitions(label, axis=0)\n\n        self.metadata = (\n            data.index,\n            data.columns,\n            data._query_compiler._modin_frame._row_lengths,\n        )\n\n    def __iter__(self):\n        \"\"\"\n        Return unwrapped `self.data` and `self.label`.\n\n        Yields\n        ------\n        list\n            List of `self.data` with pairs of references to IP of row partition\n            and row partition [(IP_ref0, partition_ref0), ..].\n        list\n            List of `self.label` with references to row partitions\n            [partition_ref0, ..].\n        \"\"\"\n        yield self.data\n        yield self.label\n\n\nclass Booster(xgb.Booster):\n    \"\"\"\n    A Modin Booster of XGBoost.\n\n    Booster is the model of XGBoost, that contains low level routines for\n    training, prediction and evaluation.\n\n    Parameters\n    ----------\n    params : dict, optional\n        Parameters for boosters.\n    cache : list, default: empty\n        List of cache items.\n    model_file : string/os.PathLike/xgb.Booster/bytearray, optional\n        Path to the model file if it's string or PathLike or xgb.Booster.\n    \"\"\"\n\n    def __init__(self, params=None, cache=(), model_file=None):  # noqa: MD01\n        super(Booster, self).__init__(params=params, cache=cache, model_file=model_file)\n\n    def predict(\n        self,\n        data: DMatrix,\n        **kwargs,\n    ):\n        \"\"\"\n        Run distributed prediction with a trained booster.\n\n        During execution it runs ``xgb.predict`` on each worker for subset of `data`\n        and creates Modin DataFrame with prediction results.\n\n        Parameters\n        ----------\n        data : modin.experimental.xgboost.DMatrix\n            Input data used for prediction.\n        **kwargs : dict\n            Other parameters are the same as for ``xgboost.Booster.predict``.\n\n        Returns\n        -------\n        modin.pandas.DataFrame\n            Modin DataFrame with prediction results.\n        \"\"\"\n        LOGGER.info(\"Prediction started\")\n\n        if Engine.get() == \"Ray\":\n            from .xgboost_ray import _predict\n        else:\n            raise ValueError(\"Current version supports only Ray engine.\")\n\n        assert isinstance(\n            data, DMatrix\n        ), f\"Type of `data` is {type(data)}, but expected {DMatrix}.\"\n\n        result = _predict(self.copy(), data, **kwargs)\n        LOGGER.info(\"Prediction finished\")\n\n        return result\n\n\ndef train(\n    params: Dict,\n    dtrain: DMatrix,\n    *args,\n    evals=(),\n    num_actors: Optional[int] = None,\n    evals_result: Optional[Dict] = None,\n    **kwargs,\n):\n    \"\"\"\n    Run distributed training of XGBoost model.\n\n    During work it evenly distributes `dtrain` between workers according\n    to IP addresses partitions (in case of not even distribution of `dtrain`\n    over nodes, some partitions will be re-distributed between nodes),\n    runs xgb.train on each worker for subset of `dtrain` and reduces training results\n    of each worker using Rabit Context.\n\n    Parameters\n    ----------\n    params : dict\n        Booster params.\n    dtrain : modin.experimental.xgboost.DMatrix\n        Data to be trained against.\n    *args : iterable\n        Other parameters for `xgboost.train`.\n    evals : list of pairs (modin.experimental.xgboost.DMatrix, str), default: empty\n        List of validation sets for which metrics will evaluated during training.\n        Validation metrics will help us track the performance of the model.\n    num_actors : int, optional\n        Number of actors for training. If unspecified, this value will be\n        computed automatically.\n    evals_result : dict, optional\n        Dict to store evaluation results in.\n    **kwargs : dict\n        Other parameters are the same as `xgboost.train`.\n\n    Returns\n    -------\n    modin.experimental.xgboost.Booster\n        A trained booster.\n    \"\"\"\n    LOGGER.info(\"Training started\")\n\n    if Engine.get() == \"Ray\":\n        from .xgboost_ray import _train\n    else:\n        raise ValueError(\"Current version supports only Ray engine.\")\n\n    assert isinstance(\n        dtrain, DMatrix\n    ), f\"Type of `dtrain` is {type(dtrain)}, but expected {DMatrix}.\"\n    result = _train(dtrain, params, *args, num_actors=num_actors, evals=evals, **kwargs)\n    if isinstance(evals_result, dict):\n        evals_result.update(result[\"history\"])\n\n    LOGGER.info(\"Training finished\")\n    return Booster(model_file=result[\"booster\"])\n", "path": "modin/experimental/xgboost/xgboost.py"}], "after_files": [{"content": "# Licensed to Modin Development Team under one or more contributor license agreements.\n# See the NOTICE file distributed with this work for additional information regarding\n# copyright ownership.  The Modin Development Team licenses this file to you under the\n# Apache License, Version 2.0 (the \"License\"); you may not use this file except in\n# compliance with the License.  You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software distributed under\n# the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n# ANY KIND, either express or implied. See the License for the specific language\n# governing permissions and limitations under the License.\n\n\"\"\"Module holds public interfaces for work Modin XGBoost.\"\"\"\n\nimport logging\nfrom typing import Dict, Optional\n\nimport xgboost as xgb\n\nfrom modin.config import Engine\nfrom modin.distributed.dataframe.pandas import unwrap_partitions\nimport modin.pandas as pd\n\nLOGGER = logging.getLogger(\"[modin.xgboost]\")\n\n\nclass DMatrix:\n    \"\"\"\n    DMatrix holds references to partitions of Modin DataFrame.\n\n    On init stage unwrapping partitions of Modin DataFrame is started.\n\n    Parameters\n    ----------\n    data : modin.pandas.DataFrame\n        Data source of DMatrix.\n    label : modin.pandas.DataFrame or modin.pandas.Series\n        Labels used for training.\n\n    Notes\n    -----\n    Currently DMatrix supports only `data` and `label` parameters.\n    \"\"\"\n\n    def __init__(self, data, label):\n        assert isinstance(\n            data, pd.DataFrame\n        ), f\"Type of `data` is {type(data)}, but expected {pd.DataFrame}.\"\n        assert isinstance(\n            label, (pd.DataFrame, pd.Series)\n        ), f\"Type of `data` is {type(label)}, but expected {pd.DataFrame} or {pd.Series}.\"\n\n        self.data = unwrap_partitions(data, axis=0, get_ip=True)\n        self.label = unwrap_partitions(label, axis=0)\n\n        self.metadata = (\n            data.index,\n            data.columns,\n            data._query_compiler._modin_frame._row_lengths,\n        )\n\n    def __iter__(self):\n        \"\"\"\n        Return unwrapped `self.data` and `self.label`.\n\n        Yields\n        ------\n        list\n            List of `self.data` with pairs of references to IP of row partition\n            and row partition [(IP_ref0, partition_ref0), ..].\n        list\n            List of `self.label` with references to row partitions\n            [partition_ref0, ..].\n        \"\"\"\n        yield self.data\n        yield self.label\n\n\nclass Booster(xgb.Booster):\n    \"\"\"\n    A Modin Booster of XGBoost.\n\n    Booster is the model of XGBoost, that contains low level routines for\n    training, prediction and evaluation.\n\n    Parameters\n    ----------\n    params : dict, optional\n        Parameters for boosters.\n    cache : list, default: empty\n        List of cache items.\n    model_file : string/os.PathLike/xgb.Booster/bytearray, optional\n        Path to the model file if it's string or PathLike or xgb.Booster.\n    \"\"\"\n\n    def __init__(self, params=None, cache=(), model_file=None):  # noqa: MD01\n        super(Booster, self).__init__(params=params, cache=cache, model_file=model_file)\n\n    def predict(\n        self,\n        data: DMatrix,\n        **kwargs,\n    ):\n        \"\"\"\n        Run distributed prediction with a trained booster.\n\n        During execution it runs ``xgb.predict`` on each worker for subset of `data`\n        and creates Modin DataFrame with prediction results.\n\n        Parameters\n        ----------\n        data : modin.experimental.xgboost.DMatrix\n            Input data used for prediction.\n        **kwargs : dict\n            Other parameters are the same as for ``xgboost.Booster.predict``.\n\n        Returns\n        -------\n        modin.pandas.DataFrame\n            Modin DataFrame with prediction results.\n        \"\"\"\n        LOGGER.info(\"Prediction started\")\n\n        if Engine.get() == \"Ray\":\n            from .xgboost_ray import _predict\n        else:\n            raise ValueError(\"Current version supports only Ray engine.\")\n\n        assert isinstance(\n            data, DMatrix\n        ), f\"Type of `data` is {type(data)}, but expected {DMatrix}.\"\n\n        result = _predict(self.copy(), data, **kwargs)\n        LOGGER.info(\"Prediction finished\")\n\n        return result\n\n\ndef train(\n    params: Dict,\n    dtrain: DMatrix,\n    *args,\n    evals=(),\n    num_actors: Optional[int] = None,\n    evals_result: Optional[Dict] = None,\n    **kwargs,\n):\n    \"\"\"\n    Run distributed training of XGBoost model.\n\n    During work it evenly distributes `dtrain` between workers according\n    to IP addresses partitions (in case of not even distribution of `dtrain`\n    over nodes, some partitions will be re-distributed between nodes),\n    runs xgb.train on each worker for subset of `dtrain` and reduces training results\n    of each worker using Rabit Context.\n\n    Parameters\n    ----------\n    params : dict\n        Booster params.\n    dtrain : modin.experimental.xgboost.DMatrix\n        Data to be trained against.\n    *args : iterable\n        Other parameters for `xgboost.train`.\n    evals : list of pairs (modin.experimental.xgboost.DMatrix, str), default: empty\n        List of validation sets for which metrics will evaluated during training.\n        Validation metrics will help us track the performance of the model.\n    num_actors : int, optional\n        Number of actors for training. If unspecified, this value will be\n        computed automatically.\n    evals_result : dict, optional\n        Dict to store evaluation results in.\n    **kwargs : dict\n        Other parameters are the same as `xgboost.train`.\n\n    Returns\n    -------\n    modin.experimental.xgboost.Booster\n        A trained booster.\n    \"\"\"\n    LOGGER.info(\"Training started\")\n\n    if Engine.get() == \"Ray\":\n        from .xgboost_ray import _train\n    else:\n        raise ValueError(\"Current version supports only Ray engine.\")\n\n    assert isinstance(\n        dtrain, DMatrix\n    ), f\"Type of `dtrain` is {type(dtrain)}, but expected {DMatrix}.\"\n    result = _train(dtrain, params, *args, num_actors=num_actors, evals=evals, **kwargs)\n    if isinstance(evals_result, dict):\n        evals_result.update(result[\"history\"])\n\n    LOGGER.info(\"Training finished\")\n    return Booster(model_file=result[\"booster\"])\n", "path": "modin/experimental/xgboost/xgboost.py"}]}