code: def __call__(self, X, Y=None):
      X, Y = self.check_pairwise_arrays(X, Y)
      if self._y is None:
          self._y = Y
  
      if (X.issparse() or Y.issparse()) and not self._sum_over_features:
          raise TypeError(
              f"sum_over_features={self._sum_over_features} not supported"
              " for sparse matrices"
          )
  
      if not self._sum_over_features:
          shape = (X.shape[0] * Y.shape[0], X.shape[1])
      else:
          shape = (X.shape[0], Y.shape[0])
  
      return self.new_tensor(
          [X, Y], shape=shape, order=TensorOrder.C_ORDER
      )
  
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 6 for calling the ManhattanDistances obj's underlying member method code with example usage: obj.__call__(X, Y) and returns: self