implement LU decomposition
assert -> assert_eq where sensible