Table of Contents
Getting Started
Add this to your Cargo.toml
:
[dependencies.rshyper]
features = [
"hyper_map",
"macros",
]
version = "0.1.x"
Features
The rshyper
library provides several features to enhance and isolate its functionality:
-
hyper_map
- A map-based hypergraph implementation. -
macros
- A set of macros to simplify hypergraph creation and manipulation.
Dependency related features
-
rand
- Parallel processing capabilities for efficient graph operations. -
rayon
- Parallel processing capabilities for efficient graph operations. -
serde
- Support for serialization and deserialization of hypergraphs. -
wasm
- WebAssembly support for running hypergraph operations in the browser.
Examples
For more detailed examples, please refer to the examples directory.
Example #1: Basic Usage
extern crate rshyper;
use rshyper::UnHyperMap;
fn main() -> rshyper::Result<()> {
// initialize a new instance of a hypergraph
let mut graph = UnHyperMap::<usize, usize>::undirected();
// use the macro to insert nodes into the graph
rshyper::hypergraph! {
graph {
nodes: {
let v0;
let v1 = 2;
let v2 = 3;
let v3 = 4;
};
edges: {
let e0 = [v0, v1];
let e1 = [v0, v2];
let e2 = [v1, v2, v3];
};
}
}
// verify the order (no. of nodes) within the graph
assert_eq!(graph.order(), 4);
// verify the size (no. of edges) within the graph
assert_eq!(graph.size(), 3);
// Get neighbors of vertex v1
let neighbors = graph.neighbors(&v1)?;
println!("Neighbors of {}: {:?}", v1, neighbors);
// Get degree of vertex v1
let degree = graph.get_degree_of_node(&v1);
println!("Degree of {v1}: {degree}");
// Remove a vertex
graph.remove_vertex(&v2)?;
println!("Removed vertex {v2}");
println!("---------\nFinal graph state: {:?}", graph);
Ok(())
}