code: def backward(self, indexes, grads):
      xp = cuda.get_array_module(*grads)
      x = self.get_retained_inputs()[0].data
      ggW = grads[0]
  
      if self.ignore_label is not None:
          mask = x == self.ignore_label
          # To prevent index out of bounds, we need to check if ignore_label
          # is inside of W.
          if not (0 <= self.ignore_label < self.w_shape[1]):
              x = xp.where(mask, 0, x)
  
      ggy = ggW[x]
  
      if self.ignore_label is not None:
          mask, zero, _ = xp.broadcast_arrays(
              mask[..., None], xp.zeros((), "f"), ggy.data
          )
          ggy = chainer.functions.where(mask, zero, ggy)
      return None, ggy
  
imports: import chainer
  import numpy
  from chainer import cuda, function_node, link, variable
  from chainer.initializers import normal
  from chainer.utils import type_check
label_desc: Use image node_id 3 for calling the EmbedIDGrad obj's underlying member method code with example usage: obj.backward(indexes, grads) and returns: None,  ggy