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

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.11.1-cp37-abi3-win_amd64.whl (3.7 MB view details)

Uploaded CPython 3.7+ Windows x86-64

num_dual-0.11.1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.7 MB view details)

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

num_dual-0.11.1-cp37-abi3-macosx_11_0_arm64.whl (3.1 MB view details)

Uploaded CPython 3.7+ macOS 11.0+ ARM64

num_dual-0.11.1-cp37-abi3-macosx_10_12_x86_64.whl (3.8 MB view details)

Uploaded CPython 3.7+ macOS 10.12+ x86-64

File details

Details for the file num_dual-0.11.1-cp37-abi3-win_amd64.whl.

File metadata

  • Download URL: num_dual-0.11.1-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/6.1.0 CPython/3.11.11

File hashes

Hashes for num_dual-0.11.1-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 c3072e0b61e7bcd9941be05e13cc59cc436ea2832b4e7cf0ef0ee1655d75d80f
MD5 f966b88ff0659ba8204c9ca3b2bcf1b6
BLAKE2b-256 761639a307007b9def33f61a758963c0339f6e33352fbc8045aa5c7fd0f360e9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for num_dual-0.11.1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1c39ffe3b497f4c1a483f7267e70a45b03b4f02ba0ad1849a86621bb0d864da9
MD5 72f2219e484fd782ce490f251658d90f
BLAKE2b-256 f9f99f713745c0bbce702c3500fae6aff6dec63cef2905fddc2cde2fc563452c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for num_dual-0.11.1-cp37-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b9715c5b3f15211908a49c1ef0382a394c986238182d3ab2b39e8dd46cadcb20
MD5 a1b0bc10e9ab1acc97a8cdae404d8c73
BLAKE2b-256 6599246b5d07956192d5a70e96a54dacf12efa0fe2f5d88dcfbe89490c04374b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for num_dual-0.11.1-cp37-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 7fa25fc281381af06ea54387db0e3a616c11b7036a6c1ef4cb38186c013c3cfc
MD5 8664740ddff71fa16bca4db5d75b333e
BLAKE2b-256 924670a05672cfa8c2460d314254f30c868d7410632e4d6c42781266baf7e974

See more details on using hashes here.

Supported by

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