docs: def cluster(self, n, embed_dim=None, algo=mds.CLASSICAL, method=methods.KMEANS):
          """
          Cluster the embedded coordinates using multidimensional scaling
  
          Parameters
          ----------
          n:                 int
                             The number of clusters to return
          embed_dim          int
                             The dimensionality of the underlying coordinates
                             Defaults to same value as n
          method:            enum value (methods.KMEANS | methods.GMM)
                             The clustering method to use
  
          Returns
          -------
          Partition: Partition object describing the data partition
          """
          if n == 1:
              return Partition([1] * len(self.get_dm(False)))
  
          if embed_dim is None:
              embed_dim = n
  
          if algo == mds.CLASSICAL:
              self._coords = self.dm.embedding(embed_dim, 'cmds')
          elif algo == mds.METRIC:
              self._coords = self.dm.embedding(embed_dim, 'mmds')
          else:
              raise OptionError(algo, list(mds.reverse.values()))
  
          if method == methods.KMEANS:
              p = self.kmeans(n, self._coords.values)
          elif method == methods.GMM:
              p = self.gmm(n, self._coords.values)
          elif method == methods.WARD:
              linkmat = fastcluster.linkage(self._coords.values, 'ward')
              p = _hclust(linkmat, n)
          else:
              raise OptionError(method, list(methods.reverse.values()))
          #if self._verbosity > 0:
          #    print('Using clustering method: {}'.format(methods.reverse[method]))
          return p