Skip to main content

num-dual

crate documentation minimum rustc 1.51 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.7"

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

Uploaded CPython 3.7+Windows x86-64

num_dual-0.9.1-cp37-abi3-win32.whl (3.1 MB view details)

Uploaded CPython 3.7+Windows x86

num_dual-0.9.1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.1 MB view details)

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

num_dual-0.9.1-cp37-abi3-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (6.0 MB view details)

Uploaded CPython 3.7+macOS 10.9+ universal2 (ARM64, x86-64)macOS 10.9+ x86-64macOS 11.0+ ARM64

num_dual-0.9.1-cp37-abi3-macosx_10_7_x86_64.whl (3.2 MB view details)

Uploaded CPython 3.7+macOS 10.7+ x86-64

File details

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

File metadata

  • Download URL: num_dual-0.9.1-cp37-abi3-win_amd64.whl
  • Upload date:
  • Size: 3.4 MB
  • Tags: CPython 3.7+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.9.19

File hashes

Hashes for num_dual-0.9.1-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 081e97a1121e0bfc7f4e2321ee551a1c86ccba31704b09d3e8022d25f07ef1ec
MD5 592b1fe9d3eba07765fa3e605b40d554
BLAKE2b-256 e765b9e31fd63d8ffbbbc6f16c024c75562581d9a12e83805920fa95ce355d1c

See more details on using hashes here.

File details

Details for the file num_dual-0.9.1-cp37-abi3-win32.whl.

File metadata

  • Download URL: num_dual-0.9.1-cp37-abi3-win32.whl
  • Upload date:
  • Size: 3.1 MB
  • Tags: CPython 3.7+, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.9.19

File hashes

Hashes for num_dual-0.9.1-cp37-abi3-win32.whl
Algorithm Hash digest
SHA256 45b95118173f371eccc7b900433430c43af68c2a934afd6bd27d8012d183512b
MD5 64caf912bf47d09eeea64920e568ab02
BLAKE2b-256 5c44a27016f62decc390652ef0ba8b4dfa58c435f49ed4191c47b3bcb144cadc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for num_dual-0.9.1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bcb626b120ef11ec9d6c093759d898385ba46421968c4f69df21ac8f69904a28
MD5 ccb3833c409bfe2e701e41bff2367ecd
BLAKE2b-256 f78066ed8d027628817fb0a7b781bebd0acda4216225daee8e80f959c768b26b

See more details on using hashes here.

File details

Details for the file num_dual-0.9.1-cp37-abi3-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for num_dual-0.9.1-cp37-abi3-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 8e97f95dd260e144f4344444c056d43cce7afbfc4dac2f58697bead89f23c137
MD5 18e81cd935f4b09737fb4a121322270e
BLAKE2b-256 fca1b8fa57c12b0d75b56d7c8e9c4d81123e562ca5454beda1a26c50b8875df4

See more details on using hashes here.

File details

Details for the file num_dual-0.9.1-cp37-abi3-macosx_10_7_x86_64.whl.

File metadata

File hashes

Hashes for num_dual-0.9.1-cp37-abi3-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 2a7dae62b238572c84604e21d42b6f24d9b6771eb66e770c8a04149fe8684190
MD5 cc074d82dd5a343b5085400dc25ab09d
BLAKE2b-256 6cd2391f28e86539dc1cb07f94921f98c142948c71871b1606ebef3c0d8e127a

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

0.10.1

4 files

0.10.0

4 files

This release

0.9.1 This release

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