pub fn dummy_pcs_proof(
    fri_queries: usize,
    batch_shapes: &[PolynomialBatchShape],
    log_blowup: usize,
) -> InnerPcsProof {
    let max_height = batch_shapes
        .iter()
        .map(|shape| shape.shapes.iter().map(|shape| shape.log_degree).max().unwrap())
        .max()
        .unwrap();
    let fri_proof = FriProof {
        commit_phase_commits: vec![dummy_hash(); max_height],
        query_proofs: vec![dummy_query_proof(max_height, log_blowup); fri_queries],
        final_poly: InnerChallenge::zero(),
        pow_witness: InnerVal::zero(),
    };

    // For each query, create a dummy batch opening for each matrix in the batch. `batch_shapes`
    // determines the sizes of each dummy batch opening.
    let query_openings = (0..fri_queries)
        .map(|_| {
            batch_shapes
                .iter()
                .map(|shapes| {
                    let batch_max_height =
                        shapes.shapes.iter().map(|shape| shape.log_degree).max().unwrap();
                    BatchOpening {
                        opened_values: shapes
                            .shapes
                            .iter()
                            .map(|shape| vec![BabyBear::zero(); shape.width])
                            .collect(),
                        opening_proof: vec![dummy_hash().into(); batch_max_height + log_blowup],
                    }
                })
                .collect::<Vec<_>>()
        })
        .collect::<Vec<_>>();
    TwoAdicFriPcsProof { fri_proof, query_openings }
}
Make a dummy PCS proof for a given proof shape. Used to generate vkey information for fixed
proof shapes.

The parameter `batch_shapes` contains (width, height) data for each matrix in each batch.
crates/recursion/circuit/src/fri.rs