Current collected state Current
Observed since 20 Oct, 20:08 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
aeacus
mixture of experts single cell malignancy classifier
pip install aeacus
from source:
git clone https://github.com/pandey-ps/aeacus.git
cd aeacus
pip install -e .
from aeacus import Profiler
result = Profiler(test_input="query.h5ad").load().profile()
result.obs["malignancy_call"].value_counts()
| Format | Notes |
|---|---|
.h5ad | genes in var_names, cells in obs_names |
.txt / .tsv | rows = genes, columns = cells |
.csv | rows = genes, columns = cells |
AnnData object | passed directly |
| Parameter | Default | Description |
|---|---|---|
test_input | required | path to data or AnnData object |
pretrain_dir | auto | path to folder with moe.pt, geneorder.tsv, train_mean.npy, train_std.npy, config.json. |
norm_type | False | normalization to apply before inference (see below) |
use_raw | False | if True, reads from adata.raw.X instead of adata.X |
batch_size | 8192 | cells per batch, lower if out of memory |
device | auto | "cuda" or "cpu" |
norm_typemodel was trained on CPM + log1p normalized data, choose norm_type based on your input:
| Input | norm_type |
|---|---|
raw UMI counts (10x, etc.) | "cpm_log1p" (or True) |
CPM + log1p normalized | False (default) or "already_normalized" |
TPM data (smart-seq, etc.) | "tpm_log1p" |
Examples:
# raw counts - normalize
Profiler(test_input="raw_counts.h5ad", norm_type="cpm_log1p")
# normalized - skip
Profiler(test_input="normalized.h5ad", norm_type=False)
# TPM - log1p
Profiler(test_input="tpm_data.h5ad", norm_type="tpm_log1p")
use_rawuse_raw chooses which data slot to read from:
| Input | use_raw | norm_type |
|---|---|---|
raw counts in .X, no .raw | False | "cpm_log1p" |
raw counts in .raw, normalized in .X | True | "cpm_log1p" |
normalized in .X | False | False |
Example - AnnData with raw counts stored in .raw:
Profiler(
test_input="adata.h5ad",
use_raw=True, # read from adata.raw.X
norm_type="cpm_log1p", # then normalize
)
result = Profiler(test_input="data.h5ad", norm_type="cpm_log1p").load().profile()
all predictions are added to result.obs:
| Column | Description |
|---|---|
malignancy_call | "Malignant" or "Normal" |
malignancy_score | probability per cell |
normal_expert_weight | weight assigned to the normal expert |
malignant_expert_weight | weight assigned to the malignant expert |
result.obs[["malignancy_call", "malignancy_score"]].head()
geneorder.tsv; warning showed if >20% of model genes are missing.Download counts and popularity will appear here as the collector receives them.
| Package / target | Requirement | Relationship |
|---|---|---|
anndataEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | anndata | runtime |
numpyEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | numpy | runtime |
pandasEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | pandas | runtime |
scanpyEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | scanpy | runtime |
scipyEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | scipy | runtime |
torchEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | torch | runtime |
bdist_wheel · 15,575.07 KB · Python py3
sdist · 15,580.14 KB · Python source
Observed since 20 Oct, 20:08 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package_version:efb4f9a16c08ffbe87e5923d70c9f8fab56176dca0c8a8bf39f5565beae6c726