A unified benchmark framework for evaluating AutoML systems on data streams with fast C++ base algorithms and rigorous prequential evaluation.
Why SAMLB?
Streaming AutoML methods are hard to compare fairly. Different papers use different datasets, evaluation protocols, and algorithm pools. SAMLB solves this by providing:
- Pure C++ core — base learners, preprocessing, feature selection, metrics and drift detection are all native, with no Python ML dependency (Naive Bayes, Hoeffding Trees, KNN, Perceptron, Logistic Regression, and more)
- Framework-agnostic benchmarking -- plug in any streaming AutoML method with just 3 methods
- Standardized prequential evaluation (test-then-train) with windowed metric snapshots for learning curves
- 30 curated datasets (15 classification + 15 regression) spanning real-world and synthetic drift scenarios
- Parallel execution for large-scale experiments across multiple seeds
Installation
From PyPI
pip install samlb
From source
git clone https://github.com/TechyNilesh/samlb.git
cd samlb
pip install -e ".[dev]"
Optional backends
pip install "samlb[vw]" # Vowpal Wabbit, for the ChaCha regressor
pip install "samlb[river]" # River algorithms, via the River adapters
pip install "samlb[capymoa]" # CapyMOA/MOA algorithms (needs a JVM)
Requirements: Python >= 3.9, a C++ compiler (for the native extension), CMake
Quick Start
Python API
from samlb.benchmark import BenchmarkSuite
from samlb.framework.classification.asml import AutoStreamClassifier
from samlb.framework.classification.eaml import EvolutionaryBaggingClassifier
from samlb.framework.random_search import RandomSearch
from samlb.framework.classification.shared_config import (
SHARED_PREPROCESSORS, SHARED_CLASSIFIER_INSTANCES,
)
suite = BenchmarkSuite(
models={
"ASML": AutoStreamClassifier(seed=42),
"EvoAutoML": EvolutionaryBaggingClassifier(seed=42),
# RandomSearch baseline over the same shared learner pool
"RandomSearch": RandomSearch(
scalers=SHARED_PREPROCESSORS,
models=SHARED_CLASSIFIER_INSTANCES,
seed=42,
),
},
datasets=["electricity", "covertype"],
task="classification",
n_runs=10,
window_size=1000,
)
suite.run()
suite.print_table()
suite.to_csv("results/classification.csv")
RandomSearch is task-agnostic: for regression, pass the regression pool (
EAML_REG_PARAM_GRID["Scaler"]/["Regressor"]fromsamlb.framework.regression.eaml.config) and setclip=True.
Dataset Streaming
from samlb.datasets import stream, list_datasets
# See all available datasets
print(list_datasets("classification"))
print(list_datasets("regression"))
# Stream instance by instance
for x, y in stream("electricity", task="classification"):
pred = model.predict_one(x)
model.learn_one(x, y)
CLI
# Full classification benchmark (5 frameworks x 15 datasets x 10 runs)
python examples/run_benchmark.py
# Custom subset
python examples/run_benchmark.py --n_runs 5 --max_samples 50000 --datasets electricity covertype
# Parallel execution across CPU cores
python examples/run_benchmark.py --n_runs 100 --parallel --cpu_utilization 0.8
# Regression benchmark (4 frameworks x 15 datasets x 10 runs)
python examples/run_regression.py
python examples/run_regression.py --n_runs 5 --datasets bike california_housing
Included Frameworks
Classification
| Framework | Strategy | Key Features |
|---|---|---|
| ASML | Adaptive Random Drift Nearby Search | ADWIN drift detection, recency-weighted ensemble, adaptive budget |
| AutoClass | Genetic Algorithm + Meta-Regressor | Fitness-proportionate selection, ARF surrogate for HP mutation |
| EvoAutoML | Evolutionary Bagging | Population-based, tournament selection, Poisson(6) sampling |
| OAML | Drift-triggered Random Search | EDDM drift detector, warm-up phase, random search |
Regression
| Framework | Strategy | Key Features |
|---|---|---|
| ASML | Adaptive Random Drift Nearby Search | Online target normalization (Welford), prediction clipping |
| ChaCha | FLAML AutoVW | Vowpal Wabbit online HPO, progressive validation loss |
| EvoAutoML | Evolutionary Bagging | Population-based ensemble, mutation-driven search |
Baseline (classification & regression)
| Baseline | Strategy | Key Features |
|---|---|---|
| RandomSearch | Random per-window selection | Keeps the full shared learner pool warm, randomly picks one pipeline per exploration window |
Model Pool Selection: Normal vs. Ensemble Baselines
Every search framework's candidate pool is swappable between two presets —
"normal" (plain single models: Naive Bayes, Perceptron, Hoeffding Tree, ...)
and "ensemble" (drift-adaptive ensembles: ARF, SRP, Leveraging Bagging,
Hoeffding Adaptive Tree) — via get_classification_config /
get_regression_config. This is useful for asking a different question than
the usual "does search beat RandomSearch": does search still help once every
candidate is already a strong, drift-adaptive baseline on its own?
from samlb.framework import get_classification_config
from samlb.framework.classification.asml import AutoStreamClassifier
from samlb.framework.classification.autoclass import AutoClass
from samlb.framework.classification.eaml import EvolutionaryBaggingClassifier
from samlb.framework.classification.oaml import OAMLClassifier
cfg = get_classification_config(pool="ensemble") # or pool="normal" (default)
model = AutoStreamClassifier(config_dict=cfg.asml_config_dict(), seed=42)
model = AutoClass(config_dict=cfg.autoclass_config_dict(), seed=42)
model = EvolutionaryBaggingClassifier(param_grid=cfg.eaml_param_grid(), seed=42)
model = OAMLClassifier(scalers=cfg.scalers, classifiers=cfg.classifier_instances, seed=42)
Regression works the same way, over ARFRegressor/SRPRegressor instead:
from samlb.framework import get_regression_config
from samlb.framework.regression.asml import AutoStreamRegressor
from samlb.framework.regression.eaml import EvolutionaryBaggingRegressor
cfg = get_regression_config(pool="ensemble")
model = AutoStreamRegressor(config_dict=cfg.asml_config_dict(), seed=42)
model = EvolutionaryBaggingRegressor(param_grid=cfg.eaml_param_grid(), seed=42)
Both presets live in samlb.framework.classification.shared_config
(ClassificationConfig) and samlb.framework.regression.shared_config
(RegressionConfig) — pass a custom instance of either dataclass to mix and
match your own model pool instead of the two built-in presets.
External Algorithms (River & CapyMOA)
Benchmarks often need to place SAMLB's frameworks next to algorithms from
River or CapyMOA. Two adapters
make any learner from either library usable as a SAMLB model — same
predict_one / learn_one / reset contract, so it drops straight into
BenchmarkSuite and is scored by the same prequential evaluator.
Both libraries are optional. Nothing is imported until an adapter is
constructed, and is_available() lets a suite skip a backend that is not
installed rather than fail.
from river import forest, preprocessing
from samlb.benchmark import BenchmarkSuite
from samlb.framework.adapters import CapyMOAClassifier, RiverClassifier
from samlb.framework.base import ARFClassifier
models = {"SAMLB-ARF": ARFClassifier(n_models=10, seed=42)}
if RiverClassifier.is_available():
models["River-ARF"] = RiverClassifier(
preprocessing.StandardScaler() | forest.ARFClassifier(n_models=10, seed=42),
name="River-ARF",
)
if CapyMOAClassifier.is_available():
models["MOA-ARF"] = CapyMOAClassifier(
"AdaptiveRandomForestClassifier", ensemble_size=10, seed=42, name="MOA-ARF",
)
BenchmarkSuite(models=models, datasets=["electricity"],
task="classification", n_runs=10).run()
examples/run_external_baselines.py runs exactly this comparison from the
command line, for either task:
python3 examples/run_external_baselines.py --task classification --n_runs 10
python3 examples/run_external_baselines.py --task regression --datasets abalone
River adapters
RiverClassifier / RiverRegressor take a River estimator or a pipeline ending
in one. The object you pass is a prototype: it is cloned before every run and
never trained in place, so one adapter can be reused across seeds and datasets.
Pass a zero-argument callable instead when an estimator cannot be cloned.
from samlb.framework.adapters import RiverRegressor
RiverRegressor(preprocessing.StandardScaler() | linear_model.LinearRegression())
RiverRegressor(lambda: forest.ARFRegressor(seed=1), name="River-ARF")
River classifiers return None until they have seen a label; the evaluator
counts those instances but does not score them, exactly as it does for OAML's
warm-up.
CapyMOA adapters
CapyMOAClassifier / CapyMOARegressor take a CapyMOA class, or its name in
capymoa.classifier / capymoa.regressor, plus any learner keyword arguments.
A class rather than an instance, because a CapyMOA learner is bound to a MOA
Schema at construction and the schema is not known until the stream starts.
The adapter derives it from the first instance, builds the learner then, and
converts each {feature: value} dict to the dense array MOA expects.
from samlb.framework.adapters import CapyMOAClassifier, CapyMOARegressor
CapyMOAClassifier("HoeffdingTree", grace_period=50, seed=42)
CapyMOAClassifier("AdaptiveRandomForestClassifier", ensemble_size=10)
CapyMOARegressor("AdaptiveRandomForestRegressor", ensemble_size=10)
MOA works in class indices, so the adapter keeps the label mapping and hands
back the original SAMLB labels. Labels are discovered as they arrive, against
max_classes reserved nominal slots (100 by default; only MOA's per-class
memory scales with it). Pass classes=[...] when the label set is known up
front — the schema is then exact and an unexpected label raises instead of
being silently absorbed.
C++ Base Algorithms
Every per-instance component is implemented in C++ and exposed through thin Python wrappers:
Classification: Naive Bayes, Perceptron, Logistic Regression, Passive Aggressive, Softmax Regression, KNN, Hoeffding Tree, EFDT, SGT
Ensembles: ARF (Gomes et al. 2017, classification & regression), SRP (Gomes et al. 2019, classification & regression), Leveraging Bagging (Bifet et al. 2010), Hoeffding Adaptive Tree (Bifet & Gavaldà 2009, whole-tree simplification — see HoeffdingAdaptiveTreeClassifier docstring)
Regression: Linear Regression, Bayesian Linear Regression, Passive Aggressive, Hoeffding Tree, KNN
Preprocessing: MinMaxScaler, StandardScaler, MaxAbsScaler, VarianceThreshold, SelectKBest (Pearson)
Metrics: Accuracy, MacroF1, MacroPrecision, MacroRecall, MAE, RMSE, R²
Drift detection: ADWIN, EDDM
Pipelines are fused: scaler | selector | model is executed as a single C++
object, so an instance crosses the Python/C++ boundary once per learn_one /
predict_one rather than once per stage.
Evaluation Methodology
SAMLB uses prequential evaluation (test-then-train):
- For each instance in the stream:
- Predict -- get the model's prediction before seeing the label
- Evaluate -- score the prediction against the true label
- Learn -- update the model with the labelled instance
- Metrics are captured at configurable window intervals for learning curve analysis
- Runtime is sampled per-instance for performance profiling
Classification metrics: Accuracy, Macro-F1, Macro-Precision, Macro-Recall
Regression metrics: MAE, RMSE, R^2
Datasets
Classification (15 datasets -- 2.5M+ total instances)
| Dataset | Samples | Features | Classes | Type | Description |
|---|---|---|---|---|---|
adult |
48,842 | 14 | 4 | Real | Income prediction (Census) |
covertype |
100,000 | 54 | 7 | Real | Forest cover type (cartographic) |
credit_card |
284,807 | 30 | 2 | Real | Credit card fraud detection |
electricity |
45,312 | 8 | 2 | Real | Electricity price direction (NSW, Australia) |
insects |
52,848 | 33 | 6 | Real | Insect species with concept drift |
new_airlines |
539,383 | 7 | 2 | Real | Flight delay prediction |
nomao |
34,465 | 118 | 2 | Real | Nomao place deduplication |
poker_hand |
1,025,009 | 10 | 10 | Real | Poker hand classification |
shuttle |
58,000 | 9 | 7 | Real | NASA Space Shuttle radiator |
vehicle_sensIT |
98,528 | 100 | 3 | Real | Vehicle type from seismic sensors |
movingRBF |
200,000 | 10 | 5 | Synthetic | Moving radial basis functions |
moving_squares |
200,000 | 2 | 4 | Synthetic | Moving class boundaries |
sea_high_abrupt_drift |
500,000 | 3 | 2 | Synthetic | SEA generator with abrupt drift |
synth_RandomRBFDrift |
100,000 | 4 | 4 | Synthetic | RBF generator with gradual drift |
synth_agrawal |
100,000 | 9 | 2 | Synthetic | Agrawal generator |
Regression (15 datasets -- 1M+ total instances)
| Dataset | Samples | Features | Type | Description |
|---|---|---|---|---|
ailerons |
13,750 | 40 | Real | Aircraft control surface deflection |
bike |
17,379 | 12 | Real | Bike sharing hourly demand |
california_housing |
20,640 | 8 | Real | California median house values |
cps88wages |
28,155 | 6 | Real | Wage prediction (CPS 1988) |
diamonds |
53,940 | 9 | Real | Diamond price prediction |
elevators |
16,599 | 18 | Real | Aircraft elevator control |
fifa |
19,178 | 28 | Real | FIFA player overall rating |
House8L |
22,784 | 8 | Real | House price (8-feature variant) |
kings_county |
21,613 | 21 | Real | King County house sales price |
MetroTraffic |
48,204 | 7 | Real | Interstate traffic volume (Minneapolis) |
superconductivity |
21,263 | 81 | Real | Superconductor critical temperature |
wave_energy |
72,000 | 48 | Real | Wave energy converter power output |
fried |
40,768 | 10 | Synthetic | Friedman function |
FriedmanGra |
100,000 | 10 | Synthetic | Friedman with gradual drift |
hyperA |
500,000 | 10 | Synthetic | Hyperplane with drift |
Output Formats
results/
classification/
summary.json # Flat JSON: one row per (framework x dataset x run)
<dataset>/<framework>/
run_00.json # Raw per-run JSON with full learning curves
...
run_09.json
aggregate.json # Aggregated mean +/- std across 10 runs
regression/
summary.json
<dataset>/<framework>/
run_00.json
...
run_09.json
aggregate.json
The released repository includes the raw JSON results used for the paper under results/classification/ and results/regression/.
Project Structure
.
├── pyproject.toml # Package metadata & build config
├── CMakeLists.txt # C++ build configuration
├── LICENSE # MIT License
├── README.md # This file
├── CONTRIBUTING.md # Contributor guide
├── wiki/ # Wiki page sources (published to the GitHub wiki)
├── scripts/ # publish_wiki.sh
├── _cpp/ # C++ source (9 classifiers, 5 regressors)
│ ├── classification/
│ ├── regression/
│ ├── core/ # Shared headers
│ └── bindings/ # PyBind11 module
├── samlb/ # Python package
│ ├── __init__.py # Version: 0.3.0
│ ├── algorithms/ # C++ algorithm Python bindings
│ ├── benchmark/ # BenchmarkSuite orchestrator
│ ├── evaluation/ # PrequentialEvaluator, metrics, results
│ ├── datasets/ # 30 datasets (15 clf + 15 reg NPZ files)
│ └── framework/ # AutoML framework implementations
│ ├── base/ # BaseStreamFramework + C++ wrappers
│ ├── adapters/ # River & CapyMOA adapters (optional backends)
│ ├── random_search.py # RandomSearch baseline (task-agnostic)
│ ├── classification/ # ASML, AutoClass, EvoAutoML, OAML
│ └── regression/ # ASML, ChaCha, EvoAutoML
├── results/ # Raw paper results as JSON files
│ ├── classification/ # Classification run_*.json + aggregate.json
│ └── regression/ # Regression run_*.json + aggregate.json
├── tests/ # Test suite
└── examples/ # Benchmark runner scripts
├── run_benchmark.py # Classification benchmark CLI
├── run_regression.py # Regression benchmark CLI
└── run_external_baselines.py # River / CapyMOA comparison CLI
Documentation
Full usage documentation lives in the SAMLB wiki:
| Page | What it covers |
|---|---|
| Installation | Install, optional backends, build troubleshooting |
| Quick Start | First benchmark, the model contract, CLI |
| Benchmark API | BenchmarkSuite, evaluator, RunResult, output formats |
| Datasets | The 30 bundled streams, and adding your own |
| Frameworks | The bundled AutoML methods and their configuration |
| Base Algorithms | C++ learners, fused pipelines, metrics, drift detectors |
| External Algorithms | Benchmarking River and CapyMOA learners |
| Extending SAMLB | Writing a framework, adapter, dataset or C++ learner |
| FAQ | Common questions and failure modes |
The pages are version-controlled in wiki/ — edit them there and open
a PR; ./scripts/publish_wiki.sh pushes them to the wiki.
Contributing
Contributions are welcome — a new streaming AutoML framework, a dataset, an adapter for another library, a bug fix, or a documentation correction.
git clone https://github.com/TechyNilesh/samlb.git
cd samlb
pip install -e ".[dev]"
pytest tests/
ruff check samlb/
Adding a framework means implementing three methods:
from samlb.framework.base import BaseStreamFramework
class MyStreamingAutoML(BaseStreamFramework):
def predict_one(self, x): ... # predict BEFORE learning
def learn_one(self, x, y): ... # your AutoML logic lives here
def reset(self): ... # back to untrained; called before every run
CONTRIBUTING.md has the full walkthrough — development setup, rebuilding the C++ extension, the step-by-step guide to adding a framework, dataset, adapter or C++ learner, and the PR checklist.
Citation
If you use SAMLB in your research, please cite:
@inproceedings{verma2026samlb,
title = {SAMLB: A Streaming AutoML Benchmark},
author = {Verma, Nilesh and Bifet, Albert and Pfahringer, Bernhard and Bahri, Maroua},
booktitle = {Proceedings of the International Conference on Automated Machine Learning (AutoML)},
year = {2026},
url = {https://github.com/TechyNilesh/samlb}
}
License
MIT License. See LICENSE for details.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
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 samlb-0.6.0.tar.gz.
File metadata
- Download URL: samlb-0.6.0.tar.gz
- Upload date:
- Size: 9.0 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
58f7fc6ede2d922629efd97bfaa8177776fbdb96dcfcb0a95b87bbd4b4d3f453
|
|
| MD5 |
d418ada9eabc8d55d814930312b3b9af
|
|
| BLAKE2b-256 |
6472812fa3aa2844082301c40208f9dc54405723ebadfbcee04f3cf6be0148ed
|
Provenance
The following attestation bundles were made for samlb-0.6.0.tar.gz:
Publisher:
publish.yml on TechyNilesh/samlb
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
samlb-0.6.0.tar.gz -
Subject digest:
58f7fc6ede2d922629efd97bfaa8177776fbdb96dcfcb0a95b87bbd4b4d3f453 - Sigstore transparency entry: 2599357706
- Sigstore integration time:
-
Permalink:
TechyNilesh/samlb@511cd035d18fdc57a118564903dc30628340426f -
Branch / Tag:
refs/tags/v0.6.0 - Owner: https://github.com/TechyNilesh
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@511cd035d18fdc57a118564903dc30628340426f -
Trigger Event:
push
-
Statement type:
File details
Details for the file samlb-0.6.0-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: samlb-0.6.0-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 394.6 kB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
96bf38f407fc0272141a0c7c4ba802dae0218ac39151dc0a6cd62eba5ee774bf
|
|
| MD5 |
acc2dadf59b064073e86eb6f8f5ed9cb
|
|
| BLAKE2b-256 |
2ef7f7fb2dc6bea5b9645d6ae04e92a6158caee7a7ec092729944b055ab0c10f
|
Provenance
The following attestation bundles were made for samlb-0.6.0-cp312-cp312-win_amd64.whl:
Publisher:
publish.yml on TechyNilesh/samlb
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
samlb-0.6.0-cp312-cp312-win_amd64.whl -
Subject digest:
96bf38f407fc0272141a0c7c4ba802dae0218ac39151dc0a6cd62eba5ee774bf - Sigstore transparency entry: 2599361865
- Sigstore integration time:
-
Permalink:
TechyNilesh/samlb@511cd035d18fdc57a118564903dc30628340426f -
Branch / Tag:
refs/tags/v0.6.0 - Owner: https://github.com/TechyNilesh
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@511cd035d18fdc57a118564903dc30628340426f -
Trigger Event:
push
-
Statement type:
File details
Details for the file samlb-0.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: samlb-0.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 467.8 kB
- Tags: CPython 3.12, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
784134c97242917d24f75d38c7e290613dd503dca1b5183437017358dc44e9fa
|
|
| MD5 |
0c7bb1e0788403493d47b6783fefc065
|
|
| BLAKE2b-256 |
82d55ec24740c2e96e73b87b72f3077f4def8a247c9c316a258b896201f473cd
|
Provenance
The following attestation bundles were made for samlb-0.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
publish.yml on TechyNilesh/samlb
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
samlb-0.6.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
784134c97242917d24f75d38c7e290613dd503dca1b5183437017358dc44e9fa - Sigstore transparency entry: 2599365058
- Sigstore integration time:
-
Permalink:
TechyNilesh/samlb@511cd035d18fdc57a118564903dc30628340426f -
Branch / Tag:
refs/tags/v0.6.0 - Owner: https://github.com/TechyNilesh
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@511cd035d18fdc57a118564903dc30628340426f -
Trigger Event:
push
-
Statement type:
File details
Details for the file samlb-0.6.0-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: samlb-0.6.0-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 380.8 kB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
554f9ce5d75cd547738f1e6aff2fc9daaf7b55bb842a1ebed50c8f5f45434e9e
|
|
| MD5 |
01a682ea0ae492ee1367e0fa7b8fde6d
|
|
| BLAKE2b-256 |
1ee987e3f541fb6c0baba10140eb0275143fe578010d84dea94e28cbc66155b2
|
Provenance
The following attestation bundles were made for samlb-0.6.0-cp312-cp312-macosx_11_0_arm64.whl:
Publisher:
publish.yml on TechyNilesh/samlb
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
samlb-0.6.0-cp312-cp312-macosx_11_0_arm64.whl -
Subject digest:
554f9ce5d75cd547738f1e6aff2fc9daaf7b55bb842a1ebed50c8f5f45434e9e - Sigstore transparency entry: 2599365286
- Sigstore integration time:
-
Permalink:
TechyNilesh/samlb@511cd035d18fdc57a118564903dc30628340426f -
Branch / Tag:
refs/tags/v0.6.0 - Owner: https://github.com/TechyNilesh
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@511cd035d18fdc57a118564903dc30628340426f -
Trigger Event:
push
-
Statement type:
File details
Details for the file samlb-0.6.0-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: samlb-0.6.0-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 393.0 kB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0b81c8cb16fef2f5c83bcd8ad51b961e88e0429b4eda01ffd71c5743e5d941a9
|
|
| MD5 |
11c8e068104829d6cfc8f08580ed9d8a
|
|
| BLAKE2b-256 |
964a96781b8f04be9da90d211ce5273f8204ea2c6b3d0330ade83c49f35ac3a8
|
Provenance
The following attestation bundles were made for samlb-0.6.0-cp311-cp311-win_amd64.whl:
Publisher:
publish.yml on TechyNilesh/samlb
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
samlb-0.6.0-cp311-cp311-win_amd64.whl -
Subject digest:
0b81c8cb16fef2f5c83bcd8ad51b961e88e0429b4eda01ffd71c5743e5d941a9 - Sigstore transparency entry: 2599359192
- Sigstore integration time:
-
Permalink:
TechyNilesh/samlb@511cd035d18fdc57a118564903dc30628340426f -
Branch / Tag:
refs/tags/v0.6.0 - Owner: https://github.com/TechyNilesh
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@511cd035d18fdc57a118564903dc30628340426f -
Trigger Event:
push
-
Statement type:
File details
Details for the file samlb-0.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: samlb-0.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 466.8 kB
- Tags: CPython 3.11, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d633417ed5d2b8aa2b523ca63cdadba4f1d0201b2afe865cfd2ef6bbff2f838a
|
|
| MD5 |
a6b83896cb7b59a632488ab303a477cf
|
|
| BLAKE2b-256 |
6422296430f376c58991edc6ab2e2674b76384230c81e1b06917ebb8e5487c26
|
Provenance
The following attestation bundles were made for samlb-0.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
publish.yml on TechyNilesh/samlb
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
samlb-0.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
d633417ed5d2b8aa2b523ca63cdadba4f1d0201b2afe865cfd2ef6bbff2f838a - Sigstore transparency entry: 2599364735
- Sigstore integration time:
-
Permalink:
TechyNilesh/samlb@511cd035d18fdc57a118564903dc30628340426f -
Branch / Tag:
refs/tags/v0.6.0 - Owner: https://github.com/TechyNilesh
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@511cd035d18fdc57a118564903dc30628340426f -
Trigger Event:
push
-
Statement type:
File details
Details for the file samlb-0.6.0-cp311-cp311-macosx_11_0_arm64.whl.
File metadata
- Download URL: samlb-0.6.0-cp311-cp311-macosx_11_0_arm64.whl
- Upload date:
- Size: 378.8 kB
- Tags: CPython 3.11, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fb2350b8ddfa8a9b94c9eb319ee14e8a7e97e3af384e9353fa7293c668df50ba
|
|
| MD5 |
ba34043e251f6b786f0e4fd784dd8356
|
|
| BLAKE2b-256 |
5f0b35dc244f7bce99337b091d67e22d1aa13d35b155920c8a4dc006f970ad3d
|
Provenance
The following attestation bundles were made for samlb-0.6.0-cp311-cp311-macosx_11_0_arm64.whl:
Publisher:
publish.yml on TechyNilesh/samlb
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
samlb-0.6.0-cp311-cp311-macosx_11_0_arm64.whl -
Subject digest:
fb2350b8ddfa8a9b94c9eb319ee14e8a7e97e3af384e9353fa7293c668df50ba - Sigstore transparency entry: 2599358058
- Sigstore integration time:
-
Permalink:
TechyNilesh/samlb@511cd035d18fdc57a118564903dc30628340426f -
Branch / Tag:
refs/tags/v0.6.0 - Owner: https://github.com/TechyNilesh
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@511cd035d18fdc57a118564903dc30628340426f -
Trigger Event:
push
-
Statement type:
File details
Details for the file samlb-0.6.0-cp310-cp310-win_amd64.whl.
File metadata
- Download URL: samlb-0.6.0-cp310-cp310-win_amd64.whl
- Upload date:
- Size: 392.1 kB
- Tags: CPython 3.10, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9dd6de3c7621646cc3d4754a4da94b7cdb2d1afce997a5b51ded7f557775ffef
|
|
| MD5 |
e04b3eef4ca7b814bcc814bd8ac4c356
|
|
| BLAKE2b-256 |
59bb703cc52a68757f2fc40a1b2f1dffe21be9612e0a05960a0638bfad3058b2
|
Provenance
The following attestation bundles were made for samlb-0.6.0-cp310-cp310-win_amd64.whl:
Publisher:
publish.yml on TechyNilesh/samlb
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
samlb-0.6.0-cp310-cp310-win_amd64.whl -
Subject digest:
9dd6de3c7621646cc3d4754a4da94b7cdb2d1afce997a5b51ded7f557775ffef - Sigstore transparency entry: 2599359873
- Sigstore integration time:
-
Permalink:
TechyNilesh/samlb@511cd035d18fdc57a118564903dc30628340426f -
Branch / Tag:
refs/tags/v0.6.0 - Owner: https://github.com/TechyNilesh
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@511cd035d18fdc57a118564903dc30628340426f -
Trigger Event:
push
-
Statement type:
File details
Details for the file samlb-0.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: samlb-0.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 465.5 kB
- Tags: CPython 3.10, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0644748bb9a486ccae589551495107f663a29022fc6e9c45684bee7634d79680
|
|
| MD5 |
d8d53e2f7209dbb1daa33eb3cd6239a0
|
|
| BLAKE2b-256 |
1231e9b1b2b54fcdfc6324a20e4d29d313e091cf44181c6018fdfe4dd7884f2d
|
Provenance
The following attestation bundles were made for samlb-0.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
publish.yml on TechyNilesh/samlb
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
samlb-0.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
0644748bb9a486ccae589551495107f663a29022fc6e9c45684bee7634d79680 - Sigstore transparency entry: 2599360710
- Sigstore integration time:
-
Permalink:
TechyNilesh/samlb@511cd035d18fdc57a118564903dc30628340426f -
Branch / Tag:
refs/tags/v0.6.0 - Owner: https://github.com/TechyNilesh
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@511cd035d18fdc57a118564903dc30628340426f -
Trigger Event:
push
-
Statement type:
File details
Details for the file samlb-0.6.0-cp310-cp310-macosx_11_0_arm64.whl.
File metadata
- Download URL: samlb-0.6.0-cp310-cp310-macosx_11_0_arm64.whl
- Upload date:
- Size: 377.6 kB
- Tags: CPython 3.10, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e96fe0514afe71255472310cbb7e90aae65dfee5aacee57f8a1eaab76219b996
|
|
| MD5 |
4f258b401b54d0c99680711470b0adcb
|
|
| BLAKE2b-256 |
383054c4791b4d2ad092829efab5a0b8594ea8798e2291cef606faa2060032ef
|
Provenance
The following attestation bundles were made for samlb-0.6.0-cp310-cp310-macosx_11_0_arm64.whl:
Publisher:
publish.yml on TechyNilesh/samlb
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
samlb-0.6.0-cp310-cp310-macosx_11_0_arm64.whl -
Subject digest:
e96fe0514afe71255472310cbb7e90aae65dfee5aacee57f8a1eaab76219b996 - Sigstore transparency entry: 2599364356
- Sigstore integration time:
-
Permalink:
TechyNilesh/samlb@511cd035d18fdc57a118564903dc30628340426f -
Branch / Tag:
refs/tags/v0.6.0 - Owner: https://github.com/TechyNilesh
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@511cd035d18fdc57a118564903dc30628340426f -
Trigger Event:
push
-
Statement type:
File details
Details for the file samlb-0.6.0-cp39-cp39-win_amd64.whl.
File metadata
- Download URL: samlb-0.6.0-cp39-cp39-win_amd64.whl
- Upload date:
- Size: 392.2 kB
- Tags: CPython 3.9, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
18e44cec10b76eae8aa0bf318331828d7d730f88f3223757ca2150a6bfac31a7
|
|
| MD5 |
3b54ab6dd2c4af5e1746bd2253f050fe
|
|
| BLAKE2b-256 |
067d96acac4fea4351285a53516a03e51b326aaa0f1c884d97cbb527a92bb732
|
Provenance
The following attestation bundles were made for samlb-0.6.0-cp39-cp39-win_amd64.whl:
Publisher:
publish.yml on TechyNilesh/samlb
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
samlb-0.6.0-cp39-cp39-win_amd64.whl -
Subject digest:
18e44cec10b76eae8aa0bf318331828d7d730f88f3223757ca2150a6bfac31a7 - Sigstore transparency entry: 2599358887
- Sigstore integration time:
-
Permalink:
TechyNilesh/samlb@511cd035d18fdc57a118564903dc30628340426f -
Branch / Tag:
refs/tags/v0.6.0 - Owner: https://github.com/TechyNilesh
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@511cd035d18fdc57a118564903dc30628340426f -
Trigger Event:
push
-
Statement type:
File details
Details for the file samlb-0.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: samlb-0.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 465.7 kB
- Tags: CPython 3.9, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
92e1d81f00cc679618f77a4a4dfc3ea6861f17f74ea09ceb73c188b15843b3fb
|
|
| MD5 |
b76d0ece18660576136d926c808ca74d
|
|
| BLAKE2b-256 |
2dfc403deea041052893f5a78b40888e952a349b7c0517f4f1120a7332dc0196
|
Provenance
The following attestation bundles were made for samlb-0.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
publish.yml on TechyNilesh/samlb
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
samlb-0.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
92e1d81f00cc679618f77a4a4dfc3ea6861f17f74ea09ceb73c188b15843b3fb - Sigstore transparency entry: 2599365185
- Sigstore integration time:
-
Permalink:
TechyNilesh/samlb@511cd035d18fdc57a118564903dc30628340426f -
Branch / Tag:
refs/tags/v0.6.0 - Owner: https://github.com/TechyNilesh
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@511cd035d18fdc57a118564903dc30628340426f -
Trigger Event:
push
-
Statement type:
File details
Details for the file samlb-0.6.0-cp39-cp39-macosx_11_0_arm64.whl.
File metadata
- Download URL: samlb-0.6.0-cp39-cp39-macosx_11_0_arm64.whl
- Upload date:
- Size: 377.7 kB
- Tags: CPython 3.9, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d91305197cc4387dff1ac1468050de8f14a45f8b7561a6727808109911b6a502
|
|
| MD5 |
14d56500c6239b5e5cd1c9d18f7bbc9f
|
|
| BLAKE2b-256 |
f99c599f188a4cc2923da8519265be04948ef4f702c71ac5907f3ecb1eb35f7c
|
Provenance
The following attestation bundles were made for samlb-0.6.0-cp39-cp39-macosx_11_0_arm64.whl:
Publisher:
publish.yml on TechyNilesh/samlb
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
samlb-0.6.0-cp39-cp39-macosx_11_0_arm64.whl -
Subject digest:
d91305197cc4387dff1ac1468050de8f14a45f8b7561a6727808109911b6a502 - Sigstore transparency entry: 2599363560
- Sigstore integration time:
-
Permalink:
TechyNilesh/samlb@511cd035d18fdc57a118564903dc30628340426f -
Branch / Tag:
refs/tags/v0.6.0 - Owner: https://github.com/TechyNilesh
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@511cd035d18fdc57a118564903dc30628340426f -
Trigger Event:
push
-
Statement type: