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

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

Uploaded CPython 3.9+Windows x86-64

num_dual-0.12.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.7 MB view details)

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

num_dual-0.12.0-cp39-abi3-macosx_11_0_arm64.whl (3.1 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

num_dual-0.12.0-cp39-abi3-macosx_10_12_x86_64.whl (3.8 MB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for num_dual-0.12.0-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 c836ded2d6e553474c997e13fbb885b9db85c3a08657e747c4770d0efd4cee75
MD5 6b1f10fc1b84f7b7adff9b8bddcf8bf9
BLAKE2b-256 17796b7a3d501f9837276956235070fee1d821ea2eb3e2031952e6112b0ecad6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for num_dual-0.12.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 dc91e6312d334311e8aaaedeaeee4db484e7683c3134491ac7424e5bf07bc597
MD5 c9c04cc62e4916ad73b46ad8eaba3ba5
BLAKE2b-256 749bccb8923dd776a227eed464568706fc3dcaff571f522e3185d339e59e8ab5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for num_dual-0.12.0-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 50c4ce51153bedb0a8f08a8b0f63a024504b292339a702630d41b5e2879893f6
MD5 bf57eea1848c9cfba387d7ec0619ec37
BLAKE2b-256 2b678ab5b7a54053d72c7ee78b6721ed91b7ec6e1342aa797d2fca2e6539ba50

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for num_dual-0.12.0-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 5c7dad0fa9b3f7e359263c798b155f9e68e2187146fdeb527fdd523d7fdf48d5
MD5 0d37d1e933d2d9bf1d0eb5c1cd4e8a26
BLAKE2b-256 5aa29fadbd24493a2654c112a59395a6a5aff4a24f2f5ddd578c536ce6232009

See more details on using hashes here.

Release history Release notifications | RSS feed

0.15.0

4 files

0.14.2

4 files

0.14.1

4 files

0.14.0

4 files

0.13.7

4 files

0.13.6

4 files

0.13.5

4 files

0.13.4

4 files

0.13.3

4 files

0.13.2

4 files

0.13.1

4 files

0.13.0

4 files

0.12.1

4 files

This release

0.12.0 This release

4 files

0.11.2

4 files

0.11.1

4 files

0.11.0

4 files

0.10.3

4 files

0.10.2

4 files

0.10.1

4 files

0.10.0

4 files

0.9.1

5 files

0.9.0

5 files

0.8.1

5 files

0.8.0

5 files

0.7.1

5 files

0.7.0

5 files

0.6.0

5 files

0.5.3

5 files

0.5.2

5 files

0.5.1

5 files

0.5.0

5 files

0.4.1

5 files

0.4.0

5 files

0.3.0

5 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page