code: def check_forward(self, x_data, W_data, b_data):
      # If all the filters are the same,
      # the operation is equivalent to convolution_2d
      for i in moves.range(W_data.shape[1]):
          for j in moves.range(W_data.shape[2]):
              W_data[:, i, j, ...] = W_data[:, 0, 0, ...]
      args1 = (x_data, W_data)
      args2 = (x_data, W_data[:, 0, 0, ...])
      if b_data is not None:
          for i in moves.range(b_data.shape[1]):
              for j in moves.range(b_data.shape[2]):
                  b_data[
                      :,
                      i,
                      j,
                  ] = b_data[
                      :,
                      0,
                      0,
                  ]
          args1 = args1 + (b_data,)
          b_data2 = b_data[
              :,
              0,
              0,
          ]
          args2 = args2 + (b_data2,)
  
      f1 = local_convolution_2d.LocalConvolution2DFunction(self.stride)
      y1 = f1.apply(args1)[0].data
  
      f2 = convolution_2d.Convolution2DFunction(self.stride, 0)
      y2 = f2.apply(args2)[0].data
      testing.assert_allclose(y1, y2, **self.check_forward_options)
  
imports: import unittest
  import numpy
  from six import moves
  from chainer import cuda
  from chainer.functions.connection import convolution_2d
  from chainer.functions.connection import local_convolution_2d
  from chainer import gradient_check
  from chainer import testing
  from chainer.testing import attr
  from chainer.testing import condition
label_desc: Use image node_id 2 for calling the TestLocalConvolution2DFunction obj's underlying member method code with example usage: obj.check_forward(x_data, W_data, b_data) without return types