docs: def getclusters(self, count):
          """
          Generates *count* clusters.
  
          :param count: The amount of clusters that should be generated.  count
              must be greater than ``1``.
          :raises ClusteringError: if *count* is out of bounds.
          """
  
          # only proceed if we got sensible input
          if count <= 1:
              raise ClusteringError("When clustering, you need to ask for at "
                                    "least two clusters! "
                                    "You asked for %d" % count)
  
          # return the data straight away if there is nothing to cluster
          if (self.__data == [] or len(self.__data) == 1 or
                  count == self.__initial_length):
              return self.__data
  
          # It makes no sense to ask for more clusters than data-items available
          if count > self.__initial_length:
              raise ClusteringError(
                  "Unable to generate more clusters than "
                  "items available. You supplied %d items, and asked for "
                  "%d clusters." % (self.__initial_length, count))
  
          self.initialise_clusters(self.__data, count)
  
          items_moved = True  # tells us if any item moved between the clusters,
                              # as we initialised the clusters, we assume that
                              # is the case
  
          while items_moved is True:
              items_moved = False
              for cluster in self.__clusters:
                  for item in cluster:
                      res = self.assign_item(item, cluster)
                      if items_moved is False:
                          items_moved = res
          return self.__clusters