code: def _coo_matmul_cpu(A_data, A_row, A_col, A_shape, B, dtype):
      # A_shape: (_m, _k)
      # B.shape: ((nb,) _k, _n)
      # A_data/row/col.shape: ((nb,) ldnz)
      if not _scipy_available:
          msg = (
              "SciPy seems to be unavailable on your system. A CPU"
              " implementation of sparse_matmul uses SciPy, so you"
              " cannot use sparse_matmul on the CPU."
          )
          raise RuntimeError(msg)
  
      _m, _k = A_shape
      _n = B.shape[-1]
      if B.ndim == 2:
          sp_A = sparse.coo_matrix(
              (A_data, (A_row, A_col)), shape=(_m, _k)
          )
          C = sp_A.dot(B).astype(dtype, copy=False)
      else:
          nb = B.shape[0]
          C = numpy.empty((nb, _m, _n), dtype=dtype)
          for i in range(nb):
              nnz = len(numpy.where(A_row[i] >= 0)[0])
              sp_A = sparse.coo_matrix(
                  (A_data[i, :nnz], (A_row[i, :nnz], A_col[i, :nnz])),
                  shape=(_m, _k),
              )
              C[i] = sp_A.dot(B[i]).astype(dtype, copy=False)
  
      return C
  
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 a global function with example usage: _coo_matmul_cpu(A_data, A_row, A_col, A_shape, B, dtype) and returns: C