use vyre_primitives::graph::exploded::{canonicalize_csr_within_rows, try_build_cpu_reference};
#[must_use]
#[cfg(any(test, feature = "cpu-parity"))]
pub fn reference_build_ifds_csr(
num_procs: u32,
blocks_per_proc: u32,
facts_per_proc: u32,
intra_edges: &[(u32, u32, u32)],
inter_edges: &[(u32, u32, u32, u32)],
flow_gen: &[(u32, u32, u32)],
flow_kill: &[(u32, u32, u32)],
) -> (Vec<u32>, Vec<u32>) {
try_reference_build_ifds_csr(
num_procs,
blocks_per_proc,
facts_per_proc,
intra_edges,
inter_edges,
flow_gen,
flow_kill,
)
.unwrap_or_else(|err| panic!("exploded IFDS self-substrate reference rejected input. {err}"))
}
#[cfg(any(test, feature = "cpu-parity"))]
pub fn try_reference_build_ifds_csr(
num_procs: u32,
blocks_per_proc: u32,
facts_per_proc: u32,
intra_edges: &[(u32, u32, u32)],
inter_edges: &[(u32, u32, u32, u32)],
flow_gen: &[(u32, u32, u32)],
flow_kill: &[(u32, u32, u32)],
) -> Result<(Vec<u32>, Vec<u32>), String> {
use crate::observability::{bump, graph_dispatch_calls};
bump(&graph_dispatch_calls);
try_build_cpu_reference(
num_procs,
blocks_per_proc,
facts_per_proc,
intra_edges,
inter_edges,
flow_gen,
flow_kill,
)
}
#[must_use]
#[cfg(any(test, feature = "cpu-parity"))]
pub fn reference_canonicalize_csr_within_rows(
row_ptr: &[u32],
col_idx: &[u32],
) -> (Vec<u32>, Vec<u32>) {
canonicalize_csr_within_rows(row_ptr, col_idx)
}