code: def _generate(self, ndim):
      self.ndim = ndim
      self.ds = conv_nd_kernel.vars("d", ndim)
      self.outs = conv_nd_kernel.vars("out", ndim)
      self.ks = conv_nd_kernel.vars("k", ndim)
      self.ss = conv_nd_kernel.vars("s", ndim)
      self.ps = conv_nd_kernel.vars("p", ndim)
  
      in_params = self._in_params()
      out_params = self._out_params()
      operation = self._operation()
      name = "{}_pool_{}d_bwd".format(self.name(), self.ndim)
      return in_params, out_params, operation, name
  
imports: from six import moves
  from chainer.backends import cuda
  from chainer.utils import conv_nd_kernel
label_desc: Use image node_id 8 for calling the PoolingNDKernelBackward obj's underlying member method code with example usage: obj._generate(ndim) and returns: in_params,  out_params,  operation,  name