binius_core/protocols/sumcheck/prove/
logging.rs

1// Copyright 2024-2025 Irreducible Inc.
2
3use std::collections::HashMap;
4
5use binius_field::{Field, PackedField};
6use binius_utils::impl_debug_with_json;
7use serde::Serialize;
8use serde_json_any_key::any_key_map;
9
10use super::SumcheckProver;
11use crate::protocols::sumcheck::prove::batch_zerocheck::ZerocheckProver;
12
13#[derive(Serialize, PartialEq, Eq, Hash)]
14struct ProverData {
15	n_vars: usize,
16	domain_size: Option<usize>,
17}
18
19#[derive(Serialize)]
20pub struct FoldLowDimensionsData(#[serde(with = "any_key_map")] HashMap<ProverData, usize>);
21
22impl FoldLowDimensionsData {
23	pub fn new<'a, 'b, P: PackedField, Prover: ZerocheckProver<'a, P> + 'b>(
24		skip_rounds: usize,
25		constraints: impl IntoIterator<Item = &'b Prover>,
26	) -> Self {
27		let mut claim_n_vars = HashMap::new();
28		for constraint in constraints {
29			*claim_n_vars
30				.entry(ProverData {
31					n_vars: constraint.n_vars(),
32					domain_size: constraint.domain_size(skip_rounds),
33				})
34				.or_default() += 1;
35		}
36
37		Self(claim_n_vars)
38	}
39}
40
41impl_debug_with_json!(FoldLowDimensionsData);
42
43#[derive(Serialize)]
44pub struct PIOPCompilerFoldData {
45	n_vars: usize,
46}
47
48impl PIOPCompilerFoldData {
49	pub fn new<F: Field>(prover: &impl SumcheckProver<F>) -> Self {
50		Self {
51			n_vars: prover.n_vars(),
52		}
53	}
54}
55
56impl_debug_with_json!(PIOPCompilerFoldData);
57
58#[derive(Serialize)]
59pub struct ExpandQueryData {
60	log_n: usize,
61}
62
63impl ExpandQueryData {
64	pub fn new<F: Field>(query: &[F]) -> Self {
65		let log_n = if query.is_empty() {
66			0
67		} else {
68			query.len().ilog2() as usize
69		};
70		Self { log_n }
71	}
72}
73
74impl_debug_with_json!(ExpandQueryData);
75
76#[derive(Serialize)]
77pub struct UnivariateSkipCalculateCoeffsData {
78	n_vars: usize,
79	skip_vars: usize,
80	n_multilinears: usize,
81	log_batch: usize,
82}
83
84impl UnivariateSkipCalculateCoeffsData {
85	pub fn new(n_vars: usize, skip_vars: usize, n_multilinears: usize, log_batch: usize) -> Self {
86		Self {
87			n_vars,
88			skip_vars,
89			n_multilinears,
90			log_batch,
91		}
92	}
93}
94
95impl_debug_with_json!(UnivariateSkipCalculateCoeffsData);