• Stars
    star
    117
  • Rank 292,906 (Top 6 %)
  • Language
    Julia
  • Created almost 4 years ago
  • Updated 4 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Contributor's Guide on Collaborative Practices for Community Packages

ColPrac: Contributor's Guide on Collaborative Practices for Community Packages

Global Docs

This document describes some best practices for collaborating on repositories. Following these practices makes it easier for contributors (new and old) to understand what is expected of them. It should be linked to in the README.md.

There are many good practices that this document does not cover. These include other members of the wider community reviewing pull requests (PRs) they are interested in, and maintainers encouraging and supporting people who open issues to make PRs to solve them. This document facilitates these other good practices by clarifying what can seem a mysterious process to those who are unfamiliar with it.

This document is also only intended for community practices, it is not suitable for solo projects with one maintainer.

Community Standards

Interactions with people in the community must always follow the community standards, including in pull requests, issues, and discussions.

Contributing PRs

  • PRs should match the existing code style present in the file.
  • PRs affecting the public API, including adding new features, must update the public documentation.
  • Comments and (possibly internal) docstrings should make the code accessible.
  • PRs that change code must have appropriate tests.
  • Changes to the code must be made via PR, not pushing to master.

Reviewing, Approving and Merging PRs

  • PRs must have 1 approval before they are merged.
  • PR authors should not approve their own PRs.
  • PRs should pass CI tests before being merged.
  • PRs by people without merge rights must have approval from someone who has merge rights (who will usually then merge the PR).
  • PRs by people with merge rights must have approval from someone else, who may or may not have merge rights (and then may merge their own PR).
  • PRs by people with merge rights should not be merged by people other than the author (just approved).

Releases

  • A release should be made as soon as possible after a bugfix PR is merged.
  • Care and consideration should be given as to when to make a breaking release.
  • If the repository is in a state where there are unreleased changes for an extended period of time in preparation for a release, then the version in the Project.toml should be set to the version number of the intended release, with the -DEV suffix.
  • The person who merged the PR should register the new release of the package.

Becoming a Collaborator (gaining merge rights)

  • Collaborator merge rights are typically assigned at an Organisational level for all repositories in a GitHub organisation, or at a Team level for a subset of repositories.
  • Before becoming a collaborator it is usual to:
    • contribute several PRs,
    • review constructively and kindly several PRs,
    • contribute meaningfully to several discussions on issues.
  • You may ask to be added as a collaborator. It is not rude to ask.

ColPrac: Further Guidance

This page offers some further guidance on conventions that can be helpful when collaborating on projects. This is an expansion on the Collaborative Practices, with more details and extra guidance. Anything detailed here should be considered less important than the main Collaborative Practices.

Guidance on contributing PRs

  • You should usually open an issue about a bug or possible improvement before opening a PR with a solution.

  • PRs should do a single thing, so that they are easier to review.

    • For example, fix one bug, or update compatibility, rather than fixing a bunch of bugs and updating compatibility and adding a new feature.
  • PRs should add tests which cover the new or fixed functionality.

  • PRs that move code should not also change code, so that they are easier to review.

    • If only moving code, review for correctness is not required.

    • If only changing code, then the diff makes it clear what lines have changed.

  • PRs with large improvements to style should not also change functionality.

    • This is to avoid making large diffs that are not the focus of the PR.
    • While it is often helpful to fix a few typos in comments on the way past, it is different to using a regex or formatter on the whole project to fix spacing around operators.
  • PRs introducing breaking changes should make this clear when opening the PR.

  • You should not push commits which commented-out tests.

    • If pushing a commit for which a test is broken, use the @test_broken macro.
    • Commenting out tests while developing locally is okay, but committing a commented-out test increases the risk of it silently not being run when it should be.
  • You should not squash down commits while review is still on-going.

    • Squashing commits prevents the reviewer being able to see what commits are added since the last review.
  • You should help review your PRs, even though you cannot approve your own PRs.

    • For instance, start the review process by commenting on why certain bits of the code changed, or highlighting places where you would particularly like reviewer feedback.

Guidance on reviewing, approving and merging PRs

  • Review comments should be phrased as questions, as it shows you are open to new ideas.

    • For instance, โ€œWhy did you change this to X? Doesnโ€™t that prevent Y?โ€ rather than โ€œYou should not have changed this, it will prevent Yโ€.
  • Small review suggestions, such as typo fixes, should make use of the suggested change feature.

    • This makes it easier and more likely for all the smaller changes to be made.
  • Reviewers should continue acting as a reviewer until the PR is merged.

Guidance on Package Releases

Incrementing the package version

  • Follow the extension of SemVer 2.0 encoded in Julia package manager Pkg.jl.
  • For a version number X.Y.Z, with Major version X, Minor version Y, Patch version Z:
    • Post-1.0.0: for breaking changes increment X, for non-breaking new features increment Y, for bug-fixes increment Z.
    • Pre-1.0.0: for breaking changes increment Y, for non-breaking (feature or bug-fix) increment Z.
  • Introducing deprecations is not breaking; removing deprecations is breaking.
  • There is a cost to making breaking releases - downstream packages have to add support for the new version - so there has to be a bigger benefit to making breaking changes.

Unreleased Changes and -DEV

Following the Collaborative Practices, when there are unreleased changes in the repository for an extended period of time the version number in the Project.toml should be suffixed with -DEV. This makes it clear that there are unreleased changes. Which is useful for many things, including quickly understanding why a bug is still occurring, and working out if a bugfix may need to be backported.

Some more details on the use of -DEV.

  • After/during/before the PR making the first change of the release, the version number in the Project.toml should be changed to the intended release number should suffixed -DEV.

    • For instance, if the current version is 0.6.3, then the PR making the breaking change could bump it to 0.7.0-DEV.
    • Things are more complex if a breaking change is made after the version has been suffixed with -DEV for a non-breaking change.
      • This should be rare since non-breaking changes should be released as soon as possible.
      • If it does occur the following rule applies: if all version numbers to the right of the digit you would increment are zero, then you do not need to change the version; otherwise you do.
  • Follow-up PRs can then be made which do not need to increment the version.

  • Once all the follow-up changes have been made, we can make a PR to drop the -DEV suffix and make a new release once this PR is merged.

  • Note that locally when using pkgโ€dev Foo...โ€ to install particular unreleased versions to an environment, Pkg ignores suffixes to the version number. Pkg treats 0.7.0-DEV identically to 0.7.0. This means you can update the [compat] section of a group of packages and test them together.

Changing dependency compatibility

  • Generally changing dependency compatibility should be a non-breaking feature.
    • i.e. pre-1.0 change patch version number, post-1.0 change the minor version number.
    • For instance, adding or removing compatibility with a particular version of a current dependency, which may or may not require internal code changes.
    • This also applies when adding or removing packages as dependencies.
    • The new feature in question is the ability to use with a different set of packages.
  • Changing a dependency to resolve a bug is a bug-fix.
    • i.e. pre/post-1.0 change patch version number.
    • For instance, if a bug in a downstream dependency is causing a problem in your package restricting compat to not allow that version would be a bug-fix.
  • Changing compatibility with dependencies may be a breaking release, if it breaks the user-facing interface. That is to say if the dependencyโ€™s API leaks into your API. There are three ways that this can happen:
    • Reexporting a function that has changed.
    • Returning an object of a type thatโ€™s behaviour has changed.
    • Subtyping an object that has changed.

Dropping support for earlier versions of Julia

  • Changing Julia version compatibility must be a non-breaking feature.
  • It cannot alone be breaking, since Julia versions that are now unsupported will just never see this newer package release.
  • Tagging the change as a Minor release makes it possible to release backported bug fixes for users stuck on the old Julia version. For instance, if the current release is 5.4.0 then we can still go back and release 5.3.1.
    • if the package is pre-1.0, minor releases count as breaking. Therefore, tag the release as a patch release unless one intends to support earlier versions of Julia with backports (as needed).
  • Dropping support for earlier versions of Julia has a cost - it prevents users on those versions, such as the Long-Term Support version, from using newer releases of your package - so there should usually be a compelling reason to drop support.

Accidental breaking releases

Do not panic, these things sometimes slip through.

It is important to fix it as soon as possible, as otherwise people start using the breaking change, and reverting it later causes more problems (c.f. Murphy's law).

To fix it:

  1. Make a PR which reverts the PR that made the breaking change.
  2. Bump the Patch version number in the Project.toml. It was a bug that a breaking API change was made, so a Patch release is correct to fix it.
  3. Merge the PR and release the new version.

Once the change is reverted you can take stock and decide what to do. There are generally 2 options:

  1. Make a new PR to reimplement the feature in a non-breaking way.
  2. Make a new PR which reverts the reversion, bump the version number to signify it as breaking, and release the new breaking version.

Example

Consider a package which is currently on v1.14.2. I made a PR to add a new feature and tagged release v1.15.0. The next evening, we get bug reports that the new feature actually broke lots of real uses.

Maybe I changed what I thought was an internal function, but one that was actually part of the public API; maybe I accidentally changed the return type, and that was something people depended on. Whatever it was, I broke it, and this was not caught in code review.

To fix it, I revert the change, and then tag release v1.15.1. Hopefully, I also can add a test to prevent that part of the API being broken by mistake.

Now I look at my change again. If I can add the same functionality in a non-breaking way - for example, make a new internal function for my use - then I would do so and tag v1.15.2 or v1.16.0 depending on what had to change. If I cannot make an equivalent non-breaking change, then I would have to make the breaking change and tag v2.0.0.

Accidental support for an unsupported dependency

Say you were updating PackageA to support a new version of a dependency, PackageB. For example, you want PackageA v1.1.0 to support PackageB v0.5 and to discontinue supporting v0.4. But say you forgot to remove the compatibility for v0.4, which now no longer works, but other downstream packages that only use v0.4 are now pulling in PackageA v1.1.0 and getting errors.

Simply releasing a patch for PackageA (v1.1.1) that removes support for v0.4 won't work in this instance because downstream packages will continue to pull in v1.1.0. It might seem sufficient to just pin the downstream packages to use v1.0.0 but there may be a lot of them to fix and you can't be certain you're aware of them all. It also does nothing to prevent new compatibility issues arising in future.

To fix this, you should still release a patch of PackageA (v1.1.1) that removes support for v0.4 of PackageB but you should then mark v1.1.0 of PackageA as broken in the registry. To do this, simply make a PR to the the registry adding yanked = true to the Version.toml file under the version causing issues (in this case v1.1.0). This marks the release as broken and prevents it from being used by any package from then on.

Guidance on automatically enforcing guidelines

Many of these guidelines can and should be enforced automatically.


Changes that are not considered breaking

Everything on this list can, in theory, break users' code. See XKCD#1172. However, we consider changes to these things to be non-breaking from the perspective of package versioning.

  • Bugs: We may make backwards incompatible behavior changes if the current implementation is clearly broken, that is, if it contradicts the documentation or if a well-understood behavior is not properly implemented due to a bug.

  • Internal changes: Non-public API may be changed or removed. The public API is all exported symbols, plus any unexported symbols that are explicitly documented as part of the public API, for instance documented as part of standard usage in the README or hosted documentation.

  • Exception behavior:

    • Exceptions may be replaced with non-error behavior. For instance, we may change a function to compute a result instead of raising an exception, even if that error is documented.

    • Error message text may change.

    • Exception types may change unless the exception type for a specific error condition is specified in the documentation.

  • Floating point numerical details: The specific floating point values may change at any time. Users should rely only on approximate accuracy, numerical stability, or statistical properties, not on the specific bits computed.

  • New exports: Adding a new export is never considered breaking. However, one should consider carefully before exporting a commonly used name that might clash with an existing name (especially, if clashing with Base).

  • New supertypes:

    • A new supertype may be added to an existing hierarchy. That is, changing A <: B to A <: B <: C or A <: C <: B. This includes adding a supertype to something without one, i.e. with supertype Any.
    • A Union constant may be replaced by an abstract type that covers all elements of the union.
  • Changes to the string representation: The output of print/string or show/repr on a type may change at any time. Users should not depend on the exact text, but rather on the meaning of the text. Changing the string representation often breaks downstream packages tests, because it is hard to write test-cases that depend only on meaning (though unit tests with mocking can be shielded from this kind of breaking).

(This guidance on non-breaking changes is inspired by https://www.tensorflow.org/guide/versions.)

Appendix:

Marking a Repository as following ColPrac:

As mentioned at the top, community repositories following ColPrac, should link to it in their README.md. One way to do that is with a GitHub badge.

ColPrac: Contributor's Guide on Collaborative Practices for Community Packages

[![ColPrac: Contributor's Guide on Collaborative Practices for Community Packages](https://img.shields.io/badge/ColPrac-Contributor's%20Guide-blueviolet)](https://github.com/SciML/ColPrac)

In many-cases ColPrac serves in the places of a CONTRIBUTING.md, having all the common guidance that you would otherwise put there. If your package has its own CONTRIBUTING.md then you should also link to ColPrac there, and indicate how the contents of ColPrac relates to the CONTRIBUTING.md. For example by stating:

We follow the ColPrac guide for collaborative practices. New contributors should make sure to read that guide. Below are some additional practices we follow.

More Repositories

1

DifferentialEquations.jl

Multi-language suite for high-performance solvers of differential equations and scientific machine learning (SciML) components. Ordinary differential equations (ODEs), stochastic differential equations (SDEs), delay differential equations (DDEs), differential-algebraic equations (DAEs), and more in Julia.
Julia
2,599
star
2

SciMLBook

Parallel Computing and Scientific Machine Learning (SciML): Methods and Applications (MIT 18.337J/6.338J)
HTML
1,780
star
3

ModelingToolkit.jl

An acausal modeling framework for automatically parallelized scientific machine learning (SciML) in Julia. A computer algebra system for integrated symbolics for physics-informed machine learning and automated transformations of differential equations
Julia
1,319
star
4

NeuralPDE.jl

Physics-Informed Neural Networks (PINN) Solvers of (Partial) Differential Equations for Scientific Machine Learning (SciML) accelerated simulation
Julia
891
star
5

DiffEqFlux.jl

Pre-built implicit layer architectures with O(1) backprop, GPUs, and stiff+non-stiff DE solvers, demonstrating scientific machine learning (SciML) and physics-informed machine learning methods
Julia
827
star
6

SciMLTutorials.jl

Tutorials for doing scientific machine learning (SciML) and high-performance differential equation solving with open source software.
CSS
705
star
7

Optimization.jl

Mathematical Optimization in Julia. Local, global, gradient-based and derivative-free. Linear, Quadratic, Convex, Mixed-Integer, and Nonlinear Optimization in one simple, fast, and differentiable interface.
Julia
680
star
8

OrdinaryDiffEq.jl

High performance ordinary differential equation (ODE) and differential-algebraic equation (DAE) solvers, including neural ordinary differential equations (neural ODEs) and scientific machine learning (SciML)
Julia
493
star
9

diffeqpy

Solving differential equations in Python using DifferentialEquations.jl and the SciML Scientific Machine Learning organization
Python
481
star
10

Catalyst.jl

Chemical reaction network and systems biology interface for scientific machine learning (SciML). High performance, GPU-parallelized, and O(1) solvers in open source software.
Julia
414
star
11

DataDrivenDiffEq.jl

Data driven modeling and automated discovery of dynamical systems for the SciML Scientific Machine Learning organization
Julia
398
star
12

Surrogates.jl

Surrogate modeling and optimization for scientific machine learning (SciML)
Julia
309
star
13

SciMLSensitivity.jl

A component of the DiffEq ecosystem for enabling sensitivity analysis for scientific machine learning (SciML). Optimize-then-discretize, discretize-then-optimize, adjoint methods, and more for ODEs, SDEs, DDEs, DAEs, etc.
Julia
301
star
14

DiffEqOperators.jl

Linear operators for discretizations of differential equations and scientific machine learning (SciML)
Julia
283
star
15

SciMLBenchmarks.jl

Scientific machine learning (SciML) benchmarks, AI for science, and (differential) equation solvers. Covers Julia, Python (PyTorch, Jax), MATLAB, R
MATLAB
283
star
16

DiffEqGPU.jl

GPU-acceleration routines for DifferentialEquations.jl and the broader SciML scientific machine learning ecosystem
Julia
268
star
17

DiffEqDocs.jl

Documentation for the DiffEq differential equations and scientific machine learning (SciML) ecosystem
Julia
256
star
18

DiffEqBase.jl

The lightweight Base library for shared types and functionality for defining differential equation and scientific machine learning (SciML) problems
Julia
254
star
19

NeuralOperators.jl

DeepONets, (Fourier) Neural Operators, Physics-Informed Neural Operators, and more in Julia
Julia
229
star
20

LinearSolve.jl

LinearSolve.jl: High-Performance Unified Interface for Linear Solvers in Julia. Easily switch between factorization and Krylov methods, add preconditioners, and all in one interface.
Julia
223
star
21

StochasticDiffEq.jl

Solvers for stochastic differential equations which connect with the scientific machine learning (SciML) ecosystem
Julia
209
star
22

Integrals.jl

A common interface for quadrature and numerical integration for the SciML scientific machine learning organization
Julia
202
star
23

ReservoirComputing.jl

Reservoir computing utilities for scientific machine learning (SciML)
Julia
196
star
24

Sundials.jl

Julia interface to Sundials, including a nonlinear solver (KINSOL), ODE's (CVODE and ARKODE), and DAE's (IDA) in a SciML scientific machine learning enabled manner
Julia
195
star
25

SciMLStyle

A style guide for stylish Julia developers
Julia
172
star
26

DataInterpolations.jl

A library of data interpolation and smoothing functions
Julia
169
star
27

RecursiveArrayTools.jl

Tools for easily handling objects like arrays of arrays and deeper nestings in scientific machine learning (SciML) and other applications
Julia
167
star
28

NonlinearSolve.jl

High-performance and differentiation-enabled nonlinear solvers (Newton methods), bracketed rootfinding (bisection, Falsi), with sparsity and Newton-Krylov support.
Julia
165
star
29

MethodOfLines.jl

Automatic Finite Difference PDE solving with Julia SciML
Julia
148
star
30

diffeqr

Solving differential equations in R using DifferentialEquations.jl and the SciML Scientific Machine Learning ecosystem
R
134
star
31

JumpProcesses.jl

Build and simulate jump equations like Gillespie simulations and jump diffusions with constant and state-dependent rates and mix with differential equations and scientific machine learning (SciML)
Julia
131
star
32

NBodySimulator.jl

A differentiable simulator for scientific machine learning (SciML) with N-body problems, including astrophysical and molecular dynamics
Julia
123
star
33

DiffEqBayes.jl

Extension functionality which uses Stan.jl, DynamicHMC.jl, and Turing.jl to estimate the parameters to differential equations and perform Bayesian probabilistic scientific machine learning
Julia
119
star
34

LabelledArrays.jl

Arrays which also have a label for each element for easy scientific machine learning (SciML)
Julia
117
star
35

PolyChaos.jl

A Julia package to construct orthogonal polynomials, their quadrature rules, and use it with polynomial chaos expansions.
Julia
114
star
36

SymbolicNumericIntegration.jl

SymbolicNumericIntegration.jl: Symbolic-Numerics for Solving Integrals
Julia
113
star
37

SciMLBase.jl

The Base interface of the SciML ecosystem
Julia
112
star
38

PreallocationTools.jl

Tools for building non-allocating pre-cached functions in Julia, allowing for GC-free usage of automatic differentiation in complex codes
Julia
106
star
39

ODE.jl

Assorted basic Ordinary Differential Equation solvers for scientific machine learning (SciML). Deprecated: Use DifferentialEquations.jl instead.
Julia
103
star
40

ModelingToolkitStandardLibrary.jl

A standard library of components to model the world and beyond
Julia
97
star
41

RuntimeGeneratedFunctions.jl

Functions generated at runtime without world-age issues or overhead
Julia
95
star
42

QuasiMonteCarlo.jl

Lightweight and easy generation of quasi-Monte Carlo sequences with a ton of different methods on one API for easy parameter exploration in scientific machine learning (SciML)
Julia
95
star
43

FEniCS.jl

A scientific machine learning (SciML) wrapper for the FEniCS Finite Element library in the Julia programming language
Julia
94
star
44

ExponentialUtilities.jl

Fast and differentiable implementations of matrix exponentials, Krylov exponential matrix-vector multiplications ("expmv"), KIOPS, ExpoKit functions, and more. All your exponential needs in SciML form.
Julia
88
star
45

DiffEqCallbacks.jl

A library of useful callbacks for hybrid scientific machine learning (SciML) with augmented differential equation solvers
Julia
82
star
46

EasyModelAnalysis.jl

High level functions for analyzing the output of simulations
Julia
80
star
47

EllipsisNotation.jl

Julia-based implementation of ellipsis array indexing notation `..`
Julia
80
star
48

AutoOptimize.jl

Automatic optimization and parallelization for Scientific Machine Learning (SciML)
Julia
78
star
49

StructuralIdentifiability.jl

Fast and automatic structural identifiability software for ODE systems
Julia
75
star
50

ParameterizedFunctions.jl

A simple domain-specific language (DSL) for defining differential equations for use in scientific machine learning (SciML) and other applications
Julia
73
star
51

HighDimPDE.jl

A Julia package for Deep Backwards Stochastic Differential Equation (Deep BSDE) and Feynman-Kac methods to solve high-dimensional PDEs without the curse of dimensionality
Julia
65
star
52

MultiScaleArrays.jl

A framework for developing multi-scale arrays for use in scientific machine learning (SciML) simulations
Julia
64
star
53

DiffEqNoiseProcess.jl

A library of noise processes for stochastic systems like stochastic differential equations (SDEs) and other systems that are present in scientific machine learning (SciML)
Julia
61
star
54

SciMLExpectations.jl

Fast uncertainty quantification for scientific machine learning (SciML) and differential equations
Julia
61
star
55

SimpleNonlinearSolve.jl

Fast and simple nonlinear solvers for the SciML common interface. Newton, Broyden, Bisection, Falsi, and more rootfinders on a standard interface.
Julia
58
star
56

SparsityDetection.jl

Automatic detection of sparsity in pure Julia functions for sparsity-enabled scientific machine learning (SciML)
Julia
58
star
57

DelayDiffEq.jl

Delay differential equation (DDE) solvers in Julia for the SciML scientific machine learning ecosystem. Covers neutral and retarded delay differential equations, and differential-algebraic equations.
Julia
55
star
58

DiffEqProblemLibrary.jl

A library of premade problems for examples and testing differential equation solvers and other SciML scientific machine learning tools
Julia
53
star
59

CellMLToolkit.jl

CellMLToolkit.jl is a Julia library that connects CellML models to the Scientific Julia ecosystem.
Julia
53
star
60

DiffEqParamEstim.jl

Easy scientific machine learning (SciML) parameter estimation with pre-built loss functions
Julia
52
star
61

SciMLDocs

Global documentation for the Julia SciML Scientific Machine Learning Organization
Julia
51
star
62

Static.jl

Static types useful for dispatch and generated functions.
Julia
51
star
63

GlobalSensitivity.jl

Robust, Fast, and Parallel Global Sensitivity Analysis (GSA) in Julia
Julia
49
star
64

sciml.ai

The SciML Scientific Machine Learning Software Organization Website
CSS
49
star
65

MinimallyDisruptiveCurves.jl

Finds relationships between the parameters of a mathematical model
Julia
49
star
66

DiffEqPhysics.jl

A library for building differential equations arising from physical problems for physics-informed and scientific machine learning (SciML)
Julia
48
star
67

MuladdMacro.jl

This package contains a macro for converting expressions to use muladd calls and fused-multiply-add (FMA) operations for high-performance in the SciML scientific machine learning ecosystem
Julia
46
star
68

DeepEquilibriumNetworks.jl

Implicit Layer Machine Learning via Deep Equilibrium Networks, O(1) backpropagation with accelerated convergence.
Julia
45
star
69

DiffEqDevTools.jl

Benchmarking, testing, and development tools for differential equations and scientific machine learning (SciML)
Julia
43
star
70

OperatorLearning.jl

No need to train, he's a smooth operator
Julia
43
star
71

SciMLOperators.jl

SciMLOperators.jl: Matrix-Free Operators for the SciML Scientific Machine Learning Common Interface in Julia
Julia
41
star
72

BoundaryValueDiffEq.jl

Boundary value problem (BVP) solvers for scientific machine learning (SciML)
Julia
39
star
73

HelicopterSciML.jl

Helicopter Scientific Machine Learning (SciML) Challenge Problem
Julia
37
star
74

RootedTrees.jl

A collection of functionality around rooted trees to generate order conditions for Runge-Kutta methods in Julia for differential equations and scientific machine learning (SciML)
Julia
36
star
75

SBMLToolkit.jl

SBML differential equation and chemical reaction model (Gillespie simulations) for Julia's SciML ModelingToolkit
Julia
35
star
76

AutoOffload.jl

Automatic GPU, TPU, FPGA, Xeon Phi, Multithreaded, Distributed, etc. offloading for scientific machine learning (SciML) and differential equations
Julia
34
star
77

SciMLWorkshop.jl

Workshop materials for training in scientific computing and scientific machine learning
Julia
34
star
78

ModelOrderReduction.jl

High-level model-order reduction to automate the acceleration of large-scale simulations
Julia
32
star
79

DifferenceEquations.jl

Solving difference equations with DifferenceEquations.jl and the SciML ecosystem.
Julia
31
star
80

DASSL.jl

Solves stiff differential algebraic equations (DAE) using variable stepsize backwards finite difference formula (BDF) in the SciML scientific machine learning organization
Julia
31
star
81

SteadyStateDiffEq.jl

Solvers for steady states in scientific machine learning (SciML)
Julia
30
star
82

TruncatedStacktraces.jl

Simpler stacktraces for the Julia Programming Language
Julia
28
star
83

ModelingToolkitCourse

A course on composable system modeling, differential-algebraic equations, acausal modeling, compilers for simulation, and building digital twins of real-world devices
Julia
28
star
84

DiffEqOnline

It's Angular2 business in the front, and a Julia party in the back! It's scientific machine learning (SciML) for the web
TypeScript
27
star
85

PDESystemLibrary.jl

A library of systems of partial differential equations, as defined with ModelingToolkit.jl in Julia
Julia
27
star
86

FiniteVolumeMethod.jl

Solver for two-dimensional conservation equations using the finite volume method in Julia.
Julia
27
star
87

DiffEqOnlineServer

Backend for DiffEqOnline, a webapp for scientific machine learning (SciML)
Julia
25
star
88

ReactionNetworkImporters.jl

Julia Catalyst.jl importers for various reaction network file formats like BioNetGen and stoichiometry matrices
Julia
25
star
89

MathML.jl

Julia MathML parser
Julia
23
star
90

StochasticDelayDiffEq.jl

Stochastic delay differential equations (SDDE) solvers for the SciML scientific machine learning ecosystem
Julia
22
star
91

SimpleDiffEq.jl

Simple differential equation solvers in native Julia for scientific machine learning (SciML)
Julia
22
star
92

DiffEqFinancial.jl

Differential equation problem specifications and scientific machine learning for common financial models
Julia
22
star
93

IRKGaussLegendre.jl

Implicit Runge-Kutta Gauss-Legendre 16th order (Julia)
Jupyter Notebook
21
star
94

MATLABDiffEq.jl

Common interface bindings for the MATLAB ODE solvers via MATLAB.jl for the SciML Scientific Machine Learning ecosystem
Julia
21
star
95

SciMLTutorialsOutput

Tutorials for doing scientific machine learning (SciML) and high-performance differential equation solving with open source software.
HTML
20
star
96

OptimalControl.jl

A component of the SciML scientific machine learning ecosystem for optimal control
Julia
20
star
97

SciPyDiffEq.jl

Wrappers for the SciPy differential equation solvers for the SciML Scientific Machine Learning organization
Julia
20
star
98

IfElse.jl

Under some conditions you may need this function
Julia
19
star
99

QuantumNLDiffEq.jl

Julia
18
star
100

FiniteStateProjection.jl

Finite State Projection algorithms for chemical reaction networks
Julia
17
star