code: def haversine_distance(p1: GeoSeries, p2: GeoSeries):
      """Compute the haversine distances in kilometers between an arbitrary
      list of lon/lat pairs
  
      Parameters
      ----------
      p1: GeoSeries
          Series of points as floats
      p2: GeoSeries
          Series of points as floats
  
      Returns
      -------
      result : cudf.Series
          The distance between pairs of points between `p1` and `p2`
      >>> import cudf
      >>> import cuspatial
      >>> a = {"latitude":[0.0,0.0,1.0,1.0],
      ...      "longitude": [0.0,1.0,0.0,1.0]}
      >>> df = cudf.DataFrame(data=a)
  
      >>> # Create cuSpatial GeoSeries from cuDF Dataframe
      >>> gs = cuspatial.GeoSeries.from_points_xy(
      ...     df[['longitude', 'latitude']].interleave_columns()
      ... )
  
      >>> # Create Comparator cuSpatial GeoSeries from a comparator point
      >>> df['compare_lat'] = 2.0 # this will broadcast the value to all rows
      >>> df['compare_lng'] = 2.0
      >>> cmp_gs = cuspatial.GeoSeries.from_points_xy(
      ...     df[['compare_lat', 'compare_lng']].interleave_columns()
      ... )
  
      >>> # Calculate Haversine Distance of cuDF dataframe to comparator point
      >>> df['compare_dist'] = cuspatial.haversine_distance(gs, cmp_gs)
      >>> df.head()
             latitude  longitude  compare_lat  compare_lng  compare_dist
      0       0.0        0.0          2.0          2.0    314.474805
      1       0.0        1.0          2.0          2.0    248.629315
      2       1.0        0.0          2.0          2.0    248.568719
      3       1.0        1.0          2.0          2.0    157.225432
      """
  
      if any(
          [not contains_only_points(p1), not contains_only_points(p2)]
      ):
          raise ValueError("Input muist be two series of points.")
  
      if len(p1) != len(p2):
          raise ValueError("Mismatch length of inputs.")
  
      p1_lon = p1.points.x._column
      p1_lat = p1.points.y._column
      p2_lon = p2.points.x._column
      p2_lat = p2.points.y._column
  
      return cudf.Series._from_data(
          {
              "None": cpp_haversine_distance(
                  p1_lon, p1_lat, p2_lon, p2_lat
              )
          }
      )
  
file_path: cuspatial/python/cuspatial/cuspatial/core/spatial/distance.py
imports: import cudf
  from cudf import DataFrame, Series
  from cudf.core.column import as_column
  from cuspatial._lib.distance import directed_hausdorff_distance, haversine_distance, pairwise_linestring_distance, pairwise_linestring_polygon_distance, pairwise_point_distance, pairwise_point_linestring_distance, pairwise_point_polygon_distance, pairwise_polygon_distance
  from cuspatial._lib.types import CollectionType
  from cuspatial.core.geoseries import GeoSeries
  from cuspatial.utils.column_utils import contains_only_linestrings, contains_only_multipoints, contains_only_points, contains_only_polygons
label_desc: Use image node_id 2 for calling a global function with example usage: haversine_distance(p1, p2) and returns: cudf