research-complexity.rs

1.4 kB · rust · 47 lines

1use mrlycore::errors::Result;2use mrlyfig::{ink, plot, save, Board};3use mrlymath::two::designs;4use mrlymath::two::graph::core_graph;5use mrlynum::spectrum::{laplacian_spectrum, multiplicity};67const LEVEL: usize = 6;89fn main() -> Result<()> {10    let cell = designs::create(7, 2, LEVEL, 0, 2)?;11    let network = core_graph(&cell)?;12    let mut values = laplacian_spectrum(&network, true)?;13    values.sort_by(|a, b| a.partial_cmp(b).unwrap());14    let count = values.len();15    let ones = multiplicity(&values, 1.0, 1e-9);16    assert_eq!(count, 729);17    assert_eq!(ones, 243);1819    let mut board = Board::square();20    let frame = board.frame(0.08);21    plot::axis(&mut board, frame, ink::line());22    let total = count as f64;23    let at = |lambda: f64, rank: f64| {24        (25            frame.x + frame.w * lambda / 2.0,26            frame.y + frame.h * (1.0 - rank / total),27        )28    };29    let mut steps = Vec::with_capacity(2 * count + 2);30    steps.push(at(0.0, 0.0));31    for (index, value) in values.iter().enumerate() {32        steps.push(at(*value, index as f64));33        steps.push(at(*value, index as f64 + 1.0));34    }35    steps.push(at(2.0, total));36    board.polyline(&steps, 3.0, ink::blue());3738    let below = values.iter().filter(|v| **v < 1.0 - 1e-9).count() as f64;39    board.segment(40        at(1.0, below),41        at(1.0, below + ones as f64),42        7.0,43        ink::yellow(),44    );45    save("research-complexity", &board)?;46    Ok(())47}