vector-expr

Crates.iovector-expr
lib.rsvector-expr
version0.4.0
sourcesrc
created_at2023-12-22 00:32:03.975966
updated_at2024-01-03 03:05:12.938472
descriptionVectorized expression parser and evaluator
homepage
repositoryhttps://github.com/ForesightMiningSoftwareCorporation/vector_expr
max_upload_size
id1077921
size47,522
Duncan (bonsairobo)

documentation

README

vector-expr

Vectorized math expression parser/evaluator.

Why?

Performance. Evaluation of math expressions involving many variables can incur significant overhead from traversing the expression tree or performing variable lookups. We amortize that cost by performing intermediate operations on vectors of input data at a time (with optional data parallelism via the rayon feature).

Example

use vector_expr::*;

fn binding_map(var_name: &str) -> BindingId {
    match var_name {
        "bar" => 0,
        "baz" => 1,
        "foo" => 2,
        _ => unreachable!(),
    }
}
let parsed = Expression::parse("2 * (foo + bar) * baz", &binding_map).unwrap();
let real = parsed.unwrap_real();

let bar = [1.0, 2.0, 3.0];
let baz = [4.0, 5.0, 6.0];
let foo = [7.0, 8.0, 9.0];
let bindings: &[&[f64]] = &[&bar, &baz, &foo];
let mut registers = Registers::new(3);
let output = real.evaluate(bindings, &mut registers);
assert_eq!(&output, &[64.0, 100.0, 144.0]);

License: MIT OR Apache-2.0

Commit count: 23

cargo fmt