Metadata-Version: 2.4
Name: paradise-prognosis
Version: 0.1.0
Summary: Adaptive multimodal fusion with missing-modality robustness for breast cancer prognosis
Author-email: Yudha Islami Sulistya <yudhamaster77@gmail.com>
Project-URL: Homepage, https://github.com/yudhaislamisulistya/prx-external
Project-URL: Repository, https://github.com/yudhaislamisulistya/prx-external
Project-URL: Issues, https://github.com/yudhaislamisulistya/prx-external/issues
Keywords: multimodal-learning,survival-analysis,missing-modality,breast-cancer,pytorch
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Science/Research
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: Scientific/Engineering :: Medical Science Apps.
Requires-Python: >=3.10
Description-Content-Type: text/markdown
Requires-Dist: numpy>=1.23
Requires-Dist: pandas>=1.5
Requires-Dist: scikit-learn>=1.2
Requires-Dist: torch>=2.0
Provides-Extra: dev
Requires-Dist: build>=1.2; extra == "dev"
Requires-Dist: twine>=5; extra == "dev"

# PARADISE Prognosis

`paradise-prognosis` is the reusable research framework for **Adaptive
Multimodal Fusion with Missing-Modality Robustness for Breast Cancer
Prognosis**. It provides the method-level building blocks used by PARADISE:

- train-only clinical and genomic preprocessing;
- modality-specific encoders with 128-dimensional embeddings;
- mask-aware cross-attention and dynamic modality weighting;
- modality dropout and controlled missing-modality scenarios;
- cross-modal reconstruction loss;
- Cox proportional-hazards training utilities;
- censoring-aware C-index, time-dependent AUC, Brier score, and IBS;
- comparable fusion ablations: concatenation, mean, cross-attention,
  dynamic weighting, and the proposed combined method.

The package contains code only. It does **not** redistribute TCGA, CPTAC,
METABRIC, TCIA, patient data, model weights, or notebook outputs.

## Install

```bash
python -m pip install paradise-prognosis
```

Check the installation:

```bash
paradise-prognosis info
```

## Minimal model example

```python
import torch
from paradise_prognosis import AdaptiveMultimodalSurvivalNet

dims = {
    "clinical": 697,
    "genomic": 1000,
    "histopathology": 512,
    "radiology": 9,
}
model = AdaptiveMultimodalSurvivalNet(dims, d_model=128)

batch = {name: torch.randn(8, dim) for name, dim in dims.items()}
mask = torch.tensor([
    [1, 1, 1, 1],
    [1, 1, 0, 0],
    [1, 0, 1, 0],
    [1, 0, 0, 1],
    [0, 1, 1, 0],
    [0, 1, 0, 1],
    [0, 0, 1, 1],
    [1, 1, 1, 0],
], dtype=torch.bool)

risk, modality_weights = model(batch, mask)
assert risk.shape == (8,)
assert modality_weights.shape == (8, 4)
```

## Leakage-safe preprocessing

Fit preprocessing objects on the training split only, then call `transform`
for validation, test, and external cohorts:

```python
from paradise_prognosis import ClinicalPreprocessor

prep = ClinicalPreprocessor(max_categories=20)
X_train = prep.fit_transform(train_features)
X_val = prep.transform(validation_features)
X_test = prep.transform(test_features)
```

## Survival evaluation

```python
from paradise_prognosis import evaluate_survival

result = evaluate_survival(
    train_times,
    train_events,
    train_risks,
    test_times,
    test_events,
    test_risks,
    horizons=[12, 24, 36],
)
print(result.as_dict())
```

`time_auc`, Brier scores, and IBS account for censoring using the censoring
distribution estimated from the training cohort.

## Research-use boundary

This is research software, not a medical device. Do not use its outputs for
clinical decisions without independent validation, calibration, governance,
and the approvals required in the intended setting.

