### 7 releases (4 breaking)

0.5.2 | Jan 23, 2023 |
---|---|

0.5.1 | Jan 23, 2023 |

0.4.0 | May 22, 2022 |

0.3.0 | Mar 10, 2022 |

0.1.0 | Feb 7, 2022 |

#**271** in Algorithms

**294** downloads per month

**MIT**license

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

structure which can be constructed
from one or more `Graph`

instances. Once constructed, various measurements and
matrix representations of the graph can be computed.`Edge`

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

#### Dependencies

~3MB

~57K SLoC