as far as I can tell, the data we'd want to have is: - routing delays: (rise, fall: f64_range) - combinational delays: (r2r, r2f, f2r, f2f: f64_range), with the possibility of some of them being N/A for unate paths (or maybe have separate types for positive-unate and negative-unate paths?) - FF setuphold: (setup_rise, setup_fall, hold_rise, hold_fall: f64), I don't see a point of having a range here since we would only ever care about the max anyway? - FF recrem: (recovery, removal: f64), again no point in having range; no unate stuff needed since we only care about one edge polarity on both sides - FF clock-to-out: (rise, fall: f64_range) - FF arst-to-out: f64_range (it's either rise-only or fall-only) - latch gate-to-out: effectively like clock-to-out, only one input polarity is important - FF clock and SR min pulsewidth: f64 - FF min period: f64 with every delay in picoseconds