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.10"

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.10.0-cp37-abi3-win_amd64.whl (3.8 MB view details)

Uploaded CPython 3.7+Windows x86-64

num_dual-0.10.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.6 MB view details)

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

num_dual-0.10.0-cp37-abi3-macosx_11_0_arm64.whl (2.8 MB view details)

Uploaded CPython 3.7+macOS 11.0+ ARM64

num_dual-0.10.0-cp37-abi3-macosx_10_12_x86_64.whl (3.4 MB view details)

Uploaded CPython 3.7+macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for num_dual-0.10.0-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 93ba1d24c408f8780cf8ba830edeb0a16a0a4f2c2d1d52039b5309f0fc9aa128
MD5 f4efcf6d5f417d5109769f92b1ebddab
BLAKE2b-256 f53af682a7433533486aa968f6522bbf86386e045e657cec2d7b2dd57c50c912

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for num_dual-0.10.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a64443a4cfca91926df0123a931fdb6a364112d7db5a70269a0bca2c02096134
MD5 7ab713816dc42c626cffc7889f74b27d
BLAKE2b-256 83d77b6833f619b7a7af6e03ea000e1527190b26a2daa4b19a62238b09b420bf

See more details on using hashes here.

File details

Details for the file num_dual-0.10.0-cp37-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for num_dual-0.10.0-cp37-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3817a8c54f91736cad6de7af5c62b7a4c576ae99046b4d2e3e4cf29f559c6df7
MD5 8bc9e90e2406f5a6111c939a2e8d3337
BLAKE2b-256 a0be45c98316898170a964da67435a0586c8f7b7e93007821acaee4381a9dfe2

See more details on using hashes here.

File details

Details for the file num_dual-0.10.0-cp37-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for num_dual-0.10.0-cp37-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 02f0058f583b95dde61b34cf03a599e4ee3e951c8b36f9872fe43eae8bb9c4e5
MD5 78d93df250bfd55ba9233e3568842761
BLAKE2b-256 c7b76c6c675df7d62e967843b9c2e0ba81bd89a93b8f5162faded153e33caa05

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

This release

0.10.0 This release

4 files

0.9.1

5 files

0.9.0

5 files

0.8.1

5 files

0.8.0

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