class_docstr: Layer merges multiple input with elementwise function and generate
  single output. Each input to this layer should have exactly the same
  shape, otherwise it won't be possible to apply elementwise operation.
  
  Parameters
  ----------
  merge_function : callable or {{``add``, ``multiply``}}
      Callable object that accepts two inputs and
      combines them in value using elementwise operation.
  
      - ``add`` - Sum all the inputs. Alias to ``tf.add``.
  
      - ``multiply`` - Multiplies all the inputs. Alias to ``tf.multiply``.
  
      - Custom function requires to have two input arguments.
  
      .. code-block:: python
  
          def subtraction(x, y):
              return x - y
  
      Defaults to ``add``.
  
  {BaseLayer.name}
  
  Methods
  -------
  {BaseLayer.Methods}
  
  Attributes
  ----------
  {BaseLayer.Attributes}
  
  Examples
  --------
  >>> from neupy import layers
  >>> network = (Input(10) | Input(10)) >> Elementwise('add')
  [(?, 10), (?, 10)] -> [... 3 layers ...] -> (?, 10)
code: def __repr__(self):
      return self._repr_arguments(
          repr(self.original_function), name=self.name
      )
  
imports: import copy
  from functools import reduce
  import tensorflow
  from neupy.core.properties import FunctionWithOptionsProperty, IntProperty
  from neupy.exceptions import LayerConnectionError
  from neupy.utils import tf_utils
  from .base import BaseLayer
label_desc: Use image node_id 4 for calling the Elementwise obj's underlying member method code with example usage: obj.__repr__() and returns: self