code: def check_type_forward(self, in_types):
      for i, in_type in enumerate(in_types):
          type_check._argname((in_type,), ("x{}".format(i),))
          type_check.expect(in_type.dtype.kind == "f")
  
      in_subs = self.in_subs.split(",")
      type_check.expect(in_types.size() == len(in_subs))
  
      shape_dict = {}
      for in_sub, in_type in zip(in_subs, in_types):
          for axis, char in _enumerate_axes(in_sub):
              shape = in_type.shape[axis]
              if char in shape_dict:
                  type_check.expect(shape_dict[char] == shape)
              else:
                  shape_dict[char] = shape
  
imports: import warnings
  import chainer
  from chainer import backend
  from chainer.backends import cuda
  from chainer import function_node
  from chainer import utils
  from chainer.utils import argument
  from chainer.utils import type_check
label_desc: Use image node_id 2 for calling the EinSum obj's underlying member method code with example usage: obj.check_type_forward(in_types) without return types