following note1
packed31 is a vector of length 16



try to understand how the trace is generated

the bottom lines actually transfer the M31 values into circleDomain

from start:

N is log N instances

this code is to initialise the witness columns, later use to store the witness.
this code generate N numbers of BaseColumns, each based columns has length 2^log_size, but it is presented by chunks of 16 length each, as packedM31.

Constraints
in the code, the constraints is generated by component

wideFibonacciComponent is a FrameworkComponent that has general type C which implement FrameworkEval, FrameworkEval requires to defined a function evaluate which has general type E that implement EvalAtRow
WideFibonacciComponent is defined like this

frameworkComponent is defined like this

when perceive eval, remember it is a type that implement FrameworkEval, which doesn’t mean it is a struct called FrameworkEval
FrameworkEval looks like this, it is a trait!!!

EvalAtRow looks like this
where all the operations defined

new function for a generate a new component

this piece of code generate a

FIB sequence length is 32
log n instance is 6
implementation of FrameworkEval for WideFibonacciEval,

The most important function here is evaluate, which generate the fibonacci constraint
let’t understand it!
so the eval is a place to store all the constraint, it is AssertEvaluator struct

the evaluate function has input eval restricted by E EvalatRow

and the function is called like this

which means eval as AssertEvaluator should implemented EvalatRow
let’s see how it looks:

recall the component of AssertEvaluator

TreeVec
is essentially a wrapper around a Vec
(a dynamically-sized array in Rust)

The new function take a trace, create a vector that has the same length with the trace
the trait EvalAtRow has these functions need to be defined:

let’s start digging into this one

The AssertEvaluator’s implementation for next_interaction mask is:

trace is a TreeVec<Vec<Vec<BaseField>>>
it can be something like this:
self.trace = [
[ [1, 2, 3], [4, 5], [6] ],
[ [7, 8], [9, 10, 11] ]
];
when indexing TreeVec[], it find a set of witness for a single fibonacci instance, indexing TreeVec[][] find a specific witness trace (from the same vaiable!) like find [1,2,3], then row+offset will find the witness values in a specific row
and then next function next trace mask is based on next interaction mask

it would be go to the next column and the same row to read witness value.
then note3