code: def check_DNSP_double_backward(
      self, a_data, b_data, c_grad, a_grad_grad, b_grad_grad, atol, rtol
  ):
      sp_b = utils.to_coo(b_data)
      sp_ggb = utils.to_coo(b_grad_grad)
      func = F.math.sparse_matmul.CooMatMul(
          sp_b.row,
          sp_b.col,
          sp_b.shape,
          sp_b.order,
          transa=not self.transb,
          transb=not self.transa,
          transc=True,
      )
  
      def op(b, a):
          return func.apply((b, a))[0]
  
      gradient_check.check_double_backward(
          op,
          (sp_b.data.data, a_data),
          c_grad,
          (sp_ggb.data.data, a_grad_grad),
          atol=atol,
          rtol=rtol,
          dtype=numpy.float32,
      )
  
imports: import unittest
  import numpy
  import chainer
  from chainer import cuda
  import chainer.functions
  from chainer import gradient_check
  from chainer import testing
  from chainer.testing import attr
  from chainer import utils
  from chainer.utils import type_check
label_desc: Use image node_id 19 for calling the TestCooMatMul obj's underlying member method code with example usage: obj.check_DNSP_double_backward(a_data, b_data, c_grad, a_grad_grad, b_grad_grad, atol, rtol) and returns: func