code: def backward(self, indexes, grad_outputs):
      a, b, gy = self.get_retained_inputs()
      gga, ggb = grad_outputs
  
      ret = []
      if 0 in indexes or 1 in indexes:
          ga, gb = BatchMatMulGrad(self.transa, self.transb).apply(
              (gga, ggb, gy)
          )
          if 0 in indexes:
              ret.append(ga)
          if 1 in indexes:
              ret.append(gb)
      if 2 in indexes:
          ret.append(
              BatchMatMul(self.transa, self.transb).apply((gga, b))[0]
              + BatchMatMul(self.transa, self.transb).apply((a, ggb))[0]
          )
      return ret
  
imports: import warnings
  import numpy
  from chainer import backend
  from chainer.backends import cuda
  from chainer import function_node
  import chainer.functions
  from chainer import utils
  from chainer.utils import type_check
  import chainerx
label_desc: Use image node_id 3 for calling the BatchMatMulGrad obj's underlying member method code with example usage: obj.backward(indexes, grad_outputs) and returns: ret