use plotpy::{Curve, Plot, RayEndpoint};
use russell_lab::math::GOLDEN_RATIO;
use russell_lab::*;
const OUT_DIR: &str = "/tmp/russell_lab/";
fn main() -> Result<(), StrError> {
let x = [0.0, 1.0, 3.0, 5.0];
let y = [1.0, 0.0, 2.0, 4.0];
let (c, m) = linear_fitting(&x, &y, false)?;
println!("c = {}, m = {}", c, m);
approx_eq(c, 0.1864406779661015, 1e-15);
approx_eq(m, 0.6949152542372882, 1e-15);
let mut curve_dat = Curve::new();
let mut curve_fit = Curve::new();
curve_dat
.set_label("data")
.set_line_style("None")
.set_marker_style("o")
.set_marker_line_color("red")
.set_marker_color("red");
curve_fit.draw_ray(0.0, c, RayEndpoint::Slope(m));
curve_dat.draw(&x, &y);
let mut plot = Plot::new();
let path = format!("{}/algo_linear_fitting_1.svg", OUT_DIR);
plot.add(&curve_dat)
.add(&curve_fit)
.grid_and_labels("x", "y")
.set_figure_size_points(GOLDEN_RATIO * 280.0, 280.0)
.save(&path)?;
Ok(())
}