code: def check_left_inverse(self, xp, use_cudnn="never"):
      x = (
          xp.arange(self.h * self.h)
          .reshape((1, 1, self.h, self.h))
          .astype(self.dtype)
      )
      with chainer.using_config("use_cudnn", use_cudnn):
          # average_pooling_2d does not have cover_all option
          # as max_pooling_2d has.
          y = chainer.functions.unpooling_2d(
              x, self.k, self.s, self.p, None, False
          )
          x_ = chainer.functions.average_pooling_2d(
              y, self.k, self.s, self.p
          ).data
  
      self.assertEqual(x.shape, x_.shape)
      self.assertEqual(x.dtype, x_.dtype)
      chainer.testing.assert_allclose(x, x_)
  
imports: import unittest
  import numpy
  import six
  import chainer
  from chainer.backends import cuda
  from chainer import functions
  from chainer import gradient_check
  from chainer import testing
  from chainer.testing import attr
  from chainer_tests.functions_tests.pooling_tests import pooling_nd_helper
label_desc: Use image node_id 1 for calling the TestAveragePoolingUnpooling obj's underlying member method code with example usage: obj.check_left_inverse(xp, use_cudnn) without return types