openvm_continuations/prover/
utils.rs1use openvm_recursion_circuit::prelude::F;
2use openvm_stark_backend::{
3 prover::{AirProvingContext, MatrixDimensions, ProverBackend, ProverDevice, ProvingContext},
4 AirRef, EngineDeviceCtx, StarkEngine, StarkProtocolConfig,
5};
6
7use crate::circuit::Circuit;
8
9#[cfg(debug_assertions)]
10pub(crate) fn debug_checks_enabled() -> bool {
11 std::env::var("OPENVM_SKIP_DEBUG") != Ok(String::from("1"))
12}
13
14pub fn engine_device_ctx<E>(engine: &E) -> &EngineDeviceCtx<E>
15where
16 E: StarkEngine,
17{
18 engine.device().device_ctx()
19}
20
21pub fn debug_constraints<SC, C, E>(circuit: &C, ctx: &ProvingContext<E::PB>, engine: &E)
22where
23 SC: StarkProtocolConfig<F = F>,
24 C: Circuit<SC>,
25 E: StarkEngine<SC = SC>,
26{
27 let airs = circuit.airs();
28 trace_heights_tracing_info(&ctx.per_trace, &airs);
29 engine.debug(&airs, ctx);
30}
31
32pub(crate) fn trace_heights_tracing_info<PB: ProverBackend, SC: StarkProtocolConfig>(
33 ctxs: &[(usize, AirProvingContext<PB>)],
34 airs: &[AirRef<SC>],
35) {
36 let mut total_cells = 0usize;
37 let mut total_width = 0usize;
38 for ((_, ctx), air) in ctxs.iter().zip(airs) {
39 let cells = ctx.common_main.height() * ctx.common_main.width();
40 tracing::info!(
41 "{:<40} | Height: {:>8} | Width: {:>8} | Cells: {:>8}",
42 air.name(),
43 ctx.common_main.height(),
44 ctx.common_main.width(),
45 cells
46 );
47 total_cells += cells;
48 total_width += ctx.common_main.width();
49 }
50 tracing::info!("Total Common Cells: {total_cells}");
51 tracing::info!("Total Width: {total_width}");
52}