Repository: modin-project/modin

Issue:
'Series.reindex' gets unexpected argument in case of defaulting to pandas
### System information
- **OS Platform and Distribution (e.g., Linux Ubuntu 16.04)**: Any
- **Modin version** (`modin.__version__`): 33a57e376ce8ff19ca6aeab5d3a8de7c775a7adf
- **Python version**: Any
- **Code we can use to reproduce**:
```python
import modin.pandas as pd
from modin.pandas.test.utils import generate_multiindex

# .reindex on a MultiIndex axis is defaulting to pandas
sr = pd.Series([1, 2, 3, 4, 5], index=generate_multiindex(5))
res = sr.reindex([1, 2, 3, 4, 5])
print(res)
```

<details><summary>Traceback</summary>

```
Traceback (most recent call last):
  File "../rofl.py", line 5, in <module>
    res = sr.reindex([1, 2, 3, 4, 5])
  File "/localdisk/dchigare/repos/modin_bp/modin/pandas/series.py", line 1040, in reindex
    fill_value=fill_value,
  File "/localdisk/dchigare/repos/modin_bp/modin/pandas/base.py", line 1714, in reindex
    tolerance=tolerance,
  File "/localdisk/dchigare/repos/modin_bp/modin/pandas/base.py", line 395, in _default_to_pandas
    pandas_obj, *args, **kwargs
  File "/localdisk/dchigare/miniconda3/envs/modin_tests/lib/python3.7/site-packages/pandas/core/series.py", line 4315, in reindex
    return super().reindex(index=index, **kwargs)
  File "/localdisk/dchigare/miniconda3/envs/modin_tests/lib/python3.7/site-packages/pandas/core/generic.py", line 4786, in reindex
    "reindex() got an unexpected keyword "
TypeError: reindex() got an unexpected keyword argument "labels"
```

</details>

<!--
You can obtain the Modin version with

python -c "import modin; print(modin.__version__)"
-->

### Describe the problem
We have a common implementation for `DataFrame.reindex` and `Series.reindex` in a base class. DataFrame version of reindex obtains 3 extra arguments in comparison with Series (labels, columns, and axis). All that arguments are passed into the default function (including these 3 extra arguments), so we're getting an error when `self` is a Series.
https://github.com/modin-project/modin/blob/33a57e376ce8ff19ca6aeab5d3a8de7c775a7adf/modin/pandas/base.py#L1704-L1715



Discussion:

Resolving patch:
diff --git a/modin/pandas/base.py b/modin/pandas/base.py
--- a/modin/pandas/base.py
+++ b/modin/pandas/base.py
@@ -1686,65 +1686,28 @@ def rank(
 
     def reindex(
         self,
-        labels=None,
         index=None,
         columns=None,
-        axis=None,
-        method=None,
         copy=True,
-        level=None,
-        fill_value=np.nan,
-        limit=None,
-        tolerance=None,
+        **kwargs,
     ):
-        axis = self._get_axis_number(axis)
-        if (columns is not None and self._query_compiler.has_multiindex(axis=1)) or (
-            index is not None and self._query_compiler.has_multiindex()
-        ):
-            return self._default_to_pandas(
-                "reindex",
-                labels=labels,
-                index=index,
-                columns=columns,
-                method=method,
-                copy=copy,
-                level=level,
-                fill_value=fill_value,
-                limit=limit,
-                tolerance=tolerance,
-            )
         if (
-            level is not None
-            or (axis == 1 and self._query_compiler.has_multiindex(axis=1))
-            or (axis == 0 and self._query_compiler.has_multiindex())
+            kwargs.get("level") is not None
+            or (index is not None and self._query_compiler.has_multiindex())
+            or (columns is not None and self._query_compiler.has_multiindex(axis=1))
         ):
-            return self._default_to_pandas(
-                "reindex",
-                labels=labels,
-                level=level,
-                method=method,
-                copy=copy,
-                axis=axis,
-                fill_value=fill_value,
-                limit=limit,
-                tolerance=tolerance,
-            )
-        if axis == 0 and labels is not None:
-            index = labels
-        elif labels is not None:
-            columns = labels
+            if index is not None:
+                kwargs["index"] = index
+            if columns is not None:
+                kwargs["columns"] = columns
+            return self._default_to_pandas("reindex", copy=copy, **kwargs)
         new_query_compiler = None
         if index is not None:
             if not isinstance(index, pandas.Index):
                 index = pandas.Index(index)
             if not index.equals(self.index):
                 new_query_compiler = self._query_compiler.reindex(
-                    axis=0,
-                    labels=index,
-                    method=method,
-                    fill_value=fill_value,
-                    limit=limit,
-                    tolerance=tolerance,
+                    axis=0, labels=index, **kwargs
                 )
         if new_query_compiler is None:
             new_query_compiler = self._query_compiler
@@ -1754,12 +1717,7 @@ def reindex(
                 columns = pandas.Index(columns)
             if not columns.equals(self.columns):
                 final_query_compiler = new_query_compiler.reindex(
-                    axis=1,
-                    labels=columns,
-                    method=method,
-                    fill_value=fill_value,
-                    limit=limit,
-                    tolerance=tolerance,
+                    axis=1, labels=columns, **kwargs
                 )
         if final_query_compiler is None:
             final_query_compiler = new_query_compiler
diff --git a/modin/pandas/dataframe.py b/modin/pandas/dataframe.py
--- a/modin/pandas/dataframe.py
+++ b/modin/pandas/dataframe.py
@@ -1396,6 +1396,35 @@ def query(self, expr, inplace=False, **kwargs):
         new_query_compiler = self._query_compiler.query(expr, **kwargs)
         return self._create_or_update_from_compiler(new_query_compiler, inplace)
 
+    def reindex(
+        self,
+        labels=None,
+        index=None,
+        columns=None,
+        axis=None,
+        method=None,
+        copy=True,
+        level=None,
+        fill_value=np.nan,
+        limit=None,
+        tolerance=None,
+    ):
+        axis = self._get_axis_number(axis)
+        if axis == 0 and labels is not None:
+            index = labels
+        elif labels is not None:
+            columns = labels
+        return super(DataFrame, self).reindex(
+            index=index,
+            columns=columns,
+            method=method,
+            copy=copy,
+            level=level,
+            fill_value=fill_value,
+            limit=limit,
+            tolerance=tolerance,
+        )
+
     def rename(
         self,
         mapper=None,


Test patch:
diff --git a/modin/pandas/test/test_series.py b/modin/pandas/test/test_series.py
--- a/modin/pandas/test/test_series.py
+++ b/modin/pandas/test/test_series.py
@@ -2466,6 +2466,15 @@ def test_reindex(data):
             pandas_series.reindex(index=[0, 1, 5]),
         )
 
+    # MultiIndex
+    modin_series, pandas_series = create_test_series(data)
+    modin_series.index, pandas_series.index = [
+        generate_multiindex(len(pandas_series))
+    ] * 2
+    pandas_result = pandas_series.reindex(list(reversed(pandas_series.index)))
+    modin_result = modin_series.reindex(list(reversed(modin_series.index)))
+    df_equals(pandas_result, modin_result)
+
 
 def test_reindex_like():
     df1 = pd.DataFrame(