hypergraphx 0.0.5

A hypergraph library for Rust, based on the Python library of the same name.
Documentation
use hypergraphx::prelude::*;

fn main() {
    undirected();
    directed();
}

fn undirected() {
    let mut graph = UndirectedHypergraph::new();
    graph.add_nodes((0..7).map(|x| format!("Node {}", x)));

    graph
        .add_edges(
            vec![
                ("Edge 0", vec![0, 1]),
                ("Edge 1", vec![2, 3]),
                ("Edge 2", vec![1, 2, 4]),
                ("Edge 3", vec![5, 6]),
                ("Edge 4", vec![0, 1, 2]),
                ("Edge 5", vec![3, 4, 1, 0]),
            ]
            .into_iter(),
        )
        .unwrap();

    dbg!(graph.connected_components());
    dbg!(graph.is_connected());
    dbg!(graph.component(0));

    dbg!(graph.degree_sequence());
    dbg!(graph.edges_connecting(0, 1));
    dbg!(graph.dual());
    // dbg!(graph.graph_view());
}

fn directed() {
    let mut graph = DirectedHypergraph::new();
    graph.add_nodes((0..13).map(|x| format!("Node {}", x)));

    graph
        .add_edges(
            vec![
                ("Edge 0".to_string(), vec![0, 1], vec![2, 3]),
                ("Edge 1".to_string(), vec![2, 3], vec![0, 1]),
                ("Edge 2".to_string(), vec![0, 2], vec![1, 3]),
            ]
            .into_iter(),
        )
        .unwrap();

    graph
        .add_edges(
            vec![
                ("Edge 3".to_string(), vec![10, 11], vec![12, 13]),
                ("Edge 4".to_string(), vec![12, 13], vec![10, 11]),
                ("Edge 5".to_string(), vec![10, 12], vec![11, 13]),
            ]
            .into_iter(),
        )
        .unwrap();

    graph
        .add_edges((4..9).map(|i| (format!("Edge {}", i + 2), vec![i], vec![i + 1])))
        .unwrap();

    graph
        .add_edges(
            vec![
                ("Edge 9".to_string(), vec![0, 1, 2], vec![3, 4, 5]),
                ("Edge 10".to_string(), vec![6, 7, 8], vec![9, 10, 11]),
                ("Edge 11".to_string(), vec![9], vec![4]),
            ]
            .into_iter(),
        )
        .unwrap();

    dbg!(graph.strongly_connected_components());
    dbg!(graph.weakly_connected_components());
    dbg!(graph.is_weakly_connected());
    dbg!(graph.is_strongly_connected());
    dbg!(graph.strong_component(4));

    dbg!(graph.out_degree_sequence());
    dbg!(graph.in_degree_sequence());
    dbg!(graph.edges_connecting(0, 1));

    dbg!(graph.dual());
    dbg!(graph.digraph_view());
}