pub fn open_multi_points<SF>(
        &self,
        polynomial: &SF,
        points: &[E::Fr],
        max_msm_buffer: usize,
    ) -> (Vec<E::Fr>, EvaluationProof<E>)
    where
        SF: Iterable,
        SF::Item: Borrow<E::Fr>,
    {
        let zeros = vanishing_polynomial(points);
        let mut quotient = ChunkedPippenger::new(max_msm_buffer);
        let mut bases = self.powers_of_g.iter();
        bases
            .advance_by(self.powers_of_g.len() - polynomial.len() + zeros.degree())
            .unwrap();

        let mut state = VecDeque::<E::Fr>::with_capacity(points.len());

        let mut polynomial_iterator = polynomial.iter();

        (0..points.len()).for_each(|_| {
            state.push_back(*polynomial_iterator.next().unwrap().borrow());
        });

        for coefficient in polynomial_iterator {
            let coefficient = coefficient.borrow();
            let quotient_coefficient = state.pop_front().unwrap();
            state.push_back(*coefficient);
            (0..points.len()).for_each(|i| {
                state[i] -= zeros.coeffs[zeros.degree() - i - 1] * quotient_coefficient;
            });
            let base = bases.next().unwrap();
            quotient.add(base, quotient_coefficient.into_bigint());
        }
        let remainder = state.make_contiguous().to_vec();
        let commitment = EvaluationProof(quotient.finalize().into_affine());
        (remainder, commitment)
    }
/// Evaluate a single polynomial at a set of points `points`, and provide an evaluation proof along with evaluations.
Evaluate a single polynomial at a set of points `points`, and provide an evaluation proof along with evaluations.
Evaluate a single polynomial at a set of points ` points ` and provide an evaluation proof along with evaluations .
pub fn open_multi_points<SF>(
        &self,
        polynomial: &SF,
        points: &[E::Fr],
        max_msm_buffer: usize,
    ) -> (Vec<E::Fr>, EvaluationProof<E>)
    where
        SF: Iterable,
        SF::Item: Borrow<E::Fr>,
    {
        let zeros = vanishing_polynomial(points);
        let mut quotient = ChunkedPippenger::new(max_msm_buffer);
        let mut bases = self.powers_of_g.iter();
        bases
            .advance_by(self.powers_of_g.len() - polynomial.len() + zeros.degree())
            .unwrap();
        let mut state = VecDeque::<E::Fr>::with_capacity(points.len());
        let mut polynomial_iterator = polynomial.iter();
        (0..points.len()).for_each(|_| {
            state.push_back(*polynomial_iterator.next().unwrap().borrow());
        });
        for coefficient in polynomial_iterator {
            let coefficient = coefficient.borrow();
            let quotient_coefficient = state.pop_front().unwrap();
            state.push_back(*coefficient);
            (0..points.len()).for_each(|i| {
                state[i] -= zeros.coeffs[zeros.degree() - i - 1] * quotient_coefficient;
            });
            let base = bases.next().unwrap();
            quotient.add(base, quotient_coefficient.into_bigint());
        }
        let remainder = state.make_contiguous().to_vec();
        let commitment = EvaluationProof(quotient.finalize().into_affine());
        (remainder, commitment)
    }
pub fn open_multi_points < SF > ( & self , polynomial : & SF , points : & [ E :: Fr ] , max_msm_buffer : usize , ) -> ( Vec < E :: Fr > , EvaluationProof < E > ) where SF : Iterable , SF :: Item : Borrow < E :: Fr > , { let zeros = vanishing_polynomial ( points ) ; let mut quotient = ChunkedPippenger :: new ( max_msm_buffer ) ; let mut bases = self . powers_of_g . iter ( ) ; bases . advance_by ( self . powers_of_g . len ( ) - polynomial . len ( ) + zeros . degree ( ) ) . unwrap ( ) ; let mut state = VecDeque :: < E :: Fr > :: with_capacity ( points . len ( ) ) ; let mut polynomial_iterator = polynomial . iter ( ) ; ( 0 .. points . len ( ) ) . for_each ( | _ | { state . push_back ( * polynomial_iterator . next ( ) . unwrap ( ) . borrow ( ) ) ; } ) ; for coefficient in polynomial_iterator { let coefficient = coefficient . borrow ( ) ; let quotient_coefficient = state . pop_front ( ) . unwrap ( ) ; state . push_back ( * coefficient ) ; ( 0 .. points . len ( ) ) . for_each ( | i | { state [ i ] -= zeros . coeffs [ zeros . degree ( ) - i - 1 ] * quotient_coefficient ; } ) ; let base = bases . next ( ) . unwrap ( ) ; quotient . add ( base , quotient_coefficient . into_bigint ( ) ) ; } let remainder = state . make_contiguous ( ) . to_vec ( ) ; let commitment = EvaluationProof ( quotient . finalize ( ) . into_affine ( ) ) ; ( remainder , commitment ) }
Evaluate a single polynomial at a set of points `points`, and provide an evaluation proof along with evaluations.
Evaluate a single polynomial at a set of points ` points ` and provide an evaluation proof along with evaluations .
&self
polynomial
&SF
points
&[E::Fr]
max_msm_buffer
usize