use std::collections::HashMap; use time::Date; use trueskill_tt::{History, PlayerIndex, BETA, MU, P_DRAW}; struct Players(HashMap); impl Players { fn new() -> Self { Self(HashMap::new()) } fn get(&mut self, name: &str) -> PlayerIndex { if let Some(idx) = self.0.get(name) { *idx } else { let idx = PlayerIndex::new(self.0.len()); self.0.insert(name.to_string(), idx); idx } } } fn main() { let mut csv = csv::Reader::open("examples/atp.csv").unwrap(); let mut composition = Vec::new(); let mut results = Vec::new(); let mut times = Vec::new(); let time_format = time::format_description::parse("[year]-[month]-[day]").unwrap(); let mut players = Players::new(); for row in csv.records() { if &row["double"] == "t" { let w1_id = players.get(&row["w1_id"]); let w2_id = players.get(&row["w2_id"]); let l1_id = players.get(&row["l1_id"]); let l2_id = players.get(&row["l2_id"]); composition.push(vec![vec![w1_id, w2_id], vec![l1_id, l2_id]]); } else { let w1_id = players.get(&row["w1_id"]); let l1_id = players.get(&row["l1_id"]); composition.push(vec![vec![w1_id], vec![l1_id]]); } results.push(vec![1, 0]); let time = Date::parse(&row["time_start"], &time_format) .unwrap() .midnight() .assume_utc() .unix_timestamp(); times.push(time as f64 / (60 * 60 * 24) as f64); } /* let mut history = History::builder() .sigma(1.6) .gamma(0.036) .priors(priors) .build::