docs: def reconstruct_emds(edm, Om, all_points, method=None, **kwargs):
      """ Reconstruct point set using E(dge)-MDS.
      """
      from .point_set import dm_from_edm
      N = all_points.shape[0]
      d = all_points.shape[1]
      dm = dm_from_edm(edm)
      if method is None:
          from .mds import superMDS
          Xhat, __ = superMDS(all_points[0, :], N, d, Om=Om, dm=dm)
      else:
          C = kwargs.get('C', None)
          b = kwargs.get('b', None)
          if C is None or b is None:
              raise NameError(
                  'Need constraints C and b for reconstruct_emds in iterative mode.')
          KE_noisy = np.multiply(np.outer(dm, dm), Om)
          if method == 'iterative':
              from .mds import iterativeEMDS
              Xhat, __ = iterativeEMDS(
                  all_points[0, :], N, d, KE=KE_noisy, C=C, b=b)
          elif method == 'relaxed':
              from .mds import relaxedEMDS
              Xhat, __ = relaxedEMDS(
                  all_points[0, :], N, d, KE=KE_noisy, C=C, b=b)
          else:
              raise NameError('Undefined method', method)
      Y, R, t, c = procrustes(all_points, Xhat, scale=False)
      return Y