@@ -51,18 +51,14 @@ impl Derefs {
51
51
pub fn new ( row_ops_val : Vec < DensePolynomial > , col_ops_val : Vec < DensePolynomial > ) -> Self {
52
52
assert_eq ! ( row_ops_val. len( ) , col_ops_val. len( ) ) ;
53
53
54
- let derefs = {
55
- // combine all polynomials into a single polynomial (used below to produce a single commitment)
56
- let comb = DensePolynomial :: merge ( row_ops_val. iter ( ) . chain ( col_ops_val. iter ( ) ) ) ;
57
-
58
- Derefs {
59
- row_ops_val,
60
- col_ops_val,
61
- comb,
62
- }
63
- } ;
54
+ // combine all polynomials into a single polynomial (used below to produce a single commitment)
55
+ let comb = DensePolynomial :: merge ( row_ops_val. iter ( ) . chain ( col_ops_val. iter ( ) ) ) ;
64
56
65
- derefs
57
+ Derefs {
58
+ row_ops_val,
59
+ col_ops_val,
60
+ comb,
61
+ }
66
62
}
67
63
68
64
pub fn commit ( & self , gens : & PolyCommitmentGens ) -> DerefsCommitment {
@@ -343,7 +339,7 @@ impl AppendToTranscript for SparseMatPolyCommitment {
343
339
344
340
impl SparseMatPolynomial {
345
341
pub fn new ( num_vars_x : usize , num_vars_y : usize , M : Vec < SparseMatEntry > ) -> Self {
346
- SparseMatPolynomial {
342
+ Self {
347
343
num_vars_x,
348
344
num_vars_y,
349
345
M ,
@@ -377,8 +373,9 @@ impl SparseMatPolynomial {
377
373
assert_eq ! ( sparse_polys[ i] . num_vars_y, sparse_polys[ 0 ] . num_vars_y) ;
378
374
}
379
375
380
- let N = ( 0 ..sparse_polys. len ( ) )
381
- . map ( |i| sparse_polys[ i] . get_num_nz_entries ( ) )
376
+ let N = sparse_polys
377
+ . iter ( )
378
+ . map ( |sparse_poly| sparse_poly. get_num_nz_entries ( ) )
382
379
. max ( )
383
380
. unwrap ( ) ;
384
381
@@ -430,13 +427,10 @@ impl SparseMatPolynomial {
430
427
assert_eq ! ( self . num_vars_x. pow2( ) , eval_table_rx. len( ) ) ;
431
428
assert_eq ! ( self . num_vars_y. pow2( ) , eval_table_ry. len( ) ) ;
432
429
433
- ( 0 ..self . M . len ( ) )
434
- . map ( |i| {
435
- let row = self . M [ i] . row ;
436
- let col = self . M [ i] . col ;
437
- let val = & self . M [ i] . val ;
438
- eval_table_rx[ row] * eval_table_ry[ col] * val
439
- } )
430
+ self
431
+ . M
432
+ . iter ( )
433
+ . map ( |SparseMatEntry { row, col, val } | eval_table_rx[ * row] * eval_table_ry[ * col] * val)
440
434
. sum ( )
441
435
}
442
436
@@ -448,25 +442,22 @@ impl SparseMatPolynomial {
448
442
let eval_table_rx = EqPolynomial :: new ( rx. to_vec ( ) ) . evals ( ) ;
449
443
let eval_table_ry = EqPolynomial :: new ( ry. to_vec ( ) ) . evals ( ) ;
450
444
451
- ( 0 ..polys. len ( ) )
452
- . map ( |i| polys[ i] . evaluate_with_tables ( & eval_table_rx, & eval_table_ry) )
445
+ polys
446
+ . iter ( )
447
+ . map ( |poly| poly. evaluate_with_tables ( & eval_table_rx, & eval_table_ry) )
453
448
. collect :: < Vec < Scalar > > ( )
454
449
}
455
450
456
451
pub fn multiply_vec ( & self , num_rows : usize , num_cols : usize , z : & [ Scalar ] ) -> Vec < Scalar > {
457
452
assert_eq ! ( z. len( ) , num_cols) ;
458
453
459
- ( 0 ..self . M . len ( ) )
460
- . map ( |i| {
461
- let row = self . M [ i] . row ;
462
- let col = self . M [ i] . col ;
463
- let val = & self . M [ i] . val ;
464
- ( row, val * z[ col] )
465
- } )
466
- . fold ( vec ! [ Scalar :: zero( ) ; num_rows] , |mut Mz , ( r, v) | {
467
- Mz [ r] += v;
454
+ self . M . iter ( ) . fold (
455
+ vec ! [ Scalar :: zero( ) ; num_rows] ,
456
+ |mut Mz , SparseMatEntry { row, col, val } | {
457
+ Mz [ * row] += val * z[ * col] ;
468
458
Mz
469
- } )
459
+ } ,
460
+ )
470
461
}
471
462
472
463
pub fn compute_eval_table_sparse (
@@ -477,13 +468,13 @@ impl SparseMatPolynomial {
477
468
) -> Vec < Scalar > {
478
469
assert_eq ! ( rx. len( ) , num_rows) ;
479
470
480
- let mut M_evals : Vec < Scalar > = vec ! [ Scalar :: zero ( ) ; num_cols ] ;
481
-
482
- for i in 0 .. self . M . len ( ) {
483
- let entry = & self . M [ i ] ;
484
- M_evals [ entry . col ] += rx [ entry . row ] * entry . val ;
485
- }
486
- M_evals
471
+ self . M . iter ( ) . fold (
472
+ vec ! [ Scalar :: zero ( ) ; num_cols ] ,
473
+ | mut M_evals , SparseMatEntry { row , col , val } | {
474
+ M_evals [ * col ] += rx [ * row ] * val ;
475
+ M_evals
476
+ } ,
477
+ )
487
478
}
488
479
489
480
pub fn multi_commit (
@@ -706,18 +697,18 @@ impl HashLayerProof {
706
697
let ( rand_mem, rand_ops) = rand;
707
698
708
699
// decommit ops-addr at rand_ops
709
- let mut eval_ops_addr_vec: Vec < Scalar > = Vec :: new ( ) ;
710
- for i in 0 ..addr_timestamps . ops_addr . len ( ) {
711
- let eval_ops_addr = addr_timestamps . ops_addr [ i ] . evaluate ( rand_ops ) ;
712
- eval_ops_addr_vec . push ( eval_ops_addr ) ;
713
- }
700
+ let eval_ops_addr_vec = addr_timestamps
701
+ . ops_addr
702
+ . iter ( )
703
+ . map ( |addr| addr . evaluate ( rand_ops ) )
704
+ . collect ( ) ;
714
705
715
706
// decommit read_ts at rand_ops
716
- let mut eval_read_ts_vec: Vec < Scalar > = Vec :: new ( ) ;
717
- for i in 0 ..addr_timestamps . read_ts . len ( ) {
718
- let eval_read_ts = addr_timestamps . read_ts [ i ] . evaluate ( rand_ops ) ;
719
- eval_read_ts_vec . push ( eval_read_ts ) ;
720
- }
707
+ let eval_read_ts_vec = addr_timestamps
708
+ . read_ts
709
+ . iter ( )
710
+ . map ( |addr| addr . evaluate ( rand_ops ) )
711
+ . collect ( ) ;
721
712
722
713
// decommit audit-ts at rand_mem
723
714
let eval_audit_ts = addr_timestamps. audit_ts . evaluate ( rand_mem) ;
@@ -738,11 +729,15 @@ impl HashLayerProof {
738
729
let ( rand_mem, rand_ops) = rand;
739
730
740
731
// decommit derefs at rand_ops
741
- let eval_row_ops_val = ( 0 ..derefs. row_ops_val . len ( ) )
742
- . map ( |i| derefs. row_ops_val [ i] . evaluate ( rand_ops) )
732
+ let eval_row_ops_val = derefs
733
+ . row_ops_val
734
+ . iter ( )
735
+ . map ( |row| row. evaluate ( rand_ops) )
743
736
. collect :: < Vec < Scalar > > ( ) ;
744
- let eval_col_ops_val = ( 0 ..derefs. col_ops_val . len ( ) )
745
- . map ( |i| derefs. col_ops_val [ i] . evaluate ( rand_ops) )
737
+ let eval_col_ops_val = derefs
738
+ . col_ops_val
739
+ . iter ( )
740
+ . map ( |col| col. evaluate ( rand_ops) )
746
741
. collect :: < Vec < Scalar > > ( ) ;
747
742
let proof_derefs = DerefsEvalProof :: prove (
748
743
derefs,
@@ -1581,15 +1576,9 @@ impl SparsePolynomial {
1581
1576
1582
1577
fn compute_chi ( a : & [ bool ] , r : & [ Scalar ] ) -> Scalar {
1583
1578
assert_eq ! ( a. len( ) , r. len( ) ) ;
1584
- let mut chi_i = Scalar :: one ( ) ;
1585
- for j in 0 ..r. len ( ) {
1586
- if a[ j] {
1587
- chi_i *= r[ j] ;
1588
- } else {
1589
- chi_i *= Scalar :: one ( ) - r[ j] ;
1590
- }
1591
- }
1592
- chi_i
1579
+ a. iter ( ) . zip ( r. iter ( ) ) . fold ( Scalar :: one ( ) , |sum, ( a, r) | {
1580
+ sum * if * a { * r } else { Scalar :: one ( ) - r }
1581
+ } )
1593
1582
}
1594
1583
1595
1584
// Takes O(n log n). TODO: do this in O(n) where n is the number of entries in Z
@@ -1620,15 +1609,15 @@ mod tests {
1620
1609
let num_vars_x: usize = num_rows. log_2 ( ) ;
1621
1610
let num_vars_y: usize = num_cols. log_2 ( ) ;
1622
1611
1623
- let mut M : Vec < SparseMatEntry > = Vec :: new ( ) ;
1624
-
1625
- for _i in 0 ..num_nz_entries {
1626
- M . push ( SparseMatEntry :: new (
1627
- ( csprng. next_u64 ( ) % ( num_rows as u64 ) ) as usize ,
1628
- ( csprng . next_u64 ( ) % ( num_cols as u64 ) ) as usize ,
1629
- Scalar :: random ( & mut csprng ) ,
1630
- ) ) ;
1631
- }
1612
+ let M = ( 0 ..num_nz_entries )
1613
+ . map ( |_i| {
1614
+ SparseMatEntry :: new (
1615
+ ( csprng . next_u64 ( ) % ( num_rows as u64 ) ) as usize ,
1616
+ ( csprng. next_u64 ( ) % ( num_cols as u64 ) ) as usize ,
1617
+ Scalar :: random ( & mut csprng ) ,
1618
+ )
1619
+ } )
1620
+ . collect ( ) ;
1632
1621
1633
1622
let poly_M = SparseMatPolynomial :: new ( num_vars_x, num_vars_y, M ) ;
1634
1623
let gens = SparseMatPolyCommitmentGens :: new (
0 commit comments