orbit.rs

936 B · rust · 31 lines

1use crate::design::{floats, plane, BASE};2use mrlynum::spin::harmonics;34pub fn spectrum(code: u128, level: usize, rings: usize, orders: usize) -> Vec<f64> {5    let grid = plane(code, BASE, level);6    let side = grid.shape[0];7    harmonics(&floats(&grid), side, rings, orders)8}910pub fn agree(left: &[f64], right: &[f64], tolerance: f64) -> bool {11    let scale = left[0].max(right[0]).max(1e-30);12    left.iter()13        .zip(right)14        .all(|(a, b)| (a - b).abs() / scale < tolerance)15}1617pub fn gap(left: &[f64], right: &[f64]) -> f64 {18    let scale = left[0].max(right[0]).max(1e-30);19    left.iter()20        .zip(right)21        .map(|(a, b)| (a - b).abs() / scale)22        .fold(0.0f64, f64::max)23}2425pub fn census(level: usize, rings: usize, orders: usize) -> Vec<Vec<f64>> {26    let mut out = vec![vec![0.0; orders + 1]];27    for code in 1..512u128 {28        out.push(spectrum(code, level, rings, orders));29    }30    out31}