code: def forward(self, inputs):
      self.retain_inputs((0,))
      x, W = inputs
      self._w_shape = W.shape
  
      xp = backend.get_array_module(*inputs)
      if chainer.is_debug():
          valid_x = xp.logical_and(0 <= x, x < len(W))
          if self.ignore_label is not None:
              valid_x = xp.logical_or(valid_x, x == self.ignore_label)
          if not valid_x.all():
              raise ValueError(
                  "Each not ignored `x` value need to satisfy "
                  "`0 <= x < len(W)`"
              )
  
      if self.ignore_label is not None:
          mask = x == self.ignore_label
          return (
              xp.where(mask[..., None], 0, W[xp.where(mask, 0, x)]),
          )
  
      return (W[x],)
  
imports: import numpy
  import six
  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 3 for calling the EmbedIDFunction obj's underlying member method code with example usage: obj.forward(inputs) and returns: W, xp