code: def partition(a, kth, axis=-1, kind="introselect", order=None, **kw):
      r"""
      Return a partitioned copy of a tensor.
  
      Creates a copy of the tensor with its elements rearranged in such a
      way that the value of the element in k-th position is in the
      position it would be in a sorted tensor. All elements smaller than
      the k-th element are moved before this element and all equal or
      greater are moved behind it. The ordering of the elements in the two
      partitions is undefined.
  
      Parameters
      ----------
      a : array_like
          Tensor to be sorted.
      kth : int or sequence of ints
          Element index to partition by. The k-th value of the element
          will be in its final sorted position and all smaller elements
          will be moved before it and all equal or greater elements behind
          it. The order of all elements in the partitions is undefined. If
          provided with a sequence of k-th it will partition all elements
          indexed by k-th  of them into their sorted position at once.
      axis : int or None, optional
          Axis along which to sort. If None, the tensor is flattened before
          sorting. The default is -1, which sorts along the last axis.
      kind : {'introselect'}, optional
          Selection algorithm. Default is 'introselect'.
      order : str or list of str, optional
          When `a` is a tensor with fields defined, this argument
          specifies which fields to compare first, second, etc.  A single
          field can be specified as a string.  Not all fields need be
          specified, but unspecified fields will still be used, in the
          order in which they come up in the dtype, to break ties.
  
      Returns
      -------
      partitioned_tensor : Tensor
          Tensor of the same type and shape as `a`.
  
      See Also
      --------
      Tensor.partition : Method to sort a tensor in-place.
      argpartition : Indirect partition.
      sort : Full sorting
  
      Notes
      -----
      The various selection algorithms are characterized by their average
      speed, worst case performance, work space size, and whether they are
      stable. A stable sort keeps items with the same key in the same
      relative order. The available algorithms have the following
      properties:
  
      ================= ======= ============= ============ =======
         kind            speed   worst case    work space  stable
      ================= ======= ============= ============ =======
      'introselect'        1        O(n)           0         no
      ================= ======= ============= ============ =======
  
      All the partition algorithms make temporary copies of the data when
      partitioning along any but the last axis.  Consequently,
      partitioning along the last axis is faster and uses less space than
      partitioning along any other axis.
  
      The sort order for complex numbers is lexicographic. If both the
      real and imaginary parts are non-nan then the order is determined by
      the real parts except when they are equal, in which case the order
      is determined by the imaginary parts.
  
      Examples
      --------
      >>> import mars.tensor as mt
      >>> a = mt.array([3, 4, 2, 1])
      >>> mt.partition(a, 3).execute()
      array([2, 1, 3, 4])
  
      >>> mt.partition(a, (1, 3)).execute()
      array([1, 2, 3, 4])
      """
      return_indices = kw.pop("return_index", False)
      (
          a,
          kth,
          axis,
          kind,
          order,
          need_align,
      ) = _validate_partition_arguments(a, kth, axis, kind, order, kw)
      op = TensorPartition(
          kth=kth,
          axis=axis,
          kind=kind,
          order=order,
          need_align=need_align,
          return_value=True,
          return_indices=return_indices,
          dtype=a.dtype,
          gpu=a.op.gpu,
      )
      return op(a, kth)
  
imports: import itertools
  import numpy
  from ...None import opcodes
  from ...core import recursive_tile
  from ...serialization.serializables import FieldTypes, KeyField, Int32Field, StringField, ListField, BoolField, AnyField
  from ...utils import has_unknown_shape, flatten, stack_back
  from ...core import ENTITY_TYPE, ExecutableTuple
  from ..operands import TensorOperand, TensorShuffleProxy
  from ..core import TENSOR_TYPE, TENSOR_CHUNK_TYPE, TensorOrder
  from ..array_utils import as_same_device, device
  from ..datasource import tensor
  from ..utils import validate_axis, validate_order
  from .psrs import TensorPSRSOperandMixin
label_desc: Use image node_id 4 for calling a global function with example usage: partition(a, kth, axis, kind, order) and returns: op