code: def test_invariance(self, n_points, atol):
      left = self.space.metric.left
  
      group_elem_1 = self.data_generator.random_point(n_points)
      group_elem_2 = self.data_generator.random_point(n_points)
  
      tangent_vec_11 = self.data_generator.random_tangent_vec(
          group_elem_1
      )
      tangent_vec_12 = self.data_generator.random_tangent_vec(
          group_elem_1
      )
  
      dtrans_2 = self.space.tangent_translation_map(
          group_elem_2, left=left, inverse=False
      )
  
      if left:
          group_elem_3 = self.space.compose(group_elem_2, group_elem_1)
      else:
          group_elem_3 = self.space.compose(group_elem_1, group_elem_2)
  
      tangent_vec_31 = dtrans_2(tangent_vec_11)
      tangent_vec_32 = dtrans_2(tangent_vec_12)
  
      inner_prod = self.space.metric.inner_product(
          tangent_vec_11, tangent_vec_12, group_elem_1
      )
      inner_prod_ = self.space.metric.inner_product(
          tangent_vec_31, tangent_vec_32, group_elem_3
      )
      self.assertAllClose(inner_prod, inner_prod_, atol=atol)
  
imports: import pytest
  from geomstats.test.vectorization import generate_vectorization_data
  from geomstats.test_cases.geometry.riemannian_metric import RiemannianMetricTestCase
  from geomstats.vectorization import repeat_point
label_desc: Use image node_id 3 for calling the _InvariantMetricTestCaseMixins obj's underlying member method code with example usage: obj.test_invariance(n_points, atol) without return types