code: def test_against_optimization(self, n_points, atol):
      space = self.estimator.space
      X = self.data_generator.random_point(n_points)
  
      mean = self.estimator.fit(X).estimate_
  
      mean_gd = GradientDescent().minimize(
          space, points=X, weights=None
      )
  
      sum_sd_mean = gs.sum(space.metric.squared_dist(X, mean))
      sum_sd_mean_gd = gs.sum(space.metric.squared_dist(X, mean_gd))
  
      msg = f"circular mean: {mean}, {sum_sd_mean}\ngd: {mean_gd}, {sum_sd_mean_gd}"
      self.assertTrue(sum_sd_mean < sum_sd_mean_gd + atol, msg)
  
imports: import pytest
  import geomstats.backend
  from geomstats.geometry.discrete_curves import SRVTranslationMetric
  from geomstats.learning.frechet_mean import GradientDescent, variance
  from geomstats.test.random import RandomDataGenerator
  from geomstats.test.test_case import TestCase
  from geomstats.test_cases.learning._base import BaseEstimatorTestCase, MeanEstimatorMixinsTestCase
  from geomstats.vectorization import repeat_point
label_desc: Use image node_id 1 for calling the CircularMeanTestCase obj's underlying member method code with example usage: obj.test_against_optimization(n_points, atol) without return types