Published at ICLR 2026 · benchmark of 34 datasets and 12 classifiers · pip install pyrregular
Pyrregular is a Python framework for irregular time series: irregularly sampled data with uneven sampling, missing observations, signals recorded at different times, and variable-length sequences. It provides:
- datasets: the 34 naturally irregular datasets of the ICLR 2026 benchmark,
and more added over time, in one standardized format, downloaded on demand
with
load_dataset(list_datasets()shows them all); - a representation that keeps the irregularity: a sparse xarray format, with conversions to dense arrays for sktime, aeon, tslearn and PyPOTS;
- models and benchmarks: ready-to-use classification and regression pipelines, including the 12 classifiers evaluated in the paper.
Irregular time series made easy.
| 📖 Documentation · ⚙️ Tutorials | |
|---|---|
| CI/CD | |
| Code | |
| Community | |
| Paper |
You can install via pip with:
pip install pyrregularFor the third-party models, install all of them:
pip install "pyrregular[models]"or only the family you need: borf, sktime, tslearn, pypots, jax
(e.g. pip install "pyrregular[sktime]"). The extra for each pipeline is listed in the table below.
If you want to see all the datasets available, you can use the list_datasets function:
from pyrregular import list_datasets
df = list_datasets()To load a dataset, you can use the load_dataset function. For example, to load the "Garment" dataset, you can do:
from pyrregular import load_dataset
df = load_dataset("Garment.h5")The dataset is saved in the default os cache directory, which can be found with:
import pooch
print(pooch.os_cache("pyrregular"))The repository is hosted at: https://huggingface.co/datasets/splandi/pyrregular/
The datasets are versioned: each pyrregular release downloads a fixed version of the files,
tagged on Hugging Face (currently data-v1).
To use the data of an older release, install that release (e.g. pip install "pyrregular==0.3.1").
To use the dataset for classification, you can just "densify" it:
from pyrregular import load_dataset
df = load_dataset("Garment.h5")
X, _ = df.irr.to_dense()
y, split = df.irr.get_task_target_and_split()
X_train, X_test = X[split != "test"], X[split == "test"]
y_train, y_test = y[split != "test"], y[split == "test"]
# We have ready-to-go models from various libraries:
from pyrregular.models.rocket import rocket_pipeline
model = rocket_pipeline
model.fit(X_train, y_train)
model.score(X_test, y_test)There are several pipelines available in pyrregular.models:
| 💾 Library | 📖 Source | 🔗 Pipeline | ℹ️ Type | 📦 Extra |
|---|---|---|---|---|
fast-borf |
Spinnato et al. (2024) | borf | dictionary-based transform + lgbm classifier | borf |
fast-borf |
Spinnato (2026) | iborf | time-aware dictionary-based transform + ridge classifier | borf |
sktime |
rifc | interval-based transform + lgbm classifier | sktime |
|
diffrax |
Kidger et al. (2020) | ncde | neural controlled differential equations | jax |
pypots |
Cao et al. (2018) | brits | bidirectional recurrent imputation network | pypots |
pypots |
Che et al. (2018) | grud | gated recurrent unit with decay | pypots |
pypots |
Zhang et al. (2021) | raindrop | graph neural network | pypots |
pypots |
Du et al. (2023) | saits | self-attention-based imputation transformer | pypots |
pypots |
Wu et al. (2022) | timesnet | temporal 2d-variation transformer | pypots |
sktime |
Ke et al. (2017) | lgbm | gradient boosted tree | sktime |
sktime |
Dempster et al. (2021) | rocket | kernel-based transform + lgbm classifier | sktime |
sktime |
Bagheri et al. (2016) | svm | support vector machine with distance kernel | sktime |
tslearn |
Sakoe & Chiba (1978) | knn | distance-based with dynamic time warping | tslearn |
Notes
iborfis inpyrregular.models.borf(from pyrregular.models.borf import iborf_pipeline) and uses the timestamps: give itX, _ = df.irr.to_dense(concatenate_time=True, normalize_time=True).raindropalso needstorch-scatter, built for your torch/CUDA version (see the PyG install instructions).- To reproduce the paper,
list_paper_models()lists its 12 models andpyrregular.models.get_paper_model(name)returns a fresh copy of each pipeline. The paper's BORF is the aeon implementation (pip install "pyrregular[aeon]"). - These pipelines wrap fast-moving third-party libraries. They are tested weekly against the latest versions, but an upstream release can break one between pyrregular releases; to reproduce the paper results exactly, pin the library versions.
Regression is still work in progress, but is available for some datasets:
from pyrregular import load_dataset
from sklearn.pipeline import make_pipeline
from aeon.transformations.collection.dictionary_based import BORF
from sklearn.linear_model import LassoCV
df = load_dataset("Garment.h5")
X, _ = df.irr.to_dense()
y, split = df.irr.get_task_target_and_split("regression")
X_train, X_test = X[split != "test"], X[split == "test"]
y_train, y_test = y[split != "test"], y[split == "test"]
borf_pipeline = make_pipeline(
BORF(),
LassoCV(),
)
model = borf_pipeline
model.fit(X_train, y_train)
model.score(X_test, y_test)| 📈 Dataset | 📖 Source |
|---|---|
| Alembics Bowls Flasks | Spinnato & Landi, 2025 |
| AllGestureWiimoteX | Guna et al., 2014 |
| AllGestureWiimoteY | Guna et al., 2014 |
| AllGestureWiimoteZ | Guna et al., 2014 |
| Animals | Ferrero et al., 2018 |
| AsphaltObstaclesCoordinates | Souza, 2018 |
| AsphaltPavementTypeCoordinates | Souza, 2018 |
| AsphaltRegularityCoordinates | Souza, 2018 |
| CharacterTrajectories | Williams et al., 2006 |
| DodgerLoopDay | Ihler et al., 2006 |
| DodgerLoopGame | Ihler et al., 2006 |
| DodgerLoopWeekend | Ihler et al., 2006 |
| Geolife | Zheng et al., 2009; Zheng et al., 2008; Zheng et al., 2010 |
| GestureMidAirD1 | Caputo et al., 2018 |
| GestureMidAirD2 | Caputo et al., 2018 |
| GestureMidAirD3 | Caputo et al., 2018 |
| GesturePebbleZ1 | Mezari & Maglogiannis, 2018 |
| GesturePebbleZ2 | Mezari & Maglogiannis, 2018 |
| GPS Data of Seabirds | Browning et al., 2018 |
| InsectWingbeat | Chen et al., 2014 |
| JapaneseVowels | Kudo et al., 1999 |
| Localization Data for Person Activity | Vidulin et al., 2010 |
| MelbournePedestrian | City of Melbourne, 2019 |
| MIMIC-III Clinical Database (Demo) | Johnson et al., 2016; Johnson et al., 2019; Goldberger et al., 2000 |
| PAMAP2 Physical Activity Monitoring | Reiss & Stricker, 2012 |
| PhysioNet 2012 | Silva et al., 2012 |
| PhysioNet 2019 | Reyna et al., 2020 |
| PickupGestureWiimoteZ | Guna et al., 2014 |
| PLAID | Gao et al., 2014 |
| Productivity Prediction of Garment Employees | Imran et al., 2021 |
| ShakeGestureWiimoteZ | Guna et al., 2014 |
| SpokenArabicDigits | Hammami & Bedda, 2010 |
| Taxi | Moreira-Matias et al., 2013 |
| Vehicles | Chorochronos Archive, 2019 |
If you use this package in your research, please cite the following paper:
@inproceedings{
spinnato2026pyrregular,
title={{PYRREGULAR}: A Unified Framework for Irregular Time Series, with Classification Benchmarks},
author={Francesco Spinnato and Cristiano Landi},
booktitle={The Fourteenth International Conference on Learning Representations},
year={2026},
url={https://openreview.net/forum?id=qetBM8nLkf}
}