The reason I write this is because I saw the verification sample ood points are related to InfoEvalator. InfoEvalator contains this mask or mask offset information which basically embedded the circuit information.
This mask points of MleEvalProverComponent

Start with component built
when a component is buit, it takes a location_allocator, PowdrEval (type implement FrameworkEval), and logup_sums.

-> new function of Component (trait FrameworkComponent): PowdrEval.evaluate function is called, upon infoevaluator, is where the mask_offset start building

struct of Infoevaluator is defined as

The important field mask_offsets is updated every time a new column, or new interaction is built, by calling function next_trace_mask or get_preprocessed_column


mask_offset has this structure:
- it has three vectors to present pre-processed columns, let’s call them interation vector, interaction 0 is pre-processed, 1 is witness cols, 2 is for logup
- each interaction vector contains vectors to present columns. let’s call them column vectors
- each column vectors contains values to present the position/evaluation/values that build circuit relation.

here this vector below present three columns, each column contains two values that used for computing circuit relations. offset 1 is for the next reference.
[[0, 1], [0, 1], [0, 1]]
Now let’s go back to the mask_point used in verification sample points
mask point is a function defined in component trait:

you see, it is for the SecureField
there are two struct implement this function, one is frameworkComponent, the other one is Mlecomponent …
FrameworkComponent mask_points
FrameworkComponent: it transfer the offset to secure field point, then use it to evaluate the circuit

you can see the oods point, it is the same values with the place where offset is 0

frameworkComponent is defined as:

basically the InfoEvaluator is where it stores all the circuit info
the output of the mask_points of frameworkComponent is

Sample points in Verification function
One interesting observation: in verification function, verifier use mask_points of the components to get sample points based on the oods point. while these sampled points are not put into the evaluation function to get the composition_oods_eval, instead, the check for composition_ood_eval gets inputs from proof.sampled_values.

proof.sampled_values looks like this:

while the sample_points looks like:

it seems these sampled_values are actually from witness columns directly.
note that when verifier computes the compsition_odds_eval, verifier’s information includes:
- oods point
- proof.sampled values
- random_coeff
the components contains circuit information, how the verifier can get the evaluation?
how the sampled_values in the proof come from?
let see how it is used in the verification function first.
it is used in the check for the composition_oods_eval

-> eval_composition_polynomial_at_point function, it accumulate the evaluate_constraint_quotients_at_point from every components

after the modification I made following up the call with tibo, I had error: too few queried values.

this problem happens in MerkleProver verification function to Verifies the decommitment of the columns

The queried values is
