code: def _tile_via_psrs(cls, op):
      from .sort import TensorSort
  
      return_value = op.return_value
      return_indices = op.return_indices
  
      # just sort, force need_align=True
      psrs_kinds = op.psrs_kinds or [
          "quicksort",
          "mergesort",
          "mergesort",
      ]
      sort_op = TensorSort(
          axis=op.axis,
          order=op.order,
          psrs_kinds=psrs_kinds,
          need_align=True,
          return_value=return_value,
          return_indices=return_indices,
      )
      ret = sort_op(op.input)
  
      if not isinstance(ret, tuple):
          ret = (ret,)
  
      base_slcs = (slice(None),) * op.axis
      if op.largest:
          ret = [
              r[base_slcs + (slice(-1, -op.k - 1, -1),)] for r in ret
          ]
      else:
          ret = [r[base_slcs + (slice(op.k),)] for r in ret]
  
      ret = yield from recursive_tile(ret)
      new_op = op.copy()
      kws = [o.params for o in op.outputs]
      if return_value:
          kws[0]["nsplits"] = ret[0].nsplits
          kws[0]["chunks"] = ret[0].chunks
      if return_indices:
          kws[-1]["nsplits"] = ret[-1].nsplits
          kws[-1]["chunks"] = ret[-1].chunks
      return new_op.new_tensors(op.inputs, kws=kws)
  
imports: import itertools
  import numpy
  from ...None import opcodes
  from ...config import options
  from ...core import ExecutableTuple, recursive_tile
  from ...core.operand import OperandStage
  from ...serialization.serializables import FieldTypes, KeyField, Int64Field, Int32Field, BoolField, StringField, ListField
  from ...utils import ceildiv, flatten
  from ..array_utils import as_same_device, device
  from ..core import TensorOrder
  from ..datasource import tensor
  from ..operands import TensorOperand, TensorOperandMixin
  from ..utils import validate_axis, validate_order
  from .sort import _validate_sort_psrs_kinds
label_desc: Use image node_id 17 for calling the TensorTopk obj's underlying member method code with example usage: obj._tile_via_psrs(cls, op) and returns: new_op