#graph #graph-traversal #graph-node #edge #primitive #idea #api

gamma

Graph primitives and traversals for Rust

11 releases (breaking)

0.9.0 Jan 25, 2021
0.8.1 Oct 2, 2020
0.7.0 Sep 25, 2020
0.6.1 Jul 8, 2020
0.1.1 Mar 13, 2020

#914 in Algorithms


Used in chemcore

MIT license

93KB
3K SLoC

Gamma

A graph library for Rust.

Gamma provides primitives and traversals for working with graphs. It is based on ideas presented in A Minimal Graph API.

Usage

Add this to your Cargo.toml:

[dependencies]
gamma = 0.9.0

Examples

ArrayGraph is a reference Graph implementation. Node, neighbor, and edge iteration order are stable and set by the try_from method.

use std::convert::TryFrom;
use gamma::graph::{ Graph, DefaultGraph, Error };

fn main() -> Result<(), Error> {
    let p3 = DefaultGraph::try_from(vec![
        vec![ 1 ],
        vec![ 0, 2 ],
        vec![ 1 ]
    ])?;

    assert_eq!(p3.is_empty(), false);
    assert_eq!(p3.order(), 3);
    assert_eq!(p3.size(), 2);
    assert_eq!(p3.ids().collect::<Vec<_>>(), [ 0, 1, 2 ]);
    assert_eq!(p3.neighbors(1)?.collect::<Vec<_>>(), [ 0, 2 ]);
    assert_eq!(p3.has_id(4), false);
    assert_eq!(p3.degree(0)?, 1);
    assert_eq!(p3.edges().collect::<Vec<_>>(), [
        (0, 1),
        (1, 2)
    ]);
    assert_eq!(p3.has_edge(1, 2)?, true);

    let result = DefaultGraph::try_from(vec![
        vec![ 1 ]
    ]);

    assert_eq!(result, Err(Error::UnknownId(1)));

    Ok(())
}

Features include:

Versions

Gamma is not yet stable. Patch versions never introduce breaking changes, but minor/major versions probably will.

License

Gamma is distributed under the terms of the MIT License. See LICENSE-MIT and COPYRIGHT for details.

No runtime deps