code: def poincare_ball_mobius_add(c, x, y):
      r"""
      Möbius addition of ``x`` and ``y``, on the Poincaré ball with curvature ``-c``: :math:`\mathbf{x} \oplus^c \mathbf{y}`.
  
      See Section 2 of [1] for more details.
  
      [1] O.-E. Ganea, G. Bécigneul, and T. Hofmann, “Hyperbolic Neural Networks,” `arXiv:1805.09112 <http://arxiv.org/abs/1805.09112>`_, Jun. 2018.
  
      Args:
          c (tensorflow Tensor-like): the curvature of the hyperbolic space(s). Must be able to be
              broadcast to ``x`` and ``y``.
          x (tensorflow Tensor-like): a tensor containing vectors in hyperbolic space, where each
              vector is an element of the last axis (for example, if ``x`` has shape ``(2, 3, 4)``, it
              represents ``2 * 3 = 6`` hyperbolic vectors, each of length ``4``). Must be able to be
              broadcast to ``y``.
          y (tensorflow Tensor-like): a tensor containing vectors in hyperbolic space, where each
              vector is an element of the last axis similar to ``x``. Must be able to be broadcast to
              ``x``.
  
      Returns:
          A TensorFlow Tensor containing the Möbius addition of each of the vectors (last axis) in
          ``x`` and ``y``, using the corresponding curvature from ``c``. This tensor has the same
          shape as the Euclidean equivalent ``x + y``.
      """
      x_norm2 = tf.reduce_sum(x * x, axis=-1, keepdims=True)
      y_norm2 = tf.reduce_sum(y * y, axis=-1, keepdims=True)
      x_dot_y = tf.reduce_sum(x * y, axis=-1, keepdims=True)
  
      inner = 1 + 2 * c * x_dot_y
      numer = (inner + c * y_norm2) * x + (1 - c * x_norm2) * y
      denom = inner + c * c * x_norm2 * y_norm2
  
      return _project(c, numer / denom)
  
file_path: stellargraph/stellargraph/utils/hyperbolic.py
imports: import tensorflow
  import numpy
label_desc: Use image node_id 4 for calling a global function with example usage: poincare_ball_mobius_add(c, x, y) and returns: _project