-
-
Notifications
You must be signed in to change notification settings - Fork 113
Closed
Description
The solution types contain functions, and things like JLD2 don't like functions. So it would be nice to have a "strip_solution` function that generates a much leaner form of the solution for simply doing easier serialization. Here's how that should look:
- we should make a new trait for
has_lazy_interpolationin https://github.com/SciML/SciMLBase.jl/blob/master/src/alg_traits.jl which is then set to true on BS5 and VernX solvers.strip_solutionshould then give an informative error message that these problems are not supported by this function. Just some proper error handling, and with that out of the way the other solvers should be free to go. - https://github.com/SciML/SciMLBase.jl/blob/master/src/solutions/ode_solutions.jl#L102-L118 we can strip out any of the function information from this object. I.e. make a new problem where
probandalgare nothing. - Downstream,
sol.interpholds some extra information as well. So in SciMLBase we needstrip_interp(::AbstractInterpolation). The SciMLBase ones are just the identity function, so that's easy https://github.com/SciML/SciMLBase.jl/blob/master/src/interpolation.jl . - At this point any non-OrdinaryDiffEq algorithm will strip well. The only downstream interp to handle is the OrdinaryDiffEq one. https://github.com/SciML/OrdinaryDiffEq.jl/blob/master/src/interp_func.jl#L4-L15 .
fis only in there for the lazy interpolations, so set it tonothing. You need to keep thecaches because that's used for dispatch, but at this point you're done with explicit methods. - For implicit methods, you need to strip https://github.com/SciML/OrdinaryDiffEq.jl/blob/master/src/caches/rosenbrock_caches.jl#L30-L33
jac_configandgrad_config, as those contain function information. As a simple thing, you can just create a new cache with everything nothing though since this is only used for dispatch (andaddsteps!, but since you know these caches are non-lazy the interpolationaddsteps!post solution is trivial so it won't use anything in the cache). We need to make good functionality for this anyways for better default solvers (CC @oscardssmith), so it might be a good time to do this now.
With that done strip_solution(sol) should return a lean solution with no function information in it (or rather, any function information in it is in SciMLBase, which also defines the structure so that's a required import) and so it should work just fine with any BSON, JLD2, etc. package.
Metadata
Metadata
Assignees
Labels
No labels