diff --git a/sympy/polys/rootfinding.py b/sympy/polys/rootfinding.py
index 740cfce..fe97e9d 100644
--- a/sympy/polys/rootfinding.py
+++ b/sympy/polys/rootfinding.py
@@ -238,43 +238,43 @@ def roots(f, *symbols, **flags):
else:
return {}
else:
- if multiple:
- return [S.Zero] * f.degree
- else:
- return { S.Zero : f.degree }
-
- (k,), f = f.as_reduced()
-
- if k == 0:
- result = {}
+ result = { S.Zero : f.degree }
else:
- result = { S.Zero : k }
+ (k,), f = f.as_reduced()
- factors = poly_decompose(f)
-
- zeros, g = {}, factors[0]
-
- for i, h in enumerate(poly_sqf(g)):
- for zero in roots_trivial(h):
- if zeros.has_key(zero):
- zeros[zero] += i+1
- else:
- zeros[zero] = i+1
+ if k == 0:
+ result = {}
+ else:
+ result = { S.Zero : k }
- for factor in factors[1:]:
- previous, zeros = zeros.copy(), {}
+ if f.degree == 1:
+ result[roots_linear(f)[0]] = 1
+ else:
+ factors = poly_decompose(f)
- for zero, i in previous.iteritems():
- g = factor.sub_term(zero, (0,))
+ zeros, g = {}, factors[0]
- for j, h in enumerate(poly_sqf(g)):
+ for i, h in enumerate(poly_sqf(g)):
for zero in roots_trivial(h):
if zeros.has_key(zero):
- zeros[zero] += i*(j+1)
+ zeros[zero] += i+1
else:
- zeros[zero] = i*(j+1)
+ zeros[zero] = i+1
+
+ for factor in factors[1:]:
+ previous, zeros = zeros.copy(), {}
+
+ for zero, i in previous.iteritems():
+ g = factor.sub_term(zero, (0,))
+
+ for j, h in enumerate(poly_sqf(g)):
+ for zero in roots_trivial(h):
+ if zeros.has_key(zero):
+ zeros[zero] += i*(j+1)
+ else:
+ zeros[zero] = i*(j+1)
- result.update(zeros)
+ result.update(zeros)
domain = flags.get('domain', None)
diff --git a/sympy/polys/tests/test_polynomial.py b/sympy/polys/tests/test_polynomial.py
index 012fd76..abc936b 100644
--- a/sympy/polys/tests/test_polynomial.py
+++ b/sympy/polys/tests/test_polynomial.py
@@ -6,7 +6,7 @@ from sympy.polys.polynomial import *
from sympy.polys.algorithms import *
from sympy.polys.rootfinding import *
-a,b,c,x,y,z,u,v,t = symbols('abcxyzuvt')
+a,b,c,d,x,y,z,u,v,t = symbols('abcdxyzuvt')
def test_monomial_cmp():
assert monomial_lex_cmp((3,2,1), (1,2,4)) == 1
@@ -997,6 +997,9 @@ def test_roots():
S.One: 1, -S.One: 1, I: 1, -I: 1
}
+ assert roots((a+b+c)*x + a+b+c+d, x) == \
+ { (-a-b-c-d) / (a+b+c) : 1 }
+
assert roots(x**3+x**2-x+1, x, cubics=False) == {}
r1_2, r1_3, r1_9, r4_9, r19_27 = [ Rational(*r) \
--
1.6.0.2
Btw, you can use the script that I use:
http://wiki.sympy.org/wiki/Git_hg_rosetta_stone#git_-.3E_hg_conversion
when converting back to hg to push it in.
Ondrej
Yes, I will update the log (I was thinking more on how to use git in
place my old habits than on making the details properly ;)
> Btw, you can use the script that I use (...)
Can't I just push directly using git repository? Does this mean git is
just a mirror like svn and we still use hg as the main scm?
Mateusz
2008/10/12 Ondrej Certik <ond...@certik.cz>:
Technically yes.
Ondrej