Skip to main content

🚀 Tempest

Build Passing PyPI Latest Release PyPI Downloads

A high-performance temporal random walk sampler for dynamic networks with GPU acceleration. Built for scale.


🔥 Why Tempest?

✅ Performance First – GPU-accelerated sampling for massive networks
✅ Memory Efficient – Smart memory management for large graphs
✅ Flexible Integration – Easy Python bindings with NumPy/NetworkX support
✅ Production Ready – Tested with hundreds of extensive unit tests.
✅ Multi Platform Builds and runs seamlessly on devices with or without CUDA.


⚡ Quick Start

from tempest import Tempest

# Create a directed temporal graph
walker = Tempest(is_directed=True, use_gpu=True, max_time_capacity=-1)

# Add edges - can be numpy arrays or python lists
sources = [3, 2, 0, 3, 3, 1]
targets = [4, 4, 2, 1, 2, 4]
timestamps = [71, 82, 19, 34, 79, 19]

walker.add_multiple_edges(sources, targets, timestamps)

# Sample walks with exponential time bias
walk_nodes, walk_timestamps, walk_lens, edge_features = walker.get_random_walks_and_times_for_all_nodes(
    max_walk_len=5,
    walk_bias="ExponentialIndex",
    num_walks_per_node=10,
    initial_edge_bias="Uniform"
)
# edge_features is None when no edge features were added (feature_dim=0)

✨ Key Features

  • ⚡ GPU acceleration for large graphs
  • 🎯 Multiple sampling strategies – Uniform, Linear, Exponential
  • 🧠 Advanced temporal biases – ExponentialWeight (CTDNE-style) and TemporalNode2Vec
  • 🔄 Forward & backward temporal walks
  • 📡 Rolling window support for streaming data
  • 🏷️ Optional edge feature propagation from input edges to sampled walks
  • 🔗 NetworkX integration
  • 🛠️ Efficient memory management
  • ⚙️ Uses C++ std libraries or Thrust API selectively based on hardware availability and configuration.

🏷️ Edge Features (Optional)

If your edges carry attributes (weights, embeddings, types, etc.), you can pass them to add_multiple_edges(...) and receive aligned edge features for each sampled transition.

import numpy as np
from tempest import Tempest

walker = Tempest(is_directed=True, use_gpu=False)

sources = np.array([0, 0, 1], dtype=np.int32)
targets = np.array([1, 2, 2], dtype=np.int32)
timestamps = np.array([10, 20, 30], dtype=np.int64)

# shape: [num_edges, feature_dim]
edge_features = np.array([
    [0.1, 1.0],
    [0.2, 0.5],
    [0.9, 0.3],
], dtype=np.float32)

walker.add_multiple_edges(sources, targets, timestamps, edge_features=edge_features)

walk_nodes, walk_timestamps, walk_lens, walk_edge_features = walker.get_random_walks_and_times(
    max_walk_len=4,
    walk_bias="Uniform",
    num_walks_total=5,
)

# walk_edge_features.shape == [num_walks, max_walk_len - 1, feature_dim]

walk_edge_features is None when no edge features are provided.

🏷️ Node Features

The library can also store dense node features. Use set_node_features(node_ids, node_features) to populate features for specific nodes, then get_node_features() to retrieve the dense matrix.


🧭 Bias Selection Notes

  • Use ExponentialIndex or Linear for recency-aware sampling with no extra setup.
  • Use ExponentialWeight when you want CTDNE-style weight computation (enable_weight_computation=True, optionally tune timescale_bound).
  • Use TemporalNode2Vec when you need return/in-out control via temporal_node2vec_p and temporal_node2vec_q.

📦 Dependencies

Dependency Purpose
pybind11 Python-C++ bindings
python3 Required for building the python interfaces
gtest Unit testing framework

💡 Tip: Use vcpkg to easily install and link the C++ dependencies.


📦 Installation

GPU (default) — Linux with NVIDIA driver

pip install tempest-rw

This pulls the manylinux wheel plus the two NVIDIA CUDA runtime libraries that the wheel links against:

  • nvidia-cuda-runtime-cu12 — provides libcudart.so.12
  • nvidia-curand-cu12 — provides libcurand.so.10

CPU-only — source build

Machines without a GPU (or without a driver) should build from source; the CMake config detects the absence of nvcc and compiles a CPU-only extension:

pip install --no-binary tempest-rw tempest-rw

You'll need a C++17 compiler, CMake, and OpenMP/TBB installed (via vcpkg — see the Dependencies section above).

📖 Documentation

📌 C++ Documentation →
📌 Python Interface Documentation →


📚 Citation

If you use Tempest in your research, please cite:

Md Ashfaq Salehin, George Parisis, and Luc Berthouze. 2026. Tempest: A GPU-Accelerated Engine for Streaming Temporal Random Walks. In Proceedings of the 55th International Conference on Parallel Processing (ICPP '26), Singapore.

@inproceedings{salehin2026tempest,
  title     = {Tempest: A GPU-Accelerated Engine for Streaming Temporal Random Walks},
  author    = {Salehin, Md Ashfaq and Parisis, George and Berthouze, Luc},
  booktitle = {Proceedings of the 55th International Conference on Parallel Processing (ICPP '26)},
  address   = {Singapore},
  year      = {2026},
  publisher = {Association for Computing Machinery},
  doi       = {10.1145/XXXXXXX.XXXXXXX}
}

👨‍🔬 Built by Packets Research Lab

🚀 Contributions welcome! Open a PR or issue if you have suggestions.

Metadata

Release files for tempest-rw 1.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for tempest-rw 1.0.2
File Interpreter ABI Platform
tempest_rw-1.0.2-cp311-cp311-manylinux_2_34_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.34+ x86-64 Details
tempest_rw-1.0.2-cp310-cp310-manylinux_2_34_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.34+ x86-64 Details
tempest_rw-1.0.2-cp39-cp39-manylinux_2_34_x86_64.whl CPython 3.9 CPython 3.9 Linux glibc 2.34+ x86-64 Details

Total release size: 21.4 MB

Release files / tempest_rw-1.0.2-cp311-cp311-manylinux_2_34_x86_64.whl

Download URL tempest_rw-1.0.2-cp311-cp311-manylinux_2_34_x86_64.whl
Size 7.1 MB
Tags CPython 3.11 Linux glibc 2.34+ x86-64
SHA-256 checksum
How to use checksums
81048ddd6f181aa87d74a5d41da63c2d2e6b625dd637bd54d49d68b36b950fac
BLAKE2b-256 checksum
How to use checksums
4020c10e1b0e49d21481ba66d06d842a1391452c695815d3bc0e44e937254ebd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.7

Release files / tempest_rw-1.0.2-cp310-cp310-manylinux_2_34_x86_64.whl

Download URL tempest_rw-1.0.2-cp310-cp310-manylinux_2_34_x86_64.whl
Size 7.1 MB
Tags CPython 3.10 Linux glibc 2.34+ x86-64
SHA-256 checksum
How to use checksums
6af28cdd1d44247433b755683276508c9bb2e7fc97a8c75756a7bf81cc9c1385
BLAKE2b-256 checksum
How to use checksums
034cea0aa183dc2c671f398ca1e6bd2e34a180f047ec89e2cda0eaf49271adae
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.7

Release files / tempest_rw-1.0.2-cp39-cp39-manylinux_2_34_x86_64.whl

Download URL tempest_rw-1.0.2-cp39-cp39-manylinux_2_34_x86_64.whl
Size 7.1 MB
Tags CPython 3.9 Linux glibc 2.34+ x86-64
SHA-256 checksum
How to use checksums
2ff8db19037c3df9a8f9f407367bf77e4601010eb5b9c1bb9f5cbef5212530b4
BLAKE2b-256 checksum
How to use checksums
16f4b560227ec98e7e88267f31373fd6413f0c29c15a0b97fea14b9fba711de0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.7

Release history Release notifications | RSS feed

1.0.6

3 release files

1.0.5

3 release files

1.0.4

1 release file

1.0.3

3 release files

This release

1.0.2 This release

3 release files

1.0.1

3 release files

1.0.0

3 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page