Skip to main content

cagra/
lib.rs

1//! cagra
2//! =====
3//!
4//! Tiny CAlculation GRAph library
5//!
6//! Features
7//! --------
8//!
9//! - No frontend and No backend.
10//! - Adjacency list graph based on [petgraph](https://github.com/bluss/petgraph)
11//! - Serialization with [serde](https://github.com/serde-rs/serde)
12//!
13//! Examples
14//! --------
15//!
16//! Create a graph for `z = (x + y) - 2*x*y`
17//!
18//! ```
19//! # use approx::abs_diff_eq;
20//! use cagra::graph::*;
21//!
22//! let mut g: Graph<f64> = Graph::new();
23//! let x = g.variable("x", 1.0).unwrap();
24//! let y = g.variable("y", 3.0).unwrap();
25//! let x_y = g.add(x, y);
26//! let xy  = g.mul(x, y);
27//! let a   = g.constant(2.0);
28//! let axy = g.mul(a, xy);
29//! let sum = g.sub(x_y, axy);
30//!
31//! let result = g.eval_value(sum).unwrap();
32//! abs_diff_eq!(result, -2.0);
33//!
34//! g.eval_deriv(sum);
35//! let dx = g.get_deriv(x).unwrap();
36//! let dy = g.get_deriv(y).unwrap();
37//! abs_diff_eq!(dx, -5.0);
38//! abs_diff_eq!(dy, -1.0);
39//! ```
40
41#[doc(hidden)]
42pub extern crate cagra_parser as parser;
43
44#[macro_use]
45pub mod graph;
46pub mod error;
47pub mod operator;