kimchi_msm/ffa/
columns.rs1use crate::columns::{Column, ColumnIndexer};
2
3use crate::N_LIMBS;
4
5pub const FFA_N_COLUMNS: usize = 5 * N_LIMBS;
7pub const FFA_NPUB_COLUMNS: usize = N_LIMBS;
8
9#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
14pub enum FFAColumn {
15 InputA(usize),
16 InputB(usize),
17 ModulusF(usize),
18 Remainder(usize),
19 Carry(usize),
20 Quotient,
21}
22
23impl ColumnIndexer<usize> for FFAColumn {
24 const N_COL: usize = FFA_N_COLUMNS;
25 fn to_column(self) -> Column<usize> {
26 let to_column_inner = |offset, i| {
27 assert!(i < N_LIMBS);
28 Column::Relation(N_LIMBS * offset + i)
29 };
30 match self {
31 FFAColumn::InputA(i) => to_column_inner(0, i),
32 FFAColumn::InputB(i) => to_column_inner(1, i),
33 FFAColumn::ModulusF(i) => to_column_inner(2, i),
34 FFAColumn::Remainder(i) => to_column_inner(3, i),
35 FFAColumn::Carry(i) => {
36 assert!(i < N_LIMBS - 1);
37 to_column_inner(4, i)
38 }
39 FFAColumn::Quotient => to_column_inner(4, N_LIMBS - 1),
40 }
41 }
42}