docs: public static <C extends Model> void logClusterSizes(Clustering<C> c) {
      if(!LOG.isStatistics()) {
        return;
      }
      final List<Cluster<C>> clusters = c.getAllClusters();
      final int numc = clusters.size();
      LOG.statistics(new StringStatistic(PREFIX + "name", c.getLongName()));
      LOG.statistics(new LongStatistic(PREFIX + "clusters", numc));
      Hierarchy<Cluster<C>> h = c.getClusterHierarchy();
      int cnum = 0;
  
      for(Cluster<C> clu : clusters) {
        final String p = PREFIX + "cluster-" + cnum + ".";
        if(clu.getName() != null) {
          LOG.statistics(new StringStatistic(p + "name", clu.getName()));
        }
        LOG.statistics(new LongStatistic(p + "size", clu.size()));
        if(clu.isNoise()) {
          LOG.statistics(new StringStatistic(p + "noise", "true"));
        }
        if(h.numChildren(clu) > 0) {
          // TODO: this only works if we have cluster names!
          StringBuilder buf = new StringBuilder();
          for(It<Cluster<C>> it = h.iterChildren(clu); it.valid(); it.advance()) {
            if(buf.length() > 0) {
              buf.append(", ");
            }
            buf.append(it.get().getName());
          }
          LOG.statistics(new StringStatistic(p + "children", buf.toString()));
        }
        // TODO: also log parents?
        ++cnum;
      }
    }