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

Uploaded CPython 3.10+Windows x86-64

num_dual-0.13.6-cp310-abi3-manylinux_2_35_x86_64.whl (4.7 MB view details)

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

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

Uploaded CPython 3.10+macOS 11.0+ ARM64

num_dual-0.13.6-cp310-abi3-macosx_10_12_x86_64.whl (4.9 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for num_dual-0.13.6-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 9bf3322474e9867876565b9bbc318b5b6f0696403bd8052fc2a650b2b7e3436b
MD5 bc611df571a916393f91a8f644c9a044
BLAKE2b-256 cb9254a2f80809a9bbfbaa21f88ef4753dbce1ffcf5b1052a4c8fc4c0da53a35

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for num_dual-0.13.6-cp310-abi3-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 fddeae44220b60fbf3eea1d1f85e25f770a293deab2f6f2059d1de4c1a907cd2
MD5 ace9432cec317c592639b88b585483d5
BLAKE2b-256 e8e1757400e780686c2fae6b3c7748983eb5dfe9a32f96c2b994935f728055ce

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for num_dual-0.13.6-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f18618c863c65dfccedd4f5d35f365fa6ec6428f86e73006cbe2424c52dbbdd7
MD5 e43028364decb7feb2276086c534ead1
BLAKE2b-256 fc1ba7756ec884ad21060e19d7f18833cc08333eeca7c55628b4fa59414495ab

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for num_dual-0.13.6-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 dba59e144371d589128cbbe94063ed8cd5c8d10c9433ae63cc22e56e88a25d23
MD5 2ad95e736e6f8a076d3ced81930023f3
BLAKE2b-256 2cbb70c93ca5a087716251c2fe032461eeb9ef1f72345947e79586310bce3761

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