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

Uploaded CPython 3.7+Windows x86-64

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

Uploaded CPython 3.7+Windows x86

num_dual-0.7.0-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.0-cp37-abi3-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (5.4 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.0-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.0-cp37-abi3-win_amd64.whl.

File metadata

  • Download URL: num_dual-0.7.0-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.0-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 378ddc87c066af9a34887d8720f609956e3661890c41947c4e19cb3bf7b907af
MD5 d1b01f7f0c7c9c9087d671cc0616b85c
BLAKE2b-256 fa61c348edb4aeaddebe471eb83a37a0414cfd9ed8efd4eb00d176c3566dcea6

See more details on using hashes here.

File details

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

File metadata

  • Download URL: num_dual-0.7.0-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.0-cp37-abi3-win32.whl
Algorithm Hash digest
SHA256 43c22e71507a470af9e07c23dedb967a5125235e9ddea7de8e3009d18086ed1a
MD5 f151b6ca7f5f5e8023ef431ac97c30d2
BLAKE2b-256 94bae8581bb50c94523393ab3e0a0db38c117136463c311d6aebc9425e1ce983

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for num_dual-0.7.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b84ae577a3c30290f5d8e10d1ac2d1030fd607a49292619501be1797f2641611
MD5 0c0502e3b3b8bdd1002e431d212294b1
BLAKE2b-256 70739a608b6e18efcd0ae8193e199c88c1a09b18ab3fa85580564847ee193a57

See more details on using hashes here.

File details

Details for the file num_dual-0.7.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.7.0-cp37-abi3-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 e9d37332cf0ffc63f4978af12f923a7ced02f7133e24fd06dcd36708af01f858
MD5 32901abf8a92434a64718771a3798b0b
BLAKE2b-256 493152bf5fb0bc78c43c384666b341971f7a6d94f57c62bc1647a695618d2f72

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for num_dual-0.7.0-cp37-abi3-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 213644943c1a048214e14b493dec21af41f7b7e26dd731ee28242f68baefce42
MD5 d5ccbd3a0f96f16c9e5a47083de81545
BLAKE2b-256 ddc474bc9b641b0e3655f86064164acb3afcc52590611e7e7ff7b8a71d50ec05

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

0.7.1

5 files

This release

0.7.0 This release

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