Metadata-Version: 2.5
Name: altar-cherimoya
Version: 0.1.0
Summary: Cherimoya model binding for Altar
Project-URL: Documentation, https://kundajelab.github.io/altar/
Project-URL: Issues, https://github.com/kundajelab/altar/issues
Project-URL: Repository, https://github.com/kundajelab/altar
Author: Riya Sinha
License-Expression: MIT
License-File: LICENSE
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
Classifier: Typing :: Typed
Requires-Python: >=3.12
Requires-Dist: altar<0.2,>=0.1
Provides-Extra: test
Requires-Dist: pytest-asyncio>=0.24; extra == 'test'
Requires-Dist: pytest>=8; extra == 'test'
Description-Content-Type: text/markdown

# Altar Cherimoya binding

`altar-cherimoya` is the lightweight control-plane binding between Altar and the Cherimoya variant-effect
runtime. Installing it registers `CHERIMOYA` in the canonical `altar.model_plugins` discovery group.

The binding owns Cherimoya's artifact schema, score schema, prioritization predicate, resource requests, and
backend-neutral container plan. It does not import PyTorch, Cherimoya, a model registry, object-storage SDK,
or compute-provider SDK. The heavyweight `cherimoya-score` CLI and independently locked image live under
`runtimes/cherimoya` in this repository.

```bash
pip install altar-cherimoya
```

```python
from altar.models import get_model_plugin

plugin = get_model_plugin("CHERIMOYA")
```

`CherimoyaConfiguration.image` defaults to the immutable runtime digest tested with the installed binding.
Callers may override it with another `name@sha256:<digest>` image reference; mutable tags remain invalid. Its
`weights` tuple contains one generic `ResourceReference` per fold, each with a required SHA-256 digest. The
URI may be local, HTTPS, GCS, S3, Hugging Face, or any other location understood by the selected storage
adapter. The digest, not the location, defines scientific identity. Mutable images and unidentified weight
bytes fail validation before a plan can be built.

The binding emits one GPU scoring task per weight resource followed by one CPU summarize task. Every weight
is staged to a stable logical path, and the runtime receives only that mounted path and expected digest. It
does not download weights or know which provider stored them.

The runtime streams large variant files in fixed outer batches and validates CATv1's single-track output
contract. `profile_l1` is defined over softmax-normalized profile distributions.

The tests compose `altar.testing.ModelResultContract` and `ContainerScorerContract` and fake only the outer
Modal and Kubernetes clients, so they verify both result semantics and the plan/fan-in contract without an
ML framework, cloud account, cluster, GPU, or image pull.
