remainder/utils/
debug.rs

1use std::collections::HashMap;
2
3use num::Integer;
4use shared_types::Field;
5
6use crate::{claims::Claim, layer::LayerId, prover::GKRCircuitDescription};
7
8/// Prints all claims on input layers, aggregated by input layer, along with
9/// the number of variables in each input layer where a claim is made.
10///
11/// Purely for sanitycheck against input layers and ensuring that # claims
12/// roughly matches expected # claims.
13pub fn sanitycheck_input_layers_and_claims<F: Field>(
14    input_layer_claims: &[Claim<F>],
15    circuit_description: &GKRCircuitDescription<F>,
16) {
17    let mut input_layer_claims_map: HashMap<LayerId, usize> = HashMap::new();
18    input_layer_claims.iter().for_each(|claim| {
19        input_layer_claims_map
20            .entry(claim.get_to_layer_id())
21            .and_modify(|x| x.inc())
22            .or_insert(1);
23    });
24    // Mapping between input layer IDs and the number of variables in that input
25    // layer's representation.
26    let input_layers_map: HashMap<LayerId, usize> = circuit_description
27        .input_layers
28        .iter()
29        .map(|circuit_input_layer| (circuit_input_layer.layer_id, circuit_input_layer.num_vars))
30        .collect();
31    input_layer_claims_map
32        .iter()
33        .for_each(|(layer_id, num_claims)| {
34            let layer_num_vars = input_layers_map.get(layer_id).unwrap();
35            println!("Layer ID {layer_id} with {num_claims} claims and {layer_num_vars} num vars");
36        });
37}