code: def scatter_add(a, slices, b):
      """Adds given values to specified elements of an array.
  
      This function adds ``b`` to the specified elements of the copy of
      ``a``, and returns the copy.
      The value of the original ``a`` is not changed.
  
      Args:
          a (:class:`~chainer.Variable` or :ref:`ndarray`): A variable.
          slices (int, slice, Ellipsis, None, integer array-like, boolean\
          array-like or tuple of them):
              It is an integer, a slice, an ellipsis,
              a numpy.newaxis, an integer array-like, a boolean array-like
              or tuple of them.
          b (:class:`~chainer.Variable` or :ref:`ndarray`):
              A variable that is scatter added to ``a``.
              Its shape has to equal ``a[slices]`` because broadcasting
              of variables is not supported.
  
      Returns:
          A :class:`~chainer.Variable` object which is the result of
          scatter addition.
  
      .. note::
  
          It only supports types that are supported by CUDA's atomicAdd when
          an integer array is included in ``slices``.
          The supported types are ``numpy.float32``, ``numpy.int32``,
          ``numpy.uint32``, ``numpy.uint64`` and ``numpy.ulonglong``.
  
      .. note::
  
          It does not support ``slices`` that contains multiple boolean arrays.
  
      .. seealso::
          :func:`numpy.add.at` and
          :func:`cupyx.scatter_add`.
  
      """
      (y,) = ScatterAdd(slices).apply((a, b))
      return y
  
file_path: chainer/chainer/functions/array/scatter_add.py
imports: import numpy
  import chainer
  from chainer import backend
  from chainer.backends import cuda
  from chainer import function_node
  from chainer.utils import type_check
  import chainerx
label_desc: Use image node_id 1 for calling a global function with example usage: scatter_add(a, slices, b) and returns: y