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}