code: def execute(cls, ctx, op):
      (x, y), device_id, xp = as_same_device(
          [ctx[inp.key] for inp in op.inputs],
          device=op.device,
          ret_extra=True,
      )
  
      with device(device_id):
          if (
              xp is np
              and op.use_sklearn
              and SklearnDistanceMetric is not None
          ):
              # CPU and sklearn installed, delegate computation to sklearn
              d = SklearnDistanceMetric.get_metric(
                  "haversine"
              ).pairwise(x, y)
          else:
              # try to leverage xp(np, cp) to perform computation
              sin_0 = xp.sin(0.5 * (x[:, [0]] - y[:, 0]))
              sin_1 = xp.sin(0.5 * (x[:, [1]] - y[:, 1]))
              d = 2 * xp.arcsin(
                  xp.sqrt(
                      sin_0 * sin_0
                      + xp.cos(x[:, [0]])
                      * xp.cos(y[:, 0])
                      * sin_1
                      * sin_1
                  )
              )
  
          ctx[op.outputs[0].key] = d
  
file_path: mars/mars/learn/metrics/pairwise/haversine.py
imports: import numpy
  from ....None import opcodes
  from ....core import recursive_tile
  from ....serialization.serializables import KeyField, BoolField
  from ....tensor.core import TensorOrder
  from ....tensor.indexing import fill_diagonal
  from ....tensor.array_utils import as_same_device, device
  from .core import PairwiseDistances
label_desc: Use image node_id 8 for calling the HaversineDistances obj's underlying member method code with example usage: obj.execute(cls, ctx, op) without return types