faer 0.23.2

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(())
}