binius_macros

Macro composition_poly

Source
composition_poly!() { /* proc-macro */ }
Expand description

Useful for concisely creating structs that implement CompositionPolyOS. This currently only supports creating composition polynomials of tower level 0.

use binius_macros::composition_poly;
use binius_math::CompositionPolyOS;
use binius_field::{Field, BinaryField1b as F};

// Defines named struct without any fields that implements CompositionPolyOS
composition_poly!(MyComposition[x, y, z] = x + y * z);
assert_eq!(
    MyComposition.evaluate(&[F::ONE, F::ONE, F::ONE]).unwrap(),
    F::ZERO
);

// If you omit the name you get an anonymous instance instead, which can be used inline
assert_eq!(
    composition_poly!([x, y, z] = x + y * z)
        .evaluate(&[F::ONE, F::ONE, F::ONE]).unwrap(),
    F::ZERO
);