code: def check_double_backward(
      self,
      x_data,
      W_data,
      b_data,
      y_grad,
      x_grad_grad,
      W_grad_grad,
      b_grad_grad,
  ):
      args = x_data, W_data
      grads = x_grad_grad, W_grad_grad
      if b_data is not None:
          args += (b_data,)
          grads += (b_grad_grad,)
  
      if self.use_batchwise_mask:
          mask_shape = (x_data.shape[0],) + W_data.shape
      else:
          mask_shape = W_data.shape
  
      xp = backend.get_array_module(x_data)
      mask = xp.random.rand(*mask_shape) >= self.ratio
  
      def f(x, W, b=None):
          return functions.simplified_dropconnect(
              x,
              W,
              b,
              self.ratio,
              self.train,
              mask,
              self.use_batchwise_mask,
          )
  
      gradient_check.check_double_backward(
          f,
          args,
          y_grad,
          grads,
          eps=1e-2,
          **self.check_double_backward_options,
      )
  
imports: import unittest
  import numpy
  import chainer
  from chainer import backend
  from chainer.backends import cuda
  from chainer import functions
  from chainer import gradient_check
  from chainer import testing
  from chainer.testing import attr
label_desc: Use image node_id 12 for calling the TestSimplifiedDropconnect obj's underlying member method code with example usage: obj.check_double_backward(x_data, W_data, b_data, y_grad, x_grad_grad, W_grad_grad, b_grad_grad) and returns: functions