num-dual
Generalized, recursive, scalar and vector (hyper) dual numbers for the automatic and exact calculation of (partial) derivatives. Including bindings for python.
Installation and Usage
Python
The python package can be installed directly from PyPI:
pip install num_dual
Rust
Add this to your Cargo.toml:
[dependencies]
num-dual = "0.15"
Example
Python
Compute the first and second derivative of a scalar-valued function.
from num_dual import second_derivative
import numpy as np
def f(x):
return np.exp(x) / np.sqrt(np.sin(x)**3 + np.cos(x)**3)
f, df, d2f = second_derivative(f, 1.5)
print(f'f(x) = {f}')
print(f'df/dx = {df}')
print(f'd2f/dx2 = {d2f}')
Rust
This example defines a generic function that can be called using any (hyper) dual number and automatically calculates derivatives.
use num_dual::*;
use nalgebra::SMatrix;
fn f<D: DualNum<f64>>(x: D, y: D) -> D {
x.powi(3) * y.powi(2)
}
fn main() {
let (x, y) = (5.0, 4.0);
// Calculate a simple derivative using dual numbers
let x_dual = Dual64::from(x).derivative();
let y_dual = Dual64::from(y);
println!("{}", f(x_dual, y_dual)); // 2000 + 1200ε
// or use the provided function instead
let (_, df) = first_derivative(|x| f(x, y.into()), x);
println!("{df}"); // 1200
// Calculate a gradient
let (value, grad) = gradient(|v| f(v[0], v[1]), &SMatrix::from([x, y]));
println!("{value} {grad}"); // 2000 [1200, 1000]
// Calculate a Hessian
let (_, _, hess) = hessian(|v| f(v[0], v[1]), &SMatrix::from([x, y]));
println!("{hess}"); // [[480, 600], [600, 250]]
// for x=cos(t) and y=sin(t) calculate the third derivative w.r.t. t
let (_, _, _, d3f) = third_derivative(|t| f(t.cos(), t.sin()), 1.0);
println!("{d3f}"); // 7.358639755305733
}
Documentation
- You can find the documentation of the rust crate here.
- The documentation of the python package can be found here.
Python
For the following commands to work you have to have the package installed (see: installing from source).
cd docs
make html
Open _build/html/index.html in your browser.
Further reading
If you want to learn more about the topic of dual numbers and automatic differentiation, we have listed some useful resources for you here:
- Initial paper about hyper-dual numbers: Fike, J. and Alonso, J., 2011
- Website about all topics regarding automatic differentiation: autodiff.org
- Our paper about dual numbers in equation of state modeling: Rehner, P. and Bauer, G., 2021
Cite us
If you find num-dual useful for your own scientific studies, consider citing our publication accompanying this library.
@ARTICLE{rehner2021,
AUTHOR={Rehner, Philipp and Bauer, Gernot},
TITLE={Application of Generalized (Hyper-) Dual Numbers in Equation of State Modeling},
JOURNAL={Frontiers in Chemical Engineering},
VOLUME={3},
YEAR={2021},
URL={https://www.frontiersin.org/article/10.3389/fceng.2021.758090},
DOI={10.3389/fceng.2021.758090},
ISSN={2673-2718}
}
Metadata
Release files for num-dual 0.15.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Actions Reset | |||
|---|---|---|---|---|
| num_dual-0.15.1-cp310-abi3-win_amd64.whl | CPython 3.10 | abi3 | Windows x86-64 | Details for num_dual-0.15.1-cp310-abi3-win_amd64.whl |
| num_dual-0.15.1-cp310-abi3-manylinux_2_34_x86_64.whl | CPython 3.10 | abi3 | Linux glibc 2.34+ x86-64 | Details for num_dual-0.15.1-cp310-abi3-manylinux_2_34_x86_64.whl |
| num_dual-0.15.1-cp310-abi3-macosx_11_0_arm64.whl | CPython 3.10 | abi3 | macOS 11.0+ ARM64 | Details for num_dual-0.15.1-cp310-abi3-macosx_11_0_arm64.whl |
| num_dual-0.15.1-cp310-abi3-macosx_10_12_x86_64.whl | CPython 3.10 | abi3 | macOS 10.12+ x86-64 | Details for num_dual-0.15.1-cp310-abi3-macosx_10_12_x86_64.whl |
Total release size: 17.1 MB
Release files / num_dual-0.15.1-cp310-abi3-win_amd64.whl
| Download URL | num_dual-0.15.1-cp310-abi3-win_amd64.whl |
|---|---|
| Size | 4.6 MB |
| Tags | CPython 3.10 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
703dc5b70889e7453f2b06960ff2d8be940e2cec07799201c0263ae82d76e62b
|
|
BLAKE2b-256 checksum How to use checksums |
3ca84fd6b431834967b2cb45fe53ac02079ada90b7ada5264bff14c7f16e0e03
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Release files / num_dual-0.15.1-cp310-abi3-manylinux_2_34_x86_64.whl
| Download URL | num_dual-0.15.1-cp310-abi3-manylinux_2_34_x86_64.whl |
|---|---|
| Size | 4.3 MB |
| Tags | CPython 3.10 Linux glibc 2.34+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
bb8c69c29bf56e939ef66f219d82fbfbfa267e7dc09f11dc68d79a75898a0525
|
|
BLAKE2b-256 checksum How to use checksums |
71bed55ce4db4c314ab1a9378a8319cf54b792c4bde767e4404745306bdff3e0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Release files / num_dual-0.15.1-cp310-abi3-macosx_11_0_arm64.whl
| Download URL | num_dual-0.15.1-cp310-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 4.0 MB |
| Tags | CPython 3.10 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
0bbf813f8776fc746d3cdb8bd8f68d3b2ee7af124df943821bf228a06ef916be
|
|
BLAKE2b-256 checksum How to use checksums |
497ad53a6c8b270b855d00d9e65d6559829d143b6f9c81e360a2717f8289627c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Release files / num_dual-0.15.1-cp310-abi3-macosx_10_12_x86_64.whl
| Download URL | num_dual-0.15.1-cp310-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 4.2 MB |
| Tags | CPython 3.10 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
48d7dbd5210fcea3ec62f3cfeccc7cc8438875c63f9b3dba2d7ad45f238eefb0
|
|
BLAKE2b-256 checksum How to use checksums |
4074f8e735dc4bc0884adb0d83ce62f12535a33ad0f022336586b1d517572ed1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Security for num-dual 0.15.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.