Observed since 21 Oct, 09:36 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
ahcore
Core building blocks for whole-slide-image deep learning pipelines
ahcore is the AI for Oncology core toolkit for computational-pathology pipelines: the reusable building
blocks that sit between whole-slide images and a training run. It is a pure-Python library, meant to be
composed inside a larger pipeline rather than run on its own.
This repository is automatically synced from the AI for Oncology monorepo.
ahcore is a toolkit of composable building blocks for whole-slide-image deep learning, not an end-to-end
application. A consumer pipeline assembles these pieces and owns the experiment logic. It decides how data
is split, whether to cross-validate, and how runs are orchestrated. ahcore provides the parts.
DataManager. ahcore stores and serves splits (e.g. fit/validate/test membership,
or membership supplied in memory). How you draw them is up to you.view → AdapterBundle) that turns them into named, model-ready tensors. Ships adapters for
foundation-model tile features, patient labels, bulk RNA expression, and image+mask pairs. Adapters are
the main extension point.Task protocol (choose inputs and targets, compute loss and
metrics) and a thin MultiModalLightningModule that runs training/validation/test by delegating to the
task. You supply the concrete tasks.ahcore ships no end-to-end command-line application; it is a library.
pip install ahcore
Requires Python ≥ 3.11. The training stack (PyTorch Lightning) is a core dependency. ahcore is a
training-scaffolding library, not an optional add-on.
Manifests that read slides with OpenSlide (reader OPENSLIDE) need dlup's OpenSlide backend:
pip install "ahcore[openslide]"
ahcore is developed in the AI for Oncology monorepo and synced to this repository. To work on it here,
standalone:
pip install -e ".[dev]"
pytest
Inside the monorepo it is built and tested with Bazel (bazelisk test //aifo/ahcore/tests/...).
Apache 2.0 — see LICENSE.
Download counts and popularity will appear here as the collector receives them.
| Package / target | Requirement | Relationship |
|---|---|---|
dlupEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | dlup>=0.9.4 | runtime |
filelockEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | filelock>=3.12 | runtime |
h5pyEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | h5py>=3.12 | runtime |
imageioEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | imageio>=2.37 | runtime |
korniaEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | kornia>=0.8 | runtime |
lightningEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | lightning>=2.6 | runtime |
numcodecsEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | numcodecs>=0.13 | runtime |
numpyEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | numpy>=2.0 | runtime |
omegaconfEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | omegaconf>=2.3 | runtime |
pandasEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | pandas>=2.0 | runtime |
pillowEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | pillow>=10.0 | runtime |
pyarrowEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | pyarrow>=15 | runtime |
pydanticEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | pydantic>=2.10 | runtime |
richEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | rich>=13 | runtime |
sqlalchemyEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | sqlalchemy>=2.0 | runtime |
torchEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | torch>=2.6 | runtime |
tqdmEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | tqdm>=4.66 | runtime |
typing-extensionsEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | typing-extensions>=4.10 | runtime |
zarrEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | zarr>=3.0 | runtime |
aiohttpEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | aiohttp>=3.9; extra == "dev" | runtime |
huggingface-hubEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | huggingface-hub; extra == "dev" | runtime |
mypyEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | mypy; extra == "dev" | runtime |
pytest-mockEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | pytest-mock; extra == "dev" | runtime |
pytestEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | pytest>=7.0; extra == "dev" | runtime |
pyyamlEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | pyyaml; extra == "dev" | runtime |
ruffEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | ruff; extra == "dev" | runtime |
timmEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | timm==1.0.*; extra == "dev" | runtime |
transformersEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | transformers==4.48.*; extra == "dev" | runtime |
mlflowEnvironment{
"extras": "",
"marker": "extra == \"logging\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | mlflow>=3.4; extra == "logging" | runtime |
tensorboardEnvironment{
"extras": "",
"marker": "extra == \"logging\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | tensorboard>=2.19; extra == "logging" | runtime |
dlupEnvironment{
"extras": "openslide",
"marker": "extra == \"openslide\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | dlup[openslide]>=0.9.4; extra == "openslide" | runtime |
aiohttpEnvironment{
"extras": "",
"marker": "extra == \"remote\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | aiohttp>=3.9; extra == "remote" | runtime |
huggingface-hubEnvironment{
"extras": "",
"marker": "extra == \"tracing\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | huggingface-hub; extra == "tracing" | runtime |
pyyamlEnvironment{
"extras": "",
"marker": "extra == \"tracing\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | pyyaml; extra == "tracing" | runtime |
timmEnvironment{
"extras": "",
"marker": "extra == \"tracing\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | timm==1.0.*; extra == "tracing" | runtime |
transformersEnvironment{
"extras": "",
"marker": "extra == \"tracing\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | transformers==4.48.*; extra == "tracing" | runtime |
bdist_wheel · 165.87 KB · Python py3
sdist · 148.87 KB · Python source
Observed since 21 Oct, 09:36 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package_version:9796ec3345e159bf731984dd2a3655e11fcc2ca5ca8858328ef227ef77be81dc