extern crate concision as cnc;
#[cfg(feature = "rand")]
use cnc::init::NdRandom;
use cnc::params::Params;
use ndarray::prelude::*;
fn main() -> cnc::Result<()> {
tracing_subscriber::fmt()
.with_env_filter(tracing_subscriber::filter::EnvFilter::from_default_env())
.with_max_level(tracing::Level::TRACE)
.with_target(false)
.with_timer(tracing_subscriber::fmt::time::uptime())
.init();
tracing::info! { "Initialize some params..." }
let (m, n) = (8, 9);
let inputs = Array1::linspace(0.0, 1.0, m);
#[cfg(feature = "rand")]
let params = Params::<f64>::glorot_normal((m, n));
#[cfg(not(feature = "rand"))]
let params = Params::<f64>::ones((m, n));
tracing::info! { "Initial Values: {params:?}" }
assert_eq! { params.weights().shape(), &[m, n] }
assert_eq! { params.bias().shape(), &[n] }
let y = params.forward(&inputs);
assert_eq! { y.shape(), &[n] }
tracing::info! { "Forward pass: {y:?}" }
Ok(())
}