1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
//! Band-math expression compiler — string parser + WGSL codegen.
//!
//! This module converts algebraic strings such as `"(B4-B3)/(B4+B3)"` into a
//! [`crate::algebra::BandExpression`] AST and, separately, lowers that AST
//! into an executable WGSL compute shader.
//!
//! # Quick example
//!
//! ```
//! use oxigdal_gpu::{parse_band_expression, band_expression_to_wgsl};
//!
//! let expr = parse_band_expression("(B4-B3)/(B4+B3)").expect("parse");
//! let shader = band_expression_to_wgsl(&expr, &[0, 1]);
//! assert!(shader.contains("@compute"));
//! ```
//!
//! # Grammar
//!
//! ```text
//! expr = term (('+' | '-') term)*
//! term = factor (('*' | '/') factor)*
//! factor = power
//! power = unary ('^' unary)? // right-associative
//! unary = '-' unary | primary
//! primary = Number | Band | Func '(' args ')' | '(' expr ')'
//! args = expr (',' expr)*
//! ```
//!
//! # Supported functions
//!
//! - `log(x)` / `ln(x)` — natural logarithm
//! - `exp(x)` — exponential
//! - `sqrt(x)` — square root (zero-clamped)
//! - `abs(x)` — absolute value
//! - `min(a, b)` / `max(a, b)` — element-wise min/max
//! - `pow(a, b)` — power (same as `a ^ b`)
//! - `clamp(x, lo, hi)` — clamp `x` to `[lo, hi]`
pub use ;
pub use ;