code: def check_type_forward(self, in_types):
      type_check._argname(in_types, ("sp", "dn"))
      sp_type, dn_type = in_types
      # sp_type.shape: ((nb,) ldnz)
      # dn_type.shape: ((nb,) _k, _n) when transb is False
      sp_k_axis = -1
      if self.transa:
          sp_k_axis = -2
      dn_k_axis = -2
      if self.transb:
          dn_k_axis = -1
      type_check.expect(
          sp_type.dtype.kind == "f",
          dn_type.dtype.kind == "f",
          dn_type.ndim >= 2,
          dn_type.ndim <= 3,
          sp_type.ndim == dn_type.ndim - 1,
          sp_type.shape[-1] == self.sp_row.shape[-1],
          self.sp_shape[sp_k_axis] == dn_type.shape[dn_k_axis],
      )
      dn_ndim = type_check.eval(dn_type.ndim)
      if dn_ndim == 3:
          type_check.expect(
              sp_type.shape[0] == self.sp_row.shape[0],
              dn_type.shape[0] == self.sp_row.shape[0],
          )
  
imports: import numpy
  import chainer
  from chainer import backend
  from chainer.backends import cuda
  from chainer import function_node
  from chainer import utils
  from chainer.utils import type_check
label_desc: Use image node_id 2 for calling the CooMatMul obj's underlying member method code with example usage: obj.check_type_forward(in_types) without return types