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

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.13.2-cp39-abi3-win_amd64.whl (5.1 MB view details)

Uploaded CPython 3.9+Windows x86-64

num_dual-0.13.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.6 MB view details)

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

num_dual-0.13.2-cp39-abi3-macosx_11_0_arm64.whl (4.1 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

num_dual-0.13.2-cp39-abi3-macosx_10_12_x86_64.whl (4.8 MB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

Details for the file num_dual-0.13.2-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: num_dual-0.13.2-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 5.1 MB
  • Tags: CPython 3.9+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for num_dual-0.13.2-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 e33c1102e2adef4fcf5aa528ea5574e20b7c2e52a7773e9bdea60cf354fecfd4
MD5 4b8358798dcf4babd63cd2e04ca19e9f
BLAKE2b-256 9673185db313d4266a92de2ecc627fe450ef9efe96cfcec418ae21ba2188c13f

See more details on using hashes here.

File details

Details for the file num_dual-0.13.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for num_dual-0.13.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3774cba4b53f1e2a757843d5aca818b1905572d059344064af475402eba67cc3
MD5 576b2cdbcce6d9a41a508ba5642beca1
BLAKE2b-256 b79b3007697ec276a36cf53d975fe271b42a7f1ed4abcbe7797bcdb0aa636b10

See more details on using hashes here.

File details

Details for the file num_dual-0.13.2-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for num_dual-0.13.2-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d2345d4831abde531ea6cebc107b147d80e242aab24c43911f917c09c8dccf05
MD5 f1eda092bed37a87017aa800cb8e8013
BLAKE2b-256 ffe4029d6a4dc584bb82ec0f43a1e83f86959b476e49332c7ae95a25c06bbb41

See more details on using hashes here.

File details

Details for the file num_dual-0.13.2-cp39-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for num_dual-0.13.2-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 f71401454275f2f6528723857533b14e66f07e46843b083a029c8ed27c1608b7
MD5 62879251a55156b8c0f2216966bc5cf0
BLAKE2b-256 d9bf117dbd450fc4f9ef504a45c9eee29675661617cf1548a018f68e9bf90398

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