weirflow 0.1.0

GPU-first dataflow analysis primitives for Vyre and Santh compiler pipelines.
Documentation
#[must_use]
#[deprecated(
    note = "reference oracle only; production code must dispatch the Weir Program on a concrete GPU backend or use weir::oracle for parity evidence"
)]
pub(crate) fn range_propagate_cpu(defs_in: &[u32], edges_in: &[u32], var_count: u32) -> Vec<u32> {
    let slots = (var_count as usize).checked_mul(2).unwrap_or_else(|| {
        panic!(
            "range_propagate CPU oracle var_count={var_count} overflows host slot indexing. Fix: shard the oracle input."
        )
    });
    if defs_in.len() != slots || edges_in.len() != slots {
        panic!(
            "range_propagate CPU oracle received malformed interval buffers: expected {slots} words, got defs_in={} edges_in={}",
            defs_in.len(),
            edges_in.len()
        );
    }
    let mut out = crate::staging_reserve::reserved_vec(slots, "range CPU oracle output")
        .unwrap_or_else(|error| panic!("range CPU oracle output reservation failed: {error}"));
    for idx in 0..slots {
        out.push(defs_in[idx].wrapping_add(edges_in[idx]));
    }
    out
}

#[cfg(test)]
#[allow(deprecated)]
mod tests {
    use super::range_propagate_cpu;

    #[test]
    #[should_panic(expected = "range_propagate CPU oracle received malformed interval buffers")]
    fn range_propagate_rejects_mismatched_defs_len() {
        let _ = range_propagate_cpu(&[1, 2], &[1, 2, 3, 4], 2);
    }

    #[test]
    #[should_panic(expected = "range_propagate CPU oracle received malformed interval buffers")]
    fn range_propagate_rejects_mismatched_edges_len() {
        let _ = range_propagate_cpu(&[1, 2, 3, 4], &[1, 2], 2);
    }
}