Examples
Basic Embedding
import graphem_rapids as gr
# Generate and embed
adjacency = gr.generate_er(n=1000, p=0.01, seed=42)
embedder = gr.create_graphem(adjacency, n_components=3)
embedder.run_layout(num_iterations=50)
# Get results
positions = embedder.get_positions()
embedder.display_layout()
Community Detection Visualization
import graphem_rapids as gr
# Generate graph with communities
adjacency, labels = gr.generate_sbm(
n_per_block=100,
num_blocks=5,
p_in=0.2,
p_out=0.01,
labels=True,
seed=42
)
# Compute 2D embedding
embedder = gr.create_graphem(adjacency, n_components=2)
embedder.run_layout(num_iterations=50)
# Visualize with community colors
embedder.display_layout(node_colors=labels, node_size=5)
Influence Maximization
import graphem_rapids as gr
import networkx as nx
# Generate graph
adjacency = gr.generate_er(n=1000, p=0.01, seed=42)
# Compute embedding
embedder = gr.create_graphem(adjacency, n_components=3)
embedder.run_layout(num_iterations=50)
# Select influential nodes (fast, embedding-based)
seeds = gr.graphem_seed_selection(embedder, k=10)
# Evaluate influence spread
G = nx.from_scipy_sparse_array(adjacency)
influence, _ = gr.ndlib_estimated_influence(G, seeds, p=0.1, iterations_count=100)
print(f"Influence: {influence:.1f} nodes ({influence/len(G)*100:.1f}%)")
# Compare with greedy (slow, optimal)
greedy_seeds, _ = gr.greedy_seed_selection(G, k=10, p=0.1)
greedy_influence, _ = gr.ndlib_estimated_influence(G, greedy_seeds, p=0.1, iterations_count=100)
print(f"Greedy influence: {greedy_influence:.1f} nodes ({greedy_influence/len(G)*100:.1f}%)")
Large-Scale Graph with cuVS
import graphem_rapids as gr
# Generate large graph
adjacency = gr.generate_er(n=200000, p=0.00005, seed=42)
# Force cuVS backend for large-scale
embedder = gr.GraphEmbedderCuVS(
adjacency,
n_components=3,
index_type='ivf_flat',
sample_size=2048,
batch_size=4096,
verbose=True
)
# Run layout
embedder.run_layout(num_iterations=30)
positions = embedder.get_positions()
Memory Management
import graphem_rapids as gr
from graphem_rapids.utils.memory_management import MemoryManager, get_gpu_memory_info
# Check GPU memory
mem_info = get_gpu_memory_info()
print(f"GPU: {mem_info['free']:.1f}GB free / {mem_info['total']:.1f}GB total")
# Automatic cleanup
with MemoryManager(cleanup_on_exit=True):
adjacency = gr.generate_er(n=50000, p=0.0001)
embedder = gr.create_graphem(adjacency, n_components=3)
embedder.run_layout(num_iterations=40)
positions = embedder.get_positions()
# GPU memory automatically cleaned up
Benchmarking Correlations
import graphem_rapids as gr
# Run correlation benchmark
results = gr.benchmark_correlations(
gr.generate_ba,
{"n": 1000, "m": 3, "seed": 42},
dim=2,
L_min=40,
num_iterations=50
)
# Print correlations with centrality measures
print("Spearman correlations with radial distance:")
for measure, corr in results['correlations'].items():
print(f"{measure:15s}: ρ={corr['rho']:6.3f}, p={corr['p']:.2e}")
Custom Parameters
import graphem_rapids as gr
adjacency = gr.generate_ws(n=1000, k=6, p=0.3, seed=42)
# Fine-tune layout parameters
embedder = gr.GraphEmbedderPyTorch(
adjacency,
n_components=2,
device='cuda',
L_min=2.0, # Longer minimum spring length
k_attr=0.1, # Weaker attraction
k_inter=1.0, # Stronger intersection repulsion
n_neighbors=15, # More neighbors for intersection detection
sample_size=512,
batch_size=1024,
memory_efficient=True
)
embedder.run_layout(num_iterations=100)
embedder.display_layout()
Bipartite Graph Visualization
import graphem_rapids as gr
import numpy as np
# Generate bipartite graph
adjacency = gr.generate_complete_bipartite_graph(n_top=30, n_bottom=50)
# Compute 2D embedding
embedder = gr.create_graphem(adjacency, n_components=2)
embedder.run_layout(num_iterations=50)
# Color by partition
n_top, n_bottom = 30, 50
colors = np.concatenate([np.zeros(n_top), np.ones(n_bottom)])
embedder.display_layout(node_colors=colors, node_size=8)
Delaunay Triangulation
import graphem_rapids as gr
# Generate planar graph from Delaunay triangulation
adjacency = gr.generate_delaunay_triangulation(n=200, seed=42)
# Embed in 2D to preserve planarity
embedder = gr.create_graphem(adjacency, n_components=2)
embedder.run_layout(num_iterations=50)
# Visualize
embedder.display_layout(edge_width=0.5, node_size=3)