wick-linalg 0.1.0

Linear algebra types and operations for wick expressions
Documentation

Linear algebra types and operations for dew expressions.

This crate provides vector and matrix types (Vec2, Vec3, Mat2, Mat3, etc.) that work with dew-core's AST. Types propagate during evaluation/emission.

Quick Start

use wick_core::Expr;
use wick_linalg::{Value, eval, linalg_registry};
use std::collections::HashMap;

let expr = Expr::parse("dot(a, b)").unwrap();

let vars: HashMap<String, Value<f32>> = [
    ("a".into(), Value::Vec2([1.0, 0.0])),
    ("b".into(), Value::Vec2([0.0, 1.0])),
].into();

let result = eval(expr.ast(), &vars, &linalg_registry()).unwrap();
assert_eq!(result, Value::Scalar(0.0)); // perpendicular vectors

Features

Feature Description
3d Vec3, Mat3 (default)
4d Vec4, Mat4 (implies 3d)
wgsl WGSL shader code generation
lua Lua code generation
cranelift Cranelift JIT compilation

Types

Type Description
Scalar Single f32/f64 value
Vec2 2D vector [x, y]
Vec3 3D vector [x, y, z] (3d)
Vec4 4D vector [x, y, z, w] (4d)
Mat2 2x2 matrix, column-major
Mat3 3x3 matrix, column-major (3d)
Mat4 4x4 matrix, column-major (4d)

Functions

Function Description
dot(a, b) Dot product → scalar
cross(a, b) Cross product → vec3 (3d only)
length(v) Vector magnitude → scalar
normalize(v) Unit vector → same type
distance(a, b) Distance between points → scalar
reflect(v, n) Reflect v around normal n → same type
hadamard(a, b) Element-wise multiply → same type
lerp(a, b, t) Linear interpolation
mix(a, b, t) Alias for lerp

Operators

Operation Types
vec + vec Component-wise addition
vec - vec Component-wise subtraction
vec * scalar Scalar multiplication
scalar * vec Scalar multiplication
mat * vec Matrix-vector multiplication
mat * mat Matrix multiplication
-vec Negation

Composability

For composing multiple domain crates (e.g., linalg + rotors), the [LinalgValue] trait allows defining a combined value type that works with both crates.