code: def forward(self, inputs):
      self.retain_inputs((0,))
      x, W = inputs
      self._w_shape = W.shape
  
      if not type_check.same_types(*inputs):
          raise ValueError(
              "numpy and cupy must not be used together\n"
              "type(W): {0}, type(x): {1}".format(type(W), type(x))
          )
  
      xp = cuda.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 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 EmbedIDFunction obj's underlying member method code with example usage: obj.forward(inputs) and returns: W, xp