use rustebra::krylov::lanczos;
use rustebra::storage::{Basis, StaticStorage};
pub(crate) fn run() {
println!("\n== Lanczos iteration ==");
let a = StaticStorage::new([4.0, 1.0, 2.0, 1.0, 3.0, 1.0, 2.0, 1.0, 5.0]);
let v0 = StaticStorage::new([1.0, 1.0, 1.0]);
let mut buffer = [0.0; 9];
let mut basis = Basis::<f64, 3>::new(&mut buffer, 3).unwrap();
let mut scratch = [0.0; 3];
let t = lanczos(&a, 3, &v0, 1e-12, &mut basis, &mut scratch).unwrap();
println!("diagonal = {:?}", t.diagonal());
println!("off_diagonal = {:?}", t.off_diagonal());
let mut partial_buffer = [0.0; 6];
let mut partial_basis = Basis::<f64, 2>::new(&mut partial_buffer, 3).unwrap();
let mut partial_scratch = [0.0; 3];
let partial_t = lanczos(&a, 3, &v0, 1e-12, &mut partial_basis, &mut partial_scratch).unwrap();
println!("partial diagonal (K = 2) = {:?}", partial_t.diagonal());
}