Proposal for nabla Package

(0) Rationale

Scientific computing involves sophisticated models driven by numerous equations. It is often required to compute both the values of these models, but also their sensitivity to input parameters. This sensitivity is related to their derivative. Computing the derivative of a function is called differentiation, there are two ways to do this.

Differentiation can be done numerically by finite differences schemes, but this has limitations:

Differentiation can be done symbolically, but this has drawbacks:

The nabla package (∇) is intended to be a symbolic derivator for Java scientific applications that is completely automated and acts directly on the bytecode representation of compiled functions to remove all the drawbacks of symbolic differentiation.

(1) Scope of the Package

The Nabla project shall create and maintain a tool providing automatic differentiation for bytecode functions. Here are the specifications of the package:

(1.5) Interaction With Other Packages

Nabla should rely on standard Java (version To be Defined) and on an existing bytecode engineering library at runtime. For development, it utilizes the JUnit unit testing framework, either ant or maven 2 and general quality checking tools (coding style, test coverage, classical error patterns monitoring).

No external configuration files are utilized.

(2) Initial Source of the Package

The initial codebase will be imported from an unpublished proof of concept developed by the proposal creator. This codebase supports basic differentiation only.

The proposed package name for the new component is org.apache.commons.nabla.

(3) Required Commons Resources

(4) Initial Committers

The initial committers on the nabla component shall be: