openvm_continuations/circuit/inner/unset/
trace.rs1use std::borrow::BorrowMut;
2
3use openvm_cpu_backend::CpuBackend;
4use openvm_stark_backend::prover::AirProvingContext;
5use openvm_stark_sdk::config::baby_bear_poseidon2::{BabyBearPoseidon2Config, F};
6use p3_field::PrimeCharacteristicRing;
7use p3_matrix::dense::RowMajorMatrix;
8
9use crate::circuit::inner::unset::UnsetPvsCols;
10
11pub fn generate_proving_ctx(
12 unset_proof_idxs: &[usize],
13 child_is_app: bool,
14) -> AirProvingContext<CpuBackend<BabyBearPoseidon2Config>> {
15 let num_valid = if child_is_app {
16 0
17 } else {
18 unset_proof_idxs.len()
19 };
20
21 let height = num_valid.next_power_of_two();
22 let width = UnsetPvsCols::<u8>::width();
23 let mut trace = vec![F::ZERO; height * width];
24 let mut chunks = trace.chunks_exact_mut(width);
25
26 for proof_idx in unset_proof_idxs.iter().take(num_valid) {
27 let chunk = chunks.next().unwrap();
28 let cols: &mut UnsetPvsCols<F> = chunk.borrow_mut();
29 cols.is_valid = F::ONE;
30 cols.proof_idx = F::from_usize(*proof_idx);
31 }
32
33 for proof_idx in num_valid..height {
34 let chunk = chunks.next().unwrap();
35 let cols: &mut UnsetPvsCols<F> = chunk.borrow_mut();
36 cols.proof_idx = F::from_usize(proof_idx);
37 }
38
39 AirProvingContext::simple_no_pis(RowMajorMatrix::new(trace, width))
40}