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}