/// Register a virtual oracle specfied by coset evaluator.
/// * `coset_query_evaluator`: a function that takes a coset and constituent
///   oracles, and return query responses
/// * `evaluation_on_domain`: evaluation of this virtual round on evaluation
///   domain. `evaluation_on_domain[i]` is the evaluation of ith oracle at
///   this round.
Register a virtual oracle specfied by coset evaluator.
`coset_query_evaluator`: a function that takes a coset and constituent
oracles, and return query responses
`evaluation_on_domain`: evaluation of this virtual round on evaluation
domain. `evaluation_on_domain[i]` is the evaluation of ith oracle at
this round.
Register a virtual oracle specfied by coset evaluator . ` coset_query_evaluator ` : a function that takes a coset and constituent oracles and return query responses ` evaluation_on_domain ` : evaluation of this virtual round on evaluation domain . ` evaluation_on_domain [ i ] ` is the evaluation of ith oracle at this round .
pub fn register_prover_virtual_round<VO: VirtualOracle<F>>(
        &mut self,
        ns: NameSpace,
        vo: VO,
        // evaluations_on_domain: Vec<Vec<F>>,
        test_bound: Vec<usize>,
        constraint_bound: Vec<usize>,
        trace: TraceInfo,
    ) -> MsgRoundRef {
        info!("Register prover virtual oracle: {}", trace);
        // make sure that we are not in midway of a round
        assert!(!self.is_pending_message_available());
        let (codeword_domain, localization_param) = (
            self.codeword_domain(),
            self.codeword_localization_parameter(),
        );
        // evaluate the virtual oracle on codeword domain TODO
        // first, get all the oracles needed
        let oracle_handles = vo.constituent_oracle_handles();
        let constituent_oracles = oracle_handles
            .into_iter()
            .flat_map(|(round, idxes)| {
                debug_assert!(
                    idxes.iter().collect::<BTreeSet<_>>().len() == idxes.len(),
                    "Duplicate oracle index"
                );
                idxes
                    .into_iter()
                    .map(|idx| self.get_previously_sent_prover_oracle(round, idx).to_vec())
                    .collect::<Vec<_>>()
            })
            .collect::<Vec<_>>();
        debug_assert!(constituent_oracles
            .iter()
            .all(|o| o.len() == self.codeword_domain().size()));
        let vo_evaluations = vo.evaluate(self.codeword_domain(), &constituent_oracles);
        let virtual_oracle = VirtualOracleWithInfo::new(
            Box::new(vo),
            codeword_domain,
            localization_param,
            test_bound,
            constraint_bound,
        );
        self.registered_virtual_oracles
            .push((virtual_oracle, vo_evaluations));
        self.attach_latest_prover_round_to_namespace(ns, true, trace)
    }
pub fn register_prover_virtual_round < VO : VirtualOracle < F > > ( & mut self , ns : NameSpace , vo : VO , // evaluations_on_domain: Vec<Vec<F>>, test_bound : Vec < usize > , constraint_bound : Vec < usize > , trace : TraceInfo , ) -> MsgRoundRef { info ! ( " " trace ) ; // make sure that we are not in midway of a round assert ! ( self is_pending_message_available ( ) ) ; let ( codeword_domain , localization_param ) = ( self . codeword_domain ( ) , self . codeword_localization_parameter ( ) , ) ; // evaluate the virtual oracle on codeword domain TODO // first, get all the oracles needed let oracle_handles = vo . constituent_oracle_handles ( ) ; let constituent_oracles = oracle_handles . into_iter ( ) . flat_map ( | ( round , idxes ) | { debug_assert ! ( idxes iter ( ) collect BTreeSet ( ) len ( ) idxes len ( ) " " ) ; idxes . into_iter ( ) . map ( | idx | self . get_previously_sent_prover_oracle ( round , idx ) . to_vec ( ) ) . collect :: < Vec < _ > > ( ) } ) . collect :: < Vec < _ > > ( ) ; debug_assert ! ( constituent_oracles iter ( ) all ( o o len ( ) self codeword_domain ( ) size ( ) ) ) ; let vo_evaluations = vo . evaluate ( self . codeword_domain ( ) , & constituent_oracles ) ; let virtual_oracle = VirtualOracleWithInfo :: new ( Box :: new ( vo ) , codeword_domain , localization_param , test_bound , constraint_bound , ) ; self . registered_virtual_oracles . push ( ( virtual_oracle , vo_evaluations ) ) ; self . attach_latest_prover_round_to_namespace ( ns , true , trace ) }
Register a virtual oracle specfied by coset evaluator.
Register a virtual oracle specfied by coset evaluator .
&mut self
ns
NameSpace
vo
VO
test_bound
Vec<usize>
constraint_bound
Vec<usize>
trace
TraceInfo