## spectre

A lightweight toolkit for analysing p2p network topologies

### 7 releases(4 breaking)

 0.5.2 Jan 23, 2023 Jan 23, 2023 May 22, 2022 Mar 10, 2022 Feb 7, 2022

#271 in Algorithms

54KB
913 lines

# Spectre

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.
.map(|i| format!("127.0.0.1:{i}").parse().unwrap())
.collect();

// 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 │
//  └          ┘
``````

~3MB
~57K SLoC