A JAX-based library providing numerical differential equation solvers for ODEs, SDEs, and CDEs with autodifferentiation and GPU support.
Diffrax is a numerical differential equation solving library built on JAX, designed for scientific computing and machine learning applications. It provides a unified approach to solving ordinary, stochastic, and controlled differential equations with support for autodifferentiation and GPU acceleration.
Researchers and engineers in scientific computing and machine learning who need to solve differential equations within the JAX ecosystem, particularly those working with neural differential equations or requiring efficient backpropagation through ODEs/SDEs/CDEs.
Developers choose Diffrax for its unified internal architecture that consistently handles different equation types, its seamless integration with JAX's functional programming model via PyTree state, and its performance features like vmappable integration and multiple adjoint methods for backpropagation.
Numerical differential equation solvers in JAX. Autodifferentiable and GPU-capable. https://docs.kidger.site/diffrax/
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Handles ODEs, SDEs, and CDEs within a single, consistent API, as highlighted in the library's philosophy for a small, tightly-written codebase.
Leverages JAX's autodifferentiation and GPU acceleration, enabling efficient backpropagation through differential equations with multiple adjoint methods.
Allows using PyTrees as state, integrating perfectly with JAX's functional programming model for complex, nested data structures.
Supports automatic vectorization over integration regions and parameters, optimizing performance on hardware accelerators like GPUs.
Tightly coupled with JAX, making it unsuitable for projects that avoid JAX due to dependency or interoperability constraints with other frameworks like TensorFlow or PyTorch.
Requires Python 3.10 or higher, which can block adoption in environments with older codebases or restricted upgrade paths.
Documentation is available but may lack the depth and community-driven examples found in established libraries like SciPy, potentially increasing the learning curve for newcomers.