code: def test_geodesic_output_shape(
      self, metric, start_point, end_point, t
  ):
      geodesic = metric.geodesic(start_point, end_point)
  
      is_list = type(start_point) is list or type(end_point) is list
      n_geo = max(
          len(start_point) if type(start_point) is list else 1,
          len(end_point) if type(end_point) is list else 1,
      )
      pt = start_point[0] if type(start_point) is list else start_point
      d_array = gs.ndim(pt.to_array())
      n_t = len(t) if type(t) is list else 1
  
      results = self._convert_to_gs_array(geodesic(t), is_list)
      self.assertTrue(results.ndim == d_array + 1 + int(is_list))
      self.assertTrue(results.shape[-d_array - 1] == n_t)
      if is_list:
          self.assertTrue(results.shape[-d_array - 2] == n_geo)
  
imports: from collections.abc import Iterable
  import geomstats.backend
  from geomstats.test.test_case import TestCase
label_desc: Use image node_id 6 for calling the PointSetMetricTestCase obj's underlying member method code with example usage: obj.test_geodesic_output_shape(metric, start_point, end_point, t) without return types