use hypergraphx::{hypergraph, prelude::*};
fn main() {
{
let mut graph = UndirectedHypergraph::new();
graph.add_node("A");
graph.add_node("B");
graph.add_node("C");
let _ = dbg!(graph.add_edge(1, vec![0, 1]));
let _ = dbg!(graph.add_edge(2, vec![1, 2]));
let _ = dbg!(graph.add_edge(3, vec![0, 2]));
let _ = dbg!(graph.add_edge(4, vec![0, 1, 2]));
let _ = dbg!(graph.add_edge(5, vec![0, 1, 2, 3]));
let _ = dbg!(graph.add_edge(5, vec![0, 3]));
graph.add_node("D");
let _ = dbg!(graph.add_edge(5, vec![0, 3]));
graph.include_node(0, 3);
dbg!(graph.detach_node(0, 0));
dbg!(graph.induced_shgraph(&[0, 1, 2]));
dbg!(graph.shgraph_by_order(3));
dbg!(graph.remove_node(0));
dbg!(graph.neighbours(3));
}
{
let mut graph = DirectedHypergraph::new();
graph.add_nodes((0..6).map(|x| format!("Node {}", x)));
graph
.add_edge("Edge 0".to_string(), vec![0, 1], vec![2, 3])
.unwrap();
graph
.add_edge("Edge 1".to_string(), vec![2, 3], vec![4, 5])
.unwrap();
graph
.add_edge("Edge 2".to_string(), vec![4], vec![5])
.unwrap();
graph
.add_edge("Edge 3".to_string(), vec![0, 1, 2], vec![2, 4, 5])
.unwrap();
dbg!(graph.out_neighbours(3));
dbg!(graph.in_neighbours(4));
graph.include_source_node(0, 4);
dbg!(graph.detach_target_node(1, 5));
dbg!(&graph);
dbg!(graph.remove_node(0));
dbg!(graph.remove_edge(2));
dbg!(&graph);
}
hypergraph! {
let mut graph: UndirectedHypergraph<_, _> {
nodes: {
let v0 = 0;
let v1 = 1;
let v2 = 2;
};
edges: {
[v0, v1] = 5;
let e1: [v0, v2] = 7;
let e2: [v1, v2] = 10;
};
}
}
graph.edges().for_each(|e| println!("Edge {:?}", e.weight));
}