class_docstr: Tiling of an array.
code: def backward(self, indexes, grad_outputs):
      reps = self.reps
      shape = tuple(self._in_shape)
      ndim = len(shape)
  
      # Ensure input and reps have the same length.
      if ndim > len(reps):
          reps = (1,) * (ndim - len(reps)) + reps
      elif ndim < len(reps):
          shape = (1,) * (len(reps) - ndim) + shape
  
      (gy,) = grad_outputs
  
      # Reshape so that base axis and reps axis can be distinguished.
      new_shape = []
      for i in range(gy.ndim):
          new_shape.append(reps[i])
          new_shape.append(shape[i])
      new_shape = tuple(new_shape)
  
      # Sum along reps axis
      reps_axis = tuple(range(0, 2 * gy.ndim, 2))
      gy = gy.reshape(new_shape)
      gy = chainer.functions.sum(gy, axis=reps_axis)
  
      if ndim < len(reps):
          return (gy.reshape(self._in_shape),)
      else:
          return (gy,)
  
file_path: chainer/chainer/functions/array/tile.py
imports: import six
  import chainer
  from chainer import backend
  from chainer import function_node
  from chainer.utils import type_check
label_desc: Use image node_id 4 for calling the Tile obj's underlying member method code with example usage: obj.backward(indexes, grad_outputs) and returns: gy, gy