Skip to main content

A library to sample temporal random walks from in-memory temporal graphs

Project description

🚀 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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

tempest_rw-1.0.1-cp311-cp311-manylinux_2_34_x86_64.whl (7.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ x86-64

tempest_rw-1.0.1-cp310-cp310-manylinux_2_34_x86_64.whl (7.1 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.34+ x86-64

tempest_rw-1.0.1-cp39-cp39-manylinux_2_34_x86_64.whl (7.1 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.34+ x86-64

File details

Details for the file tempest_rw-1.0.1-cp311-cp311-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for tempest_rw-1.0.1-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 92ebba62c5b8c135fe4d4a0cc793f633e8833736294ad0fe12b8bf2f4060839d
MD5 7933a17e9e9724aeaf27e0923bf2f191
BLAKE2b-256 e57a0bb752e825b31f0f92c72f8b0455eab1b39a0f23763714b2532226dafecb

See more details on using hashes here.

File details

Details for the file tempest_rw-1.0.1-cp310-cp310-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for tempest_rw-1.0.1-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 50f53620da36d09760f738c9ba9702b7cba30ae7670eb800d6b1fd5b2771cd33
MD5 96482f85060d809ffca92bed45fc62f2
BLAKE2b-256 f07ec9449317d0812438e996d118fdf33032003abc27c1b9ff913ec75d03f049

See more details on using hashes here.

File details

Details for the file tempest_rw-1.0.1-cp39-cp39-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for tempest_rw-1.0.1-cp39-cp39-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 68b1c4e44702bae9b90d56676308461712e7152e9fb16cd358a44247c0bf3ae7
MD5 ad0c288ba3a256ba48349f3fa0f856df
BLAKE2b-256 3bb2713a5c77cc84aeef6e8e553dcf877da55a2cb73ec5a12f2b0c38e93cceae

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page