spectre

Crates.iospectre
lib.rsspectre
version0.7.0
sourcesrc
created_at2022-02-07 19:45:55.873461
updated_at2023-05-15 11:14:24.832821
descriptionA lightweight toolkit for analysing p2p network topologies.
homepage
repositoryhttps://github.com/niklaslong/spectre
max_upload_size
id528570
size75,707
Niklas Long (niklaslong)

documentation

https://docs.rs/spectre

README

Spectre

crates.io docs.rs

In French, the spectrum of a matrix is called "spectre".

This micro-library contains a small toolkit helpful in analysing network topologies. Namely:

  • Degree, adjacency and Laplacian matrices for a graph.
  • Various centrality measures for a graph.
  • The algebraic connectivity of a graph (Fiedler).

Basic usage

The library is centered around the Graph structure which can be constructed from one or more Edge instances. Once constructed, various measurements and matrix representations of the graph can be computed.

use std::net::SocketAddr;

use spectre::edge::Edge;
use spectre::graph::Graph;

// Construct the graph instance.
let mut graph = Graph::new();

// Create some addresses to be part of a network topology.
let addrs: Vec<SocketAddr> = (0..3)
    .map(|i| format!("127.0.0.1:{i}").parse().unwrap())
    .collect();
let (a, b, c) = (addrs[0], addrs[1], addrs[2]);

// Insert some edges, note the IDs can be any type that is `Copy + Eq + Hash + Ord`.
graph.insert(Edge::new(a, b));
graph.insert(Edge::new(a, c));

// Compute some metrics on that state of the graph.
let density = graph.density();
let degree_centrality_delta = graph.degree_centrality_delta();

// Matrices can be pretty printed...
println!("{}", graph.laplacian_matrix());
// ...outputs:
//  ┌          ┐
//  │  2 -1 -1 │
//  │ -1  1  0 │
//  │ -1  0  1 │
//  └          ┘
Commit count: 125

cargo fmt