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
);