+def do_affinity_clustering(damping, convergence_iter, preference_quantile, name, mat, subreddits, max_iter, outdir:Path, random_state, verbose, alt_mat, overwrite=False):
+ if name is None:
+ name = f"damping-{damping}_convergenceIter-{convergence_iter}_preferenceQuantile-{preference_quantile}"
+ print(name)
+ sys.stdout.flush()
+ outpath = outdir / (str(name) + ".feather")
+ outpath.parent.mkdir(parents=True,exist_ok=True)
+ print(outpath)
+ clustering = _affinity_clustering(mat, outpath, damping, max_iter, convergence_iter, preference_quantile, random_state, verbose)
+ cluster_data = process_clustering_result(clustering, subreddits)
+ mat = sim_to_dist(clustering.affinity_matrix_)
+
+ try:
+ score = silhouette_score(mat, clustering.labels_, metric='precomputed')
+ except ValueError:
+ score = None
+
+ if alt_mat is not None:
+ alt_distances = sim_to_dist(alt_mat)
+ try:
+ alt_score = silhouette_score(alt_mat, clustering.labels_, metric='precomputed')
+ except ValueError:
+ alt_score = None
+
+ res = affinity_clustering_result(outpath=outpath,
+ damping=damping,
+ max_iter=max_iter,
+ convergence_iter=convergence_iter,
+ preference_quantile=preference_quantile,
+ silhouette_score=score,
+ alt_silhouette_score=score,
+ name=str(name))