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

Example

Python

Compute the first and second derivative of a scalar-valued function.

from num_dual import derive2
import numpy as np

def f(x):
    return np.exp(x) / np.sqrt(np.sin(x)**3 + np.cos(x)**3)

x = derive2(1.5)
result = f(x)
print('f(x)    = {}'.format(result.value))
print('df/dx   = {}'.format(result.first_derivative))
print('d2f/dx2 = {}'.format(result.second_derivative))

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
    let x_dual = Dual64::from(x).derive();
    let y_dual = Dual64::from(y);
    println!("{}", f(x_dual, y_dual));                      // 2000 + [1200]ε
    // Calculate a gradient
    let xy_dual_vec = StaticVec::new_vec([x,y]).map(DualVec64::<2>::from).derive();
    println!("{}", f(xy_dual_vec[0], xy_dual_vec[1]).eps);  // [1200, 1000]
    // Calculate a Hessian
    let xy_dual2 = StaticVec::new_vec([x,y]).map(Dual2Vec64::<2>::from).derive();
    println!("{}", f(xy_dual2[0], xy_dual2[1]).v2);         // [[480, 600], [600, 250]]
    // for x=cos(t) and y=sin(t) calculate the third derivative w.r.t. t
    let t = Dual3_64::from(1.0).derive();
    println!("{}", f(t.cos(), t.sin()).v3);                 // 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.5.3-cp37-abi3-win_amd64.whl (1.7 MB view details)

Uploaded CPython 3.7+Windows x86-64

num_dual-0.5.3-cp37-abi3-win32.whl (1.5 MB view details)

Uploaded CPython 3.7+Windows x86

num_dual-0.5.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.5 MB view details)

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

num_dual-0.5.3-cp37-abi3-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (3.1 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.5.3-cp37-abi3-macosx_10_7_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.7+macOS 10.7+ x86-64

File details

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

File metadata

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

File hashes

Hashes for num_dual-0.5.3-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 67443f5b2d8c1de6f57ca1277d28a9844af8d81ffaeead64315e23b62e419cd9
MD5 bdd434a1618a6fc751623add4f77b6b7
BLAKE2b-256 bb1988d7994fc71ff53c4e2b3372139110e269efea6663779a929ef57376d0e2

See more details on using hashes here.

File details

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

File metadata

  • Download URL: num_dual-0.5.3-cp37-abi3-win32.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.7+, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.15

File hashes

Hashes for num_dual-0.5.3-cp37-abi3-win32.whl
Algorithm Hash digest
SHA256 33c49c7519b4a595d4e43b4a471375c2dbb10838d39d41454ab8ed48e25d88c6
MD5 aeb728f5aa8fdccf8b19db2a691ce06f
BLAKE2b-256 573eaf09dced42251440ba3d51f1bdbf21401353abc2758d2d3eeb5d6a8a7678

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for num_dual-0.5.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b8b4a7799c4860883001628054365706b9a7b136143c84357fb854b1f9d0fba3
MD5 2405ee3e32acb9dc3f6b1961306baed5
BLAKE2b-256 2930c53fb544f91238fea1ec4df141ceaac7ab54bed7ba3c7ed252b16d931111

See more details on using hashes here.

File details

Details for the file num_dual-0.5.3-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.5.3-cp37-abi3-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 a69fd39b25b5f265996ae617943d810d44b2c7c9bc00fb78f02f41bb7e26c9fe
MD5 1de2ebed568c325dec84f6cbf69bbe79
BLAKE2b-256 7dbe0db0be36a58b7aa4cce942d2a4e66057e1fc49a960e6ed0b71a5636af386

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for num_dual-0.5.3-cp37-abi3-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 7b7ac209b155cdfe147687e5082590013d9cb093ffcac21b0ab028b41d903d3f
MD5 d63da22d9974a7025bf34b8758fe10c1
BLAKE2b-256 8482b09405ebffeb5ffef0438335509b2a8a27af4c762936f5c47ba24df4b2eb

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

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

This release

0.5.3 This release

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