binius_math

Trait CompositionPolyOS

source
pub trait CompositionPolyOS<P>:
    Debug
    + Send
    + Sync
where 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§

source

fn n_vars(&self) -> usize

The number of variables.

source

fn degree(&self) -> usize

Total degree of the polynomial.

source

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] and query[1].
  • Each scalar value in query[0] is added to the corresponding scalar value in query[1].
  • There are no operations performed between scalar values within the same packed value.
source

fn binary_tower_level(&self) -> usize

Returns the maximum binary tower level of all constants in the arithmetic expression.

Provided Methods§

source

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.

Implementations on Foreign Types§

source§

impl<'a, P, T: 'a + CompositionPolyOS<P> + ?Sized> CompositionPolyOS<P> for &'a T
where &'a T: Debug + Send + Sync, P: PackedField,

source§

fn n_vars(&self) -> usize

source§

fn degree(&self) -> usize

source§

fn evaluate(&self, query: &[P]) -> Result<P, Error>

source§

fn binary_tower_level(&self) -> usize

source§

fn batch_evaluate( &self, batch_query: &[&[P]], evals: &mut [P], ) -> Result<(), Error>

source§

impl<P, T: CompositionPolyOS<P> + ?Sized> CompositionPolyOS<P> for Arc<T>
where Arc<T>: Debug + Send + Sync, P: PackedField,

source§

fn n_vars(&self) -> usize

source§

fn degree(&self) -> usize

source§

fn evaluate(&self, query: &[P]) -> Result<P, Error>

source§

fn binary_tower_level(&self) -> usize

source§

fn batch_evaluate( &self, batch_query: &[&[P]], evals: &mut [P], ) -> Result<(), Error>

Implementors§