IsoVita
Interpretable detection of temporal variation in isoform composition.
Citation: TBD.
IsoVita learns one interpretable transcript balance per gene, then tests its association with age using complementary discrete (changepoint) and continuous (spline) tests. Both use selection-aware age permutations and separate Benjamini–Hochberg correction. A gene may be detected by either or both.
Installation
Requires Python 3.10-3.12.
pip install isovita
Optional extras: isovita[adata] for AnnData input and isovita[notebook] for
Jupyter. The supported IsoPlex dependency requires NumPy <2 and pandas <3.
Quick start
Prepare two tables:
- TPM:
gene_id, uniquetranscript_id, then sample columns containing finite, nonnegative transcript TPM. - Metadata: unique
sample_idand finite numericage, with rows in exactly the same order as the TPM sample columns.
Remove missing/empty IDs and nonfinite ages before analysis. Use consistent age units.
import pandas as pd
from isovita import (
IsoVitaConfig, PermutationInferenceConfig,
run_isovita_pipeline, save_isovita_pipeline_outputs,
)
tpm = pd.read_csv("tpm.tsv", sep="\t")
metadata = pd.read_csv("metadata.tsv", sep="\t")
config = IsoVitaConfig(
inference=PermutationInferenceConfig(n_permutations=5000, random_seed=17)
)
result = run_isovita_pipeline(
tpm=tpm, metadata=metadata,
branches=("discrete", "continuous"), config=config, n_jobs=1,
)
print(result.final_features)
save_isovita_pipeline_outputs(result, "isovita_results")
The self-contained quick-start notebook demonstrates preparation, inference, balance interpretation, plotting, and optional windows using synthetic data. Its 99 permutations are for demonstration only. After installing the notebook extra, register a kernel from the same Python environment:
python -m ipykernel install --user --name isovita --display-name "Python (IsoVita)"
For raw expression and transcript-to-gene mapping, use
prepare_isovita_inputs_from_expression. Expression has tx_id plus sample
columns; the mapping has tx_id and gene_id. The function aligns samples,
annotates genes, and retains postnatal samples by default, returning .tpm,
.metadata, and .summary. prepare_isovita_inputs accepts AnnData
obsm["abundance"]; see isovita-prepare --help for the preparation CLI.
Results
| Attribute | Contents |
|---|---|
balance_summary, balance_loadings |
Selected A/B transcript groups, PC1 loadings, and fit diagnostics. |
balance_feature_matrix |
Genes × samples; natural-log ratio log(GM(A) / GM(B)). |
discrete_trajectory_results |
Changepoints, effects, statistics, and p/q values. |
continuous_trajectory_results |
Spline statistics, fit diagnostics, and p/q values. |
gene_trajectory_summary, final_features |
Combined global evidence and ranked discoveries. |
p_value is selection-aware; analytic_p_value is diagnostic only. Check tested
and balance status. Significant subsets are available in the corresponding
*_trajectory_candidates tables.
Optional age windows
from dataclasses import replace
from isovita import WindowConfig
window_result = run_isovita_pipeline(
tpm=tpm, metadata=metadata,
branches=("discrete", "continuous", "localized"),
config=replace(config, windows=WindowConfig(edges=(20, 40, 60, 85))),
)
The localized flag runs both tests within predefined windows. Balances and
IsoPlex membership are learned globally; permutations shuffle ages across the
full cohort and relearn the balance. BH correction pools gene × window tests
separately for each detector. Intervals are left-closed/right-open, except the
final upper edge is included. Small or degenerate windows are untestable.
Results appear in localized_discrete_results and localized_continuous_results
and their candidate tables; they do not enter final_features.
Metadata
Release files for isovita 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| isovita-0.1.0.tar.gz | 286.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| isovita-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 326.9 kB
Release files / isovita-0.1.0.tar.gz
| Download URL | isovita-0.1.0.tar.gz |
|---|---|
| Size | 286.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
45267e154217bec459b7df9d015492dc35685a175f384b2b44d22469baa32d42
|
|
BLAKE2b-256 checksum How to use checksums |
723533e6e24bfccaec08a46d3a61ebf0bba711fc6ef33c64658e3ab95fca5fba
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.
Transparency logRelease files / isovita-0.1.0-py3-none-any.whl
| Download URL | isovita-0.1.0-py3-none-any.whl |
|---|---|
| Size | 40.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2e936ac650c1bf76e74f11a36dfc8a4d3d2327f2ccd7d95eac2eadfb51c1bb83
|
|
BLAKE2b-256 checksum How to use checksums |
ed6f4e5909dff69fb596b461e3a2a5655a0c899f1fe9d65b32f432691350b8d1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.
Transparency log