faer 0.24.0

linear algebra library
Documentation
#![allow(non_snake_case)]
use diol::prelude::*;
use dyn_stack::{MemBuffer, MemStack};
use faer::prelude::*;
use faer::stats::prelude::*;
fn eigen(bencher: Bencher, PlotArg(n): PlotArg) {
	let rng = &mut StdRng::seed_from_u64(0);
	let A = CwiseMatDistribution {
		nrows: n,
		ncols: n,
		dist: StandardNormal,
	}
	.rand::<Mat<f64>>(rng);
	let v0 = CwiseColDistribution {
		nrows: n,
		dist: StandardNormal,
	}
	.rand::<Col<f64>>(rng);
	let A = A.as_ref();
	let v0 = v0.as_ref();
	let n_eigval = 5;
	let mut V = Mat::zeros(n, n_eigval);
	let mut w = vec![c64::ZERO; n_eigval];
	let mut mem =
		MemBuffer::new(faer::matrix_free::eigen::partial_eigen_scratch(
			&A,
			n_eigval,
			Par::Seq,
			default(),
		));
	bencher.bench(|| {
		faer::matrix_free::eigen::partial_eigen(
			V.rb_mut(),
			&mut w,
			&A,
			v0,
			f64::EPSILON * 128.0,
			Par::Seq,
			MemStack::new(&mut mem),
			default(),
		)
	});
}
fn main() -> eyre::Result<()> {
	let bench = Bench::from_args()?;
	bench.register_many(
		"eigensolver",
		list![eigen],
		[512, 1024, 2048].map(PlotArg),
	);
	bench.run()?;
	Ok(())
}