#[cfg(feature = "std")]
pub use std::time::Instant;
#[cfg(not(feature = "std"))]
#[derive(Clone, Copy, Debug)]
pub struct Instant;
#[cfg(not(feature = "std"))]
impl Instant {
pub fn now() -> Self {
Self
}
pub fn elapsed(&self) -> core::time::Duration {
core::time::Duration::from_secs(0)
}
}
#[inline(always)]
pub fn compute_split_vars(
num_vars: usize,
num_queries: usize,
expansion_degree: usize,
row_bytes: usize,
) -> usize {
if num_vars == 0 {
return 0;
}
let ratio = (row_bytes / 16).max(1);
let factor = (num_queries * ratio).max(1);
let optimal_c = (num_vars + factor.ilog2() as usize) / 2;
let degree_floor = expansion_degree.max(2).next_power_of_two().trailing_zeros() as usize;
optimal_c.clamp(degree_floor.min(num_vars), num_vars)
}
#[inline(always)]
pub fn opened_row_bytes(physical_data_bytes: usize, sumcheck_blinding_factor: usize) -> usize {
2 * physical_data_bytes + 2 * sumcheck_blinding_factor * 16
}