code: def execute_map(cls, ctx, op):
      (in_chunk,), device_id, xp = as_same_device(
          [ctx[c.key] for c in op.inputs],
          device=op.device,
          ret_extra=True,
      )
  
      axis = cls.get_axis(op.axis)
      moment = op.moment
      dtype = op.dtype
      empty = get_array_module(in_chunk, nosparse=True).empty
  
      with device(device_id):
          chunk_count = nannumel(
              in_chunk,
              axis=axis,
              dtype=np.int64,
              keepdims=bool(op.keepdims),
          )
          chunk_sum = xp.nansum(
              in_chunk,
              axis=axis,
              dtype=dtype,
              keepdims=bool(op.keepdims),
          )
          avg = xp.true_divide(chunk_sum, chunk_count)
          var_square = empty(
              chunk_count.shape + (moment - 1,), dtype=dtype
          )
          for i in range(2, moment + 1):
              var_square[..., i - 2] = xp.nansum(
                  (in_chunk - avg) ** i,
                  axis=axis,
                  dtype=dtype,
                  keepdims=bool(op.keepdims),
              )
          ctx[op.outputs[0].key] = (chunk_sum, chunk_count, var_square)
  
imports: import numpy
  from ...None import opcodes
  from ...serialization.serializables import Int32Field
  from ..datasource import tensor
  from ..array_utils import device, as_same_device, get_array_module
  from .var import reduce_var_square
  from .core import TensorReduction, TensorReductionMixin, nannumel
label_desc: Use image node_id 5 for calling the TensorNanMoment obj's underlying member method code with example usage: obj.execute_map(cls, ctx, op) without return types