code: def _tile_psrs(cls, op, in_data):
      out = op.outputs[0]
      in_df, axis_chunk_shape, _, _ = yield from cls.preprocess(
          op, in_data=in_data
      )
  
      # stage 1: local sort and regular samples collected
      (
          sorted_chunks,
          _,
          sampled_chunks,
      ) = cls.local_sort_and_regular_sample(
          op, in_df, axis_chunk_shape, None, None
      )
  
      # stage 2: gather and merge samples, choose and broadcast p-1 pivots
      concat_pivot_chunk = cls.concat_and_pivot(
          op,
          axis_chunk_shape,
          (0,) if in_df.ndim == 2 else (),
          sorted_chunks,
          sampled_chunks,
      )
  
      # stage 3: Local data is partitioned
      partition_chunks = cls.partition_local_data(
          op, axis_chunk_shape, sorted_chunks, None, concat_pivot_chunk
      )
  
      proxy_chunk = DataFrameShuffleProxy(
          output_types=op.output_types
      ).new_chunk(partition_chunks, shape=())
  
      # stage 4: all *ith* classes are gathered and merged
      partition_sort_chunks = cls.partition_merge_data(
          op, False, None, partition_chunks, proxy_chunk
      )[0]
  
      if op.ignore_index:
          yield partition_sort_chunks
          chunks = standardize_range_index(
              partition_sort_chunks, axis=op.axis
          )
      else:
          chunks = partition_sort_chunks
  
      nsplits = calc_nsplits({c.index: c.shape for c in chunks})
      if op.outputs[0].ndim == 2:
          new_op = op.copy()
          return new_op.new_dataframes(
              op.inputs,
              shape=out.shape,
              chunks=chunks,
              nsplits=nsplits,
              index_value=out.index_value,
              columns_value=out.columns_value,
              dtypes=out.dtypes,
          )
      else:
          new_op = op.copy()
          return new_op.new_seriess(
              op.inputs,
              shape=out.shape,
              chunks=chunks,
              nsplits=nsplits,
              index_value=out.index_value,
              dtype=out.dtype,
              name=out.name,
          )
  
imports: import os
  import numpy
  import pandas
  from ...None import opcodes
  from ...core.operand import OperandStage, MapReduceOperand
  from ...utils import lazy_import, calc_nsplits
  from ...serialization.serializables import AnyField, Int32Field, ListField, StringField, BoolField
  from ...tensor.base.psrs import PSRSOperandMixin
  from ..core import IndexValue, OutputType
  from ..utils import standardize_range_index, parse_index, is_cudf
  from ..operands import DataFrameOperandMixin, DataFrameOperand, DataFrameShuffleProxy
label_desc: Use image node_id 6 for calling the DataFramePSRSOperandMixin obj's underlying member method code with example usage: obj._tile_psrs(cls, op, in_data) and returns: new_op, new_op