Skip to main content

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}
}

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

Uploaded CPython 3.10+Windows x86-64

num_dual-0.14.2-cp310-abi3-manylinux_2_34_x86_64.whl (4.4 MB view details)

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

num_dual-0.14.2-cp310-abi3-macosx_11_0_arm64.whl (4.5 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

num_dual-0.14.2-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.2-cp310-abi3-win_amd64.whl.

File metadata

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

File hashes

Hashes for num_dual-0.14.2-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 367b5533a52c7c37d273ade51549535744c3496039de53b9ffa1de7616e7fd41
MD5 e7e2276c07e528ea9a57bd80acb74752
BLAKE2b-256 98e2957e622efe11818af3fbe5e6f9d6eeec972468837f7afa61c32fffbe9859

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for num_dual-0.14.2-cp310-abi3-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 b3c1474d8d54a5d89cf1805ceea1f44008f4b757725ceb29ef24176ada3953bf
MD5 b67df693f84119e39398d6f6d8e613cf
BLAKE2b-256 fa5ecbca54f0f2685d99931f4ec2f3363d7599db9e78f52ee9f341728258e9e2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for num_dual-0.14.2-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a93a0a963844dd6b338f99a84b4ac345330b982dc2fc7d047f081baf39035355
MD5 800f00377a03e8e2b75be51f1f94fbb1
BLAKE2b-256 9bfde59c0c90fbc2220f001181de2de714758361e0464352aafcfa07aef862d9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for num_dual-0.14.2-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 a85b51856da92d97eac589dadcd18fa4b4bc7efba5df93105519b8f25e5ca0d6
MD5 b1f1c15163c14ccd87693a756d0d331e
BLAKE2b-256 949c0695d81135560a0ee911de74193d610e10fb20f55932c7d8eef7f2a2c796

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