Source code for mioXpektron.utils.analysis

#!/usr/bin/env python3
"""
Deprecated study-level analysis entry point.

Use :mod:`mioXpektron.analysis` instead. This module re-exports the public API
and keeps a CLI-compatible ``main()`` for legacy scripts.
"""

from __future__ import annotations

import argparse
import logging
import os
import warnings

import pandas as pd

from mioXpektron.analysis import (
    AnalysisConfig,
    AnalysisWorkflow,
    bh_fdr,
    choose_k_by_pac,
    compute_univariate_tests,
    plot_heatmap_top_features,
    plot_pca,
    plot_umap,
    plot_volcano,
    prepare_matrix,
    run_cnmf,
    save_consensus_heatmap,
    save_factor_bars,
)

warnings.warn(
    "mioXpektron.utils.analysis is deprecated; use mioXpektron.analysis instead.",
    DeprecationWarning,
    stacklevel=2,
)

logger = logging.getLogger(__name__)

__all__ = [
    "AnalysisConfig",
    "AnalysisWorkflow",
    "bh_fdr",
    "choose_k_by_pac",
    "compute_univariate_tests",
    "main",
    "plot_heatmap_top_features",
    "plot_pca",
    "plot_umap",
    "plot_volcano",
    "prepare_matrix",
    "run_cnmf",
    "save_consensus_heatmap",
    "save_factor_bars",
]


def ensure_dir(path: str) -> None:
    os.makedirs(path, exist_ok=True)


[docs] def main( input_file, outdir, topn=25, umap=False, tsne=False, shap=False, cnmf=False, k_list=None, cnmf_reps=30, cnmf_beta="frobenius", ml_benchmark=False, ml_tuning=False, ): """Legacy CLI wrapper around :class:`~mioXpektron.analysis.AnalysisWorkflow`.""" ensure_dir(outdir) df = pd.read_csv(input_file) if "Group" in df.columns: df["Group"] = df["Group"].astype(str).str.strip().str.capitalize() config = AnalysisConfig( outdir=outdir, group_a="Cancer", group_b="Control", reference_group="Control", top_n_features=topn, run_umap=umap, run_tsne=tsne, run_ml_benchmark=ml_benchmark, run_ml_tuning=ml_tuning, run_shap=shap, run_cnmf=cnmf, cnmf_k_list=k_list, cnmf_reps=cnmf_reps, cnmf_beta=cnmf_beta, ) results = AnalysisWorkflow(df, config=config).run() logger.info("Done. Outputs written to: %s", results["outdir"]) return results
if __name__ == "__main__": parser = argparse.ArgumentParser(description="Run mioXpektron analysis workflow") parser.add_argument("--input", required=True, help="Input CSV path") parser.add_argument("--outdir", default="analysis_outputs", help="Output directory") parser.add_argument("--topn", type=int, default=25, help="Top features for heatmap") parser.add_argument("--umap", action="store_true", help="Compute UMAP embedding") parser.add_argument("--tsne", action="store_true", help="Compute t-SNE embedding") parser.add_argument("--shap", action="store_true", help="SHAP explanation for best model") parser.add_argument("--cnmf", action="store_true", help="Run consensus NMF") parser.add_argument("--k_list", nargs="+", type=int, default=None, help="cNMF k values") parser.add_argument("--cnmf_reps", type=int, default=30, help="cNMF repetitions") parser.add_argument("--cnmf_beta", default="frobenius", help="NMF beta loss") parser.add_argument("--ml_benchmark", action="store_true", help="Benchmark classifiers") parser.add_argument("--ml_tuning", action="store_true", help="Tune top tunable classifiers") args = parser.parse_args() main( args.input, args.outdir, topn=args.topn, umap=args.umap, tsne=args.tsne, shap=args.shap, cnmf=args.cnmf, k_list=args.k_list, cnmf_reps=args.cnmf_reps, cnmf_beta=args.cnmf_beta, ml_benchmark=args.ml_benchmark, ml_tuning=args.ml_tuning, )