Crate dorset

Crate dorset 

Source
Expand description

dorset, a rust implementation of Stan Math library. The project is not intended to be an exact port of Math, but as a proof of concept to take advantage of some Rust features in automatic differentiation. Hence the crate is meant to be experimental.

Below is how to do the problem example in section 2.1 of the Stan Math paper(Bob Carpenter, Matthew D. Hoffman, Marcus Brubaker, Daniel Lee, Peter Li, and Michael J. Betancourt. 2015. The Stan Math Library: Reverse-Mode Automatic Differentiation in C++. arXiv 1509.07164), using dorset.

#[macro_use]
extern crate dorset;
use dorset::*;

fn main() {
    let y: Real = 1.3;
    let s = cstack!();
    let (mu, sigma) = (var!(s, 0.5), var!(s, 1.2));
    let mut lp = var!(s);
    lp = &lp - 0.5 * (2.0 * PI).ln();
    lp = &lp - ln(&sigma);
    lp = &lp - 0.5 * pow((y - &mu) / &sigma, 2.0);
    lp.grad();
    println!("f(mu, sigma) = {0:.6}", lp.val()); // f(mu, sigma) = -1.323482
    println!("d.f/d.mu = {0:.6}", mu.adj());     // d.f/d.mu = 0.555556
    println!("d.f/d.sigma = {0:.6}", sigma.adj()); // d.f/d.sigma = -0.462963
}

Re-exports§

pub use core::*;
pub use operations::*;

Modules§

core
The core data structures for the autodiff expression graph and memory management.
macros
operations

Macros§

cstack
Initialize a new memory arena;
var
Constructs a new Var from a real number, using memory arena;

Structs§

Rc
A single-threaded reference-counting pointer. ‘Rc’ stands for ‘Reference Counted’.
RefCell
A mutable memory location with dynamically checked borrow rules