pub trait CompositionPolyOS<P>:
Debug
+ Send
+ Syncwhere
P: PackedField,{
// Required methods
fn n_vars(&self) -> usize;
fn degree(&self) -> usize;
fn evaluate(&self, query: &[P]) -> Result<P, Error>;
fn binary_tower_level(&self) -> usize;
// Provided method
fn batch_evaluate(
&self,
batch_query: &[&[P]],
evals: &mut [P],
) -> Result<(), Error> { ... }
}
Expand description
A multivariate polynomial that defines a composition of MultilinearComposite
.
This is an object-safe version of the trait.
Required Methods§
sourcefn evaluate(&self, query: &[P]) -> Result<P, Error>
fn evaluate(&self, query: &[P]) -> Result<P, Error>
Evaluates the polynomial using packed values, where each packed value may contain multiple scalar values. The evaluation follows SIMD semantics, meaning that operations are performed element-wise across corresponding scalar values in the packed values.
For example, given a polynomial represented as query[0] + query[1]
:
- The addition operation is applied element-wise between
query[0]
andquery[1]
. - Each scalar value in
query[0]
is added to the corresponding scalar value inquery[1]
. - There are no operations performed between scalar values within the same packed value.
sourcefn binary_tower_level(&self) -> usize
fn binary_tower_level(&self) -> usize
Returns the maximum binary tower level of all constants in the arithmetic expression.
Provided Methods§
sourcefn batch_evaluate(
&self,
batch_query: &[&[P]],
evals: &mut [P],
) -> Result<(), Error>
fn batch_evaluate( &self, batch_query: &[&[P]], evals: &mut [P], ) -> Result<(), Error>
Batch evaluation that admits non-strided argument layout.
batch_query
is a slice of slice references of equal length, which furthermore should equal
the length of evals
parameter.
Evaluation follows SIMD semantics as in evaluate
:
evals[j] := composition([batch_query[i][j] forall i]) forall j
- no crosstalk between evaluations
This method has a default implementation.