use ndarray::{array, Array1};
use onnx_export_rs::{
adapters::smartcore::linear_weights, exporters::export_linear, to_bytes,
validate::validate_export, Result,
};
use smartcore::linalg::basic::matrix::DenseMatrix;
use smartcore::linear::linear_regression::{LinearRegression, LinearRegressionParameters};
fn main() -> Result<()> {
let matrix = DenseMatrix::from_2d_array(&[&[0.0, 0.0], &[1.0, 0.0], &[0.0, 1.0], &[1.0, 1.0]])
.expect("rectangular training data");
let targets = vec![0.5, 2.5, -0.5, 1.5];
let fitted = LinearRegression::fit(&matrix, &targets, LinearRegressionParameters::default())
.expect("linear fit");
let weights = linear_weights(&fitted);
let model = export_linear(&weights);
let inputs = array![[0.0, 0.0], [1.0, 1.0]];
let expected = Array1::from_vec(vec![0.5, 1.5]);
let report = validate_export(&to_bytes(&model)?, &inputs, move |_| expected.clone(), 1e-5)?;
assert!(report.passed, "{report:?}");
onnx_export_rs::save_to_file(&model, "smartcore-linear.onnx")
}