code: def after(self, out_xs):
      # 2D: int offset_0 = d_1 * (argmax_0 + d_0 * c0);
      #     int offset_1 = 1 * (argmax_1 + offset_0);
      #     out = ggx[offset_1];
      def aux(offset, d_val, max_val, offset1):
          return "int {} = {} * ({} + {});".format(
              offset, d_val, max_val, offset1
          )
  
      d_vals = conv_nd_kernel.vars("d", self.ndim)[1:] + [1]
      max_vals = conv_nd_kernel.vars("argmax", self.ndim)
      offsets = conv_nd_kernel.vars("offset", self.ndim)
      offsets1 = ["d_0 * c0"] + offsets[:-1]
      offset_strs = conv_nd_kernel.map_(
          aux, offsets, d_vals, max_vals, offsets1
      )
      offset_strs.append("out = ggx[offset_{}];".format(self.ndim - 1))
      return "\n".join(offset_strs)
  
imports: import six
  from chainer.functions.pooling import pooling_nd_kernel
  from chainer.utils import conv_nd_kernel
label_desc: Use image node_id 4 for calling the MaxPoolingNDKernelForwardWithIndexes1 obj's underlying member method code with example usage: obj.after(out_xs) and returns: str, str