Repository: modin-project/modin

Issue:
REFACTOR: Delete BaseDataframeAxisPartition.shuffle and subclass implementations.
### System information
- **Modin version** (`modin.__version__`): adb16a17f721048005520388080627975c6852d8

AFAICT, [this function](https://github.com/modin-project/modin/blob/c67a93660b4de7163b25852cb16807283d76265c/modin/core/dataframe/base/partitioning/axis_partition.py#L71) and the subclass implementations are not used anywhere.


Discussion:

Resolving patch:
diff --git a/modin/core/dataframe/base/partitioning/axis_partition.py b/modin/core/dataframe/base/partitioning/axis_partition.py
--- a/modin/core/dataframe/base/partitioning/axis_partition.py
+++ b/modin/core/dataframe/base/partitioning/axis_partition.py
@@ -68,26 +68,6 @@ def apply(
         """
         pass
 
-    def shuffle(self, func, lengths, **kwargs):
-        """
-        Shuffle the order of the data in this axis partition based on the `lengths`.
-
-        Parameters
-        ----------
-        func : callable
-            The function to apply before splitting.
-        lengths : list
-            The list of partition lengths to split the result into.
-        **kwargs : dict
-            Additional keywords arguments to be passed in `func`.
-
-        Returns
-        -------
-        list
-            A list of `BaseDataframePartition` objects split by `lengths`.
-        """
-        pass
-
     # Child classes must have these in order to correctly subclass.
     instance_type = None
     partition_type = None
diff --git a/modin/core/dataframe/pandas/partitioning/axis_partition.py b/modin/core/dataframe/pandas/partitioning/axis_partition.py
--- a/modin/core/dataframe/pandas/partitioning/axis_partition.py
+++ b/modin/core/dataframe/pandas/partitioning/axis_partition.py
@@ -98,32 +98,6 @@ def apply(
         args.extend(self.list_of_blocks)
         return self._wrap_partitions(self.deploy_axis_func(*args, **kwargs))
 
-    def shuffle(self, func, lengths, **kwargs):
-        """
-        Shuffle the order of the data in this axis partition based on the `lengths`.
-
-        Parameters
-        ----------
-        func : callable
-            The function to apply before splitting.
-        lengths : list
-            The list of partition lengths to split the result into.
-        **kwargs : dict
-            Additional keywords arguments to be passed in `func`.
-
-        Returns
-        -------
-        list
-            A list of `PandasDataframePartition` objects split by `lengths`.
-        """
-        num_splits = len(lengths)
-        # We add these to kwargs and will pop them off before performing the operation.
-        kwargs["manual_partition"] = True
-        kwargs["_lengths"] = lengths
-        args = [self.axis, func, num_splits, False]
-        args.extend(self.list_of_blocks)
-        return self._wrap_partitions(self.deploy_axis_func(*args, **kwargs))
-
     @classmethod
     def deploy_axis_func(
         cls, axis, func, num_splits, maintain_partitioning, *partitions, **kwargs
diff --git a/modin/experimental/core/execution/ray/implementations/pyarrow_on_ray/partitioning/axis_partition.py b/modin/experimental/core/execution/ray/implementations/pyarrow_on_ray/partitioning/axis_partition.py
--- a/modin/experimental/core/execution/ray/implementations/pyarrow_on_ray/partitioning/axis_partition.py
+++ b/modin/experimental/core/execution/ray/implementations/pyarrow_on_ray/partitioning/axis_partition.py
@@ -90,40 +90,6 @@ def apply(self, func, num_splits=None, other_axis_partition=None, **kwargs):
             )
         ]
 
-    def shuffle(self, func, num_splits=None, **kwargs):
-        """
-        Shuffle the order of the data in this axis based on the `func`.
-
-        Parameters
-        ----------
-        func : callable
-            The function to apply before splitting.
-        num_splits : int, optional
-            The number of times to split the resulting object.
-        **kwargs : dict
-            Additional keywords arguments to be passed in `func`.
-
-        Returns
-        -------
-        list
-            List with ``PyarrowOnRayDataframePartition`` objects.
-
-        Notes
-        -----
-        Method extends ``BaseDataframeAxisPartition.shuffle``.
-        """
-        if num_splits is None:
-            num_splits = len(self.list_of_blocks)
-
-        args = [self.axis, func, num_splits, kwargs]
-        args.extend(self.list_of_blocks)
-        return [
-            PyarrowOnRayDataframePartition(obj)
-            for obj in deploy_ray_axis_func.options(num_returns=num_splits).remote(
-                *args
-            )
-        ]
-
 
 class PyarrowOnRayDataframeColumnPartition(PyarrowOnRayDataframeAxisPartition):
     """
@@ -315,27 +281,3 @@ def deploy_ray_func_between_two_axis_partitions(
     return split_arrow_table_result(
         axis, result, len(result.num_rows), num_splits, result.schema.metadata
     )
-
-
-@ray.remote
-def deploy_ray_shuffle_func(axis, func, num_splits, kwargs, *partitions):
-    """
-    Deploy shuffle function that defines the order of the data in this axis partition.
-
-    Parameters
-    ----------
-    axis : {0, 1}
-        The axis to perform the function along.
-    func : callable
-        The function to deploy.
-    num_splits : int
-        The number of splits to return.
-    kwargs : dict
-        A dictionary of keyword arguments.
-    *partitions : array-like
-        All partitions that make up the full axis (row or column).
-
-    Notes
-    -----
-    Function is deprecated.
-    """


Test patch: