Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
302 changes: 0 additions & 302 deletions crypto/math/src/polynomial.rs
Original file line number Diff line number Diff line change
Expand Up @@ -250,55 +250,6 @@ impl<F: IsField> ops::Neg for Polynomial<FieldElement<F>> {
}
}

// impl Sub
impl<F, L> ops::Sub<&Polynomial<FieldElement<L>>> for &Polynomial<FieldElement<F>>
where
L: IsField,
F: IsSubFieldOf<L>,
{
type Output = Polynomial<FieldElement<L>>;

fn sub(self, substrahend: &Polynomial<FieldElement<L>>) -> Polynomial<FieldElement<L>> {
self + (-substrahend)
}
}

impl<F, L> ops::Sub<Polynomial<FieldElement<L>>> for Polynomial<FieldElement<F>>
where
L: IsField,
F: IsSubFieldOf<L>,
{
type Output = Polynomial<FieldElement<L>>;

fn sub(self, substrahend: Polynomial<FieldElement<L>>) -> Polynomial<FieldElement<L>> {
&self - &substrahend
}
}

impl<F, L> ops::Sub<&Polynomial<FieldElement<L>>> for Polynomial<FieldElement<F>>
where
L: IsField,
F: IsSubFieldOf<L>,
{
type Output = Polynomial<FieldElement<L>>;

fn sub(self, substrahend: &Polynomial<FieldElement<L>>) -> Polynomial<FieldElement<L>> {
&self - substrahend
}
}

impl<F, L> ops::Sub<Polynomial<FieldElement<L>>> for &Polynomial<FieldElement<F>>
where
L: IsField,
F: IsSubFieldOf<L>,
{
type Output = Polynomial<FieldElement<L>>;

fn sub(self, substrahend: Polynomial<FieldElement<L>>) -> Polynomial<FieldElement<L>> {
self - &substrahend
}
}

impl<F: IsField> ops::Mul<&Polynomial<FieldElement<F>>> for &Polynomial<FieldElement<F>> {
type Output = Polynomial<FieldElement<F>>;
fn mul(self, factor: &Polynomial<FieldElement<F>>) -> Polynomial<FieldElement<F>> {
Expand Down Expand Up @@ -327,210 +278,6 @@ impl<F: IsField> ops::Mul<&Polynomial<FieldElement<F>>> for Polynomial<FieldElem
}
}

/* Operations between Polynomials and field elements */
/* Multiplication field element at left */
impl<F, L> ops::Mul<FieldElement<F>> for Polynomial<FieldElement<L>>
where
L: IsField,
F: IsSubFieldOf<L>,
{
type Output = Polynomial<FieldElement<L>>;

fn mul(self, multiplicand: FieldElement<F>) -> Polynomial<FieldElement<L>> {
let new_coefficients = self
.coefficients
.iter()
.map(|value| &multiplicand * value)
.collect();
Polynomial {
coefficients: new_coefficients,
}
}
}

impl<F, L> ops::Mul<&FieldElement<F>> for &Polynomial<FieldElement<L>>
where
L: IsField,
F: IsSubFieldOf<L>,
{
type Output = Polynomial<FieldElement<L>>;

fn mul(self, multiplicand: &FieldElement<F>) -> Polynomial<FieldElement<L>> {
self.clone() * multiplicand.clone()
}
}

impl<F, L> ops::Mul<FieldElement<F>> for &Polynomial<FieldElement<L>>
where
L: IsField,
F: IsSubFieldOf<L>,
{
type Output = Polynomial<FieldElement<L>>;

fn mul(self, multiplicand: FieldElement<F>) -> Polynomial<FieldElement<L>> {
self * &multiplicand
}
}

impl<F, L> ops::Mul<&FieldElement<F>> for Polynomial<FieldElement<L>>
where
L: IsField,
F: IsSubFieldOf<L>,
{
type Output = Polynomial<FieldElement<L>>;

fn mul(self, multiplicand: &FieldElement<F>) -> Polynomial<FieldElement<L>> {
&self * multiplicand
}
}

/* Multiplication field element at right */
impl<F, L> ops::Mul<&Polynomial<FieldElement<L>>> for &FieldElement<F>
where
L: IsField,
F: IsSubFieldOf<L>,
{
type Output = Polynomial<FieldElement<L>>;

fn mul(self, multiplicand: &Polynomial<FieldElement<L>>) -> Polynomial<FieldElement<L>> {
multiplicand * self
}
}

impl<F, L> ops::Mul<Polynomial<FieldElement<L>>> for &FieldElement<F>
where
L: IsField,
F: IsSubFieldOf<L>,
{
type Output = Polynomial<FieldElement<L>>;

fn mul(self, multiplicand: Polynomial<FieldElement<L>>) -> Polynomial<FieldElement<L>> {
&multiplicand * self
}
}

impl<F, L> ops::Mul<&Polynomial<FieldElement<L>>> for FieldElement<F>
where
L: IsField,
F: IsSubFieldOf<L>,
{
type Output = Polynomial<FieldElement<L>>;

fn mul(self, multiplicand: &Polynomial<FieldElement<L>>) -> Polynomial<FieldElement<L>> {
multiplicand * self
}
}

impl<F, L> ops::Mul<Polynomial<FieldElement<L>>> for FieldElement<F>
where
L: IsField,
F: IsSubFieldOf<L>,
{
type Output = Polynomial<FieldElement<L>>;

fn mul(self, multiplicand: Polynomial<FieldElement<L>>) -> Polynomial<FieldElement<L>> {
&multiplicand * &self
}
}

/* Addition field element at left */
impl<F, L> ops::Add<&FieldElement<F>> for &Polynomial<FieldElement<L>>
where
L: IsField,
F: IsSubFieldOf<L>,
{
type Output = Polynomial<FieldElement<L>>;

fn add(self, other: &FieldElement<F>) -> Polynomial<FieldElement<L>> {
Polynomial::new_monomial(other.clone(), 0) + self
}
}

impl<F, L> ops::Add<FieldElement<F>> for Polynomial<FieldElement<L>>
where
L: IsField,
F: IsSubFieldOf<L>,
{
type Output = Polynomial<FieldElement<L>>;

fn add(self, other: FieldElement<F>) -> Polynomial<FieldElement<L>> {
&self + &other
}
}

impl<F, L> ops::Add<FieldElement<F>> for &Polynomial<FieldElement<L>>
where
L: IsField,
F: IsSubFieldOf<L>,
{
type Output = Polynomial<FieldElement<L>>;

fn add(self, other: FieldElement<F>) -> Polynomial<FieldElement<L>> {
self + &other
}
}

impl<F, L> ops::Add<&FieldElement<F>> for Polynomial<FieldElement<L>>
where
L: IsField,
F: IsSubFieldOf<L>,
{
type Output = Polynomial<FieldElement<L>>;

fn add(self, other: &FieldElement<F>) -> Polynomial<FieldElement<L>> {
&self + other
}
}

/* Addition field element at right */
impl<F, L> ops::Add<&Polynomial<FieldElement<L>>> for &FieldElement<F>
where
L: IsField,
F: IsSubFieldOf<L>,
{
type Output = Polynomial<FieldElement<L>>;

fn add(self, other: &Polynomial<FieldElement<L>>) -> Polynomial<FieldElement<L>> {
Polynomial::new_monomial(self.clone(), 0) + other
}
}

impl<F, L> ops::Add<Polynomial<FieldElement<L>>> for FieldElement<F>
where
L: IsField,
F: IsSubFieldOf<L>,
{
type Output = Polynomial<FieldElement<L>>;

fn add(self, other: Polynomial<FieldElement<L>>) -> Polynomial<FieldElement<L>> {
&self + &other
}
}

impl<F, L> ops::Add<Polynomial<FieldElement<L>>> for &FieldElement<F>
where
L: IsField,
F: IsSubFieldOf<L>,
{
type Output = Polynomial<FieldElement<L>>;

fn add(self, other: Polynomial<FieldElement<L>>) -> Polynomial<FieldElement<L>> {
self + &other
}
}

impl<F, L> ops::Add<&Polynomial<FieldElement<L>>> for FieldElement<F>
where
L: IsField,
F: IsSubFieldOf<L>,
{
type Output = Polynomial<FieldElement<L>>;

fn add(self, other: &Polynomial<FieldElement<L>>) -> Polynomial<FieldElement<L>> {
&self + other
}
}

/* Substraction field element at left */
impl<F, L> ops::Sub<&FieldElement<F>> for &Polynomial<FieldElement<L>>
where
Expand Down Expand Up @@ -580,55 +327,6 @@ where
}
}

/* Substraction field element at right */
impl<F, L> ops::Sub<&Polynomial<FieldElement<L>>> for &FieldElement<F>
where
L: IsField,
F: IsSubFieldOf<L>,
{
type Output = Polynomial<FieldElement<L>>;

fn sub(self, other: &Polynomial<FieldElement<L>>) -> Polynomial<FieldElement<L>> {
Polynomial::new_monomial(self.clone(), 0) - other
}
}

impl<F, L> ops::Sub<Polynomial<FieldElement<L>>> for FieldElement<F>
where
L: IsField,
F: IsSubFieldOf<L>,
{
type Output = Polynomial<FieldElement<L>>;

fn sub(self, other: Polynomial<FieldElement<L>>) -> Polynomial<FieldElement<L>> {
&self - &other
}
}

impl<F, L> ops::Sub<Polynomial<FieldElement<L>>> for &FieldElement<F>
where
L: IsField,
F: IsSubFieldOf<L>,
{
type Output = Polynomial<FieldElement<L>>;

fn sub(self, other: Polynomial<FieldElement<L>>) -> Polynomial<FieldElement<L>> {
self - &other
}
}

impl<F, L> ops::Sub<&Polynomial<FieldElement<L>>> for FieldElement<F>
where
L: IsField,
F: IsSubFieldOf<L>,
{
type Output = Polynomial<FieldElement<L>>;

fn sub(self, other: &Polynomial<FieldElement<L>>) -> Polynomial<FieldElement<L>> {
&self - other
}
}

#[derive(Debug)]
pub enum InterpolateError {
UnequalLengths(usize, usize),
Expand Down
17 changes: 0 additions & 17 deletions crypto/math/src/tests/polynomial_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -116,10 +116,6 @@ mod tests {
Polynomial::new(&[FE::new(4), FE::new(6), FE::new(8)])
}

fn polynomial_b_minus_a() -> Polynomial<FE> {
Polynomial::new(&[FE::new(2), FE::new(2), FE::new(2)])
}

#[test]
fn adding_a_and_b_equals_a_plus_b() {
assert_eq!(polynomial_a() + polynomial_b(), polynomial_a_plus_b());
Expand Down Expand Up @@ -160,19 +156,6 @@ mod tests {
assert_ne!(-polynomial_a(), polynomial_a());
}

#[test]
fn substracting_5_5_gives_0() {
let p1 = Polynomial::new(&[FE::new(5)]);
let p2 = Polynomial::new(&[FE::new(5)]);
let p3 = Polynomial::new(&[FE::new(0)]);
assert_eq!(p1 - p2, p3);
}

#[test]
fn substracting_b_and_a_equals_b_minus_a() {
assert_eq!(polynomial_b() - polynomial_a(), polynomial_b_minus_a());
}

#[test]
fn constructor_removes_zeros_at_the_end_of_polynomial() {
let p1 = Polynomial::new(&[FE::new(3), FE::new(4), FE::new(0)]);
Expand Down
Loading