use crate::forms::{fit_f2_quadratic, QuadricFit};
use super::graph::LoopyGraph;
pub fn loopy_decision_sets<F: Fn(usize) -> Vec<usize>>(
n: usize,
moves: F,
) -> (Vec<usize>, Vec<usize>) {
let g = LoopyGraph::from_rule(n, moves);
(g.loss_set(), g.draw_set())
}
pub fn loopy_quadric_probe<F: Fn(usize) -> Vec<usize>>(
k: usize,
moves: F,
) -> (Option<QuadricFit>, Option<QuadricFit>) {
assert!(k <= 20, "loopy_quadric_probe is exponential in k");
let n = 1usize << k;
let (loss, draw) = loopy_decision_sets(n, moves);
let loss_u: Vec<u128> = loss.iter().map(|&v| v as u128).collect();
let draw_u: Vec<u128> = draw.iter().map(|&v| v as u128).collect();
(fit_f2_quadratic(&loss_u, k), fit_f2_quadratic(&draw_u, k))
}