native_neural_network_std 0.2.1

Ergonomic std wrapper for the `native_neural_network` crate (no_std) — std-friendly re-exports and utilities.
Documentation
use native_neural_network_std as nn;
mod utils {
    include!("./test_utils.rs");
}

#[test]
fn cpu_backend_abstraction_real() {
    let previous = native_neural_network_std::std::engine_std::get_compute_backend();
    native_neural_network_std::std::engine_std::set_compute_backend(
        native_neural_network_std::std::engine_std::ComputeBackend::Cpu,
    );
    assert_eq!(
        native_neural_network_std::std::engine_std::get_compute_backend(),
        native_neural_network_std::std::engine_std::ComputeBackend::Cpu
    );
    native_neural_network_std::std::engine_std::set_compute_backend(previous);
}

#[test]
fn invariants_checks() {
    let mut rng = utils::XorShift32::new(0x42424242);
    for _ in 0..1000 {
        let len = 1 + (rng.next_u32() % 64) as usize;
        let mut vec = vec![0f32; len];
        for i in 0..len {
            vec[i] = rng.next_f32() * 1e3;
        }
        assert!(utils::all_finite(&vec));
        let layers = vec![len];
        let weights = vec![0f32; len];
        let biases = vec![0f32; len];
        nn::std::network_std::network_stats(&layers, &weights, &biases);
        for v in &vec {
            let a = *v * 1e6;
            let b = *v / 1e6;
            let sum = a + b;
            assert!(sum.is_finite(), "sum should be finite for finite inputs");
        }
    }
}