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::std::activations_std::ActivationKind;
use native_neural_network_std::std::layers_std::{
    fill_std_slice_from_native, to_native_vec, DenseLayerDesc, LayerSpec,
};

#[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 multiple_layers_to_native_and_back() {
    let layers = vec![
        LayerSpec::Dense(DenseLayerDesc {
            input_size: 3,
            output_size: 2,
            weight_offset: 0,
            bias_offset: 0,
            activation: ActivationKind::Relu,
        }),
        LayerSpec::Dense(DenseLayerDesc {
            input_size: 2,
            output_size: 1,
            weight_offset: 0,
            bias_offset: 0,
            activation: ActivationKind::Identity,
        }),
    ];
    let native = to_native_vec(&layers);
    let mut out = vec![
        LayerSpec::Dense(DenseLayerDesc {
            input_size: 0,
            output_size: 0,
            weight_offset: 0,
            bias_offset: 0,
            activation: ActivationKind::Identity
        });
        layers.len()
    ];
    fill_std_slice_from_native(&native[..], &mut out);
    assert_eq!(out.len(), layers.len());
    assert_eq!(out[0].input_size(), 3);
    assert_eq!(out[1].output_size(), 1);
}

#[test]
fn layer_and_model_metadata() {
    let layer = LayerSpec::Dense(DenseLayerDesc {
        input_size: 4,
        output_size: 2,
        weight_offset: 5,
        bias_offset: 3,
        activation: ActivationKind::Relu,
    });
    assert_eq!(layer.input_size(), 4);
    assert_eq!(layer.output_size(), 2);
    let native = to_native_vec(&[layer]);
    let mut out = vec![
        LayerSpec::Dense(DenseLayerDesc {
            input_size: 0,
            output_size: 0,
            weight_offset: 0,
            bias_offset: 0,
            activation: ActivationKind::Identity
        });
        1
    ];
    fill_std_slice_from_native(&native[..], &mut out);
    assert_eq!(out[0].input_size(), 4);
}