':param  num_means:  the number of means to use (may use fewer)
:type   num_means:  int
:param  distance:   measure of distance between two vectors
:type   distance:   function taking two vectors and returing a float
:param  repeats:    number of randomised clustering trials to use
:type   repeats:    int
:param  conv_test:  maximum variation in mean differences before
deemed convergent
:type   conv_test:  number
:param  initial_means: set of k initial means
:type   initial_means: sequence of vectors
:param  normalise:  should vectors be normalised to length 1
:type   normalise:  boolean
:param svd_dimensions: number of dimensions to use in reducing vector
dimensionsionality with SVD
:type svd_dimensions: int
:param  rng:        random number generator (or None)
:type   rng:        Random
:param avoid_empty_clusters: include current centroid in computation
of next one; avoids undefined behavior
when clusters become empty
:type avoid_empty_clusters: boolean'

def __init__(self, num_means, distance, repeats=1, conv_test=1e-06, initial_means=None, normalise=False, svd_dimensions=None, rng=None, avoid_empty_clusters=False):

    VectorSpaceClusterer.__init__(self, normalise, svd_dimensions)
    self._num_means = num_means
    self._distance = distance
    self._max_difference = conv_test
    assert ((not initial_means) or (len(initial_means) == num_means))
    self._means = initial_means
    assert (repeats >= 1)
    assert (not (initial_means and (repeats > 1)))
    self._repeats = repeats
    self._rng = (rng if rng else random.Random())
    self._avoid_empty_clusters = avoid_empty_clusters
