Skip to main content

Generalized (hyper) dual numbers for the calculation of exact (partial) derivatives

Project description

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

Project details


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

Uploaded CPython 3.7+Windows x86-64

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

Uploaded CPython 3.7+Windows x86

num_dual-0.5.1-cp37-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.whl (2.4 MB view details)

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

num_dual-0.5.1-cp37-abi3-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (2.9 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.1-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.1-cp37-abi3-win_amd64.whl.

File metadata

  • Download URL: num_dual-0.5.1-cp37-abi3-win_amd64.whl
  • Upload date:
  • Size: 1.8 MB
  • Tags: CPython 3.7+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for num_dual-0.5.1-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 d454ba21b1d46ac447018bda04dc1c20aab89c907dc93a9d78369c9f11765460
MD5 3532df4d6099b81cf99a9f67004f475f
BLAKE2b-256 eb93b2c4da626194e6b3c82db582092155d93a592fa0a8dbd36971945af097c7

See more details on using hashes here.

File details

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

File metadata

  • Download URL: num_dual-0.5.1-cp37-abi3-win32.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.7+, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for num_dual-0.5.1-cp37-abi3-win32.whl
Algorithm Hash digest
SHA256 04358f5ebed9fb47a0fe204dca7fc1776bc82b2fd18175dca2bcd3f660579216
MD5 9643835a8e6a4c4a2891c9dc9cc9d055
BLAKE2b-256 97be132376be7847193804ff8a58291faa516c9b24e5b10b0dd97f7abcaa217f

See more details on using hashes here.

File details

Details for the file num_dual-0.5.1-cp37-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.whl.

File metadata

  • Download URL: num_dual-0.5.1-cp37-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.whl
  • Upload date:
  • Size: 2.4 MB
  • Tags: CPython 3.7+, manylinux: glibc 2.5+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for num_dual-0.5.1-cp37-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 50db92c9b41d0f8b2ca81191e3acf7d8642925b69ac12cdcaf7ce8d6d9542061
MD5 789491a798e76e35bffe5eb298323535
BLAKE2b-256 93f1d6bb1f37476a7e088d1768c90fa4fc6a680b63e55a1cdbdc38cdaba8aea1

See more details on using hashes here.

File details

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

File metadata

  • Download URL: num_dual-0.5.1-cp37-abi3-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
  • Upload date:
  • Size: 2.9 MB
  • Tags: CPython 3.7+, macOS 10.9+ universal2 (ARM64, x86-64), macOS 10.9+ x86-64, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for num_dual-0.5.1-cp37-abi3-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 d9cfd30f5fc5cd37fc05806cdd6025396ed21918eb80145e5ff677620c071a65
MD5 02096d46fc58716e32cbfa8f15a3e131
BLAKE2b-256 f08cff17db727c4c90e4c86b78939746fe876dc457605bee6f6ee177478bf4d1

See more details on using hashes here.

File details

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

File metadata

  • Download URL: num_dual-0.5.1-cp37-abi3-macosx_10_7_x86_64.whl
  • Upload date:
  • Size: 1.6 MB
  • Tags: CPython 3.7+, macOS 10.7+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for num_dual-0.5.1-cp37-abi3-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 ed291bd87241d91200a8e7279e46f370bbfa7f5d209f831bcab6bcfa765cb98a
MD5 355cfd9ddb2c4e0f47444f562889406a
BLAKE2b-256 e714f179ab99e11f67857fbde0e732c2ade5a1d3b323c7d76e37ab2ec8559a96

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