docstr: Test surface one forms.
docstr_tok: ["Test","surface","one","forms","."]
code: def test_surface_one_forms_prod(self, point, expected):
      """Test surface one forms."""
      res = self.space.surface_one_forms(point)
  
      first_vec = res[..., :, 0, :]
      second_vec = res[..., :, 1, :]
      inner_prods = gs.einsum(
          "...ni,...ni->...n", first_vec, second_vec
      )
  
      if gs.ndim(inner_prods) == 1:
          inner_prods = gs.expand_dims(inner_prods, axis=0)
          expected = gs.expand_dims(expected, axis=0)
  
      for inner_prods_, expected_ in zip(inner_prods, expected):
          self.assertTrue(
              gs.all([prod in expected_ for prod in inner_prods_])
          )
  
file_path: geomstats/geomstats/test_cases/geometry/discrete_surfaces.py
imports: import geomstats.backend
  from geomstats.test_cases.geometry.manifold import ManifoldTestCase
  from geomstats.test_cases.geometry.riemannian_metric import RiemannianMetricTestCase
  from geomstats.vectorization import get_n_points
label_desc: Use image node_id 3 for calling the DiscreteSurfacesTestCase obj's underlying member method code with example usage: obj.test_surface_one_forms_prod(point, expected) without return types