README.md

May 29, 2026 · View on GitHub

A Comprehensive Benchmark Suite for Topological Deep Learning

Assess how your model compares against state-of-the-art topological neural networks.

Lint Test Codecov Docs Python license slack

OverviewGet StartedTutorialsNeural NetworksLiftings and TransformsDatasetsReferences


🏆 2026 Topological Deep Learning Challenge is now live! Check out guidelines and full details on the challenge website.


:pushpin: Overview

TopoBench (TB) is a modular Python library designed to standardize benchmarking and accelerate research in Topological Deep Learning (TDL). In particular, TB allows training and comparing the performances of all sorts of Topological Neural Networks (TNNs) across the different topological domains, where by topological domain we refer to a graph, a simplicial complex, a cellular complex, or a hypergraph. For detailed information, please refer to the TopoBench: A Framework for Benchmarking Topological Deep Learning paper.

The main pipeline trains and evaluates a wide range of state-of-the-art TNNs and Graph Neural Networks (GNNs) (see :gear: Neural Networks) on numerous and varied datasets and benchmark tasks (see :books: Datasets ). Additionally, the library offers the ability to transform, i.e. lift, each dataset from one topological domain to another (see :rocket: Liftings and Transforms), enabling for the first time an exhaustive inter-domain comparison of TNNs.

:jigsaw: Get Started

TopoBench now uses uv, an extremely fast Python package manager and resolver. This allows for nearly instantaneous environment setup and reproducible builds.

  1. Install uv

  2. Clone and Navigate:

    git clone git@github.com:geometric-intelligence/topobench.git
    cd TopoBench
    
  3. Initialize Environment: Use our centralized setup script to handle Python 3.11 virtualization and specialized hardware (CUDA) mapping.

    # Usage: source uv_env_setup.sh [cpu|cu118|cu121]
    source uv_env_setup.sh cpu
    

    This script performs the following:

    • Creates a .venv using Python 3.11.
    • Dynamically configures pyproject.toml to point to the correct PyTorch and PyG (PyTorch Geometric) wheels for your platform.
    • Generates a precise uv.lock file and syncs all dependencies.

🛠️ Manual Environment Setup

If you prefer to manage the environment manually or are integrating into an existing workflow:

# Create a virtual environment with strict versioning
uv venv --python 3.11
source .venv/bin/activate

# Sync dependencies including all extras (dev, test, and doc)
uv sync --all-extras

🚄 Run Training Pipeline Once the environment is active, you can launch the TopoBench pipeline:

# Using the activated virtual environment
python -m topobench

# Or execute directly via uv without manual activation
uv run python -m topobench

✅ Verify Installation You can verify that the correct versions of Torch and CUDA are detected by running:

python -c "import torch; print(f'Torch: {torch.__version__} | CUDA: {torch.version.cuda}')"

Customizing Experiment Configuration

Thanks to hydra implementation, one can easily override the default experiment configuration through the command line. For instance, the model and dataset can be selected as:

python -m topobench model=cell/cwn dataset=graph/MUTAG

Remark: By default, our pipeline identifies the source and destination topological domains, and applies a default lifting between them if required.

Transforms allow you to modify your data before processing. There are two main ways to configure transforms: individual transforms and transform groups.

Configuring Individual Transforms

When configuring a single transform, follow these steps:

  1. Choose a desired transform (e.g., a lifting transform).
  2. Identify the relative path to the transform configuration.

The folder structure for transforms is as follows:

├── configs
│ ├── data_manipulations
│ ├── transforms
│ │ └── liftings
│ │   ├── graph2cell
│ │   ├── graph2hypergraph
│ │   └── graph2simplicial

To override the default transform, use the following command structure:

python -m topobench model=<model_type>/<model_name> dataset=<data_type>/<dataset_name> transforms=[<transform_path>/<transform_name>]

For example, to use the discrete_configuration_complex lifting with the cell/cwn model:

python -m topobench model=cell/cwn dataset=graph/MUTAG transforms=[liftings/graph2cell/discrete_configuration_complex]
Configuring Transform Groups

For more complex scenarios, such as combining multiple data manipulations, use transform groups:

  1. Create a new configuration file in the configs/transforms directory (e.g., custom_example.yaml).
  2. Define the transform group in the YAML file:
defaults:
- data_manipulations@data_transform_1: identity
- data_manipulations@data_transform_2: node_degrees
- data_manipulations@data_transform_3: one_hot_node_degree_features
- liftings/graph2cell@graph2cell_lifting: cycle

Important: When composing multiple data manipulations, use the @ operator to assign unique names to each transform.

  1. Run the experiment with the custom transform group:
python -m topobench model=cell/cwn dataset=graph/ZINC transforms=custom_example

This approach allows you to create complex transform pipelines, including multiple data manipulations and liftings, in a single configuration file.

By mastering these configuration options, you can easily customize your experiments to suit your specific needs, from simple model and dataset selections to complex data transformation pipelines. ---

Additional Notes

  • Automatic Lifting: By default, our pipeline identifies the source and destination topological domains and applies a default lifting between them if required.
  • Fine-Grained Configuration: The same CLI override mechanism applies when modifying finer configurations within a CONFIG GROUP.
    Please refer to the official hydra documentation for further details.

:bike: Experiments Reproducibility

The scripts/ folder contains all the scripts needed to reproduce the experiments from our works. Each subfolder corresponds to one paper:

For example, to reproduce Table 1 from the TopoBench paper:

bash scripts/topobench/reproduce.sh

:anchor: Tutorials

Explore our tutorials for further details on how to add new datasets, transforms/liftings, and benchmark tasks.

:gear: Neural Networks

We list the neural networks trained and evaluated by TopoBench, organized by the topological domain over which they operate: graph, simplicial complex, cellular complex or hypergraph. Many of these neural networks were originally implemented in TopoModelX.

Pointclouds

ModelReference
DeepSetsDeep Sets

Graphs

ModelReference
GATGraph Attention Networks
GINHow Powerful are Graph Neural Networks?
GCNSemi-Supervised Classification with Graph Convolutional Networks
GraphMLPGraph-MLP: Node Classification without Message Passing in Graph
GPSRecipe for a General, Powerful, Scalable Graph Transformer

Simplicial Complexes

ModelReference
SANSimplicial Attention Neural Networks
SCCNEfficient Representation Learning for Higher-Order Data with Simplicial Complexes
SCCNNConvolutional Learning on Simplicial Complexes
SCNSimplicial Complex Neural Networks

Cellular Complexes

ModelReference
CANCell Attention Network
CCCNInspired by A learning algorithm for computational connected cellular network, implementation adapted from Generalized Simplicial Attention Neural Networks
CXNCell Complex Neural Networks
CWNWeisfeiler and Lehman Go Cellular: CW Networks

Hypergraphs

ModelReference
AllDeepSetYou are AllSet: A Multiset Function Framework for Hypergraph Neural Networks
AllSetTransformerYou are AllSet: A Multiset Function Framework for Hypergraph Neural Networks
EDGNNEquivariant Hypergraph Diffusion Neural Operators
UniGNNUniGNN: a Unified Framework for Graph and Hypergraph Neural Networks
UniGNN2UniGNN: a Unified Framework for Graph and Hypergraph Neural Networks

Combinatorial Complexes

ModelReference
HOPSEHOPSE: Scalable Higher-Order Positional and Structural Encoder for Combinatorial Representations
GCCNTopoTune: A Framework for Generalized Combinatorial Complex Neural Networks
SaNNSaNN: Simple Yet Powerful Simplicial-aware Neural Networks

Remark: TopoBench includes TopoTune, a comprehensive framework for easily designing new, general TDL models on any domain using any (graph) neural network as a backbone. Please check out the extended TopoTune wiki page for further details on how to leverage this framework to define and train customized topological neural network architectures.

Non-relational Models

ModelReference
MLPStandard implementation of a Multi-Layer Perceptron.

Remark: Note that MLP only works in single-graph transductive settings or with datasets where all graphs have the same number of nodes.

:rocket: Liftings and Transforms

We list the liftings used in TopoBench to transform datasets. Here, a lifting refers to a function that transforms a dataset defined on a topological domain (e.g., on a graph) into the same dataset but supported on a different topological domain (e.g., on a simplicial complex).

Structural Liftings

The structural lifting is responsible for the transformation of the underlying relationships or elements of the data. For instance, it might determine how nodes and edges in a graph are mapped into triangles and tetrahedra in a simplicial complex. This structural transformation can be further categorized into connectivity-based, where the mapping relies solely on the existing connections within the data, and feature-based, where the data's inherent properties or features guide the new structure.

We enumerate below the structural liftings currently implemented in TopoBench; please check out the provided description links for further details.

Remark:: Most of these liftings are adaptations of winner submissions of the ICML TDL Challenge 2024 (paper | repo); see the Structural Liftings wiki for a complete list of compatible liftings.

Graph to Simplicial Complex

NameTypeDescription
DnD LiftingFeature-basedWiki page
Random Latent Clique LiftingConnectivity-basedWiki page
Line LiftingConnectivity-basedWiki page
Neighbourhood Complex LiftingConnectivity-basedWiki page
Graph Induced LiftingConnectivity-basedWiki page
Eccentricity LiftingConnectivity-basedWiki page
Feature‐Based Rips ComplexBoth connectivity and feature-basedWiki page
Clique LiftingConnectivity-basedWiki page
K-hop LiftingConnectivity-basedWiki page

Graph to Cell Complex

NameTypeDescription
Discrete Configuration ComplexConnectivity-basedWiki page
Cycle LiftingConnectivity-basedWiki page

Graph to Hypergraph

NameTypeDescription
Expander Hypergraph LiftingConnectivity-basedWiki page
Kernel LiftingBoth connectivity and feature-basedWiki page
Mapper LiftingConnectivity-basedWiki page
Forman‐Ricci Curvature Coarse Geometry LiftingConnectivity-basedWiki page
KNN LiftingFeature-basedWiki page
K-hop LiftingConnectivity-basedWiki page

Pointcloud to Simplicial

NameTypeDescription
Delaunay LiftingFeature-basedWiki page
Random Flag ComplexFeature-basedWiki page

Pointcloud to Hypergraph

NameTypeDescription
Mixture of Gaussians MST liftingFeature-basedWiki page
PointNet LiftingFeature-basedWiki page
Voronoi LiftingFeature-basedWiki page

Simplicial to Combinatorial

NameTypeDescription
Coface LiftingConnectivity-basedWiki page

Hypergraph to Combinatorial

NameTypeDescription
Universal Strict LiftingConnectivity-basedWiki page

Feature Liftings

Feature liftings address the transfer of data attributes or features during mapping, ensuring that the properties associated with the data elements are consistently preserved in the new representation.

NameDescriptionSupported Domains
ProjectionSumProjects r-cell features of a graph to r+1-cell structures utilizing incidence matrices (B_{r}).All
ConcatenationLiftingConcatenate r-cell features to obtain r+1-cell features.Simplicial

Data Transformations

Specially useful in pre-processing steps, these are the general data manipulations currently implemented in TopoBench:

TransformDescription
OneHotDegreeFeaturesAdds the node degree as one hot encodings to the node features.
NodeFeaturesToFloatConverts the node features of the input graph to float.
NodeDegreesCalculates the node degrees of the input graph.
KeepSelectedDataFieldsKeeps only the selected fields of the input data.
KeepOnlyConnectedComponentKeep only the largest connected components of the input graph.
InfereRadiusConnectivityGenerates the radius connectivity of the input point cloud.
InfereKNNConnectivityGenerates the k-nearest neighbor connectivity of the input point cloud.
IdentityTransformAn identity transform that does nothing to the input data.
EqualGausFeaturesGenerates equal Gaussian features for all nodes.
CalculateSimplicialCurvatureCalculates the simplicial curvature of the input graph.
LapPEComputes Laplacian eigenvectors positional encodings.
RWSEComputes Random Walk structural encodings.
CombinedPSEsComputes one or several positional and/or structural encodings.

:books: Datasets

Graph

DatasetTaskDescriptionReference
CoraClassificationCocitation dataset.Source
CiteseerClassificationCocitation dataset.Source
PubmedClassificationCocitation dataset.Source
MUTAGClassificationGraph-level classification.Source
PROTEINSClassificationGraph-level classification.Source
NCI1ClassificationGraph-level classification.Source
NCI109ClassificationGraph-level classification.Source
IMDB-BINClassificationGraph-level classification.Source
IMDB-MULClassificationGraph-level classification.Source
REDDITClassificationGraph-level classification.Source
GraphUniverse-INDClassificationSynthetic Generator Inductive Node Classification.Source
GraphUniverse-TRAClassificationSynthetic Generator Transductive Node Classification.Source
AmazonClassificationHeterophilic dataset.Source
MinesweeperClassificationHeterophilic dataset.Source
EmpireClassificationHeterophilic dataset.Source
TolokersClassificationHeterophilic dataset.Source
US-county-demosRegressionIn turn each node attribute is used as the target label.Source
ZINCRegressionGraph-level regression.Source

Remark: GraphUniverse is a synthetic graph generator for community-structured data, enabling control over graph properties like homophily, feature-signal and degree structure. Live Demo: Demo. Package release: PyPi. GitHub repository: Repo.

Simplicial

DatasetTaskDescriptionReference
MantraClassification, Multi-label ClassificationPredict topological attributes of manifold triangulationsSource (This project includes third-party datasets. See third_party_licenses.txt for licensing information.)

Hypergraph

DatasetTaskDescriptionReference
Cora-CocitationClassificationCocitation dataset.Source
Citeseer-CocitationClassificationCocitation dataset.Source
PubMed-CocitationClassificationCocitation dataset.Source
Cora-CoauthorshipClassificationCocitation dataset.Source
DBLP-CoauthorshipClassificationCocitation dataset.Source

:mag: References

To learn more about TopoBench, we invite you to read the paper:

@article{
telyatnikov2025topobench,
title={TopoBench: A Framework for Benchmarking Topological Deep Learning},
author={Lev Telyatnikov and Guillermo Bernardez and Marco Montagna and Mustafa Hajij and Martin Carrasco and Pavlo Vasylenko and Mathilde Papillon and Ghada Zamzmi and Michael T Schaub and Jonas Verhellen and Pavel Snopov and Bertran Miquel-Oliver and Manel Gil-Sorribes and Alexis Molina and VICTOR GUALLAR and Theodore Long and Julian Suk and Patryk Rygiel and Alexander V Nikitin and Giordan Escalona and Michael Banf and Dominik Filipiak and Liliya Imasheva and Max Schattauer and Alvaro L. Martinez and Halley Fritze and Marissa Masden and Valentina S{\'a}nchez and Manuel Lecha and Andrea Cavallo and Claudio Battiloro and Matthew Piekenbrock and Mauricio Tec and George Dasoulas and Nina Miolane and Simone Scardapane and Theodore Papamarkou},
journal={Journal of Data-centric Machine Learning Research},
issn={XXXX-XXXX},
year={2025},
url={https://openreview.net/forum?id=07sTzyEVtY},
note={}
}

If you find TopoBench useful, we would appreciate if you cite us!

:mouse: Additional Details

Hierarchy of configuration files
├── configs                   <- Hydra configs
│   ├── callbacks                <- Callbacks configs
│   ├── dataset                  <- Dataset configs
│   │   ├── graph                    <- Graph dataset configs
│   │   ├── hypergraph               <- Hypergraph dataset configs
│   │   └── simplicial               <- Simplicial dataset configs
│   ├── debug                    <- Debugging configs
│   ├── evaluator                <- Evaluator configs
│   ├── experiment               <- Experiment configs
│   ├── extras                   <- Extra utilities configs
│   ├── hparams_search           <- Hyperparameter search configs
│   ├── hydra                    <- Hydra configs
│   ├── local                    <- Local configs
│   ├── logger                   <- Logger configs
│   ├── loss                     <- Loss function configs
│   ├── model                    <- Model configs
│   │   ├── cell                     <- Cell model configs
│   │   ├── graph                    <- Graph model configs
│   │   ├── hypergraph               <- Hypergraph model configs
│   │   └── simplicial               <- Simplicial model configs
│   ├── optimizer                <- Optimizer configs
│   ├── paths                    <- Project paths configs
│   ├── scheduler                <- Scheduler configs
│   ├── trainer                  <- Trainer configs
│   ├── transforms               <- Data transformation configs
│   │   ├── data_manipulations       <- Data manipulation transforms
│   │   ├── dataset_defaults         <- Default dataset transforms
│   │   ├── feature_liftings         <- Feature lifting transforms
│   │   └── liftings                 <- Lifting transforms
│   │       ├── graph2cell               <- Graph to cell lifting transforms
│   │       ├── graph2hypergraph         <- Graph to hypergraph lifting transforms
│   │       ├── graph2simplicial         <- Graph to simplicial lifting transforms
│   │       ├── graph2cell_default.yaml  <- Default graph to cell lifting config
│   │       ├── graph2hypergraph_default.yaml <- Default graph to hypergraph lifting config
│   │       ├── graph2simplicial_default.yaml <- Default graph to simplicial lifting config
│   │       ├── no_lifting.yaml           <- No lifting config
│   │       ├── custom_example.yaml       <- Custom example transform config
│   │       └── no_transform.yaml         <- No transform config
│   ├── wandb_sweep              <- Weights & Biases sweep configs
│   │
│   ├── __init__.py              <- Init file for configs module
│   └── run.yaml               <- Main config for training
More information regarding Topological Deep Learning

Topological Graph Signal Compression

Architectures of Topological Deep Learning: A Survey on Topological Neural Networks

TopoX: a suite of Python packages for machine learning on topological domains


📢 Get in Touch!

We are always open to collaborations and discussions on TDL research.
Feel free to reach out via email if you want to collaborate, do your thesis with our team, or open a discussion for various opportunities.

📧 Contact Email: topological.intelligence@gmail.com
▶️ YouTube Channel: Topological Intelligence