message: Fix handling of non-connex matrices correctly
  Previous fix would record the correct permutation, but would not
  ensure the nested_dissection calls were issued with the components taken
  into account. This patch is a simple way to fix that: each time a
  connected component is identified, our nested dissection is run on it.
diff: @@ -38,13 +38,6 @@ where
  // need to prevent BFS from going outside the current region
  let mut in_region = vec![false; nb_vertices];
  split_connected_components_rec(
  - &mat,
  - &mut perm[..],
  - &mut deque,
  - &mut new_perm,
  - &mut status[..],
  - );
  - nested_dissection_rec(
  &mat,
  &mut perm[..],
  block_size,
  @@ -165,9 +158,11 @@ fn nested_dissection_rec<N, I, Iptr>(
  fn split_connected_components_rec<N, I, Iptr>(
  mat: &CsMatViewI<N, I, Iptr>,
  perm: &mut [I],
  + block_size: usize,
  deque: &mut VecDeque<I>,
  new_perm: &mut Vec<I>,
  status: &mut [VertStatus],
  + in_region: &mut [bool],
  ) where
  I: SpIndex,
  Iptr: SpIndex,
  @@ -209,16 +204,35 @@ fn split_connected_components_rec<N, I, Iptr>(
  }
  }
  perm.copy_from_slice(new_perm);
  + nested_dissection_rec(
  + &mat,
  + &mut perm[..rest_start],
  + block_size,
  + deque,
  + new_perm,
  + &mut status[..],
  + &mut in_region[..],
  + );
  split_connected_components_rec(
  mat,
  &mut perm[rest_start..],
  + block_size,
  deque,
  new_perm,
  status,
  + in_region,
  + );
  + } else {
  + nested_dissection_rec(
  + &mat,
  + &mut perm[..],
  + block_size,
  + deque,
  + new_perm,
  + &mut status[..],
  + &mut in_region[..],
  );
  }
  - // nothing to do if the component is connex, we keep the perm ordering
  - // as is
  }
  #[cfg(test)]
  