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

Uploaded CPython 3.10+Windows x86-64

num_dual-0.14.0-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.0-cp310-abi3-macosx_11_0_arm64.whl (4.5 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

num_dual-0.14.0-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.0-cp310-abi3-win_amd64.whl.

File metadata

  • Download URL: num_dual-0.14.0-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.0-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 4146bf058045a3a06f8c5620085eb0faf68ac23b5b7aedd51d8be4eb7e8860a4
MD5 897f7268732d3ec3416a0fb4db46c8be
BLAKE2b-256 370d76211b51a09631a6ebfeb5b3e0e4f7a97da09d85afb79e95ccb9146a4d72

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for num_dual-0.14.0-cp310-abi3-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 1f741f5f2f497ce377b1b14ed9ac5d6181b004bfa1d9205b3de9e8f932493165
MD5 c59e3ea47f1f43ccaf6ca0b1d78da2f2
BLAKE2b-256 c84702a836a657affb3c8c1d3e0598f150594d3f0ce674630f499a7eb8fbe9f6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for num_dual-0.14.0-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 dc1f7799141a1085369077767c27039d58f3f65b0458e79a0fa9e65706ddaefb
MD5 caa24d64005e64644ae98fbc2ead4fb6
BLAKE2b-256 bac29ab4a37b2d29dd6339674dfbbda1ab321bb2f723f578aaaf165cfd63ab46

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for num_dual-0.14.0-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 815f1f603577715a77f69aee71b99cadfe02e90303e8ba7b3cf65cf81e9c2349
MD5 9df77d8be51664a2af7e92f946870766
BLAKE2b-256 0c161ffd217aa394cd58140d0c64f13adce217c02ccd1c62c407df416886c330

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