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

Uploaded CPython 3.10+Windows x86-64

num_dual-0.13.7-cp310-abi3-manylinux_2_35_x86_64.whl (4.6 MB view details)

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

num_dual-0.13.7-cp310-abi3-macosx_11_0_arm64.whl (4.1 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

num_dual-0.13.7-cp310-abi3-macosx_10_12_x86_64.whl (4.8 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: num_dual-0.13.7-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 4.8 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.13.7-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 f4f881b06c409e5c6d55ccb948307f420d18ce0f09fef3c21be6f68ddc1a8952
MD5 fb44d18307ff7182243f14bbe01f9178
BLAKE2b-256 aebeef97d746a1f3eb3d8c88ddb3ff36818b7eb6cc83a3ef922c8164ecce91bc

See more details on using hashes here.

File details

Details for the file num_dual-0.13.7-cp310-abi3-manylinux_2_35_x86_64.whl.

File metadata

File hashes

Hashes for num_dual-0.13.7-cp310-abi3-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 d8db4a363388b33a889298a83a9cae9bdf8b33bb708c5f7e76a46992f8d8c0e8
MD5 f875c9348acbe79e3e26d920e6211d31
BLAKE2b-256 2290d69db7dce73066a3f6f6ebe20a97e59332ec5d097af1960c42b035d94530

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for num_dual-0.13.7-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 38249ace123645d9fc425b7ae89eff3539a9c6e685f51d2cc359ea186d7cbab6
MD5 9d3d56d0724e1afa0cbe4e696d49960f
BLAKE2b-256 042d96d5859a6bb5d0addbffad3dd83f552864f5db15e9da6dc0facdc24e825c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for num_dual-0.13.7-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 24dc3067cb8c60950cfd84221f5e4473de9d32b459efc1d1b80c76950e24aab3
MD5 fd4d0f0712cb7ad3ebf31852dc3494e8
BLAKE2b-256 6114ab2dad1190c4781c77608e3e6de7453d23bfa73c323a205dc18c2c7fbe75

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