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

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

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

Uploaded CPython 3.7+Windows x86-64

num_dual-0.10.1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.6 MB view details)

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

num_dual-0.10.1-cp37-abi3-macosx_11_0_arm64.whl (2.9 MB view details)

Uploaded CPython 3.7+macOS 11.0+ ARM64

num_dual-0.10.1-cp37-abi3-macosx_10_12_x86_64.whl (3.4 MB view details)

Uploaded CPython 3.7+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: num_dual-0.10.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/5.1.1 CPython/3.9.20

File hashes

Hashes for num_dual-0.10.1-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 a88089411c58ab37ab5f31684a1f20933b9aa25e0bab07b1aec6af634aa21fb3
MD5 e7d5beee365a8c83386686b24dac8cb1
BLAKE2b-256 48e4985979aca793f95ace37536682bdd81d0476a3bcc99d577bc9c63c75312a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for num_dual-0.10.1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 84248e06243618770d37e5ff46dd1313ddb4625f43c509e4ebc602f6ed247575
MD5 29e5fd430c77d935cef17eab8d0c567d
BLAKE2b-256 d415735f7f98eb4da2ec0a97b41d715e63d536ac9a6a90f6bd56b9e8c9d179c4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for num_dual-0.10.1-cp37-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 eea61cd101997a45de750b5836456c9a851d76d65a44eac26a615b2169aabf0f
MD5 22d5195efd0db75ad08accf4f74e19e4
BLAKE2b-256 ba0127aadc6075aed2a7b08d4cd377f7ffe27057f8ada263f1e6ea4899802384

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for num_dual-0.10.1-cp37-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 fef66d675795f002449cfbd65167dcacfba55d2648b820907d2d79872c285cbe
MD5 799af24b5dde9d96bec15b692b6de6c9
BLAKE2b-256 f666fe45d7c9ad3bf16a2881b9df88c0643df728b50c17e459f87b8a9d87ce6b

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

0.12.0

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

This release

0.10.1 This release

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