class_docstr: Define an ellipsoid on which to solve geodesic problems.
docstr: Solve the inverse geodesic problem.
  
  Can accept and broadcast length 1 arguments. For example, given a
  single start point, an array of different endpoints can be supplied to
  find multiple distances.
  
  Parameters
  ----------
  points: array_like, shape=(n *or* 1, 2)
      The starting longitude-latitude point(s) from which to travel.
  
  endpoints: array_like, shape=(n *or* 1, 2)
      The longitude-latitude point(s) to travel to.
  
  Returns
  -------
  `numpy.ndarray`, shape=(n, 3)
      The distances, and the (forward) azimuths of the start and end
      points.
code: def inverse(self, points, endpoints):
      """
      Solve the inverse geodesic problem.
  
      Can accept and broadcast length 1 arguments. For example, given a
      single start point, an array of different endpoints can be supplied to
      find multiple distances.
  
      Parameters
      ----------
      points: array_like, shape=(n *or* 1, 2)
          The starting longitude-latitude point(s) from which to travel.
  
      endpoints: array_like, shape=(n *or* 1, 2)
          The longitude-latitude point(s) to travel to.
  
      Returns
      -------
      `numpy.ndarray`, shape=(n, 3)
          The distances, and the (forward) azimuths of the start and end
          points.
  
      """
  
      # Create numpy arrays from inputs, and ensure correct shape.
      points = np.array(points, dtype=np.float64)
      endpoints = np.array(endpoints, dtype=np.float64)
  
      if points.ndim > 2 or (points.ndim == 2 and points.shape[1] != 2):
          raise ValueError(
              f"Expecting input points to be (N, 2), got {points.shape}"
          )
  
      pts = points.reshape((-1, 2))
      epts = endpoints.reshape((-1, 2))
  
      sizes = [pts.shape[0], epts.shape[0]]
      n_points = max(sizes)
      if not all(size in [1, n_points] for size in sizes):
          raise ValueError(
              "Inputs must have common length n or length one."
          )
  
      # Broadcast any length 1 arrays to the correct size.
      if pts.shape[0] == 1:
          orig_pts = pts
          pts = np.empty([n_points, 2], dtype=np.float64)
          pts[:, :] = orig_pts
  
      if epts.shape[0] == 1:
          orig_pts = epts
          epts = np.empty([n_points, 2], dtype=np.float64)
          epts[:, :] = orig_pts
  
      start_azims, end_azims, dists = self.geod.inv(
          pts[:, 0], pts[:, 1], epts[:, 0], epts[:, 1]
      )
      # Convert back azimuth to forward azimuth.
      end_azims += np.where(end_azims > 0, -180, 180)
      return np.column_stack([dists, start_azims, end_azims])
  
file_path: cartopy/lib/cartopy/geodesic.py
imports: import numpy
  import pyproj
  import shapely.geometry
label_desc: Use image node_id 4 for calling the Geodesic obj's underlying member method code with example usage: obj.inverse(points, endpoints) and returns: np