vyre-primitives 0.6.3

Compositional primitives for vyre - marker types (always on) + Tier 2.5 LEGO substrate (feature-gated per domain).
Documentation
use vyre_foundation::ir::Program;

use crate::graph::program_graph::ProgramGraphShape;

pub(crate) fn forward_edge_program(
    op_id: &'static str,
    shape: ProgramGraphShape,
    frontier_in: &str,
    frontier_out: &str,
    edge_mask: u32,
) -> Program {
    crate::graph::csr_forward_traverse::csr_forward_traverse_with_op_id(
        op_id,
        shape,
        frontier_in,
        frontier_out,
        edge_mask,
    )
}

pub(crate) fn backward_edge_program(
    op_id: &'static str,
    shape: ProgramGraphShape,
    frontier_in: &str,
    frontier_out: &str,
    edge_mask: u32,
) -> Program {
    crate::graph::csr_backward_traverse::csr_backward_traverse_with_op_id(
        op_id,
        shape,
        frontier_in,
        frontier_out,
        edge_mask,
    )
}

#[must_use]
#[cfg(any(test, feature = "cpu-parity"))]
pub(crate) fn cpu_ref_forward(
    node_count: u32,
    edge_offsets: &[u32],
    edge_targets: &[u32],
    edge_kind_mask: &[u32],
    frontier_in: &[u32],
    edge_mask: u32,
) -> Vec<u32> {
    crate::graph::csr_forward_traverse::cpu_ref(
        node_count,
        edge_offsets,
        edge_targets,
        edge_kind_mask,
        frontier_in,
        edge_mask,
    )
}

#[cfg(any(test, feature = "cpu-parity"))]
pub(crate) fn cpu_ref_forward_into(
    node_count: u32,
    edge_offsets: &[u32],
    edge_targets: &[u32],
    edge_kind_mask: &[u32],
    frontier_in: &[u32],
    edge_mask: u32,
    out: &mut Vec<u32>,
) {
    crate::graph::csr_forward_traverse::cpu_ref_into(
        node_count,
        edge_offsets,
        edge_targets,
        edge_kind_mask,
        frontier_in,
        edge_mask,
        out,
    );
}

#[must_use]
#[cfg(any(test, feature = "cpu-parity"))]
pub(crate) fn cpu_ref_backward(
    node_count: u32,
    edge_offsets: &[u32],
    edge_targets: &[u32],
    edge_kind_mask: &[u32],
    frontier_in: &[u32],
    edge_mask: u32,
) -> Vec<u32> {
    crate::graph::csr_backward_traverse::cpu_ref(
        node_count,
        edge_offsets,
        edge_targets,
        edge_kind_mask,
        frontier_in,
        edge_mask,
    )
}

#[cfg(any(test, feature = "cpu-parity"))]
pub(crate) fn cpu_ref_backward_into(
    node_count: u32,
    edge_offsets: &[u32],
    edge_targets: &[u32],
    edge_kind_mask: &[u32],
    frontier_in: &[u32],
    edge_mask: u32,
    out: &mut Vec<u32>,
) {
    crate::graph::csr_backward_traverse::cpu_ref_into(
        node_count,
        edge_offsets,
        edge_targets,
        edge_kind_mask,
        frontier_in,
        edge_mask,
        out,
    );
}

#[cfg(test)]
pub(crate) fn assert_region_op_id(program: &Program, expected: &'static str, label: &str) {
    let generator = match &program.entry[0] {
        vyre_foundation::ir::Node::Region { generator, .. } => generator.to_string(),
        other => panic!("Fix: {label} must build a Region entry, got {other:?}."),
    };
    assert_eq!(generator, expected);
}