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

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::*;
use nalgebra::SMatrix;

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

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

num_dual-0.14.1-cp310-abi3-win_amd64.whl (5.0 MB view details)

Uploaded CPython 3.10+Windows x86-64

num_dual-0.14.1-cp310-abi3-manylinux_2_34_x86_64.whl (4.8 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.34+ x86-64

num_dual-0.14.1-cp310-abi3-macosx_11_0_arm64.whl (4.5 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

num_dual-0.14.1-cp310-abi3-macosx_10_12_x86_64.whl (4.7 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

Details for the file num_dual-0.14.1-cp310-abi3-win_amd64.whl.

File metadata

  • Download URL: num_dual-0.14.1-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 5.0 MB
  • Tags: CPython 3.10+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for num_dual-0.14.1-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 8bc92cc2485355d167ca403779cff107d22befdb77faa08232764efb7dda16e1
MD5 61388684a1c6850126fd5a1a1b6ec0e8
BLAKE2b-256 442b8cd3a7fe4d7d71fce6369b74663dcb001510794ca8820a188bd110ac8de8

See more details on using hashes here.

File details

Details for the file num_dual-0.14.1-cp310-abi3-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for num_dual-0.14.1-cp310-abi3-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 b30dea670a669960b68b5f312523b3926254f2b93803e6b9fe58def90cf50d91
MD5 b03a8f162c2f92042c5862fe18d3d545
BLAKE2b-256 76150fb9b0d8e3ec0bcd1ab7603e088266b1f4739a00cbb1c55cfc6764773560

See more details on using hashes here.

File details

Details for the file num_dual-0.14.1-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for num_dual-0.14.1-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f2800030223a866451e2885d9f6b60c6e3e3168782f3f73a6d1ad98c0665b57d
MD5 9f4328d7099d387e65dba1b3f00417f6
BLAKE2b-256 5bb7378f091219b44212dfba228f622e5b2c0d2e381b14e170ba0bcea2c30220

See more details on using hashes here.

File details

Details for the file num_dual-0.14.1-cp310-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for num_dual-0.14.1-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 957cd4b3ec5b9657dae04691399e0fca48ac187cf62973d8572f3ab6c9aac52c
MD5 bb79a84ca0a565d082fef60c3b8ec659
BLAKE2b-256 aa896814ed163e3fd623a08f9240b3eaf969055597c9e8495307014e31494efb

See more details on using hashes here.

Supported by

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