Because reproducible science takes clean tasks. And why don't you have a cup of relaxing jasmin tea?
airoh is a lightweight Python task library built with invoke, designed for reproducible research workflows. It provides pre-written, modular task definitions that can be easily reused in your own tasks.py file — no boilerplate, just useful automation. Access the documentation of the library on the airoh docs website for a list of available airoh tasks.
Installation
Installation through PIP:
pip install airoh
For local deployment:
git clone https://github.com/airoh-pipeline/airoh.git
cd airoh
pip install -e .
Usage
You can use airoh in your project simply by importing tasks in your tasks.py file.
Minimal Example
# tasks.py
from airoh.utils import run_notebooks, setup_env_python
Now you can call:
invoke run-notebooks
invoke setup-env-python
Keeping a project honest
Two modules exist for the parts of reproducibility that no pipeline run can check by itself.
airoh.verify compares a project against its own documentation — the task list
in the README, the packages in requirements.txt versus pyproject.toml, the
paths the docs name, the entries in each data folder versus its CONTENT.md,
the size and type of what git tracks. It runs a flat list of independent checks
and exits non-zero when any fails. Wire it up as its own task and run it before
committing; never call it from run, so that reproducing results never depends
on documentation hygiene.
airoh.provenance writes two records: record_sources describes what every
declared asset actually resolved to (a URL, a real path behind a symlink, the
commit of the repository it belongs to), and record_run describes what
produced the current outputs (project commit, environment, input manifest,
output checksums). Neither can fail a pipeline — a provenance record is
documentation, not a precondition. Where datalad is in use it remains the only
thing that can retrieve a past state; these records are what you get without
it.
# tasks.py
from airoh.verify import verify # noqa: F401 (exposes `invoke verify`)
from airoh.provenance import record_run, record_sources
Requirements
- Python ≥ 3.8
invoke≥ 2.0- Docker (for container tasks)
- Apptainer (optional, for
.sifsupport) jupyter(if usingrun-notebooks)
Note that a few more requirements are required for development, in particular pdoc which is used to generate the documentation website.
Philosophy
Inspired by Uncle Iroh from Avatar: The Last Airbender, airoh aims to bring simplicity, reusability, and clarity to research infrastructure — one well-structured task at a time. It is meant to support a concrete implementation of the YODA principles.
License
MIT © airoh contributors
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file airoh-0.4.0.tar.gz.
File metadata
- Download URL: airoh-0.4.0.tar.gz
- Upload date:
- Size: 41.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d06fb91cd2a5ec847aea8ee1b9ff8211e7f296f593317900626bb045e62d74c0
|
|
| MD5 |
0480eadc5de92f94fc923a403eda0503
|
|
| BLAKE2b-256 |
1011331cfd192e063445a0179b27c841a155c8692f9d1cddadf3984764366501
|
Provenance
The following attestation bundles were made for airoh-0.4.0.tar.gz:
Publisher:
publish.yml on airoh-pipeline/airoh
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
airoh-0.4.0.tar.gz -
Subject digest:
d06fb91cd2a5ec847aea8ee1b9ff8211e7f296f593317900626bb045e62d74c0 - Sigstore transparency entry: 2334902152
- Sigstore integration time:
-
Permalink:
airoh-pipeline/airoh@b3c0a2166e0b8fcbcc5359dac7838c2ca1f2b00f -
Branch / Tag:
refs/tags/v0.4.0 - Owner: https://github.com/airoh-pipeline
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b3c0a2166e0b8fcbcc5359dac7838c2ca1f2b00f -
Trigger Event:
release
-
Statement type:
File details
Details for the file airoh-0.4.0-py3-none-any.whl.
File metadata
- Download URL: airoh-0.4.0-py3-none-any.whl
- Upload date:
- Size: 31.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6a7212037afd31050fd8cd5c14eb4061cac0d813a4be1225764e0b09071bd8bd
|
|
| MD5 |
0d7c74cd8029584fb0efb54b3533d93c
|
|
| BLAKE2b-256 |
862f726acec84ada7a4959433f4ebb46011b365ef682541ec7242847c0eb76cd
|
Provenance
The following attestation bundles were made for airoh-0.4.0-py3-none-any.whl:
Publisher:
publish.yml on airoh-pipeline/airoh
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
airoh-0.4.0-py3-none-any.whl -
Subject digest:
6a7212037afd31050fd8cd5c14eb4061cac0d813a4be1225764e0b09071bd8bd - Sigstore transparency entry: 2334902187
- Sigstore integration time:
-
Permalink:
airoh-pipeline/airoh@b3c0a2166e0b8fcbcc5359dac7838c2ca1f2b00f -
Branch / Tag:
refs/tags/v0.4.0 - Owner: https://github.com/airoh-pipeline
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b3c0a2166e0b8fcbcc5359dac7838c2ca1f2b00f -
Trigger Event:
release
-
Statement type: