Skip to main content

Generalized (hyper) dual numbers for the calculation of exact (partial) derivatives

Project description

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

Project details


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

num_dual-0.10.2-cp37-abi3-win_amd64.whl (3.7 MB view details)

Uploaded CPython 3.7+ Windows x86-64

num_dual-0.10.2-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.2-cp37-abi3-macosx_11_0_arm64.whl (2.9 MB view details)

Uploaded CPython 3.7+ macOS 11.0+ ARM64

num_dual-0.10.2-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.2-cp37-abi3-win_amd64.whl.

File metadata

  • Download URL: num_dual-0.10.2-cp37-abi3-win_amd64.whl
  • Upload date:
  • Size: 3.7 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.2-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 8f97db0643852b040ffaedfa0e14509269488a19a586566f976a52b4dcd0ac6a
MD5 540c15a9c098b76aeba20cadecaa6bb8
BLAKE2b-256 3f10612024f4291c7ab86e367fbdf274d64641955be2f5d6010b9460ce499cff

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for num_dual-0.10.2-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 54f2fcf047cd97bacb34d521de4f6ff28cbcba431dcdc9f0835284f6ba8eafb5
MD5 0fc93e66215f4bbb3318a0938cf839e4
BLAKE2b-256 c313a60c6659bcfe4ff25cbc665449fa9939eedd8e65893fa3fa3137d18749c4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for num_dual-0.10.2-cp37-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ff092b7b0932638a2a9492941b092b2fe165862e8dfabe0a9c1960a3d97853c0
MD5 9826e801de3dff32f22078535f7bddad
BLAKE2b-256 509fece45a98713a3885d3dbffd2f5f92bd69401dfed98e481e624eea0e82c04

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for num_dual-0.10.2-cp37-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 2c6efa514a686639ce52df42cd1574b9d74a9f18c088b2dd5ec28c8bfd277768
MD5 0f4de5e74bbad5aa68ceacf6fada32b7
BLAKE2b-256 bc101c7270b230e58e0d096a76353888291746cce66e9b4d418a8b7d259c6499

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page