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