Skip to main content

num-dual

crate documentation minimum rustc 1.81 documentation PyPI version

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:

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)

Table of built distributions (wheels) for num-dual 0.15.1
File
num_dual-0.15.1-cp310-abi3-win_amd64.whl CPython 3.10 abi3 Windows x86-64 Details
num_dual-0.15.1-cp310-abi3-manylinux_2_34_x86_64.whl CPython 3.10 abi3 Linux glibc 2.34+ x86-64 Details
num_dual-0.15.1-cp310-abi3-macosx_11_0_arm64.whl CPython 3.10 abi3 macOS 11.0+ ARM64 Details
num_dual-0.15.1-cp310-abi3-macosx_10_12_x86_64.whl CPython 3.10 abi3 macOS 10.12+ x86-64 Details

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

Release history Release notifications | RSS feed

This release

0.15.1 This release

4 release files

0.15.0

4 release files

0.14.2

4 release files

0.14.1

4 release files

0.14.0

4 release files

0.13.7

4 release files

0.13.4

4 release files

0.13.3

4 release files

0.13.2

4 release files

0.13.1

4 release files

0.12.1

4 release files

0.12.0

4 release files

0.11.2

4 release files

0.10.3

4 release files

0.10.0

4 release files

0.9.1

5 release files

0.9.0

5 release files

0.8.1

5 release files

0.8.0

5 release files

0.7.1

5 release files

0.7.0

5 release files

0.6.0

5 release files

0.5.3

5 release files

0.5.2

5 release files

0.5.1

5 release files

0.5.0

5 release files

0.4.1

5 release files

0.4.0

5 release files

0.3.0

5 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page