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,
      )
      out = op.outputs[0]
  
      with device(device_id):
          if sklearn_manhattan_distances is not None:
              ctx[out.key] = sklearn_manhattan_distances(
                  ensure_own_data(x),
                  ensure_own_data(y),
                  sum_over_features=op.sum_over_features,
              )
          else:  # pragma: no cover
              # we cannot support sparse
              raise NotImplementedError(
                  "cannot support calculate manhattan distances on GPU"
              )
  
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.arithmetic import abs
  from ....tensor.spatial.distance import cdist
  from ....tensor.array_utils import as_same_device, device
  from ....utils import ensure_own_data
  from .core import PairwiseDistances
label_desc: Use image node_id 8 for calling the ManhattanDistances obj's underlying member method code with example usage: obj.execute(cls, ctx, op) without return types