add a single selector vector into SelectorsInfo to make life easier

This commit is contained in:
Balazs Komuves 2024-12-05 12:02:34 +01:00
parent 301ae79b6f
commit 155a0ce24e
No known key found for this signature in database
GPG Key ID: F63B7AEF18435562
3 changed files with 20 additions and 3 deletions

View File

@ -15,8 +15,9 @@ pub(crate) const UNUSED_SELECTOR: usize = u32::MAX as usize;
#[derive(Debug, Clone, Eq, PartialEq, Serialize)] #[derive(Debug, Clone, Eq, PartialEq, Serialize)]
pub struct SelectorsInfo { pub struct SelectorsInfo {
pub(crate) selector_indices: Vec<usize>, pub(crate) selector_indices: Vec<usize>, // which gate is in which selector group
pub(crate) groups: Vec<Range<usize>>, pub(crate) groups: Vec<Range<usize>>, // how are the gates allocated to selector columns
pub(crate) selector_vector: Vec<usize>, // the gate index for each row (used for third party tooling)
} }
impl SelectorsInfo { impl SelectorsInfo {
@ -135,7 +136,8 @@ pub(crate) fn selector_polynomials<F: RichField + Extendable<D>, const D: usize>
)], )],
SelectorsInfo { SelectorsInfo {
selector_indices: vec![0; num_gates], selector_indices: vec![0; num_gates],
groups: vec![0..num_gates], groups: vec![0..num_gates],
selector_vector: vec![0; n],
}, },
); );
} }
@ -181,11 +183,21 @@ pub(crate) fn selector_polynomials<F: RichField + Extendable<D>, const D: usize>
} }
} }
// for third party tools, we compute a single selector vector too (union of all selectors)
let mut selector_vector: Vec<usize> = vec![usize::MAX; n];
for (j, g) in instances.iter().enumerate() {
let GateInstance { gate_ref, .. } = g;
let i = index(gate_ref.0.id());
let gr = group(i);
selector_vector[j] = i;
}
( (
polynomials, polynomials,
SelectorsInfo { SelectorsInfo {
selector_indices, selector_indices,
groups, groups,
selector_vector,
}, },
) )
} }

View File

@ -232,6 +232,7 @@ where
selectors_info: SelectorsInfo { selectors_info: SelectorsInfo {
selector_indices: vec![], selector_indices: vec![],
groups: vec![], groups: vec![],
selector_vector: vec![],
}, },
quotient_degree_factor: 0, quotient_degree_factor: 0,
num_gate_constraints: 0, num_gate_constraints: 0,

View File

@ -713,10 +713,12 @@ pub trait Read {
let end = self.read_usize()?; let end = self.read_usize()?;
groups.push(Range { start, end }); groups.push(Range { start, end });
} }
let selector_vector = self.read_usize_vec()?;
Ok(SelectorsInfo { Ok(SelectorsInfo {
selector_indices, selector_indices,
groups, groups,
selector_vector,
}) })
} }
@ -1734,6 +1736,7 @@ pub trait Write {
let SelectorsInfo { let SelectorsInfo {
selector_indices, selector_indices,
groups, groups,
selector_vector,
} = selectors_info; } = selectors_info;
self.write_usize_vec(selector_indices.as_slice())?; self.write_usize_vec(selector_indices.as_slice())?;
@ -1742,6 +1745,7 @@ pub trait Write {
self.write_usize(group.start)?; self.write_usize(group.start)?;
self.write_usize(group.end)?; self.write_usize(group.end)?;
} }
self.write_usize_vec(selector_vector.as_slice())?;
Ok(()) Ok(())
} }