openvm_stark_sdk/dummy_airs/fib_air/
trace.rs

1use openvm_stark_backend::{p3_field::PrimeField32, p3_matrix::dense::RowMajorMatrix};
2
3use super::columns::NUM_FIBONACCI_COLS;
4
5/// n is number of rows in the trace
6pub fn generate_trace_rows<F: PrimeField32>(a: u32, b: u32, n: usize) -> RowMajorMatrix<F> {
7    assert!(n.is_power_of_two());
8
9    let mut rows = vec![vec![F::from_canonical_u32(a), F::from_canonical_u32(b)]];
10
11    for i in 1..n {
12        rows.push(vec![rows[i - 1][1], rows[i - 1][0] + rows[i - 1][1]]);
13    }
14
15    RowMajorMatrix::new(rows.concat(), NUM_FIBONACCI_COLS)
16}