code: def tile(cls, op):
      x, y = op.x, op.y
  
      if len(x.chunks) == 1 and len(y.chunks) == 1:
          return cls._tile_one_chunk(op)
  
      if x.issparse() or y.issparse():
          assert op.sum_over_features
          return cls._tile_chunks(op, x, y)
      elif op.sum_over_features:
          # if x, y are not sparse and `sum_over_features` is True
          # just use cdist
          return [(yield from recursive_tile(cdist(x, y, "cityblock")))]
      else:
          d = x[:, np.newaxis, :] - y[np.newaxis, :, :]
          d = mt_abs(d)
          d = d.reshape((-1, x.shape[1]))
          return [(yield from recursive_tile(d))]
  
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 7 for calling the ManhattanDistances obj's underlying member method code with example usage: obj.tile(cls, op) and returns: cls, cls, list, list