Struct twenty_first::shared_math::polynomial::Polynomial
source · [−]pub struct Polynomial<PFElem: FiniteField> {
pub coefficients: Vec<PFElem>,
}
Fields
coefficients: Vec<PFElem>
Implementations
sourceimpl<PFElem: FiniteField> Polynomial<PFElem>
impl<PFElem: FiniteField> Polynomial<PFElem>
pub fn new(coefficients: Vec<PFElem>) -> Self
pub fn new_const(element: PFElem) -> Self
pub fn lift_b_x(b_poly: &Polynomial<BFieldElement>) -> Polynomial<XFieldElement>
pub fn normalize(&mut self)
pub fn zero() -> Self
pub fn from_constant(constant: PFElem) -> Self
pub fn is_zero(&self) -> bool
pub fn is_one(&self) -> bool
pub fn is_x(&self) -> bool
pub fn evaluate(&self, x: &PFElem) -> PFElem
pub fn leading_coefficient(&self) -> Option<PFElem>
pub fn scale(&self, alpha: &PFElem) -> Self
pub fn lagrange_interpolate(domain: &[PFElem], values: &[PFElem]) -> Self
pub fn are_colinear_3(
p0: (PFElem, PFElem),
p1: (PFElem, PFElem),
p2: (PFElem, PFElem)
) -> bool
pub fn get_colinear_y(
p0: (PFElem, PFElem),
p1: (PFElem, PFElem),
p2_x: PFElem
) -> PFElem
pub fn zerofier(domain: &[PFElem]) -> Self
pub fn slow_square(&self) -> Self
sourceimpl<PFElem: FiniteField> Polynomial<PFElem>
impl<PFElem: FiniteField> Polynomial<PFElem>
pub fn are_colinear(points: &[(PFElem, PFElem)]) -> bool
pub fn lagrange_interpolate_zipped(points: &[(PFElem, PFElem)]) -> Self
sourceimpl<PFElem: FiniteField> Polynomial<PFElem>
impl<PFElem: FiniteField> Polynomial<PFElem>
pub fn fast_square(&self) -> Self
pub fn square(&self) -> Self
pub fn fast_mod_pow(&self, pow: BigInt, one: PFElem) -> Self
sourceimpl<PFElem: FiniteField> Polynomial<PFElem>
impl<PFElem: FiniteField> Polynomial<PFElem>
pub fn fast_multiply(
lhs: &Self,
rhs: &Self,
primitive_root: &PFElem,
root_order: usize
) -> Self
pub fn fast_zerofier(
domain: &[PFElem],
primitive_root: &PFElem,
root_order: usize
) -> Self
pub fn fast_evaluate(
&self,
domain: &[PFElem],
primitive_root: &PFElem,
root_order: usize
) -> Vec<PFElem>
pub fn fast_interpolate(
domain: &[PFElem],
values: &[PFElem],
primitive_root: &PFElem,
root_order: usize
) -> Self
sourcepub fn fast_coset_evaluate(
&self,
offset: &PFElem,
generator: PFElem,
order: usize
) -> Vec<PFElem>
pub fn fast_coset_evaluate(
&self,
offset: &PFElem,
generator: PFElem,
order: usize
) -> Vec<PFElem>
Fast evaluate on a coset domain, which is the group generated by generator^i * offset
sourcepub fn fast_coset_interpolate(
offset: &PFElem,
generator: PFElem,
values: &[PFElem]
) -> Self
pub fn fast_coset_interpolate(
offset: &PFElem,
generator: PFElem,
values: &[PFElem]
) -> Self
The inverse of fast_coset_evaluate
sourcepub fn fast_coset_divide(
lhs: &Polynomial<PFElem>,
rhs: &Polynomial<PFElem>,
offset: PFElem,
primitive_root: PFElem,
root_order: usize
) -> Polynomial<PFElem>
pub fn fast_coset_divide(
lhs: &Polynomial<PFElem>,
rhs: &Polynomial<PFElem>,
offset: PFElem,
primitive_root: PFElem,
root_order: usize
) -> Polynomial<PFElem>
Divide two polynomials under the homomorphism of evaluation for a N^2 -> N*log(N) speedup Since we often want to use this fast division for numerators and divisors that evaluate to zero in their domain, we do the division with an offset from the polynomials’ original domains. The issue of zero in the numerator and divisor arises when we divide a transition polynomial with a zerofier.
sourceimpl<PFElem: FiniteField> Polynomial<PFElem>
impl<PFElem: FiniteField> Polynomial<PFElem>
pub fn multiply(self, other: Self) -> Self
pub fn mod_pow(&self, pow: BigInt, one: PFElem) -> Self
pub fn shift_coefficients_mut(&mut self, power: usize, zero: PFElem)
pub fn shift_coefficients(&self, power: usize, zero: PFElem) -> Self
pub fn scalar_mul_mut(&mut self, scalar: PFElem)
pub fn scalar_mul(&self, scalar: PFElem) -> Self
sourcepub fn divide(&self, divisor: Self) -> (Self, Self)
pub fn divide(&self, divisor: Self) -> (Self, Self)
Return (quotient, remainder)
sourceimpl<PFElem: FiniteField> Polynomial<PFElem>
impl<PFElem: FiniteField> Polynomial<PFElem>
Trait Implementations
sourceimpl<PFElem: FiniteField> Add<Polynomial<PFElem>> for Polynomial<PFElem>
impl<PFElem: FiniteField> Add<Polynomial<PFElem>> for Polynomial<PFElem>
type Output = Polynomial<PFElem>
type Output = Polynomial<PFElem>
The resulting type after applying the +
operator.
sourceimpl<PFElem: FiniteField> AddAssign<Polynomial<PFElem>> for Polynomial<PFElem>
impl<PFElem: FiniteField> AddAssign<Polynomial<PFElem>> for Polynomial<PFElem>
sourcefn add_assign(&mut self, rhs: Self)
fn add_assign(&mut self, rhs: Self)
Performs the +=
operation. Read more
sourceimpl<PFElem: FiniteField> Clone for Polynomial<PFElem>
impl<PFElem: FiniteField> Clone for Polynomial<PFElem>
sourceimpl<PFElem: FiniteField> Debug for Polynomial<PFElem>
impl<PFElem: FiniteField> Debug for Polynomial<PFElem>
sourceimpl<PFElem: FiniteField> Display for Polynomial<PFElem>
impl<PFElem: FiniteField> Display for Polynomial<PFElem>
sourceimpl<PFElem: FiniteField> Div<Polynomial<PFElem>> for Polynomial<PFElem>
impl<PFElem: FiniteField> Div<Polynomial<PFElem>> for Polynomial<PFElem>
type Output = Polynomial<PFElem>
type Output = Polynomial<PFElem>
The resulting type after applying the /
operator.
sourceimpl From<Polynomial<BFieldElement>> for XFieldElement
impl From<Polynomial<BFieldElement>> for XFieldElement
sourcefn from(poly: Polynomial<BFieldElement>) -> Self
fn from(poly: Polynomial<BFieldElement>) -> Self
Converts to this type from the input type.
sourceimpl From<XFieldElement> for Polynomial<BFieldElement>
impl From<XFieldElement> for Polynomial<BFieldElement>
sourcefn from(item: XFieldElement) -> Self
fn from(item: XFieldElement) -> Self
Converts to this type from the input type.
sourceimpl<PFElem: FiniteField> Hash for Polynomial<PFElem>
impl<PFElem: FiniteField> Hash for Polynomial<PFElem>
sourceimpl<PFElem: FiniteField> Mul<Polynomial<PFElem>> for Polynomial<PFElem>
impl<PFElem: FiniteField> Mul<Polynomial<PFElem>> for Polynomial<PFElem>
type Output = Polynomial<PFElem>
type Output = Polynomial<PFElem>
The resulting type after applying the *
operator.
sourceimpl<PFElem: FiniteField> PartialEq<Polynomial<PFElem>> for Polynomial<PFElem>
impl<PFElem: FiniteField> PartialEq<Polynomial<PFElem>> for Polynomial<PFElem>
sourceimpl<PFElem: FiniteField> Rem<Polynomial<PFElem>> for Polynomial<PFElem>
impl<PFElem: FiniteField> Rem<Polynomial<PFElem>> for Polynomial<PFElem>
type Output = Polynomial<PFElem>
type Output = Polynomial<PFElem>
The resulting type after applying the %
operator.
sourceimpl<PFElem: FiniteField> Sub<Polynomial<PFElem>> for Polynomial<PFElem>
impl<PFElem: FiniteField> Sub<Polynomial<PFElem>> for Polynomial<PFElem>
type Output = Polynomial<PFElem>
type Output = Polynomial<PFElem>
The resulting type after applying the -
operator.
impl<PFElem: FiniteField> Eq for Polynomial<PFElem>
Auto Trait Implementations
impl<PFElem> RefUnwindSafe for Polynomial<PFElem>where
PFElem: RefUnwindSafe,
impl<PFElem> Send for Polynomial<PFElem>
impl<PFElem> Sync for Polynomial<PFElem>
impl<PFElem> Unpin for Polynomial<PFElem>where
PFElem: Unpin,
impl<PFElem> UnwindSafe for Polynomial<PFElem>where
PFElem: UnwindSafe,
Blanket Implementations
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more