Library / SDK
yandex-research/rtdl avatar
yandex-research/rtdl

RTDL's package is deprecated and its releases are paper announcements, not versions

Research on Tabular Deep Learning: Papers & Packages

1,168 stars124 forksPythonApache-2.0

At a glance

What is it?
Eleven tabular deep learning papers from 2019 to 2026 with code spread across a dozen repositories, two of which are not under the research organisation. The Python package is retired in favour of two successor packages, the release feed carries paper titles, and the default build target prints a greeting.
Who is it for?
Read this as an index with a deprecation notice attached, because that is what it is, and the index is genuinely good. Eleven papers in chronological order, each with a link, most with code, and the two most consequential recent ones with a clear statement of what replaced the package.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 176 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 10, 2026, and from our analysis. They are not legal advice.

Editorial analysis

The package is deprecated, the repository is not, and the two differ in quality

The note at the top of the page is the most important thing here, and it addresses three different groups of users. The repository itself is not deprecated, only the package, because it has been replaced by other packages. Users who installed the last PyPI release are pointed at a successor package that carries the same three models, a multilayer perceptron, a residual network and an FT-Transformer, with a slightly different API. Users who took the code from the main branch are told, firmly, to switch, because the unfinished embeddings implementation for continuous features there contained many unresolved issues. So the pip install and the git checkout are different products, and the repository tells you which one not to keep using.

The releases are an announcement feed with paper titles as tag names

There is no versioned release in the release history. The three entries are descriptive slugs with descriptive titles: one covering three papers on optimizers, data uncertainty and foundation-model finetuning, one announcing two new papers, and one titled for two papers in the same way. The newest carries a name that is three hyphenated topics and a timestamp one second after the last push, which is what a workflow that publishes a summary rather than a build looks like. The README tells you this is deliberate, instructing readers to watch releases for announcements on new projects. The gap between the middle entry, dated late 2024, and the newest, dated April 2026, is nineteen months of silence.

Two of the eleven code links do not point at the research organisation

The paper list runs from 2019 to 2026 and each entry carries a paper link, most carry a code link, and two carry a package link. The two package links are the successors named in the deprecation notice, so the migration path is signposted from both directions. The two links that leave the organisation are the 2022 pretraining-objectives paper, which points at a personal account, and the 2019 ensembles paper, which points at an account with an unrelated name. One paper, the 2025 study on data uncertainty, has no code link at all. So of eleven research outputs, eight have code under the same organisation, two are maintained elsewhere by individuals, and one has no implementation.

The default build target prints a greeting

The repository has a Makefile with seven declared targets, and the first of them is a target named default that echoes a greeting and stops. Everything real is in the rest: a clean target that removes bytecode caches, notebook checkpoints and four different tool caches plus the build directory; a lint target that runs three tools in check mode; a doctest target; and a typecheck target. There is also a chained target that runs clean, then lint, then doctest, then typecheck, carrying a comment that the order is important, which is the sort of note that appears after someone fixed a problem by moving a line. Nothing in the file runs the package's own examples.

The doctest target runs a script that the repository root does not contain

Beyond running a doctest runner over the package, the doctest target invokes a Python script against two README files by path, one under a directory named for the model-revisiting successor and one for the embeddings successor. Both of those successors live in separate repositories, so the paths are either local copies inside this package or leftovers from when the code lived here. The script itself, named for testing code blocks, is not among the top-level entries, which are limited to a licence, a gitignore, the Makefile, the readme, a conda environment file, the project manifest and the package directory. The clean target also removes a test-runner cache although no test runner is configured at the root.

Two formatters are configured at the same width, and the line-length rule is switched off for four files

Three style tools are configured. One formatter runs with string normalisation disabled, an import sorter runs with that formatter's profile, and a third tool runs with a line length of 88 and a target interpreter matching the project's Python floor, selecting rules including two whitespace checks. Two of those three overlap on line length, which is a configuration to maintain rather than a decision to make. The third tool also selects the long-line rule and then switches it off, per file, for four paths: two utility modules, the data module, the modules module and everything under the neural network subdirectory. That is the largest and most public part of the package exempted from the length rule the same configuration sets.

A 3.8 floor, a torch range spanning six years, and no lockfile

The project manifest declares a single runtime dependency with a floor and a ceiling, and the version and description are not written in it at all, being taken from the package module instead, which is how the build backend reads them. The interpreter floor is 3.8, and the style configuration targets that same floor, so the two agree. There is no lockfile among the top-level entries, and a conda environment file sits beside the manifest, so there are two ways to get an environment and neither one records exact versions. The type checker is configured to examine untyped function bodies and to ignore missing imports, with one override that switches off error reporting entirely for every test module inside the package.

Editorial conclusion

Read this as an index with a deprecation notice attached, because that is what it is, and the index is genuinely good. Eleven papers in chronological order, each with a link, most with code, and the two most consequential recent ones with a clear statement of what replaced the package. If you are starting on tabular deep learning, the 2019 ensembles paper, the 2021 model revisiting work, TabDDPM and TabR are the spine, and TabReD is worth reading before you trust any benchmark number. Two practical points. If you have the package installed, the path forward is the successor package rather than the main branch, which the authors themselves flag as holding unresolved work. And the code for two papers lives outside the research organisation, so check who maintains it before depending on it.

Frequently asked questions

What is RTDL?

Research on Tabular Deep Learning, a Yandex Research collection of papers and packages on deep learning for tabular data, running from a 2019 ensembles paper through model revisiting, diffusion modelling, TabR, TabReD and TabM to foundation-model finetuning and an optimizers benchmark.

Is the rtdl Python package deprecated?

The package is, while the repository is not. Users of the PyPI release are directed to the rtdl_revisiting_models package for the same models with a slightly different API, and users of the main branch are told to move to the newer packages because the embeddings work there had unresolved issues.

Which papers does the RTDL repository list?

Eleven, in reverse chronological order: an optimizers benchmark, a study of data uncertainty, foundation-model finetuning, TabM, TabReD, TabR, TabDDPM, pretraining objectives, numerical feature embeddings, model revisiting, and neural oblivious decision ensembles.

How do I run the checks in the RTDL repository?

The Makefile chains clean, lint, doctest and typecheck. Lint runs the import sorter and formatter in check mode plus the third style tool, typecheck runs the type checker, and doctest runs a doctest runner over the package and a separate script against two of its README files.

What does rtdl depend on?

One runtime dependency, torch with a floor of 1.8 and a ceiling below 3, and an interpreter floor of Python 3.8. Version and description are dynamic and read from the package module, and no lockfile is shipped.

Official sources

  1. Issues
  2. License: Apache-2.0
  3. README
  4. Releases
  5. yandex-research/rtdl on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/yandex-research-rtdl.svg)](https://hysenlabs.com/projects/yandex-research-rtdl)