code: def check_type_forward(self, in_types):
      n_in = in_types.size()
      type_check.expect(2 <= n_in, n_in <= 3)
  
      x_type = in_types[0]
      w_type = in_types[1]
      type_check.expect(
          x_type.dtype.kind == "f",
          w_type.dtype.kind == "f",
          x_type.ndim == self.ndim + 2,
          w_type.ndim == self.ndim + 2,
          # Need to consider the case that group count > 1.
          # x_type.shape[1] == w_type.shape[1],
      )
  
      if type_check.eval(n_in) == 3:
          b_type = in_types[2]
          type_check.expect(
              b_type.dtype.kind == "f",
              b_type.ndim == 1,
              b_type.shape[0] == w_type.shape[0],
          )
  
imports: import numpy
  from six import moves
  import chainer
  from chainer import backend
  from chainer.backends import cuda
  from chainer import configuration
  from chainer import function_node
  from chainer.functions.connection import convolution_2d
  from chainer import utils
  from chainer.utils import conv
  from chainer.utils import conv_nd
  from chainer.utils import type_check
  import chainerx
label_desc: Use image node_id 2 for calling the ConvolutionND obj's underlying member method code with example usage: obj.check_type_forward(in_types) without return types