Replies: 6 comments
-
|
I also forgot GenericLinearAlgebra.jl as backend. Am I correct that what you were proposing, @lkdvos , is to combine algorithms and backends in one name, something like |
Beta Was this translation helpful? Give feedback.
-
|
I think that indeed is very similar to what I had in mind. To me, the difference between Just as an aside, this is what I had laying around locally, which was from before I looked at your most recent changes: https://github.com/QuantumKitHub/MatrixAlgebraKit.jl/tree/ld-interfaceproposal
Something that I had been thinking about, specifically for struct TruncatedSVD{A,T}
svd_alg::A
trunc_alg::T
endand just treat truncated svd on the exact same footing as |
Beta Was this translation helpful? Give feedback.
-
|
Something that I just thought about: If the backends really are "overarching themes" for a couple algorithms, we could just put them in different modules, which would lead to |
Beta Was this translation helpful? Give feedback.
-
|
One problem with all of this is that all algorithm/backend types need to be defined in the main module, as extensions cannot create new types. This seems to be what LinearSolve.jl also does. I have not always been fan of some of the design decisions in the SciML ecosystem (and I've learned recently I am not the only one), but for the case of LinearSolve.jl I don't know yet. One certainty though, Regarding the output structs, I am not necessarily opposed to this, but I am not sure if I see the great benefit? The one example of the two-step process |
Beta Was this translation helpful? Give feedback.
-
|
I am confused by the discussion page, you can write a reply in a message, or below as a new comment. That is too many options. Anyway, some more thoughts:
|
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
@lkdvos , maybe we can discuss the interface here.
For the family of methods like qr, eigen and svd (possibly trunced) there needs to be support for:
backends (LAPACK, CUSOLVER, KrylovKit, ...)
algorithms supported by these backends (QRIteration, DivideAndConquer, RobustRepresentations, Jacobi,...)
possible options/keywords to configure those algorithms
possible keywords to control truncation? specific to svd?
Then there is something like polar? Do we want a specific method for polar decomposition. That could be computed via SVD (and thus need the previous levels of control), but there are also other packages (=backends?) that can do this without SVD.
If we also define methods like
leftorthand friends here (this could also be restricted to TensorKit), they can be computed using e.g. eithersvdorqr. I don't know if there are other relevant strategies? So the question is how to convey that information? Astrategyorkindarg/kwarg?Something similar exists for matrix functions, like exponential, which can use things like Pade approximations, Schur-Parlett, diagonalisation in the case of hermitian matrices, ….
Beta Was this translation helpful? Give feedback.
All reactions