code: def forward_cpu(self, gy):
      if intel64.should_use_ideep(
          ">=auto"
      ) and intel64.inputs_all_ready(gy):
          return self._forward_ideep(gy)
  
      h, w = self._in_shape[2:]
      gcol = numpy.tile(
          gy[0][:, :, None, None], (1, 1, self.kh, self.kw, 1, 1)
      )
      gx = conv.col2im_cpu(
          gcol, self.sy, self.sx, self.ph, self.pw, h, w
      )
      gx /= self.kh * self.kw
      return (gx,)
  
imports: import numpy
  import chainer
  from chainer import backend
  from chainer.backends import cuda
  from chainer.backends import intel64
  from chainer import function_node
  from chainer.functions.pooling import average_pooling_nd
  from chainer.functions.pooling import pooling_2d
  from chainer.utils import conv
  import chainerx
label_desc: Use image node_id 2 for calling the AveragePooling2DGrad obj's underlying member method code with example usage: obj.forward_cpu(gy) and returns: gx, self