@@ -27,15 +27,13 @@ use crate::{
27
27
/// Evaluations are stored in lexicographic order i.e. `evals[0] = eq((0, ..., 0, 0), y)`,
28
28
/// `evals[1] = eq((0, ..., 0, 1), y)`, etc.
29
29
#[ derive( Debug , Clone ) ]
30
- struct FixedFirstHypercubeEqEvals < F > {
31
- y : Vec < F > ,
30
+ struct FixedFirstHypercubeEqEvals < ' a , F > {
31
+ y : & ' a [ F ] ,
32
32
evals : Vec < F > ,
33
33
}
34
34
35
- impl < F : Field > FixedFirstHypercubeEqEvals < F > {
36
- pub fn eval ( y : & [ F ] ) -> Self {
37
- let y = y. to_vec ( ) ;
38
-
35
+ impl < ' a , F : Field > FixedFirstHypercubeEqEvals < ' a , F > {
36
+ pub fn eval ( y : & ' a [ F ] ) -> Self {
39
37
if y. is_empty ( ) {
40
38
let evals = vec ! [ F :: ONE ] ;
41
39
return Self { evals, y } ;
@@ -48,7 +46,7 @@ impl<F: Field> FixedFirstHypercubeEqEvals<F> {
48
46
}
49
47
50
48
/// Returns evaluations of the function `x -> eq(x, y) * v` for each `x` in `{0, 1}^n`.
51
- fn gen ( y : & [ F ] , v : F ) -> Vec < F > {
49
+ fn gen ( y : & ' a [ F ] , v : F ) -> Vec < F > {
52
50
let n = 1 << y. len ( ) ;
53
51
let mut evals = vec ! [ F :: ZERO ; n] ;
54
52
evals[ 0 ] = v;
@@ -67,7 +65,7 @@ impl<F: Field> FixedFirstHypercubeEqEvals<F> {
67
65
}
68
66
}
69
67
70
- impl < F > Deref for FixedFirstHypercubeEqEvals < F > {
68
+ impl < F > Deref for FixedFirstHypercubeEqEvals < ' _ , F > {
71
69
type Target = [ F ] ;
72
70
73
71
fn deref ( & self ) -> & Self :: Target {
@@ -94,7 +92,7 @@ impl<F> Deref for FixedFirstHypercubeEqEvals<F> {
94
92
/// P(x) = eq(x, y) * (numer(x) + lambda * denom(x))
95
93
/// ```
96
94
struct GkrMultivariatePolyOracle < ' a , F : Clone > {
97
- pub eq_evals : & ' a FixedFirstHypercubeEqEvals < F > ,
95
+ pub eq_evals : & ' a FixedFirstHypercubeEqEvals < ' a , F > ,
98
96
pub input_layer : Layer < F > ,
99
97
pub eq_fixed_var_correction : F ,
100
98
/// Used by LogUp to perform a random linear combination of the numerators and denominators.
0 commit comments