hypergraphx 0.0.5

A hypergraph library for Rust, based on the Python library of the same name.
Documentation
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]));

        // This doesn't error out even though there are only 3 nodes. It simply ignores the nonexistent node.
        let _ = dbg!(graph.add_edge(5, vec![0, 1, 2, 3]));
        // This will error out because the edge is will only have one node.
        let _ = dbg!(graph.add_edge(5, vec![0, 3]));
        graph.add_node("D");
        // This will now work because node 3 exists.
        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));
}