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

Uploaded CPython 3.7+Windows x86-64

num_dual-0.7.1-cp37-abi3-win32.whl (2.7 MB view details)

Uploaded CPython 3.7+Windows x86

num_dual-0.7.1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.1 MB view details)

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

num_dual-0.7.1-cp37-abi3-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (5.3 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.7.1-cp37-abi3-macosx_10_7_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.7+macOS 10.7+ x86-64

File details

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

File metadata

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

File hashes

Hashes for num_dual-0.7.1-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 b336b8175cd035392d1ab7673cf00b6ce624c8074a007a35e6ec3a470f122c81
MD5 97d9260f35cdf8870986a19954185fa7
BLAKE2b-256 577214eaa07a5e2b242ebafb7666d9ffd954c9fe30ff04bcb303645cc9269f28

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for num_dual-0.7.1-cp37-abi3-win32.whl
Algorithm Hash digest
SHA256 a9ac5bb3d2608a7d1a9ecc7daa2660da9f3ef39f4e5f75161b0e19b40841a662
MD5 a57c395a0ebeceb6881e358c41fb84d8
BLAKE2b-256 5995c973dd31c3065d3a6156eedbcd52f9b983aade4e2b59e765b13968415b24

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for num_dual-0.7.1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 493df16ae149e25b2e3b05967225bc76b8441c960665c0249b386400989b42a1
MD5 09a321396ae15dd7218903bd4b184983
BLAKE2b-256 e7f8853e14dd96b743b76afff6aa5c917f18eb7de2c82cae25986096ff911b72

See more details on using hashes here.

File details

Details for the file num_dual-0.7.1-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.7.1-cp37-abi3-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 c349bab5997931eecc37254ee70ae60dcea8124661687feb6fcdd27709eafbb1
MD5 2d86994f19b5199116880b83108c6400
BLAKE2b-256 3e202cfbb3fb91623099400a1d4f253acbc8f64f1ae926c327773cdb4c1fddfe

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for num_dual-0.7.1-cp37-abi3-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 526415d01042a1cf7d314f2f8a0e0e38aae197e2738d06a361d81b49fe161ad1
MD5 c4a99c24af14cb4253d1a5676ff9ecbd
BLAKE2b-256 b2e883aa8cfe1c171267296fffaab8c7979672fc5a285c4a874344aaa84fbf89

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

0.8.0

5 files

This release

0.7.1 This release

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