code: def _execute_reduce(cls, ctx, op: "TensorPermutation"):
      inputs = list(op.iter_mapper_data(ctx))
      inputs, device_id, xp = as_same_device(
          inputs, device=op.device, ret_extra=True
      )
  
      with device(device_id):
          rs = xp.random.RandomState(op.seed)
          data = xp.concatenate(inputs, axis=op.axis)
          if op.axis == 0:
              rs.shuffle(data)
          else:
              data[...] = _permutation_on_axis(data, op.axis, rs, xp)
          ctx[op.outputs[0].key] = data
  
imports: import itertools
  from numbers import Integral
  import numpy
  from ...None import opcodes
  from ...core.operand import OperandStage
  from ...serialization.serializables import KeyField, Int32Field
  from ..operands import TensorOperandMixin, TensorShuffleProxy
  from ..utils import gen_random_seeds, validate_axis
  from ..datasource import tensor
  from ..array_utils import as_same_device, device
  from .core import TensorRandomMapReduceOperand
label_desc: Use image node_id 5 for calling the TensorPermutation obj's underlying member method code with example usage: obj._execute_reduce(cls, ctx, op) without return types