The SciML common interface ties together the numerical solvers of the Julia package ecosystem into a single unified interface. It is designed for maximal efficiency and parallelism, while incorporating essential features for large-scale scientific machine learning such as differentiability, composability, and sparsity.
This documentation is made to pool together the docs of the various SciML libraries to paint the overarching picture, establish development norms, and document the shared/common functionality.
The SciML common interface also includes ModelingToolkit.jl for defining such systems symbolically, allowing for optimizations like automated generation of parallel code, symbolic simplification, and generation of sparsity patterns.
In addition to the purely numerical representations of mathematical objects, there are also sets of problem types associated with common mathematical algorithms. These are:
Data-driven modeling
Discrete-time data-driven dynamical systems (DiscreteDataDrivenProblem)
Continuous-time data-driven dynamical systems (ContinuousDataDrivenProblem)
Symbolic regression (DirectDataDrivenProblem)
Uncertainty quantification and expected values (ExpectationProblem)
We note that parameter estimation and inverse problems are solved directly on their constituent problem types using tools like DiffEqFlux.jl. Thus for example, there is no ODEInverseProblem, and instead ODEProblem is used to find the parameters p that solve the inverse problem.
The SciML interface is common as the usage of arguments is standardized across all of the problem domains. Underlying high level ideas include:
All domains use the same interface of defining a AbstractSciMLProblem which is then solved via solve(prob,alg;kwargs), where alg is a AbstractSciMLAlgorithm. The keyword argument namings are standardized across the organization.
AbstractSciMLProblems are generally defined by a SciMLFunction which can define extra details about a model function, such as its analytical Jacobian, its sparsity patterns and so on.
There is an organization-wide method for defining linear and nonlinear solvers used within other solvers, giving maximum control of performance to the user.
Types used within the packages are defined by the input types. For example, packages attempt to internally use the type of the initial condition as the type for the state within differential equation solvers.
solve calls should be thread-safe and parallel-safe.
init(prob,alg;kwargs) returns an iterator which allows for directly iterating over the solution process
High performance is key. Any performance that is not at the top level is considered a bug and should be reported as such.
All functions have an in-place and out-of-place form, where the in-place form is made to utilize mutation for high performance on large-scale problems and the out-of-place form is for compatibility with tooling like static arrays and some reverse-mode automatic differentiation systems.
Multi-package interface for specifying linear solvers (direct, sparse, and iterative), along with tools for caching and preconditioners for use in large-scale modeling.
High level package for scientific machine learning applications, such as neural and universal differential equations, solving of inverse problems, parameter estimation, nonlinear optimal control, and more.
Multi-package interface for data-driven modeling, Koopman dynamic mode decomposition, symbolic regression/sparsification, and automated model discovery.
Julia Version 1.10.3
+ [0bca4576] SciMLBase v2.37.0 `~/work/SciMLBase.jl/SciMLBase.jl`
and using this machine and Julia version.
Julia Version 1.10.3
Commit 0b4590a5507 (2024-04-30 10:59 UTC)
Build Info:
Official https://julialang.org/ release
@@ -117,13 +117,13 @@
[8913a72c] NonlinearSolve v3.11.0
[6fe1bfb0] OffsetArrays v1.14.0
[bac558e1] OrderedCollections v1.6.3
- [1dea7af3] OrdinaryDiffEq v6.75.0
+ [1dea7af3] OrdinaryDiffEq v6.76.0
[90014a1f] PDMats v0.11.31
[65ce6f38] PackageExtensionCompat v1.0.2
[d96e819e] Parameters v0.12.3
[69de0a69] Parsers v2.8.1
[e409e4f3] PoissonRandom v0.4.4
- [f517fe37] Polyester v0.7.13
+ [f517fe37] Polyester v0.7.14
[1d0040c9] PolyesterWeave v0.2.1
[d236fae5] PreallocationTools v0.4.21
[aea7be01] PrecompileTools v1.2.1
@@ -131,7 +131,7 @@
[1fd47b50] QuadGK v2.9.4
[e6cf234a] RandomNumbers v1.5.3
[3cdcf5f2] RecipesBase v1.3.4
- [731186ca] RecursiveArrayTools v3.16.0
+ [731186ca] RecursiveArrayTools v3.18.1
[f2c3362d] RecursiveFactorization v0.2.23
[189a3867] Reexport v1.2.2
[2792f1a3] RegistryInstances v0.1.0
@@ -140,9 +140,9 @@
[7e49a35a] RuntimeGeneratedFunctions v0.5.13
[94e857df] SIMDTypes v0.1.0
[476501e8] SLEEFPirates v0.6.42
- [0bca4576] SciMLBase v2.36.2 `~/work/SciMLBase.jl/SciMLBase.jl`
+ [0bca4576] SciMLBase v2.37.0 `~/work/SciMLBase.jl/SciMLBase.jl`
[c0aeaf25] SciMLOperators v0.3.8
- [53ae85a6] SciMLStructures v1.1.0
+ [53ae85a6] SciMLStructures v1.2.0
[efcf1570] Setfield v1.1.1
[727e6d20] SimpleNonlinearSolve v1.8.0
[699a6c99] SimpleTraits v0.9.4
@@ -236,4 +236,4 @@
[8e850b90] libblastrampoline_jll v5.8.0+1
[8e850ede] nghttp2_jll v1.52.0+1
[3f19e933] p7zip_jll v17.4.0+2
-Info Packages marked with ⌃ and ⌅ have new versions available. Those with ⌃ may be upgradable, but those with ⌅ are restricted by compatibility constraints from upgrading. To see why use `status --outdated -m`
You can also download the manifest file and the project file.
Settings
This document was generated with Documenter.jl version 1.4.1 on Tuesday 14 May 2024. Using Julia version 1.10.3.
+Info Packages marked with ⌃ and ⌅ have new versions available. Those with ⌃ may be upgradable, but those with ⌅ are restricted by compatibility constraints from upgrading. To see why use `status --outdated -m`
You can also download the manifest file and the project file.
Settings
This document was generated with Documenter.jl version 1.4.1 on Wednesday 15 May 2024. Using Julia version 1.10.3.