diff options
author | Bryan Bishop <kanzure@gmail.com> | 2011-05-13 13:19:25 -0500 |
---|---|---|
committer | Bryan Bishop <kanzure@gmail.com> | 2011-05-13 13:19:25 -0500 |
commit | d75f82cc4f5bfa88cc23191b3b2fd7ae5230fb09 (patch) | |
tree | 1104854827d4ca7f446c69cc1b5a09770aab5610 | |
parent | 2acb1ced17dff260029f55f3fa30793fabe0b2f1 (diff) | |
download | lolcad-d75f82cc4f5bfa88cc23191b3b2fd7ae5230fb09.tar.gz lolcad-d75f82cc4f5bfa88cc23191b3b2fd7ae5230fb09.zip |
implemented reduce_deg
-rw-r--r-- | esolid/esolid.py | 53 |
1 files changed, 50 insertions, 3 deletions
diff --git a/esolid/esolid.py b/esolid/esolid.py index d4b9a82..f36daa4 100644 --- a/esolid/esolid.py +++ b/esolid/esolid.py @@ -96,10 +96,10 @@ class K_RATPOLY: def index_to_powers(self, index): """returns p = (p[0], p1[1], ..., p[num_vars - 1] s.t. coeffs[i] is the coefficient of the monomial X^p of *this.""" - assert i < len(self.coeffs) + assert index < len(self.coeffs) if len(self.degree) > 0: - j = i + j = index p = [None] * len(self.degree) k = len(self.degree) - 1 @@ -158,8 +158,55 @@ class K_RATPOLY: to max. degrees in X_0, X_1, ..., X_{num_vars - 1}, resp. returns True if some deg[i] is reduced, and False otherwise.""" + #locals: i, j, k, l, d, p, nc, c reduced = False - raise NotImplementedError, bryan_message + + if self.num_vars > 0: + d = [0] * self.num_vars + + i = 0 + while i < self.num_coeffs: + p = self.index_to_powers(i) + + if sgn(self.coeffs[i]) and p: + j = 0 + while j < self.num_vars: + if d[j] < p[j]: + d[j] = p[j] + j+= 1 + i += 1 + + i = 0 + while not reduced and i < self.num_vars: + if d[i] < self.degree[i]: reduced = True + else: #if d[i] >= self.deg[i] + i += 1 + + if reduced: + i = 0 + nc = 1 + while i < self.num_vars: + nc *= d[i] + 1 + i+= 1 + + c = [None] * nc + i = 0 + while i < self.num_coeffs: + if sgn(self.coeffs[i]): + p = self.index_to_powers(i) + j = k = 0 + l = nc + while k < self.num_vars: + assert p[k] <= d[k] + l /= d[k] + 1 + j += l * (d[k] - p[k]) + k += 1 + c[j] = self.coeffs[i] + i+= 1 + + self.num_coeffs = nc + self.coeffs = c + self.deg = d return reduced def add_var(self, i): """returns a polynomial of num_vars + 1 variables of |