1- use std:: slice;
1+ use std:: { mem , slice} ;
22
33use crate :: {
44 Point ,
@@ -228,7 +228,7 @@ pub fn batch_verifier_query_phase<E: ExtensionField, S: EncodingScheme<E>>(
228228 // first folding challenge
229229 let r = fold_challenges. first ( ) . unwrap ( ) ;
230230 let coeff = S :: verifier_folding_coeffs ( vp, log2_height, idx) ;
231- let ( lo, hi) = reduced_openings_by_height[ log2_height] . unwrap ( ) ;
231+ let ( lo, hi) = mem :: take ( & mut reduced_openings_by_height[ log2_height] ) . unwrap ( ) ;
232232 let mut folded = codeword_fold_with_challenge ( & [ lo, hi] , * r, coeff, inv_2) ;
233233
234234 for (
@@ -249,8 +249,10 @@ pub fn batch_verifier_query_phase<E: ExtensionField, S: EncodingScheme<E>>(
249249 let idx_sibling = idx & 0x01 ;
250250 let mut leafs = vec ! [ * sibling_value; 2 ] ;
251251 leafs[ idx_sibling] = folded;
252- if let Some ( ( lo, hi) ) = reduced_openings_by_height[ log2_height] . as_mut ( ) {
253- leafs[ idx_sibling] += if idx_sibling == 1 { * hi } else { * lo } ;
252+
253+ if let Some ( ( lo, hi) ) = mem:: take ( & mut reduced_openings_by_height[ log2_height] )
254+ {
255+ leafs[ idx_sibling] += if idx_sibling == 1 { hi } else { lo } ;
254256 }
255257
256258 idx >>= 1 ;
@@ -270,6 +272,7 @@ pub fn batch_verifier_query_phase<E: ExtensionField, S: EncodingScheme<E>>(
270272 let coeff = S :: verifier_folding_coeffs ( vp, log2_height, idx) ;
271273 folded = codeword_fold_with_challenge ( & [ leafs[ 0 ] , leafs[ 1 ] ] , * r, coeff, inv_2) ;
272274 }
275+ assert ! ( reduced_openings_by_height. iter( ) . all( |v| v. is_none( ) ) ) ;
273276 assert ! (
274277 final_codeword. values[ idx] == folded,
275278 "final_codeword.values[idx] value {:?} != folded {:?}" ,
0 commit comments