Skip to content

Commit ac4e7e6

Browse files
cleanup of the polynomial print code
1 parent 7087ff5 commit ac4e7e6

File tree

3 files changed

+34
-48
lines changed

3 files changed

+34
-48
lines changed

src/rewrite_system/rise/nat/polynomial/from.rs

Lines changed: 33 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use egg::RecExpr;
22
use num::rational::Ratio;
3-
use num_traits::{One, Zero};
3+
use num_traits::One;
44

55
use super::{Monomial, Polynomial, Rise};
66
use crate::rewrite_system::rise::Index;
@@ -11,43 +11,45 @@ use crate::rewrite_system::rise::Index;
1111

1212
impl From<&Polynomial> for RecExpr<Rise> {
1313
fn from(p: &Polynomial) -> Self {
14-
let mut expr = RecExpr::default();
15-
1614
if p.is_zero() {
15+
let mut expr = RecExpr::default();
1716
expr.add(Rise::Integer(0));
1817
return expr;
1918
}
2019

21-
let mut result_id = None;
22-
23-
for (monomial, coeff) in p.sorted_monomials() {
24-
// Get the monomial expression
25-
let monomial_id = monomial.append_to_expr(&mut expr);
20+
p.sorted_monomials()
21+
.iter()
22+
.fold(RecExpr::default(), |mut expr, (monomial, coeff)| {
23+
let prev_id = expr.ids().last();
2624

27-
// Handle rational coefficients
28-
let term_id = if coeff.is_one() {
29-
monomial_id
30-
} else if coeff.is_integer() {
31-
// Integer coefficient
32-
let coeff_id = expr.add(Rise::Integer(*coeff.numer()));
33-
expr.add(Rise::NatMul([coeff_id, monomial_id]))
34-
} else {
35-
// Rational coefficient: represent as (numer/denom) * monomial
36-
let numer_id = expr.add(Rise::Integer(*coeff.numer()));
37-
let denom_id = expr.add(Rise::Integer(*coeff.denom()));
38-
let frac_id = expr.add(Rise::NatDiv([numer_id, denom_id]));
39-
expr.add(Rise::NatMul([frac_id, monomial_id]))
40-
};
41-
42-
// Add to running sum
43-
result_id = Some(match result_id {
44-
None => term_id,
45-
Some(prev_id) => expr.add(Rise::NatAdd([prev_id, term_id])),
46-
});
47-
}
25+
let term_id = if monomial.is_constant() {
26+
// Handle constant
27+
expr.add(Rise::Integer(*coeff.numer()))
28+
} else {
29+
// Get the monomial expression
30+
let monomial_id = monomial.append_to_expr(&mut expr);
31+
if coeff.is_one() {
32+
monomial_id
33+
} else if coeff.is_integer() {
34+
// Integer coefficient
35+
let coeff_id = expr.add(Rise::Integer(*coeff.numer()));
36+
expr.add(Rise::NatMul([coeff_id, monomial_id]))
37+
} else {
38+
// Rational coefficient: represent as (numer/denom) * monomial
39+
let numer_id = expr.add(Rise::Integer(*coeff.numer()));
40+
let denom_id = expr.add(Rise::Integer(*coeff.denom()));
41+
let frac_id = expr.add(Rise::NatDiv([numer_id, denom_id]));
42+
expr.add(Rise::NatMul([frac_id, monomial_id]))
43+
}
44+
};
4845

49-
// result_id.unwrap();
50-
expr
46+
// Add to running sum
47+
match prev_id {
48+
None => term_id,
49+
Some(id) => expr.add(Rise::NatAdd([id, term_id])),
50+
};
51+
expr
52+
})
5153
}
5254
}
5355

src/rewrite_system/rise/nat/polynomial/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -507,7 +507,7 @@ impl UnivariateView {
507507
/// Subtract from coefficient at given degree
508508
fn subtract_from_coefficient(&mut self, degree: usize, subtract: &Polynomial) {
509509
let current = self.coefficients.entry(degree).or_default();
510-
*current = std::mem::take(current) - subtract;
510+
*current = std::mem::take(current) - subtract.clone();
511511
}
512512

513513
/// Multiply all coefficients by a polynomial

src/rewrite_system/rise/nat/polynomial/ops.rs

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,6 @@ impl std::ops::Add for Polynomial {
2222
}
2323
}
2424

25-
impl std::ops::Add<&Self> for Polynomial {
26-
type Output = Self;
27-
28-
fn add(self, rhs: &Self) -> Self {
29-
self + rhs.clone()
30-
}
31-
}
32-
3325
impl std::ops::Mul for Polynomial {
3426
type Output = Self;
3527

@@ -77,14 +69,6 @@ impl std::ops::Sub for Polynomial {
7769
}
7870
}
7971

80-
impl std::ops::Sub<&Self> for Polynomial {
81-
type Output = Self;
82-
83-
fn sub(self, rhs: &Self) -> Self::Output {
84-
self - rhs.clone()
85-
}
86-
}
87-
8872
// ============================================================================
8973
// Polynomial Equality
9074
// ============================================================================

0 commit comments

Comments
 (0)