faer/linalg/cholesky/bunch_kaufman/
inverse.rs1use 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}