From 2296c7041bae0aecce1ea9d036463d0117ee708f Mon Sep 17 00:00:00 2001 From: aregano Date: Tue, 18 Nov 2025 14:01:26 +0100 Subject: [PATCH 1/3] HNOCA_fixes --- src/hnoca/mapping/mapper.py | 4 ++-- src/hnoca/mapping/wknn.py | 15 +++++++++------ 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/hnoca/mapping/mapper.py b/src/hnoca/mapping/mapper.py index 8020cd5..57d0984 100644 --- a/src/hnoca/mapping/mapper.py +++ b/src/hnoca/mapping/mapper.py @@ -33,8 +33,8 @@ def __init__( ref_model: The reference model to map the query dataset to. """ # Check optional dependencies - check_deps("scvi-tools") - check_deps("scarches") + # check_deps("scvi-tools") # Comment as it is a function that fails to detect scvi-tools was installed + # check_deps("scarches") # Comment as it is a function that fails to detect scArches was installed # Import and store as attributes so other methods can use them import scarches import scvi # local import assured by previous check diff --git a/src/hnoca/mapping/wknn.py b/src/hnoca/mapping/wknn.py index 361329f..c06681e 100644 --- a/src/hnoca/mapping/wknn.py +++ b/src/hnoca/mapping/wknn.py @@ -53,13 +53,15 @@ def build_nn( # noqa: D103 ref, query=None, k=100, - use_rapids: bool = False, + weight: Literal["unweighted", "dist", "gaussian_kernel"] = "unweighted", + sigma=None, + use_rapids: bool = True, # Ensure that RAPIDS is used ): if query is None: query = ref if use_rapids: - check_deps("cuml") + # check_deps("cuml") # Comment check_deps() because the function is broken from cuml.neighbors import NearestNeighbors logger.info("Using cuML for neighborhood estimation on GPU.") @@ -223,9 +225,9 @@ def estimate_presence_score( ref = ref_adata.obsm[use_rep_ref_trans_prop] ref_trans_prop = get_transition_prob_mat(ref, k=k_ref_trans_prop) - if split_by and split_by in query_adata.obs.columns: + if split_by in query_adata.obs.columns: presence_split = [ - np.array(wknn[query_adata.obs[split_by] == x, :].sum(axis=0)).flatten() + np.array(wknn[query_adata.obs[split_by].to_numpy() == x, :].sum(axis=0)).flatten() # added to_numpy() for better compatibility for x in query_adata.obs[split_by].unique() ] else: @@ -270,13 +272,14 @@ def estimate_presence_score( } -def transfer_labels(ref_adata: sc.AnnData, query_adata: sc.AnnData, wknn, label_key: str = "celltype"): +def transfer_labels(ref_adata, query_adata, wknn, label_key="cell_type"): """Transfer labels from reference to query data.""" scores = pd.DataFrame( wknn @ pd.get_dummies(ref_adata.obs[label_key]), columns=pd.get_dummies(ref_adata.obs[label_key]).columns, index=query_adata.obs_names, ) + scores["best_score"] = scores.max(1) # change order, first find the score then the label so no string is inputted among floats scores["best_label"] = scores.idxmax(1) - scores["best_score"] = scores.max(1) + return scores From d183132bc20dcc6a9799a48a663e492be7c3a9af Mon Sep 17 00:00:00 2001 From: aregano Date: Tue, 18 Nov 2025 14:15:11 +0100 Subject: [PATCH 2/3] HNOCA_fixes --- src/hnoca/mapping/wknn.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hnoca/mapping/wknn.py b/src/hnoca/mapping/wknn.py index c06681e..fbbe9fb 100644 --- a/src/hnoca/mapping/wknn.py +++ b/src/hnoca/mapping/wknn.py @@ -272,7 +272,7 @@ def estimate_presence_score( } -def transfer_labels(ref_adata, query_adata, wknn, label_key="cell_type"): +def transfer_labels(ref_adata:sc.AnnData, query_adata:sc.AnnData, wknn, label_key="cell_type"): """Transfer labels from reference to query data.""" scores = pd.DataFrame( wknn @ pd.get_dummies(ref_adata.obs[label_key]), From 40da6cd5213d4b0e1301c75128dfeeb033f6cfc5 Mon Sep 17 00:00:00 2001 From: aregano Date: Tue, 18 Nov 2025 14:18:11 +0100 Subject: [PATCH 3/3] HNOCA_fixes --- src/hnoca/mapping/wknn.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hnoca/mapping/wknn.py b/src/hnoca/mapping/wknn.py index fbbe9fb..dc66210 100644 --- a/src/hnoca/mapping/wknn.py +++ b/src/hnoca/mapping/wknn.py @@ -272,7 +272,7 @@ def estimate_presence_score( } -def transfer_labels(ref_adata:sc.AnnData, query_adata:sc.AnnData, wknn, label_key="cell_type"): +def transfer_labels(ref_adata: sc.AnnData, query_adata: sc.AnnData, wknn, label_key: str ="celltype"): """Transfer labels from reference to query data.""" scores = pd.DataFrame( wknn @ pd.get_dummies(ref_adata.obs[label_key]),