docstr: First Bianchi identity on curvature in pre-shape space.
  
  :math:`R(X,Y)Z + R(Y,Z)X + R(Z,X)Y = 0`.
code: def test_curvature_bianchi_identity(self, n_points, atol):
      """First Bianchi identity on curvature in pre-shape space.
  
      :math:`R(X,Y)Z + R(Y,Z)X + R(Z,X)Y = 0`.
      """
      base_point = self.data_generator.random_point(n_points)
      tangent_vec_a = self.data_generator.random_tangent_vec(base_point)
      tangent_vec_b = self.data_generator.random_tangent_vec(base_point)
      tangent_vec_c = self.data_generator.random_tangent_vec(base_point)
  
      curvature_1 = self.space.metric.curvature(
          tangent_vec_a, tangent_vec_b, tangent_vec_c, base_point
      )
      curvature_2 = self.space.metric.curvature(
          tangent_vec_b, tangent_vec_c, tangent_vec_a, base_point
      )
      curvature_3 = self.space.metric.curvature(
          tangent_vec_c, tangent_vec_a, tangent_vec_b, base_point
      )
  
      result = curvature_1 + curvature_2 + curvature_3
  
      batch_shape = (n_points,) if n_points > 1 else ()
      expected = gs.zeros(batch_shape + self.space.shape)
      self.assertAllClose(result, expected, atol=atol)
  
imports: import pytest
  import geomstats.backend
  from geomstats.geometry.matrices import Matrices
  from geomstats.test.random import KendalShapeRandomDataGenerator, get_random_times
  from geomstats.test.vectorization import generate_vectorization_data
  from geomstats.test_cases.geometry.base import LevelSetTestCase
  from geomstats.test_cases.geometry.fiber_bundle import FiberBundleTestCase
  from geomstats.test_cases.geometry.quotient_metric import QuotientMetricTestCase
  from geomstats.vectorization import get_batch_shape
label_desc: Use image node_id 8 for calling the KendallShapeMetricTestCase obj's underlying member method code with example usage: obj.test_curvature_bianchi_identity(n_points, atol) without return types