flow-gate-core 0.1.0

Pure-Rust implementation of the ISAC Gating-ML 2.0 gate evaluation engine — transforms, gates, and event matrices
Documentation
use criterion::{black_box, criterion_group, criterion_main, Criterion, Throughput};
use flow_gate_core::{FASinhTransform, LogicleParams, LogicleTransform, Transform};

fn bench_fasinh_apply_batch(c: &mut Criterion) {
    let transform = FASinhTransform::new(262_144.0, 4.5, 0.0).expect("fasinh");
    let input: Vec<f64> = (0..1_000_000).map(|i| i as f64 - 500_000.0).collect();
    let mut out = vec![0.0_f64; input.len()];

    let mut group = c.benchmark_group("transforms");
    group.throughput(Throughput::Elements(input.len() as u64));
    group.bench_function("fasinh_apply_batch_1m", |b| {
        b.iter(|| transform.apply_batch(black_box(&input), black_box(&mut out)))
    });
    group.finish();
}

fn bench_logicle_apply_batch(c: &mut Criterion) {
    let transform = LogicleTransform {
        params: LogicleParams {
            t: 262_144.0,
            w: 0.5,
            m: 4.5,
            a: 0.0,
        },
    };
    let input: Vec<f64> = (0..1_000_000).map(|i| i as f64 - 250_000.0).collect();
    let mut out = vec![0.0_f64; input.len()];

    let mut group = c.benchmark_group("transforms");
    group.throughput(Throughput::Elements(input.len() as u64));
    group.bench_function("logicle_apply_batch_1m", |b| {
        b.iter(|| transform.apply_batch(black_box(&input), black_box(&mut out)))
    });
    group.finish();
}

criterion_group!(benches, bench_fasinh_apply_batch, bench_logicle_apply_batch);
criterion_main!(benches);