faer/linalg/cholesky/bunch_kaufman/
inverse.rs

1use crate::assert;
2use crate::internal_prelude::*;
3
4pub fn inverse_scratch<I: Index, T: ComplexField>(dim: usize, par: Par) -> StackReq {
5	_ = par;
6	super::solve::solve_in_place_scratch::<I, T>(dim, dim, par)
7}
8
9#[track_caller]
10#[math]
11pub fn inverse<I: Index, T: ComplexField>(
12	out: MatMut<'_, T>,
13	L: MatRef<'_, T>,
14	diagonal: DiagRef<'_, T>,
15	subdiagonal: DiagRef<'_, T>,
16	perm: PermRef<'_, I>,
17	par: Par,
18	stack: &mut MemStack,
19) {
20	let n = L.nrows();
21	assert!(all(
22		out.nrows() == n,
23		out.ncols() == n,
24		L.nrows() == n,
25		L.ncols() == n,
26		diagonal.dim() == n,
27		subdiagonal.dim() == n,
28		perm.len() == n,
29	));
30
31	let mut out = out;
32	out.fill(zero());
33	out.rb_mut().diagonal_mut().fill(one());
34
35	super::solve::solve_in_place(L, diagonal, subdiagonal, perm, out.rb_mut(), par, stack);
36}