':param e1: input data instances, we calculate distances between all
pairs
:type e1: :class:`Orange.data.Table` or
:class:`Orange.data.RowInstance` or :class:`numpy.ndarray`
:param e2: optional second argument for data instances if provided,
distances between each pair, where first item is from e1 and
second is from e2, are calculated
:type e2: :class:`Orange.data.Table` or
:class:`Orange.data.RowInstance` or :class:`numpy.ndarray`
:param axis: if axis=1 we calculate distances between rows, if axis=0
we calculate distances between columns
:type axis: int
:param impute: if impute=True all NaN values in matrix are replaced
with 0
:type impute: bool
:return: the matrix with distances between given examples
:rtype: :class:`Orange.misc.distmatrix.DistMatrix`'

def __call__(self, e1, e2=None, axis=1, impute=False):

    raise NotImplementedError('Distance    is    an    abstract    class    and    should    not    be    used    directly.')
