From d957bc1c37fdc664c1cea7071348b96e9ea4f3f5 Mon Sep 17 00:00:00 2001 From: Henry Webel Date: Tue, 10 Mar 2026 16:19:45 +0100 Subject: [PATCH 01/10] =?UTF-8?q?=F0=9F=9A=A7=20start=20adding=20core=20mo?= =?UTF-8?q?dules=20per=20default?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - in the future with the default dependencies --- src/acore/__init__.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/acore/__init__.py b/src/acore/__init__.py index e006f26a..7432c957 100644 --- a/src/acore/__init__.py +++ b/src/acore/__init__.py @@ -2,5 +2,7 @@ import dsp_pandas # sets up pandas formatting options -__all__ = ["dsp_pandas"] +from . import decomposition, imputation_analysis + +__all__ = ["dsp_pandas", "decomposition", "imputation_analysis"] __version__ = version("acore") From c8defa06bb03654ebe7812e085a0c4b6527d51de Mon Sep 17 00:00:00 2001 From: Henry Webel Date: Mon, 15 Jun 2026 11:54:45 +0200 Subject: [PATCH 02/10] :memo: describe dependencies and identify core modules - core modules dependencies should be installed always - the other should only be installed on request --- pyproject.toml | 33 ++++++++++++++++++++++----------- src/acore/__init__.py | 27 +++++++++++++++++++++++++-- 2 files changed, 47 insertions(+), 13 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index b6f5336a..87f48ef1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,27 +23,38 @@ classifiers = [ dependencies = [ "numpy", + # pandas stuff "pandas", - "dsp-pandas", # has only pandas related dependencies + "dsp-pandas", # https://github.com/biosustain/dsp_pandas (import dsp_pandas) + # Multi-Omics-Analysis group packages "vuecore", "scipy", "scikit-learn>=1.5", - "networkx", - "biopython", - "combat", + # enrichment analysis dependencies "gseapy!=1.1.5", - "kmapper", - "lifelines", - "pingouin<0.6.0", # ToDo: update column name changes, https://pingouin-stats.org/changelog.html#v0-6-0-february-2026 - "python-louvain", - "PyWGCNA!=2.2.0", # to fix. - "snfpy", + "pingouin<0.6.0", # ToDo: update column name changes, https://pingouin-stats.org/changelog.html#v0-6-0-february-2026 "umap-learn", "statsmodels", - "inmoose", # combat batch correction + # batch correction dependencies + "combat", + "inmoose", # combat batch correction + # io dependencies "requests", "rarfile", + # types "pandera", + # Publication analysis dependencies + "biopython", + # Topological Data Analysis + # network analysis dependencies + "python-louvain", # community detection for network analysis (import community) + "PyWGCNA!=2.2.0", # to fix. + # Kaplan-Meier-analysis dependencies + "lifelines", + "kmapper", + # network_analysis dependencies + "snfpy", + "networkx", ] [project.optional-dependencies] diff --git a/src/acore/__init__.py b/src/acore/__init__.py index 7432c957..8bc8c8e3 100644 --- a/src/acore/__init__.py +++ b/src/acore/__init__.py @@ -2,7 +2,30 @@ import dsp_pandas # sets up pandas formatting options -from . import decomposition, imputation_analysis +from . import ( + batch_correction, + decomposition, + enrichment_analysis, + exploratory_analysis, + filter_metabolomics, + imputation_analysis, + io, + multiple_testing, + normalization, + types, +) -__all__ = ["dsp_pandas", "decomposition", "imputation_analysis"] +__all__ = [ + "dsp_pandas", + "decomposition", + "imputation_analysis", + "io", + "enrichment_analysis", + "filter_metabolomics", + "batch_correction", + "exploratory_analysis", + "multiple_testing", + "normalization", + "types", +] __version__ = version("acore") From 7ed6fec859f81b8a613dfcd814902fe0c59cbdc2 Mon Sep 17 00:00:00 2001 From: Henry Webel Date: Mon, 15 Jun 2026 13:22:20 +0200 Subject: [PATCH 03/10] :zap::wrench: remove some default imports --- pyproject.toml | 26 +++++++++++---------- src/acore/__init__.py | 2 ++ src/acore/kaplan_meier_analysis/__init__.py | 12 ++++++++-- src/acore/network_analysis/__init__.py | 14 ++++++++--- src/acore/publications_analysis/__init__.py | 11 ++++++++- src/acore/tda_analysis/__init__.py | 9 ++++++- 6 files changed, 55 insertions(+), 19 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 87f48ef1..f50366b1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -43,18 +43,6 @@ dependencies = [ "rarfile", # types "pandera", - # Publication analysis dependencies - "biopython", - # Topological Data Analysis - # network analysis dependencies - "python-louvain", # community detection for network analysis (import community) - "PyWGCNA!=2.2.0", # to fix. - # Kaplan-Meier-analysis dependencies - "lifelines", - "kmapper", - # network_analysis dependencies - "snfpy", - "networkx", ] [project.optional-dependencies] @@ -81,6 +69,20 @@ dev = [ "ipykernel", ] +all = [ # Publication analysis dependencies + "biopython", + # Topological Data Analysis + # network analysis dependencies + "python-louvain", # community detection for network analysis (import community) + "networkx", + # "PyWGCNA!=2.2.0", # not used? + # Kaplan-Meier-analysis dependencies + "lifelines", + "kmapper", + # network_analysis dependencies + "snfpy", +] + [project.urls] Homepage = "https://github.com/Multiomics-Analytics-Group/acore" Issues = "https://github.com/Multiomics-Analytics-Group/acore/issues" diff --git a/src/acore/__init__.py b/src/acore/__init__.py index 8bc8c8e3..f7836301 100644 --- a/src/acore/__init__.py +++ b/src/acore/__init__.py @@ -13,6 +13,7 @@ multiple_testing, normalization, types, + utils, ) __all__ = [ @@ -27,5 +28,6 @@ "multiple_testing", "normalization", "types", + "utils", ] __version__ = version("acore") diff --git a/src/acore/kaplan_meier_analysis/__init__.py b/src/acore/kaplan_meier_analysis/__init__.py index 2fd8e2b1..6dd4256d 100644 --- a/src/acore/kaplan_meier_analysis/__init__.py +++ b/src/acore/kaplan_meier_analysis/__init__.py @@ -1,6 +1,14 @@ import pandas as pd -from lifelines import KaplanMeierFitter, NelsonAalenFitter -from lifelines.statistics import multivariate_logrank_test + +try: + from lifelines import KaplanMeierFitter, NelsonAalenFitter + from lifelines.statistics import multivariate_logrank_test +except ImportError as e: + raise ImportError( + "Error importing lifelines module. Make sure lifelines is installed. " + "Install it with: pip install 'acore[all]'" + "\n\n Error: {}".format(e) + ) def get_data_ready_for_km(dfs_dict, args): diff --git a/src/acore/network_analysis/__init__.py b/src/acore/network_analysis/__init__.py index a19ab528..67071ef1 100644 --- a/src/acore/network_analysis/__init__.py +++ b/src/acore/network_analysis/__init__.py @@ -1,7 +1,15 @@ -import community -import networkx as nx +try: + import community + import networkx as nx + import snf +except ImportError as e: + raise ImportError( + "Error importing community module. Make sure python-louvain is installed. " + "Install it with: pip install 'acore[all]'" + "\n\n Error: {}".format(e) + ) + import pandas as pd -import snf from sklearn import cluster from sklearn.cluster import AffinityPropagation diff --git a/src/acore/publications_analysis/__init__.py b/src/acore/publications_analysis/__init__.py index e7fc4d07..bb8b9ca1 100644 --- a/src/acore/publications_analysis/__init__.py +++ b/src/acore/publications_analysis/__init__.py @@ -1,7 +1,16 @@ from urllib import error import pandas as pd -from Bio import Entrez, Medline + +try: + from Bio import Entrez, Medline +except ImportError as e: + raise ImportError( + "Error importing Bio modules. Make sure biopython is installed. " + "Install it with: pip install biopython" + "\n\n Error: {}".format(e) + ) + # TODO: This should probably be changed to the email of the person installing ckg? Entrez.email = "kg@dtu.dk" diff --git a/src/acore/tda_analysis/__init__.py b/src/acore/tda_analysis/__init__.py index f5da97b1..177f0595 100644 --- a/src/acore/tda_analysis/__init__.py +++ b/src/acore/tda_analysis/__init__.py @@ -1,4 +1,11 @@ -import kmapper as km +try: + import kmapper as km +except ImportError as e: + raise ImportError( + "Error importing kmapper module. Make sure kmapper is installed. " + "Install it with: pip install 'acore[all]'" + "\n\n Error: {}".format(e) + ) import numpy as np from sklearn import cluster, ensemble From 9d81c25184c63c8635d7590301d5860e83950fe4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 15 Jun 2026 11:24:26 +0000 Subject: [PATCH 04/10] docs: update markdown reference --- .../acore.kaplan_meier_analysis.md | 10 --- docs/markdown_ref/acore.md | 13 ---- docs/markdown_ref/acore.network_analysis.md | 69 ------------------- .../acore.publications_analysis.md | 26 ------- docs/markdown_ref/acore.tda_analysis.md | 12 ---- docs/markdown_ref/modules.md | 13 ---- 6 files changed, 143 deletions(-) diff --git a/docs/markdown_ref/acore.kaplan_meier_analysis.md b/docs/markdown_ref/acore.kaplan_meier_analysis.md index 12941f19..bee334c8 100644 --- a/docs/markdown_ref/acore.kaplan_meier_analysis.md +++ b/docs/markdown_ref/acore.kaplan_meier_analysis.md @@ -1,11 +1 @@ # acore.kaplan_meier_analysis package - -### get_data_ready_for_km(dfs_dict, args) - -### group_data_based_on_marker(df, marker, index_col, how, value) - -### run_km(data, time_col, event_col, group_col, args={}) - -### get_km_results(df, group_col, time_col, event_col) - -### get_hazard_ratio_results(df, group_col, time_col, event_col) diff --git a/docs/markdown_ref/acore.md b/docs/markdown_ref/acore.md index 5c0f05fa..e33c1f46 100644 --- a/docs/markdown_ref/acore.md +++ b/docs/markdown_ref/acore.md @@ -119,11 +119,6 @@ * [acore.io.uncompress module](acore.io.md#module-acore.io.uncompress) * [`unrar()`](acore.io.md#acore.io.uncompress.unrar) * [acore.kaplan_meier_analysis package](acore.kaplan_meier_analysis.md) - * [`get_data_ready_for_km()`](acore.kaplan_meier_analysis.md#acore.kaplan_meier_analysis.get_data_ready_for_km) - * [`group_data_based_on_marker()`](acore.kaplan_meier_analysis.md#acore.kaplan_meier_analysis.group_data_based_on_marker) - * [`run_km()`](acore.kaplan_meier_analysis.md#acore.kaplan_meier_analysis.run_km) - * [`get_km_results()`](acore.kaplan_meier_analysis.md#acore.kaplan_meier_analysis.get_km_results) - * [`get_hazard_ratio_results()`](acore.kaplan_meier_analysis.md#acore.kaplan_meier_analysis.get_hazard_ratio_results) * [acore.multiple_testing package](acore.multiple_testing.md) * [`apply_pvalue_correction()`](acore.multiple_testing.md#acore.multiple_testing.apply_pvalue_correction) * [`apply_pvalue_fdrcorrection()`](acore.multiple_testing.md#acore.multiple_testing.apply_pvalue_fdrcorrection) @@ -134,11 +129,6 @@ * [`get_max_permutations()`](acore.multiple_testing.md#acore.multiple_testing.get_max_permutations) * [`correct_pairwise_ttest()`](acore.multiple_testing.md#acore.multiple_testing.correct_pairwise_ttest) * [acore.network_analysis package](acore.network_analysis.md) - * [`get_network_communities()`](acore.network_analysis.md#acore.network_analysis.get_network_communities) - * [`get_snf_clusters()`](acore.network_analysis.md#acore.network_analysis.get_snf_clusters) - * [`most_central_edge()`](acore.network_analysis.md#acore.network_analysis.most_central_edge) - * [`get_louvain_partitions()`](acore.network_analysis.md#acore.network_analysis.get_louvain_partitions) - * [`run_snf()`](acore.network_analysis.md#acore.network_analysis.run_snf) * [acore.normalization package](acore.normalization.md) * [`normalize_data()`](acore.normalization.md#acore.normalization.normalize_data) * [`normalize_data_per_group()`](acore.normalization.md#acore.normalization.normalize_data_per_group) @@ -153,12 +143,9 @@ * [acore.power_analysis package](acore.power_analysis.md) * [`power_analysis()`](acore.power_analysis.md#acore.power_analysis.power_analysis) * [acore.publications_analysis package](acore.publications_analysis.md) - * [`getMedlineAbstracts()`](acore.publications_analysis.md#acore.publications_analysis.getMedlineAbstracts) - * [`get_publications_abstracts()`](acore.publications_analysis.md#acore.publications_analysis.get_publications_abstracts) * [acore.sklearn package](acore.sklearn.md) * [`transform_DataFrame()`](acore.sklearn.md#acore.sklearn.transform_DataFrame) * [acore.tda_analysis package](acore.tda_analysis.md) - * [`run_mapper()`](acore.tda_analysis.md#acore.tda_analysis.run_mapper) * [acore.types package](acore.types.md) * [`check_numeric_dataframe()`](acore.types.md#acore.types.check_numeric_dataframe) * [`select_numeric_columns()`](acore.types.md#acore.types.select_numeric_columns) diff --git a/docs/markdown_ref/acore.network_analysis.md b/docs/markdown_ref/acore.network_analysis.md index 9b026f86..04ceaacd 100644 --- a/docs/markdown_ref/acore.network_analysis.md +++ b/docs/markdown_ref/acore.network_analysis.md @@ -1,70 +1 @@ # acore.network_analysis package - -### get_network_communities(graph, args) - -Finds communities in a graph using different methods. For more information on the methods visit: - -> - [https://networkx.github.io/documentation/latest/reference/algorithms/generated/networkx.algorithms.community.modularity_max.greedy_modularity_communities.html](https://networkx.github.io/documentation/latest/reference/algorithms/generated/networkx.algorithms.community.modularity_max.greedy_modularity_communities.html) -> - [https://networkx.github.io/documentation/networkx-2.0/reference/algorithms/generated/networkx.algorithms.community.asyn_lpa.asyn_lpa_communities.html](https://networkx.github.io/documentation/networkx-2.0/reference/algorithms/generated/networkx.algorithms.community.asyn_lpa.asyn_lpa_communities.html) -> - [https://networkx.github.io/documentation/latest/reference/algorithms/generated/networkx.algorithms.community.centrality.girvan_newman.html](https://networkx.github.io/documentation/latest/reference/algorithms/generated/networkx.algorithms.community.centrality.girvan_newman.html) -> - [https://networkx.github.io/documentation/latest/reference/generated/networkx.convert_matrix.to_pandas_adjacency.html](https://networkx.github.io/documentation/latest/reference/generated/networkx.convert_matrix.to_pandas_adjacency.html) -* **Parameters:** - * **graph** (*graph*) – networkx graph - * **args** ([*dict*](https://docs.python.org/3/library/stdtypes.html#dict)) – config file arguments -* **Returns:** - Dictionary of nodes and which community they belong to (from 0 to number of communities). - -### get_snf_clusters(data_tuples, num_clusters=None, metric='euclidean', k=5, mu=0.5) - -Cluster samples based on Similarity Network Fusion (SNF) (ref: [https://www.ncbi.nlm.nih.gov/pubmed/24464287](https://www.ncbi.nlm.nih.gov/pubmed/24464287)) - -* **Parameters:** - * **df_tuples** – list of (dataset,metric) tuples - * **index** – how the datasets can be merged (common columns) - * **num_clusters** – number of clusters to be identified, if None, the algorithm finds the best number based on SNF algorithm (recommended) - * **distance_metric** – distance metric used to calculate the sample similarity network - * **k** – number of neighbors used to measure local affinity (KNN) - * **mu** – normalization factor to scale similarity kernel when constructing affinity matrix -* **Return tuple:** - 1) fused_aff: affinity clustered samples, 2) fused_labels: cluster labels, - 3) num_clusters: number of clusters, 4) silhouette: average silhouette score - -### most_central_edge(G) - -Compute the eigenvector centrality for the graph G, and finds the highest value. - -* **Parameters:** - **G** (*graph*) – networkx graph -* **Returns:** - Highest eigenvector centrality value. -* **Return type:** - [float](https://docs.python.org/3/library/functions.html#float) - -### get_louvain_partitions(G, weight) - -Computes the partition of the graph nodes which maximises the modularity (or try..) using the Louvain heuristices. For more information visit [https://python-louvain.readthedocs.io/en/latest/api.html](https://python-louvain.readthedocs.io/en/latest/api.html). - -* **Parameters:** - * **G** (*graph*) – networkx graph which is decomposed. - * **weight** ([*str*](https://docs.python.org/3/library/stdtypes.html#str)) – the key in graph to use as weight. -* **Returns:** - The partition, with communities numbered from 0 to number of communities. -* **Return type:** - [dict](https://docs.python.org/3/library/stdtypes.html#dict) - -### run_snf(df_dict, index, num_clusters=None, distance_metric='euclidean', k_affinity=5, mu_affinity=0.5) - -Runs Similarity Network Fusion: integration of multiple omics datasets to identify -similar samples (clusters) (ref: [https://www.ncbi.nlm.nih.gov/pubmed/24464287](https://www.ncbi.nlm.nih.gov/pubmed/24464287)). -We make use of the pyton version SNFpy ([https://github.com/rmarkello/snfpy](https://github.com/rmarkello/snfpy)) - -* **Parameters:** - * **df_dict** – dictionary of datasets to be used (i.e {‘rnaseq’: rnaseq_data, ‘proteomics’: proteomics_data}) - * **index** – how the datasets can be merged (common columns) - * **num_clusters** – number of clusters to be identified, if None, the algorithm finds the best number based on SNF algorithm (recommended) - * **distance_metric** – distance metric used to calculate the sample similarity network - * **k_affinity** – number of neighbors used to measure local affinity (KNN) - * **mu_ffinity** – normalization factor to scale similarity kernel when constructing affinity matrix -* **Return tuple:** - 1) feature_df: SNF features and mutual information score (MIscore), 2) fused_aff: adjacent similarity matrix, 3)fused_labels: cluster labels, - 4) silhouette: silhouette score diff --git a/docs/markdown_ref/acore.publications_analysis.md b/docs/markdown_ref/acore.publications_analysis.md index 2a26062e..80daf388 100644 --- a/docs/markdown_ref/acore.publications_analysis.md +++ b/docs/markdown_ref/acore.publications_analysis.md @@ -1,27 +1 @@ # acore.publications_analysis package - -### getMedlineAbstracts(idList) - -### get_publications_abstracts(data, publication_col='publication', join_by=['publication', 'Proteins', 'Diseases'], index='PMID') - -Accesses NCBI PubMed over the WWW and retrieves the abstracts corresponding -to a list of one or more PubMed IDs. - -* **Parameters:** - * **data** – pandas dataframe of diseases and publications linked to a list of - proteins (columns: ‘Diseases’, ‘Proteins’, ‘linkout’ and ‘publication’). - * **publication_col** ([*str*](https://docs.python.org/3/library/stdtypes.html#str)) – column label containing PubMed ids. - * **join_by** ([*list*](https://docs.python.org/3/library/stdtypes.html#list)) – column labels to be kept from the input dataframe. - * **index** ([*str*](https://docs.python.org/3/library/stdtypes.html#str)) – column label containing PubMed ids from the NCBI retrieved data. -* **Returns:** - Pandas dataframe with publication information and columns ‘PMID’, ‘abstract’, - ‘authors’, ‘date’, ‘journal’, ‘keywords’, ‘title’, ‘url’, ‘Proteins’ and ‘Diseases’. - -Example: - -```default -result = get_publications_abstracts(data, - publication_col='publication', - join_by=['publication','Proteins','Diseases'], - index='PMID') -``` diff --git a/docs/markdown_ref/acore.tda_analysis.md b/docs/markdown_ref/acore.tda_analysis.md index cc3495b9..b7722634 100644 --- a/docs/markdown_ref/acore.tda_analysis.md +++ b/docs/markdown_ref/acore.tda_analysis.md @@ -1,13 +1 @@ # acore.tda_analysis package - -### run_mapper(data, lenses=['l2norm'], n_cubes=15, overlap=0.5, n_clusters=3, linkage='complete', affinity='correlation') - -* **Parameters:** - * **data** - * **lenses** - * **n_cubes** - * **overlap** - * **n_clusters** - * **linkage** - * **affinity** -* **Returns:** diff --git a/docs/markdown_ref/modules.md b/docs/markdown_ref/modules.md index e02a2444..f0a7f95c 100644 --- a/docs/markdown_ref/modules.md +++ b/docs/markdown_ref/modules.md @@ -78,11 +78,6 @@ * [acore.io.pride module](acore.io.md#module-acore.io.pride) * [acore.io.uncompress module](acore.io.md#module-acore.io.uncompress) * [acore.kaplan_meier_analysis package](acore.kaplan_meier_analysis.md) - * [`get_data_ready_for_km()`](acore.kaplan_meier_analysis.md#acore.kaplan_meier_analysis.get_data_ready_for_km) - * [`group_data_based_on_marker()`](acore.kaplan_meier_analysis.md#acore.kaplan_meier_analysis.group_data_based_on_marker) - * [`run_km()`](acore.kaplan_meier_analysis.md#acore.kaplan_meier_analysis.run_km) - * [`get_km_results()`](acore.kaplan_meier_analysis.md#acore.kaplan_meier_analysis.get_km_results) - * [`get_hazard_ratio_results()`](acore.kaplan_meier_analysis.md#acore.kaplan_meier_analysis.get_hazard_ratio_results) * [acore.multiple_testing package](acore.multiple_testing.md) * [`apply_pvalue_correction()`](acore.multiple_testing.md#acore.multiple_testing.apply_pvalue_correction) * [`apply_pvalue_fdrcorrection()`](acore.multiple_testing.md#acore.multiple_testing.apply_pvalue_fdrcorrection) @@ -93,11 +88,6 @@ * [`get_max_permutations()`](acore.multiple_testing.md#acore.multiple_testing.get_max_permutations) * [`correct_pairwise_ttest()`](acore.multiple_testing.md#acore.multiple_testing.correct_pairwise_ttest) * [acore.network_analysis package](acore.network_analysis.md) - * [`get_network_communities()`](acore.network_analysis.md#acore.network_analysis.get_network_communities) - * [`get_snf_clusters()`](acore.network_analysis.md#acore.network_analysis.get_snf_clusters) - * [`most_central_edge()`](acore.network_analysis.md#acore.network_analysis.most_central_edge) - * [`get_louvain_partitions()`](acore.network_analysis.md#acore.network_analysis.get_louvain_partitions) - * [`run_snf()`](acore.network_analysis.md#acore.network_analysis.run_snf) * [acore.normalization package](acore.normalization.md) * [`normalize_data()`](acore.normalization.md#acore.normalization.normalize_data) * [`normalize_data_per_group()`](acore.normalization.md#acore.normalization.normalize_data_per_group) @@ -106,12 +96,9 @@ * [acore.power_analysis package](acore.power_analysis.md) * [`power_analysis()`](acore.power_analysis.md#acore.power_analysis.power_analysis) * [acore.publications_analysis package](acore.publications_analysis.md) - * [`getMedlineAbstracts()`](acore.publications_analysis.md#acore.publications_analysis.getMedlineAbstracts) - * [`get_publications_abstracts()`](acore.publications_analysis.md#acore.publications_analysis.get_publications_abstracts) * [acore.sklearn package](acore.sklearn.md) * [`transform_DataFrame()`](acore.sklearn.md#acore.sklearn.transform_DataFrame) * [acore.tda_analysis package](acore.tda_analysis.md) - * [`run_mapper()`](acore.tda_analysis.md#acore.tda_analysis.run_mapper) * [acore.types package](acore.types.md) * [`check_numeric_dataframe()`](acore.types.md#acore.types.check_numeric_dataframe) * [`select_numeric_columns()`](acore.types.md#acore.types.select_numeric_columns) From 20ac1af3ef252e2a69b0fe0bc1be7ef64bc04dde Mon Sep 17 00:00:00 2001 From: Henry Webel Date: Mon, 15 Jun 2026 13:33:50 +0200 Subject: [PATCH 05/10] =?UTF-8?q?=F0=9F=94=A7=20move=20vuecore=20to=20docu?= =?UTF-8?q?mentation=20=20deps?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/api_examples/batch_correction.ipynb | 2 +- docs/api_examples/batch_correction.py | 4 ++-- docs/api_examples/diff_regulation_ancova.ipynb | 2 +- docs/api_examples/diff_regulation_ancova.py | 4 ++-- .../diff_regulation_anova_ttest_two_groups.ipynb | 2 +- docs/api_examples/diff_regulation_anova_ttest_two_groups.py | 4 ++-- docs/api_examples/imputation.ipynb | 2 +- docs/api_examples/imputation.py | 2 +- docs/api_examples/normalization_analysis.ipynb | 2 +- docs/api_examples/normalization_analysis.py | 4 ++-- pyproject.toml | 5 +++-- 11 files changed, 17 insertions(+), 16 deletions(-) diff --git a/docs/api_examples/batch_correction.ipynb b/docs/api_examples/batch_correction.ipynb index cf06849a..abd7668e 100644 --- a/docs/api_examples/batch_correction.ipynb +++ b/docs/api_examples/batch_correction.ipynb @@ -27,7 +27,7 @@ }, "outputs": [], "source": [ - "%pip install acore" + "%pip install acore vuecore" ] }, { diff --git a/docs/api_examples/batch_correction.py b/docs/api_examples/batch_correction.py index 158dc70f..2254d17c 100644 --- a/docs/api_examples/batch_correction.py +++ b/docs/api_examples/batch_correction.py @@ -6,7 +6,7 @@ # extension: .py # format_name: percent # format_version: '1.3' -# jupytext_version: 1.19.1 +# jupytext_version: 1.19.3 # kernelspec: # display_name: Python 3 (ipykernel) # language: python @@ -24,7 +24,7 @@ # %% tags=["hide-output"] -# %pip install acore +# %pip install acore vuecore # %% tags=["hide-input"] from typing import Optional diff --git a/docs/api_examples/diff_regulation_ancova.ipynb b/docs/api_examples/diff_regulation_ancova.ipynb index bca0a8b9..b9c4004a 100644 --- a/docs/api_examples/diff_regulation_ancova.ipynb +++ b/docs/api_examples/diff_regulation_ancova.ipynb @@ -32,7 +32,7 @@ }, "outputs": [], "source": [ - "%pip install acore" + "%pip install acore vuecore" ] }, { diff --git a/docs/api_examples/diff_regulation_ancova.py b/docs/api_examples/diff_regulation_ancova.py index 19ece887..c02d381b 100644 --- a/docs/api_examples/diff_regulation_ancova.py +++ b/docs/api_examples/diff_regulation_ancova.py @@ -6,7 +6,7 @@ # extension: .py # format_name: percent # format_version: '1.3' -# jupytext_version: 1.19.1 +# jupytext_version: 1.19.3 # --- # %% [markdown] @@ -27,7 +27,7 @@ # # %% tags=["hide-output"] -# %pip install acore +# %pip install acore vuecore # %% tags=["hide-input"] import dsp_pandas diff --git a/docs/api_examples/diff_regulation_anova_ttest_two_groups.ipynb b/docs/api_examples/diff_regulation_anova_ttest_two_groups.ipynb index a6e4cb7e..57ac5834 100644 --- a/docs/api_examples/diff_regulation_anova_ttest_two_groups.ipynb +++ b/docs/api_examples/diff_regulation_anova_ttest_two_groups.ipynb @@ -29,7 +29,7 @@ }, "outputs": [], "source": [ - "%pip install acore" + "%pip install acore vuecore" ] }, { diff --git a/docs/api_examples/diff_regulation_anova_ttest_two_groups.py b/docs/api_examples/diff_regulation_anova_ttest_two_groups.py index 5a3d96b8..ba0b817b 100644 --- a/docs/api_examples/diff_regulation_anova_ttest_two_groups.py +++ b/docs/api_examples/diff_regulation_anova_ttest_two_groups.py @@ -6,7 +6,7 @@ # extension: .py # format_name: percent # format_version: '1.3' -# jupytext_version: 1.19.1 +# jupytext_version: 1.19.3 # kernelspec: # display_name: .venv # language: python @@ -29,7 +29,7 @@ # # %% tags=["hide-output"] -# %pip install acore +# %pip install acore vuecore # %% tags=["hide-input"] import dsp_pandas diff --git a/docs/api_examples/imputation.ipynb b/docs/api_examples/imputation.ipynb index aacec18b..09631b91 100644 --- a/docs/api_examples/imputation.ipynb +++ b/docs/api_examples/imputation.ipynb @@ -36,7 +36,7 @@ }, "outputs": [], "source": [ - "%pip install acore" + "%pip install acore vuecore" ] }, { diff --git a/docs/api_examples/imputation.py b/docs/api_examples/imputation.py index d92afde8..41b57e4c 100644 --- a/docs/api_examples/imputation.py +++ b/docs/api_examples/imputation.py @@ -33,7 +33,7 @@ # %% tags=["hide-output"] -# %pip install acore +# %pip install acore vuecore # %% tags=["hide-input"] from typing import Optional diff --git a/docs/api_examples/normalization_analysis.ipynb b/docs/api_examples/normalization_analysis.ipynb index e4bdb334..40c82c28 100644 --- a/docs/api_examples/normalization_analysis.ipynb +++ b/docs/api_examples/normalization_analysis.ipynb @@ -31,7 +31,7 @@ }, "outputs": [], "source": [ - "%pip install acore" + "%pip install acore vuecore" ] }, { diff --git a/docs/api_examples/normalization_analysis.py b/docs/api_examples/normalization_analysis.py index 004d5e8a..76ab9c3f 100644 --- a/docs/api_examples/normalization_analysis.py +++ b/docs/api_examples/normalization_analysis.py @@ -6,7 +6,7 @@ # extension: .py # format_name: percent # format_version: '1.3' -# jupytext_version: 1.18.1 +# jupytext_version: 1.19.3 # kernelspec: # display_name: Python 3 (ipykernel) # language: python @@ -23,7 +23,7 @@ # Refers to the [`acore.normalization`](acore.normalization) module. # %% tags=["hide-output"] -# %pip install acore +# %pip install acore vuecore # %% tags=["hide-input"] from typing import Optional diff --git a/pyproject.toml b/pyproject.toml index f50366b1..946078f3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,8 +26,7 @@ dependencies = [ # pandas stuff "pandas", "dsp-pandas", # https://github.com/biosustain/dsp_pandas (import dsp_pandas) - # Multi-Omics-Analysis group packages - "vuecore", + # scientific computing "scipy", "scikit-learn>=1.5", # enrichment analysis dependencies @@ -55,6 +54,8 @@ docs = [ "jupytext", "sphinx-copybutton", "sphinx-llms-txt", + # Multi-Omics-Analysis group package for visualisation of results in the documentation + "vuecore", ] dev = [ "black[jupyter]", From e0ab14d07de5483c7ecb6a0962ee687934bbec87 Mon Sep 17 00:00:00 2001 From: Henry Webel Date: Mon, 15 Jun 2026 13:40:00 +0200 Subject: [PATCH 06/10] :wrench: add all functionality --- .github/workflows/updt_markdowns.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/updt_markdowns.yml b/.github/workflows/updt_markdowns.yml index 4e0d76bf..89111492 100644 --- a/.github/workflows/updt_markdowns.yml +++ b/.github/workflows/updt_markdowns.yml @@ -28,7 +28,7 @@ jobs: - name: Install docs dependencies run: | python -m pip install --upgrade pip - pip install ".[docs]" sphinx-markdown-builder==0.6.9 + pip install ".[docs,all]" sphinx-markdown-builder==0.6.9 - name: Build markdown docs working-directory: docs From ddb30a1f13939e0c2afbf64a35bffe3a32ddf572 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 15 Jun 2026 11:42:11 +0000 Subject: [PATCH 07/10] docs: update markdown reference --- .../acore.kaplan_meier_analysis.md | 10 +++ docs/markdown_ref/acore.md | 13 ++++ docs/markdown_ref/acore.network_analysis.md | 69 +++++++++++++++++++ .../acore.publications_analysis.md | 26 +++++++ docs/markdown_ref/acore.tda_analysis.md | 12 ++++ docs/markdown_ref/modules.md | 13 ++++ 6 files changed, 143 insertions(+) diff --git a/docs/markdown_ref/acore.kaplan_meier_analysis.md b/docs/markdown_ref/acore.kaplan_meier_analysis.md index bee334c8..12941f19 100644 --- a/docs/markdown_ref/acore.kaplan_meier_analysis.md +++ b/docs/markdown_ref/acore.kaplan_meier_analysis.md @@ -1 +1,11 @@ # acore.kaplan_meier_analysis package + +### get_data_ready_for_km(dfs_dict, args) + +### group_data_based_on_marker(df, marker, index_col, how, value) + +### run_km(data, time_col, event_col, group_col, args={}) + +### get_km_results(df, group_col, time_col, event_col) + +### get_hazard_ratio_results(df, group_col, time_col, event_col) diff --git a/docs/markdown_ref/acore.md b/docs/markdown_ref/acore.md index e33c1f46..5c0f05fa 100644 --- a/docs/markdown_ref/acore.md +++ b/docs/markdown_ref/acore.md @@ -119,6 +119,11 @@ * [acore.io.uncompress module](acore.io.md#module-acore.io.uncompress) * [`unrar()`](acore.io.md#acore.io.uncompress.unrar) * [acore.kaplan_meier_analysis package](acore.kaplan_meier_analysis.md) + * [`get_data_ready_for_km()`](acore.kaplan_meier_analysis.md#acore.kaplan_meier_analysis.get_data_ready_for_km) + * [`group_data_based_on_marker()`](acore.kaplan_meier_analysis.md#acore.kaplan_meier_analysis.group_data_based_on_marker) + * [`run_km()`](acore.kaplan_meier_analysis.md#acore.kaplan_meier_analysis.run_km) + * [`get_km_results()`](acore.kaplan_meier_analysis.md#acore.kaplan_meier_analysis.get_km_results) + * [`get_hazard_ratio_results()`](acore.kaplan_meier_analysis.md#acore.kaplan_meier_analysis.get_hazard_ratio_results) * [acore.multiple_testing package](acore.multiple_testing.md) * [`apply_pvalue_correction()`](acore.multiple_testing.md#acore.multiple_testing.apply_pvalue_correction) * [`apply_pvalue_fdrcorrection()`](acore.multiple_testing.md#acore.multiple_testing.apply_pvalue_fdrcorrection) @@ -129,6 +134,11 @@ * [`get_max_permutations()`](acore.multiple_testing.md#acore.multiple_testing.get_max_permutations) * [`correct_pairwise_ttest()`](acore.multiple_testing.md#acore.multiple_testing.correct_pairwise_ttest) * [acore.network_analysis package](acore.network_analysis.md) + * [`get_network_communities()`](acore.network_analysis.md#acore.network_analysis.get_network_communities) + * [`get_snf_clusters()`](acore.network_analysis.md#acore.network_analysis.get_snf_clusters) + * [`most_central_edge()`](acore.network_analysis.md#acore.network_analysis.most_central_edge) + * [`get_louvain_partitions()`](acore.network_analysis.md#acore.network_analysis.get_louvain_partitions) + * [`run_snf()`](acore.network_analysis.md#acore.network_analysis.run_snf) * [acore.normalization package](acore.normalization.md) * [`normalize_data()`](acore.normalization.md#acore.normalization.normalize_data) * [`normalize_data_per_group()`](acore.normalization.md#acore.normalization.normalize_data_per_group) @@ -143,9 +153,12 @@ * [acore.power_analysis package](acore.power_analysis.md) * [`power_analysis()`](acore.power_analysis.md#acore.power_analysis.power_analysis) * [acore.publications_analysis package](acore.publications_analysis.md) + * [`getMedlineAbstracts()`](acore.publications_analysis.md#acore.publications_analysis.getMedlineAbstracts) + * [`get_publications_abstracts()`](acore.publications_analysis.md#acore.publications_analysis.get_publications_abstracts) * [acore.sklearn package](acore.sklearn.md) * [`transform_DataFrame()`](acore.sklearn.md#acore.sklearn.transform_DataFrame) * [acore.tda_analysis package](acore.tda_analysis.md) + * [`run_mapper()`](acore.tda_analysis.md#acore.tda_analysis.run_mapper) * [acore.types package](acore.types.md) * [`check_numeric_dataframe()`](acore.types.md#acore.types.check_numeric_dataframe) * [`select_numeric_columns()`](acore.types.md#acore.types.select_numeric_columns) diff --git a/docs/markdown_ref/acore.network_analysis.md b/docs/markdown_ref/acore.network_analysis.md index 04ceaacd..9b026f86 100644 --- a/docs/markdown_ref/acore.network_analysis.md +++ b/docs/markdown_ref/acore.network_analysis.md @@ -1 +1,70 @@ # acore.network_analysis package + +### get_network_communities(graph, args) + +Finds communities in a graph using different methods. For more information on the methods visit: + +> - [https://networkx.github.io/documentation/latest/reference/algorithms/generated/networkx.algorithms.community.modularity_max.greedy_modularity_communities.html](https://networkx.github.io/documentation/latest/reference/algorithms/generated/networkx.algorithms.community.modularity_max.greedy_modularity_communities.html) +> - [https://networkx.github.io/documentation/networkx-2.0/reference/algorithms/generated/networkx.algorithms.community.asyn_lpa.asyn_lpa_communities.html](https://networkx.github.io/documentation/networkx-2.0/reference/algorithms/generated/networkx.algorithms.community.asyn_lpa.asyn_lpa_communities.html) +> - [https://networkx.github.io/documentation/latest/reference/algorithms/generated/networkx.algorithms.community.centrality.girvan_newman.html](https://networkx.github.io/documentation/latest/reference/algorithms/generated/networkx.algorithms.community.centrality.girvan_newman.html) +> - [https://networkx.github.io/documentation/latest/reference/generated/networkx.convert_matrix.to_pandas_adjacency.html](https://networkx.github.io/documentation/latest/reference/generated/networkx.convert_matrix.to_pandas_adjacency.html) +* **Parameters:** + * **graph** (*graph*) – networkx graph + * **args** ([*dict*](https://docs.python.org/3/library/stdtypes.html#dict)) – config file arguments +* **Returns:** + Dictionary of nodes and which community they belong to (from 0 to number of communities). + +### get_snf_clusters(data_tuples, num_clusters=None, metric='euclidean', k=5, mu=0.5) + +Cluster samples based on Similarity Network Fusion (SNF) (ref: [https://www.ncbi.nlm.nih.gov/pubmed/24464287](https://www.ncbi.nlm.nih.gov/pubmed/24464287)) + +* **Parameters:** + * **df_tuples** – list of (dataset,metric) tuples + * **index** – how the datasets can be merged (common columns) + * **num_clusters** – number of clusters to be identified, if None, the algorithm finds the best number based on SNF algorithm (recommended) + * **distance_metric** – distance metric used to calculate the sample similarity network + * **k** – number of neighbors used to measure local affinity (KNN) + * **mu** – normalization factor to scale similarity kernel when constructing affinity matrix +* **Return tuple:** + 1) fused_aff: affinity clustered samples, 2) fused_labels: cluster labels, + 3) num_clusters: number of clusters, 4) silhouette: average silhouette score + +### most_central_edge(G) + +Compute the eigenvector centrality for the graph G, and finds the highest value. + +* **Parameters:** + **G** (*graph*) – networkx graph +* **Returns:** + Highest eigenvector centrality value. +* **Return type:** + [float](https://docs.python.org/3/library/functions.html#float) + +### get_louvain_partitions(G, weight) + +Computes the partition of the graph nodes which maximises the modularity (or try..) using the Louvain heuristices. For more information visit [https://python-louvain.readthedocs.io/en/latest/api.html](https://python-louvain.readthedocs.io/en/latest/api.html). + +* **Parameters:** + * **G** (*graph*) – networkx graph which is decomposed. + * **weight** ([*str*](https://docs.python.org/3/library/stdtypes.html#str)) – the key in graph to use as weight. +* **Returns:** + The partition, with communities numbered from 0 to number of communities. +* **Return type:** + [dict](https://docs.python.org/3/library/stdtypes.html#dict) + +### run_snf(df_dict, index, num_clusters=None, distance_metric='euclidean', k_affinity=5, mu_affinity=0.5) + +Runs Similarity Network Fusion: integration of multiple omics datasets to identify +similar samples (clusters) (ref: [https://www.ncbi.nlm.nih.gov/pubmed/24464287](https://www.ncbi.nlm.nih.gov/pubmed/24464287)). +We make use of the pyton version SNFpy ([https://github.com/rmarkello/snfpy](https://github.com/rmarkello/snfpy)) + +* **Parameters:** + * **df_dict** – dictionary of datasets to be used (i.e {‘rnaseq’: rnaseq_data, ‘proteomics’: proteomics_data}) + * **index** – how the datasets can be merged (common columns) + * **num_clusters** – number of clusters to be identified, if None, the algorithm finds the best number based on SNF algorithm (recommended) + * **distance_metric** – distance metric used to calculate the sample similarity network + * **k_affinity** – number of neighbors used to measure local affinity (KNN) + * **mu_ffinity** – normalization factor to scale similarity kernel when constructing affinity matrix +* **Return tuple:** + 1) feature_df: SNF features and mutual information score (MIscore), 2) fused_aff: adjacent similarity matrix, 3)fused_labels: cluster labels, + 4) silhouette: silhouette score diff --git a/docs/markdown_ref/acore.publications_analysis.md b/docs/markdown_ref/acore.publications_analysis.md index 80daf388..2a26062e 100644 --- a/docs/markdown_ref/acore.publications_analysis.md +++ b/docs/markdown_ref/acore.publications_analysis.md @@ -1 +1,27 @@ # acore.publications_analysis package + +### getMedlineAbstracts(idList) + +### get_publications_abstracts(data, publication_col='publication', join_by=['publication', 'Proteins', 'Diseases'], index='PMID') + +Accesses NCBI PubMed over the WWW and retrieves the abstracts corresponding +to a list of one or more PubMed IDs. + +* **Parameters:** + * **data** – pandas dataframe of diseases and publications linked to a list of + proteins (columns: ‘Diseases’, ‘Proteins’, ‘linkout’ and ‘publication’). + * **publication_col** ([*str*](https://docs.python.org/3/library/stdtypes.html#str)) – column label containing PubMed ids. + * **join_by** ([*list*](https://docs.python.org/3/library/stdtypes.html#list)) – column labels to be kept from the input dataframe. + * **index** ([*str*](https://docs.python.org/3/library/stdtypes.html#str)) – column label containing PubMed ids from the NCBI retrieved data. +* **Returns:** + Pandas dataframe with publication information and columns ‘PMID’, ‘abstract’, + ‘authors’, ‘date’, ‘journal’, ‘keywords’, ‘title’, ‘url’, ‘Proteins’ and ‘Diseases’. + +Example: + +```default +result = get_publications_abstracts(data, + publication_col='publication', + join_by=['publication','Proteins','Diseases'], + index='PMID') +``` diff --git a/docs/markdown_ref/acore.tda_analysis.md b/docs/markdown_ref/acore.tda_analysis.md index b7722634..cc3495b9 100644 --- a/docs/markdown_ref/acore.tda_analysis.md +++ b/docs/markdown_ref/acore.tda_analysis.md @@ -1 +1,13 @@ # acore.tda_analysis package + +### run_mapper(data, lenses=['l2norm'], n_cubes=15, overlap=0.5, n_clusters=3, linkage='complete', affinity='correlation') + +* **Parameters:** + * **data** + * **lenses** + * **n_cubes** + * **overlap** + * **n_clusters** + * **linkage** + * **affinity** +* **Returns:** diff --git a/docs/markdown_ref/modules.md b/docs/markdown_ref/modules.md index f0a7f95c..e02a2444 100644 --- a/docs/markdown_ref/modules.md +++ b/docs/markdown_ref/modules.md @@ -78,6 +78,11 @@ * [acore.io.pride module](acore.io.md#module-acore.io.pride) * [acore.io.uncompress module](acore.io.md#module-acore.io.uncompress) * [acore.kaplan_meier_analysis package](acore.kaplan_meier_analysis.md) + * [`get_data_ready_for_km()`](acore.kaplan_meier_analysis.md#acore.kaplan_meier_analysis.get_data_ready_for_km) + * [`group_data_based_on_marker()`](acore.kaplan_meier_analysis.md#acore.kaplan_meier_analysis.group_data_based_on_marker) + * [`run_km()`](acore.kaplan_meier_analysis.md#acore.kaplan_meier_analysis.run_km) + * [`get_km_results()`](acore.kaplan_meier_analysis.md#acore.kaplan_meier_analysis.get_km_results) + * [`get_hazard_ratio_results()`](acore.kaplan_meier_analysis.md#acore.kaplan_meier_analysis.get_hazard_ratio_results) * [acore.multiple_testing package](acore.multiple_testing.md) * [`apply_pvalue_correction()`](acore.multiple_testing.md#acore.multiple_testing.apply_pvalue_correction) * [`apply_pvalue_fdrcorrection()`](acore.multiple_testing.md#acore.multiple_testing.apply_pvalue_fdrcorrection) @@ -88,6 +93,11 @@ * [`get_max_permutations()`](acore.multiple_testing.md#acore.multiple_testing.get_max_permutations) * [`correct_pairwise_ttest()`](acore.multiple_testing.md#acore.multiple_testing.correct_pairwise_ttest) * [acore.network_analysis package](acore.network_analysis.md) + * [`get_network_communities()`](acore.network_analysis.md#acore.network_analysis.get_network_communities) + * [`get_snf_clusters()`](acore.network_analysis.md#acore.network_analysis.get_snf_clusters) + * [`most_central_edge()`](acore.network_analysis.md#acore.network_analysis.most_central_edge) + * [`get_louvain_partitions()`](acore.network_analysis.md#acore.network_analysis.get_louvain_partitions) + * [`run_snf()`](acore.network_analysis.md#acore.network_analysis.run_snf) * [acore.normalization package](acore.normalization.md) * [`normalize_data()`](acore.normalization.md#acore.normalization.normalize_data) * [`normalize_data_per_group()`](acore.normalization.md#acore.normalization.normalize_data_per_group) @@ -96,9 +106,12 @@ * [acore.power_analysis package](acore.power_analysis.md) * [`power_analysis()`](acore.power_analysis.md#acore.power_analysis.power_analysis) * [acore.publications_analysis package](acore.publications_analysis.md) + * [`getMedlineAbstracts()`](acore.publications_analysis.md#acore.publications_analysis.getMedlineAbstracts) + * [`get_publications_abstracts()`](acore.publications_analysis.md#acore.publications_analysis.get_publications_abstracts) * [acore.sklearn package](acore.sklearn.md) * [`transform_DataFrame()`](acore.sklearn.md#acore.sklearn.transform_DataFrame) * [acore.tda_analysis package](acore.tda_analysis.md) + * [`run_mapper()`](acore.tda_analysis.md#acore.tda_analysis.run_mapper) * [acore.types package](acore.types.md) * [`check_numeric_dataframe()`](acore.types.md#acore.types.check_numeric_dataframe) * [`select_numeric_columns()`](acore.types.md#acore.types.select_numeric_columns) From 6b6f758cd8a3276c5b7a8234a5fdc8c481d3af7a Mon Sep 17 00:00:00 2001 From: Henry Webel Date: Mon, 15 Jun 2026 14:19:20 +0200 Subject: [PATCH 08/10] Improve error messages for missing modules Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- src/acore/kaplan_meier_analysis/__init__.py | 4 ++-- src/acore/network_analysis/__init__.py | 8 ++++---- src/acore/publications_analysis/__init__.py | 4 ++-- src/acore/tda_analysis/__init__.py | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/acore/kaplan_meier_analysis/__init__.py b/src/acore/kaplan_meier_analysis/__init__.py index 6dd4256d..3e8739ab 100644 --- a/src/acore/kaplan_meier_analysis/__init__.py +++ b/src/acore/kaplan_meier_analysis/__init__.py @@ -7,8 +7,8 @@ raise ImportError( "Error importing lifelines module. Make sure lifelines is installed. " "Install it with: pip install 'acore[all]'" - "\n\n Error: {}".format(e) - ) + f"\n\nError: {e}" + ) from e def get_data_ready_for_km(dfs_dict, args): diff --git a/src/acore/network_analysis/__init__.py b/src/acore/network_analysis/__init__.py index 67071ef1..b2c7def1 100644 --- a/src/acore/network_analysis/__init__.py +++ b/src/acore/network_analysis/__init__.py @@ -4,10 +4,10 @@ import snf except ImportError as e: raise ImportError( - "Error importing community module. Make sure python-louvain is installed. " - "Install it with: pip install 'acore[all]'" - "\n\n Error: {}".format(e) - ) + "Error importing network analysis dependencies (community/python-louvain, networkx, snf/snfpy). " + "Install them with: pip install 'acore[all]'" + f"\n\nError: {e}" + ) from e import pandas as pd from sklearn import cluster diff --git a/src/acore/publications_analysis/__init__.py b/src/acore/publications_analysis/__init__.py index bb8b9ca1..8881b94e 100644 --- a/src/acore/publications_analysis/__init__.py +++ b/src/acore/publications_analysis/__init__.py @@ -8,8 +8,8 @@ raise ImportError( "Error importing Bio modules. Make sure biopython is installed. " "Install it with: pip install biopython" - "\n\n Error: {}".format(e) - ) + f"\n\nError: {e}" + ) from e # TODO: This should probably be changed to the email of the person installing ckg? diff --git a/src/acore/tda_analysis/__init__.py b/src/acore/tda_analysis/__init__.py index 177f0595..d8b5bc1d 100644 --- a/src/acore/tda_analysis/__init__.py +++ b/src/acore/tda_analysis/__init__.py @@ -4,8 +4,8 @@ raise ImportError( "Error importing kmapper module. Make sure kmapper is installed. " "Install it with: pip install 'acore[all]'" - "\n\n Error: {}".format(e) - ) + f"\n\nError: {e}" + ) from e import numpy as np from sklearn import cluster, ensemble From 4ed41973d70d5e18438f4e8796081a4cd446a964 Mon Sep 17 00:00:00 2001 From: Henry Webel Date: Mon, 15 Jun 2026 14:21:23 +0200 Subject: [PATCH 09/10] :memo: update description in pyproject toml of optional dependencies --- pyproject.toml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 946078f3..c0842bb2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -70,7 +70,8 @@ dev = [ "ipykernel", ] -all = [ # Publication analysis dependencies +all = [ # Optional dependencies for all non-core analysis modules + # Publication analysis dependencies "biopython", # Topological Data Analysis # network analysis dependencies From cd3938a0a98052619f1102c3ff724543a96745dd Mon Sep 17 00:00:00 2001 From: Henry Webel Date: Mon, 15 Jun 2026 14:47:04 +0200 Subject: [PATCH 10/10] :wrench: vuecore for current version needs all dependencies --- .readthedocs.yaml | 1 + docs/api_examples/enrichment_analysis.ipynb | 3 ++- docs/api_examples/enrichment_analysis.py | 3 ++- src/acore/wgcna_analysis.py | 1 + 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index fe3b295b..bb9584b4 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -32,3 +32,4 @@ python: path: . extra_requirements: - docs + - all diff --git a/docs/api_examples/enrichment_analysis.ipynb b/docs/api_examples/enrichment_analysis.ipynb index c3564abf..f5078817 100644 --- a/docs/api_examples/enrichment_analysis.ipynb +++ b/docs/api_examples/enrichment_analysis.ipynb @@ -32,7 +32,8 @@ }, "outputs": [], "source": [ - "%pip install acore vuecore" + "# ToDo: Improve VueCore dependencies\n", + "%pip install acore vuecore python-louvain snfpy" ] }, { diff --git a/docs/api_examples/enrichment_analysis.py b/docs/api_examples/enrichment_analysis.py index c7d7f342..e89b4be8 100644 --- a/docs/api_examples/enrichment_analysis.py +++ b/docs/api_examples/enrichment_analysis.py @@ -14,7 +14,8 @@ # %% tags=["hide-output"] -# %pip install acore vuecore +# ToDo: Improve VueCore dependencies +# %pip install acore vuecore python-louvain snfpy # %% from pathlib import Path diff --git a/src/acore/wgcna_analysis.py b/src/acore/wgcna_analysis.py index e69de29b..0a9ab4b6 100644 --- a/src/acore/wgcna_analysis.py +++ b/src/acore/wgcna_analysis.py @@ -0,0 +1 @@ +# TODO: only here for vuecore compatibility