pub mod ultra_fast;
pub mod bmssp;
pub use ultra_fast::{UltraFastCSR, UltraFastCG, generate_test_matrix, benchmark_rust_performance};
pub use bmssp::{BMSSPSolver, BMSSPConfig};
#[cfg(target_arch = "wasm32")]
use wasm_bindgen::prelude::*;
#[cfg(target_arch = "wasm32")]
#[wasm_bindgen]
pub fn solve_linear_system(
matrix_data: &[f64],
rows: usize,
cols: usize,
b: &[f64],
use_bmssp: bool
) -> Vec<f64> {
let mut triplets = Vec::new();
for i in 0..rows {
for j in 0..cols {
let val = matrix_data[i * cols + j];
if val.abs() > 1e-10 {
triplets.push((i, j, val));
}
}
}
let matrix = UltraFastCSR::from_triplets(triplets, rows, cols);
if use_bmssp {
let config = BMSSPConfig::default();
let mut solver = BMSSPSolver::new(config);
solver.solve(&matrix, b)
} else {
let solver = UltraFastCG::new(1000, 1e-10);
solver.solve(&matrix, b)
}
}
#[cfg(target_arch = "wasm32")]
#[wasm_bindgen(start)]
pub fn init() {
#[cfg(feature = "console_error_panic_hook")]
console_error_panic_hook::set_once();
}