class_docstr: Class for the 3D Heisenberg group in the vector representation.
  
  The 3D Heisenberg group represented as R^3. It is a step-2 Carnot Lie
  group. It can be equipped with a natural sub-Riemannian structure, and it
  is a fundamental example in sub-Riemannian geometry.
  
  Parameters
  ----------
  No parameters
  
  References
  ----------
  https://en.wikipedia.org/wiki/Heisenberg_group
class_docstr_tok: ["Class","for","the","3D","Heisenberg","group","in","the","vector","representation",".","The","3D","Heisenberg","group","represented","as","R^3",".","It","is","a","step-2","Carnot","Lie","group",".","It","can","be","equipped","with","a","natural","sub-Riemannian","structure",",","and","it","is","a","fundamental","example","in","sub-Riemannian","geometry",".","Parameters","--","--","--","--","--","No","parameters","References","--","--","--","--","--","https",":","\/\/en.wikipedia.org\/wiki\/Heisenberg_group"]
docstr: Compute the group product of elements `point_a` and `point_b`.
  
  Parameters
  ----------
  point_a : array-like, shape=[..., 3]
      Left factor in the product.
  point_b : array-like, shape=[..., 3]
      Right factor in the product.
  
  Returns
  -------
  point_ab : array-like, shape=[..., 3]
      Product of point_a and point_b along the first dimension.
docstr_tok: ["Compute","the","group","product","of","elements","`","point_a","`","and","`","point_b","`",".","Parameters","--","--","--","--","--","point_a",":","array-like",",","shape=","[","...",",","3","]","Left","factor","in","the","product",".","point_b",":","array-like",",","shape=","[","...",",","3","]","Right","factor","in","the","product",".","Returns","--","--","--","-","point_ab",":","array-like",",","shape=","[","...",",","3","]","Product","of","point_a","and","point_b","along","the","first","dimension","."]
code: def compose(self, point_a, point_b):
      """Compute the group product of elements `point_a` and `point_b`.
  
      Parameters
      ----------
      point_a : array-like, shape=[..., 3]
          Left factor in the product.
      point_b : array-like, shape=[..., 3]
          Right factor in the product.
  
      Returns
      -------
      point_ab : array-like, shape=[..., 3]
          Product of point_a and point_b along the first dimension.
      """
      point_ab = point_a + point_b
      point_ab_additional_term = gs.array(
          1
          / 2
          * (
              point_a[..., 0] * point_b[..., 1]
              - point_a[..., 1] * point_b[..., 0]
          )
      )
  
      point_ab = point_ab + gs.concatenate(
          [
              gs.zeros_like(point_ab[..., :2]),
              point_ab_additional_term[..., None],
          ],
          axis=-1,
      )
  
      return point_ab
  
file_path: geomstats/geomstats/geometry/heisenberg.py
imports: import geomstats.backend
  from geomstats.geometry.base import VectorSpace
  from geomstats.geometry.euclidean import Euclidean
  from geomstats.geometry.lie_group import LieGroup
  from geomstats.geometry.symmetric_matrices import SymmetricMatrices
label_desc: Use image node_id 4 for calling the HeisenbergVectors obj's underlying member method code with example usage: obj.compose(point_a, point_b) and returns: point_ab