idun
Tabular learning on the Apple silicon GPU. idun trains three learners on Metal, each with a CPU reference backend:
- idun_gbm (
idun.gbm): histogram gradient boosting with LightGBM's model (depth-wise or leaf-wise trees, quantized gradients, categorical splits, seed bags). Its CPU and Metal backends build the same model, bit for bit. - idun_tabm (
idun.tabm): TabM (Gorishniy et al., ICLR 2025), a parameter-efficient ensemble of MLPs. - idun_realmlp (
idun.realmlp): RealMLP-TD (Holzmüller et al., NeurIPS 2024).
Every fit is deterministic: the same data, parameters and seed give the same bits, run after run (the networks on the same GPU). The estimators follow scikit-learn's conventions without depending on it.
idun is in alpha (0.1): the interfaces may still change.
Install
pip install idun # Apple silicon with macOS 15 or later: the Metal wheel; elsewhere the CPU-only wheel
pip install idun-numerai # the Numerai port
Python 3.12–3.14; the only dependencies are NumPy and numba. Metal needs an Apple silicon Mac (M1 or newer) with
macOS 15 or later. On Linux and Intel Macs the same package installs without the Metal library and runs the CPU
backends; asking for Metal there raises idun.errors.BackendUnavailableError rather than falling back.
Quick start
import idun
from idun.gbm import GBMRegressor
from idun.realmlp import RealMLPRegressor
from idun.tabm import TabMClassifier
gbm = GBMRegressor(num_trees=300, learning_rate=0.05).fit(X_train, y_train)
pred = gbm.predict(X_test)
cpu = GBMRegressor(num_trees=300, learning_rate=0.05, backend="cpu").fit(X_train, y_train) # the same trees
clf = TabMClassifier(categorical=["sector"]).fit(X_train, labels) # any labels, two classes or more
proba = clf.predict_proba(X_test)
mlp = RealMLPRegressor(n_seeds=4).fit(X_train, y_train) # a bag of four seeds; predicts their mean
gbm.save("gbm.idun")
same = idun.load("gbm.idun")
X is a 2-D NumPy array, a pandas DataFrame or an Arrow table; missing values are allowed. The backend is "metal"
by default; pass backend="cpu" (idun_gbm) or backend="reference" (the networks' float64 reference) to run on the
CPU. Nothing switches backends behind your back.
Below the estimators: idun.Dataset bins a table once for reuse; the functional layer (idun.gbm.train,
idun.tabm.train_tabm, idun.realmlp.train_realmlp, seed bags through train_seeds and predict_mean) trains on
binned data or on idun.data.PackedDataset, a memory-mapped, date-sorted panel for data larger than memory, which
Metal reads without a copy. The docstrings document every public name.
How it compares
On five OpenML tasks on an Apple M1 (8 GB): idun_gbm's RMSE is within 3 % of the median of LightGBM, XGBoost and
scikit-learn's HistGradientBoosting at the same nominal settings; idun_tabm and idun_realmlp are within 2 % of their
reference implementations (the tabm package and pytabkit on Torch's MPS device) on every task and better on most, and
idun_tabm fits in 0.45 of the reference's time.
Licence
Apache-2.0. The NOTICE file lists the work idun builds on, including MLX's Steel GEMM (MIT), whose structure the networks' GEMM kernel adapts.
Metadata
Release files for idun 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 | Provenance | Actions |
|---|---|---|---|---|
| idun-0.1.0.tar.gz | 151.0 kB | Without provenance | Details for idun-0.1.0.tar.gz |
Built distributions (wheels)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| idun-0.1.0-py3-none-macosx_15_0_arm64.whl | Python 3 | none | macOS 15.0+ ARM64 | Details for idun-0.1.0-py3-none-macosx_15_0_arm64.whl |
| idun-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for idun-0.1.0-py3-none-any.whl |
Total release size: 505.5 kB
Release files / idun-0.1.0.tar.gz
| Download URL | idun-0.1.0.tar.gz |
|---|---|
| Size | 151.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
aa8feefb72807a2e65075d5ff97fce4e44fe1276864adcb11e416ecc15ef5a5c
|
|
BLAKE2b-256 checksum How to use checksums |
7250a48ef68b266cb113a340b03ea7cf8a7d0f7eccbbf30f876950be44100e5b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.9 {"installer":{"name":"uv","version":"0.9.9"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / idun-0.1.0-py3-none-macosx_15_0_arm64.whl
| Download URL | idun-0.1.0-py3-none-macosx_15_0_arm64.whl |
|---|---|
| Size | 183.1 kB |
| Tags | Python 3 macOS 15.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
8ab7f7610577a8229636b64016aa2bd224f296c49005dead7faedc1ea3ac62fe
|
|
BLAKE2b-256 checksum How to use checksums |
d137d7f9f4c553f4005fd77aa3a300fbb3f269d5d32a71318ba6c1a0fb1f993f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.9 {"installer":{"name":"uv","version":"0.9.9"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / idun-0.1.0-py3-none-any.whl
| Download URL | idun-0.1.0-py3-none-any.whl |
|---|---|
| Size | 171.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0063ae002378058450ed77853d4cda7e7197aa932d7627f18ba265220762d170
|
|
BLAKE2b-256 checksum How to use checksums |
34cd94ced3a646c1dee8073a7bc37d229d066673b2601b97de62c40cda74a93c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.9 {"installer":{"name":"uv","version":"0.9.9"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for idun 0.1.0
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.