kBET metrics does not work with scipy==1.14.0
Opened this issue · 1 comments
kollo97 commented
Hi,
first of all I want to say that this is a great tool!
I ran into an error related to the recently released scipy version 1.14.0.
When trying to calculate the kBET score of an integration, I currently get the following error:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Cell In[49], line 17
1 selected_metrics = {
2 'ari_' : True,
3 'nmi_' : True,
(...)
15 'n_cores' : 20
16 }
---> 17 metrics_seurat_all = scib.metrics.metrics(adata, adata_seurat, batch_key, label_key, embed = 'X_pca', **selected_metrics)
18 metrics_harmony_all = scib.metrics.metrics(adata, adata_harmony, batch_key, label_key, embed = 'X_harmony', **selected_metrics)
19 metrics_hvg_all = scib.metrics.metrics(adata, adata_hvg, batch_key, label_key, embed = 'X_pca', **selected_metrics)
File ~/miniforge3/envs/angl_BM/lib/python3.12/site-packages/scib/metrics/metrics.py:407, in metrics(adata, adata_int, batch_key, label_key, embed, cluster_key, cluster_nmi, ari_, nmi_, nmi_method, nmi_dir, silhouette_, si_metric, pcr_, cell_cycle_, organism, hvg_score_, isolated_labels_, isolated_labels_f1_, isolated_labels_asw_, n_isolated, graph_conn_, trajectory_, kBET_, lisi_graph_, ilisi_, clisi_, subsample, n_cores, type_, verbose)
405 if kBET_:
406 print("kBET...")
--> 407 kbet_score = kBET(
408 adata_int,
409 batch_key=batch_key,
410 label_key=label_key,
411 type_=type_,
412 embed=embed,
413 scaled=True,
414 verbose=verbose,
415 )
416 else:
417 kbet_score = np.nan
File ~/miniforge3/envs/angl_BM/lib/python3.12/site-packages/scib/metrics/kbet.py:173, in kBET(adata, batch_key, label_key, type_, embed, scaled, return_df, verbose)
170 nn_index_tmp[:] = np.nan
172 try:
--> 173 nn_index_tmp[idx_nonan] = diffusion_nn(
174 adata_sub_sub, k=k0
175 ).astype("float")
176 # call kBET
177 score = kBET_single(
178 matrix=matrix,
179 batch=adata_sub.obs[batch_key],
(...)
183 k0=k0,
184 )
File ~/miniforge3/envs/angl_BM/lib/python3.12/site-packages/scib/metrics/utils.py:141, in diffusion_nn(adata, k, max_iterations)
134 raise NeighborsError(
135 f"could not find {k} nearest neighbors in {max_iterations}"
136 "diffusion steps.\n Please increase max_iterations or reduce"
137 " k.\n"
138 )
140 M.setdiag(0)
--> 141 k_indices = np.argpartition(M.A, -k, axis=1)[:, -k:]
143 return k_indices
AttributeError: 'csr_matrix' object has no attribute 'A'
After a quick search, I found that this was most likely related to my currently installed scipy version 1.14.0. As described in the following issue and release notes of scipy v1.14.0, the .A
attribute of a csr_matrix has been deprecated in this release.
scipy/scipy#21049
https://github.com/scipy/scipy/releases/tag/v1.14.0
Downgrading the scipy version to v1.13.0 solved the issue for me.
Best regards!