code: def main(self, offset, xs, out_xs):
      # 2D: int kx = (x_1 - out_x_1 * s_1 + k_1 *
      #              (x_0 - out_x_0 * s_0 + k_0 * 0));
      #     if (indexes[offset_1] == kx) {
      #       val = val + gy[offset_1];
      #     }
      def aux(x, out_x, s):
          return "{} - {} * {}".format(x, out_x, s)
  
      w = conv_nd_kernel.Writer()
      w.write(
          "int kx = {};".format(
              conv_nd_kernel.muladdexp(
                  self.ks,
                  conv_nd_kernel.map_(aux, xs, out_xs, self.ss),
                  "0",
              )
          )
      )
      w.write("if (indexes[{}] == kx) {{".format(offset), "inc")
      w.write("val = val + gy[{}];".format(offset))
      w.write("}", "dec")
      return w.get()
  
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 MaxPoolingNDKernelBackward obj's underlying member method code with example usage: obj.main(offset, xs, out_xs) and returns: w, str