zinc_uair/
collect_scalars.rs1use std::{cell::RefCell, collections::HashSet};
2
3use crate::{
4 TraceRow, Uair,
5 do_nothing_builder::DoNothingBuilder,
6 dummy_semiring::{DUMMY_SEMIRING_CONFIG, DummySemiring},
7 ideal::ImpossibleIdeal,
8};
9
10pub fn collect_scalars<U: Uair>() -> HashSet<U::Scalar> {
14 let scalars = RefCell::new(HashSet::new());
15
16 let sig = U::signature();
17 let (up_dummy, down_dummy) = sig.dummy_rows(DummySemiring);
18 let up_row = TraceRow::from_slice_with_layout(&up_dummy, sig.total_cols().as_column_layout());
19 let down_row =
20 TraceRow::from_slice_with_layout(&down_dummy, sig.down_cols().as_column_layout());
21
22 U::constrain_general(
23 &mut DoNothingBuilder,
24 &DUMMY_SEMIRING_CONFIG,
25 up_row,
26 down_row,
27 |x| {
28 scalars.borrow_mut().insert(x.clone());
29 DummySemiring
30 },
31 |_x, y| {
32 scalars.borrow_mut().insert(y.clone());
33 Some(DummySemiring)
34 },
35 |_| ImpossibleIdeal,
36 |_| ImpossibleIdeal,
37 );
38
39 scalars.into_inner()
40}