Skip to main content

num-dual

crate documentation minimum rustc 1.51 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.7"

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::*;

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}
}

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

num_dual-0.8.0-cp37-abi3-win_amd64.whl (3.5 MB view details)

Uploaded CPython 3.7+Windows x86-64

num_dual-0.8.0-cp37-abi3-win32.whl (3.2 MB view details)

Uploaded CPython 3.7+Windows x86

num_dual-0.8.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.5 MB view details)

Uploaded CPython 3.7+manylinux: glibc 2.17+ x86-64

num_dual-0.8.0-cp37-abi3-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (6.0 MB view details)

Uploaded CPython 3.7+macOS 10.9+ universal2 (ARM64, x86-64)macOS 10.9+ x86-64macOS 11.0+ ARM64

num_dual-0.8.0-cp37-abi3-macosx_10_7_x86_64.whl (3.2 MB view details)

Uploaded CPython 3.7+macOS 10.7+ x86-64

File details

Details for the file num_dual-0.8.0-cp37-abi3-win_amd64.whl.

File metadata

  • Download URL: num_dual-0.8.0-cp37-abi3-win_amd64.whl
  • Upload date:
  • Size: 3.5 MB
  • Tags: CPython 3.7+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for num_dual-0.8.0-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 dda3706df7f53fe6219d4984ee7b1a716fa413fbb6af0e89275cea955cdcc189
MD5 e2f715714325be0e80a43bed7dfa000a
BLAKE2b-256 396bdebe3fff16dd5a495a46d5b6ba526adf07aa2acbc4940aa86a87c3636ca9

See more details on using hashes here.

File details

Details for the file num_dual-0.8.0-cp37-abi3-win32.whl.

File metadata

  • Download URL: num_dual-0.8.0-cp37-abi3-win32.whl
  • Upload date:
  • Size: 3.2 MB
  • Tags: CPython 3.7+, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for num_dual-0.8.0-cp37-abi3-win32.whl
Algorithm Hash digest
SHA256 e88861c090d4e6e0175bcf2ca57b072d8b321783af4ad9b356a091c386c4561f
MD5 5e99f3e615fc9ac727acb49f65731fb6
BLAKE2b-256 55f24d53412ae704b1b36dfcb8cb9700868899f04bd778160e352ed26c94357e

See more details on using hashes here.

File details

Details for the file num_dual-0.8.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for num_dual-0.8.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2f44d5259447d412c3bc23ccee75a8ba4328bde88bfe2df609da9ab2b5f5e187
MD5 9c92a0eac24a87c776743e91f57b4130
BLAKE2b-256 5102abd028ef8217cc6493b84c320a24cb5ecf0f342731ff9c702f426a7df390

See more details on using hashes here.

File details

Details for the file num_dual-0.8.0-cp37-abi3-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for num_dual-0.8.0-cp37-abi3-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 343c62bf8ac33ba74af3134c07eb7c4a698fa8b9c8d4e99d4c2bb9d0f523a5c2
MD5 ad83b979997af00eba22cc168cb558b2
BLAKE2b-256 d8ce764ce47131e3fbc2cf17d28448452d22ac9ba81179a4c11ce93fdbd300e5

See more details on using hashes here.

File details

Details for the file num_dual-0.8.0-cp37-abi3-macosx_10_7_x86_64.whl.

File metadata

File hashes

Hashes for num_dual-0.8.0-cp37-abi3-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 7e8a6d7dcc6e24ff95a04f991dc08fb56a5505b18cd416e155ea8c59bd08e75c
MD5 42b0ff9bc13c36fea1bef7ac63667ebf
BLAKE2b-256 0430ccaa492e2ed0f12b6a004dad7c4b27136866a744e9fc7928d28220933497

See more details on using hashes here.

Release history Release notifications | RSS feed

0.15.0

4 files

0.14.2

4 files

0.14.1

4 files

0.14.0

4 files

0.13.7

4 files

0.13.6

4 files

0.13.5

4 files

0.13.4

4 files

0.13.3

4 files

0.13.2

4 files

0.13.1

4 files

0.13.0

4 files

0.12.1

4 files

0.12.0

4 files

0.11.2

4 files

0.11.1

4 files

0.11.0

4 files

0.10.3

4 files

0.10.2

4 files

0.10.1

4 files

0.10.0

4 files

0.9.1

5 files

0.9.0

5 files

0.8.1

5 files

This release

0.8.0 This release

5 files

0.7.1

5 files

0.7.0

5 files

0.6.0

5 files

0.5.3

5 files

0.5.2

5 files

0.5.1

5 files

0.5.0

5 files

0.4.1

5 files

0.4.0

5 files

0.3.0

5 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