def METHOD_NAME(self):
    """
    If one cluster is empty, the most populated cluster is split into
    two clusters by shifting the respective centroids. This is done
    iteratively for a fixed number of tentatives.
    """
    # empty clusters
    counts = Counter(map(lambda x: x.item(), self.assignments))
    empty_clusters = set(range(self.n_centroids)) - set(counts.keys())
    n_empty_clusters = len(empty_clusters)
    tentatives = 0
    while len(empty_clusters) > 0:
        # given an empty cluster, find most populated cluster and split it into two
        k = random.choice(list(empty_clusters))
        m = counts.most_common(1)[0][0]
        e = torch.randn_like(self.centroids[m]) * self.eps
        self.centroids[k] = self.centroids[m].clone()
        self.centroids[k] += e
        self.centroids[m] -= e
        # recompute assignments
        distances = self.compute_distances()  # (n_centroids x out_features)
        self.assignments = torch.argmin(distances, dim=0)  # (out_features)
        # check for empty clusters
        counts = Counter(map(lambda x: x.item(), self.assignments))
        empty_clusters = set(range(self.n_centroids)) - set(counts.keys())
        # increment tentatives
        if tentatives == self.max_tentatives:
            logging.info(
                f"Could not resolve all empty clusters, {len(empty_clusters)} remaining"
            )
            raise EmptyClusterResolveError
        tentatives += 1
    return n_empty_clusters