binius_core/protocols/sumcheck/prove/
logging.rs1use 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);