///|
fn step_hit_data(
  xs : Array[Double],
  ys : Array[Double],
  mode : String,
  path : Array[@core.Point],
) -> @render.DiscreteLineHitData {
  let n = xs.length()
  let datums = []
  for i in 0..
        if a.is_nan() || a.is_inf() || b.is_nan() || b.is_inf() {
          None
        } else {
          Some((a, b))
        }
      None => None
    }
    datums.push(
      @render.discrete_datum(i, @core.point(xs[i], ys[i]), ys[i], interval~),
    )
  }
  let owners = []
  for i in 1..