Struct Polynomial
pub struct Polynomial<F> {
pub coefficients: Vec<F>,
}Expand description
Represents a polynomial with coefficients of type F.
Fields§
§coefficients: Vec<F>Coefficients of the polynomial, ordered from lowest to highest degree.
Implementations§
§impl<F> Polynomial<F>where
F: Clone,
impl<F> Polynomial<F>where
F: Clone,
pub fn new(coefficients: Vec<F>) -> Polynomial<F>
pub fn new(coefficients: Vec<F>) -> Polynomial<F>
Creates a new polynomial from the provided coefficients.
§impl<F> Polynomial<F>
impl<F> Polynomial<F>
pub fn hadamard_mul(&self, other: &Polynomial<F>) -> Polynomial<F>
pub fn hadamard_mul(&self, other: &Polynomial<F>) -> Polynomial<F>
Multiplies two polynomials coefficient-wise (Hadamard multiplication).
pub fn hadamard_div(&self, other: &Polynomial<F>) -> Polynomial<F>
pub fn hadamard_div(&self, other: &Polynomial<F>) -> Polynomial<F>
Divides two polynomials coefficient-wise (Hadamard division).
pub fn hadamard_inv(&self) -> Polynomial<F>
pub fn hadamard_inv(&self) -> Polynomial<F>
Computes the coefficient-wise inverse (Hadamard inverse).
§impl<F> Polynomial<F>
impl<F> Polynomial<F>
§impl<F> Polynomial<F>
The following implementations are specific to cyclotomic polynomial rings,
i.e., F[ X ] / <X^n + 1>, and are used extensively in Falcon.
impl<F> Polynomial<F>
The following implementations are specific to cyclotomic polynomial rings, i.e., F[ X ] / <X^n + 1>, and are used extensively in Falcon.
pub fn reduce_by_cyclotomic(&self, n: usize) -> Polynomial<F>
pub fn reduce_by_cyclotomic(&self, n: usize) -> Polynomial<F>
Reduce the polynomial by X^n + 1.
pub fn field_norm(&self) -> Polynomial<F>
pub fn field_norm(&self) -> Polynomial<F>
Computes the field norm of the polynomial as an element of the cyclotomic ring F[ X ] / <X^n + 1 > relative to one of half the size, i.e., F[ X ] / <X^(n/2) + 1> .
Corresponds to formula 3.25 in the spec [1, p.30].
pub fn lift_next_cyclotomic(&self) -> Polynomial<F>
pub fn lift_next_cyclotomic(&self) -> Polynomial<F>
Lifts an element from a cyclotomic polynomial ring to one of double the size.
pub fn galois_adjoint(&self) -> Polynomial<F>
pub fn galois_adjoint(&self) -> Polynomial<F>
Computes the galois adjoint of the polynomial in the cyclotomic ring F[ X ] / < X^n + 1 > , which corresponds to f(x^2).
§impl<F> Polynomial<F>
impl<F> Polynomial<F>
pub fn karatsuba(&self, other: &Polynomial<F>) -> Polynomial<F>
pub fn karatsuba(&self, other: &Polynomial<F>) -> Polynomial<F>
Multiply two polynomials using Karatsuba’s divide-and-conquer algorithm.
§impl<F> Polynomial<F>
impl<F> Polynomial<F>
pub fn shift(&self, shamt: usize) -> Polynomial<F>
pub fn shift(&self, shamt: usize) -> Polynomial<F>
Shifts the polynomial by the specified amount (adds leading zeros).
pub fn constant(f: F) -> Polynomial<F>
pub fn constant(f: F) -> Polynomial<F>
Creates a constant polynomial with a single coefficient.
pub fn map<G, C>(&self, closure: C) -> Polynomial<G>
pub fn map<G, C>(&self, closure: C) -> Polynomial<G>
Applies a function to each coefficient and returns a new polynomial.
§impl Polynomial<FalconFelt>
impl Polynomial<FalconFelt>
pub fn norm_squared(&self) -> u64
pub fn norm_squared(&self) -> u64
Computes the squared L2 norm of the polynomial.
pub fn to_elements(&self) -> Vec<Felt>
pub fn to_elements(&self) -> Vec<Felt>
Returns the coefficients of this polynomial as field elements.
pub fn mul_modulo_p(
a: &Polynomial<FalconFelt>,
b: &Polynomial<FalconFelt>,
) -> [u64; 1024]
pub fn mul_modulo_p( a: &Polynomial<FalconFelt>, b: &Polynomial<FalconFelt>, ) -> [u64; 1024]
Multiplies two polynomials over Z_p[x] without reducing modulo p. Given that the degrees of the input polynomials are less than 512 and their coefficients are less than the modulus q equal to 12289, the resulting product polynomial is guaranteed to have coefficients less than the Miden prime.
Note that this multiplication is not over Z_p[x]/(phi).
pub fn reduce_negacyclic(a: &[u64; 1024]) -> Polynomial<FalconFelt>
pub fn reduce_negacyclic(a: &[u64; 1024]) -> Polynomial<FalconFelt>
Reduces a polynomial, that is the product of two polynomials over Z_p[x], modulo the irreducible polynomial phi. This results in an element in Z_p[x]/(phi).
§impl Polynomial<Felt>
impl Polynomial<Felt>
pub fn to_elements(&self) -> Vec<Felt>
pub fn to_elements(&self) -> Vec<Felt>
Returns the coefficients of this polynomial as Miden field elements.
§impl Polynomial<i16>
impl Polynomial<i16>
pub fn to_balanced_values(&self) -> Vec<i16>
pub fn to_balanced_values(&self) -> Vec<i16>
Returns the balanced values of the coefficients of this polynomial.
Trait Implementations§
§impl<F> Add for &Polynomial<F>
impl<F> Add for &Polynomial<F>
§type Output = Polynomial<F>
type Output = Polynomial<F>
+ operator.§fn add(self, rhs: &Polynomial<F>) -> <&Polynomial<F> as Add>::Output
fn add(self, rhs: &Polynomial<F>) -> <&Polynomial<F> as Add>::Output
+ operation. Read more§impl<F> Add for Polynomial<F>
impl<F> Add for Polynomial<F>
§type Output = Polynomial<F>
type Output = Polynomial<F>
+ operator.§fn add(self, rhs: Polynomial<F>) -> <Polynomial<F> as Add>::Output
fn add(self, rhs: Polynomial<F>) -> <Polynomial<F> as Add>::Output
+ operation. Read more§impl<F> AddAssign for Polynomial<F>
impl<F> AddAssign for Polynomial<F>
§fn add_assign(&mut self, rhs: Polynomial<F>)
fn add_assign(&mut self, rhs: Polynomial<F>)
+= operation. Read more§impl<F> Clone for Polynomial<F>where
F: Clone,
impl<F> Clone for Polynomial<F>where
F: Clone,
§fn clone(&self) -> Polynomial<F>
fn clone(&self) -> Polynomial<F>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more§impl<F> Debug for Polynomial<F>where
F: Debug,
impl<F> Debug for Polynomial<F>where
F: Debug,
§impl<F> Default for Polynomial<F>where
F: Default,
impl<F> Default for Polynomial<F>where
F: Default,
§fn default() -> Polynomial<F>
fn default() -> Polynomial<F>
§impl<F> Div for Polynomial<F>
impl<F> Div for Polynomial<F>
§type Output = Polynomial<F>
type Output = Polynomial<F>
/ operator.§fn div(self, denominator: Polynomial<F>) -> <Polynomial<F> as Div>::Output
fn div(self, denominator: Polynomial<F>) -> <Polynomial<F> as Div>::Output
/ operation. Read more§impl From<&Polynomial<FalconFelt>> for Polynomial<Felt>
impl From<&Polynomial<FalconFelt>> for Polynomial<Felt>
§fn from(item: &Polynomial<FalconFelt>) -> Polynomial<Felt>
fn from(item: &Polynomial<FalconFelt>) -> Polynomial<Felt>
§impl From<&Polynomial<i16>> for Polynomial<FalconFelt>
impl From<&Polynomial<i16>> for Polynomial<FalconFelt>
§fn from(item: &Polynomial<i16>) -> Polynomial<FalconFelt>
fn from(item: &Polynomial<i16>) -> Polynomial<FalconFelt>
§impl From<&Vec<i16>> for Polynomial<FalconFelt>
impl From<&Vec<i16>> for Polynomial<FalconFelt>
§fn from(item: &Vec<i16>) -> Polynomial<FalconFelt>
fn from(item: &Vec<i16>) -> Polynomial<FalconFelt>
§impl From<Polynomial<FalconFelt>> for Polynomial<Felt>
impl From<Polynomial<FalconFelt>> for Polynomial<Felt>
§fn from(item: Polynomial<FalconFelt>) -> Polynomial<Felt>
fn from(item: Polynomial<FalconFelt>) -> Polynomial<Felt>
§impl From<Polynomial<FalconFelt>> for PublicKey
impl From<Polynomial<FalconFelt>> for PublicKey
§fn from(pk_poly: Polynomial<FalconFelt>) -> PublicKey
fn from(pk_poly: Polynomial<FalconFelt>) -> PublicKey
§impl From<Polynomial<FalconFelt>> for SignaturePoly
impl From<Polynomial<FalconFelt>> for SignaturePoly
§fn from(pk_poly: Polynomial<FalconFelt>) -> SignaturePoly
fn from(pk_poly: Polynomial<FalconFelt>) -> SignaturePoly
§impl From<Polynomial<i16>> for Polynomial<FalconFelt>
impl From<Polynomial<i16>> for Polynomial<FalconFelt>
§fn from(item: Polynomial<i16>) -> Polynomial<FalconFelt>
fn from(item: Polynomial<i16>) -> Polynomial<FalconFelt>
§impl From<Vec<i16>> for Polynomial<FalconFelt>
impl From<Vec<i16>> for Polynomial<FalconFelt>
§fn from(item: Vec<i16>) -> Polynomial<FalconFelt>
fn from(item: Vec<i16>) -> Polynomial<FalconFelt>
§impl<F> Mul<F> for &Polynomial<F>
impl<F> Mul<F> for &Polynomial<F>
§type Output = Polynomial<F>
type Output = Polynomial<F>
* operator.§impl<F> Mul<F> for Polynomial<F>
impl<F> Mul<F> for Polynomial<F>
§type Output = Polynomial<F>
type Output = Polynomial<F>
* operator.§impl<F> Mul for &Polynomial<F>
impl<F> Mul for &Polynomial<F>
§type Output = Polynomial<F>
type Output = Polynomial<F>
* operator.§fn mul(self, other: &Polynomial<F>) -> <&Polynomial<F> as Mul>::Output
fn mul(self, other: &Polynomial<F>) -> <&Polynomial<F> as Mul>::Output
* operation. Read more§impl<F> Mul for Polynomial<F>
impl<F> Mul for Polynomial<F>
§type Output = Polynomial<F>
type Output = Polynomial<F>
* operator.§fn mul(self, other: Polynomial<F>) -> <Polynomial<F> as Mul>::Output
fn mul(self, other: Polynomial<F>) -> <Polynomial<F> as Mul>::Output
* operation. Read more§impl<F> Neg for &Polynomial<F>
impl<F> Neg for &Polynomial<F>
§type Output = Polynomial<F>
type Output = Polynomial<F>
- operator.§impl<F> Neg for Polynomial<F>
impl<F> Neg for Polynomial<F>
§type Output = Polynomial<F>
type Output = Polynomial<F>
- operator.§impl<F> One for Polynomial<F>
impl<F> One for Polynomial<F>
§fn one() -> Polynomial<F>
fn one() -> Polynomial<F>
§impl<F> PartialEq for Polynomial<F>
impl<F> PartialEq for Polynomial<F>
§impl<F> Sub for &Polynomial<F>
impl<F> Sub for &Polynomial<F>
§type Output = Polynomial<F>
type Output = Polynomial<F>
- operator.§fn sub(self, rhs: &Polynomial<F>) -> <&Polynomial<F> as Sub>::Output
fn sub(self, rhs: &Polynomial<F>) -> <&Polynomial<F> as Sub>::Output
- operation. Read more§impl<F> Sub for Polynomial<F>
impl<F> Sub for Polynomial<F>
§type Output = Polynomial<F>
type Output = Polynomial<F>
- operator.§fn sub(self, rhs: Polynomial<F>) -> <Polynomial<F> as Sub>::Output
fn sub(self, rhs: Polynomial<F>) -> <Polynomial<F> as Sub>::Output
- operation. Read more§impl<F> SubAssign for Polynomial<F>
impl<F> SubAssign for Polynomial<F>
§fn sub_assign(&mut self, rhs: Polynomial<F>)
fn sub_assign(&mut self, rhs: Polynomial<F>)
-= operation. Read more§impl<F> Zero for Polynomial<F>
impl<F> Zero for Polynomial<F>
§impl<F> Zeroize for Polynomial<F>where
F: Zeroize,
impl<F> Zeroize for Polynomial<F>where
F: Zeroize,
impl<F> Eq for Polynomial<F>
impl<F> ZeroizeOnDrop for Polynomial<F>where
F: Zeroize,
Auto Trait Implementations§
impl<F> Freeze for Polynomial<F>
impl<F> RefUnwindSafe for Polynomial<F>where
F: RefUnwindSafe,
impl<F> Send for Polynomial<F>where
F: Send,
impl<F> Sync for Polynomial<F>where
F: Sync,
impl<F> Unpin for Polynomial<F>where
F: Unpin,
impl<F> UnsafeUnpin for Polynomial<F>
impl<F> UnwindSafe for Polynomial<F>where
F: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<D> OwoColorize for D
impl<D> OwoColorize for D
§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg] or
a color-specific method, such as [OwoColorize::green], Read more§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg] or
a color-specific method, such as [OwoColorize::on_yellow], Read more