Stable interface that allows for greater control
I'm looking to use KLU in a package. Some of things that I'd like to be able to do are:
- Run symbolic factorization, without running numeric factorization.
- Check if the sparse structure of a matrix matches that of the current factorization.
Both of these things can be done, but they require using functions and fields that aren't exported, like KLUFactorization, klu_analyze! and rowval/colptr. That begs the question: which functionalities of KLU are stable public interface, and which are private? Are there plans to move some of these into the public interface?
I doubt the upstream interfaces will change much. It is a pretty stable package. Happy to give you repo access here.
I can probably move some things into a public interface this week @luke-kiernan. I have a major sparsearrays ecosystem refactoring on my local machines that is still incomplete. But I think I can finish up the solver related portions soon.
In the meantime if you make a PR that documents and exports those interfaces you need I'm happy to take a look and merge them.
Okay I've opened at PR: #28.
I'm aware there's one point of ickiness in my implementation: see the warning by where I define nonzeros(K::AbstractKLUFactorization). How do we give the user the ability to change K.nzval, yet prevent against the case where users do so (or don't do so) when they expect the opposite behavior?
@rayegun @ViralBShah any input on that PR?