summaryrefslogtreecommitdiff
path: root/numpy/lib/polynomial.py
diff options
context:
space:
mode:
authorCharles Harris <charlesr.harris@gmail.com>2009-03-09 03:36:49 +0000
committerCharles Harris <charlesr.harris@gmail.com>2009-03-09 03:36:49 +0000
commiteefc1417d12af4a5b3bfa11b52ec67b9fff641ad (patch)
tree7590fef00fe3aba99983020373703c263301e465 /numpy/lib/polynomial.py
parent4a632534604d686ff9ac5a9629ce06f7c895cd1e (diff)
downloadnumpy-eefc1417d12af4a5b3bfa11b52ec67b9fff641ad.tar.gz
Fix polyint to work correctly with float, complex, and int inputs.
Fix polydiv to work correctly with float, complex, and int inputs.
Diffstat (limited to 'numpy/lib/polynomial.py')
-rw-r--r--numpy/lib/polynomial.py20
1 files changed, 12 insertions, 8 deletions
diff --git a/numpy/lib/polynomial.py b/numpy/lib/polynomial.py
index ec9b8c1f6..10fd6dd6c 100644
--- a/numpy/lib/polynomial.py
+++ b/numpy/lib/polynomial.py
@@ -239,17 +239,20 @@ def polyint(p, m=1, k=None):
if len(k) < m:
raise ValueError, \
"k must be a scalar or a rank-1 array of length 1 or >m."
+
+ truepoly = isinstance(p, poly1d)
+ p = NX.asarray(p) + 0.0
if m == 0:
+ if truepoly:
+ return poly1d(p)
return p
else:
- truepoly = isinstance(p, poly1d)
- p = NX.asarray(p)
y = NX.zeros(len(p) + 1, p.dtype)
y[:-1] = p*1.0/NX.arange(len(p), 0, -1)
y[-1] = k[0]
val = polyint(y, m - 1, k=k[1:])
if truepoly:
- val = poly1d(val)
+ return poly1d(val)
return val
def polyder(p, m=1):
@@ -710,12 +713,14 @@ def polydiv(u, v):
"""
truepoly = (isinstance(u, poly1d) or isinstance(u, poly1d))
- u = atleast_1d(u)
- v = atleast_1d(v)
+ u = atleast_1d(u) + 0.0
+ v = atleast_1d(v) + 0.0
+ # w has the common type
+ w = u[0] + v[0]
m = len(u) - 1
n = len(v) - 1
scale = 1. / v[0]
- q = NX.zeros((max(m-n+1,1),), float)
+ q = NX.zeros((max(m - n + 1, 1),), w.dtype)
r = u.copy()
for k in range(0, m-n+1):
d = scale * r[k]
@@ -724,8 +729,7 @@ def polydiv(u, v):
while NX.allclose(r[0], 0, rtol=1e-14) and (r.shape[-1] > 1):
r = r[1:]
if truepoly:
- q = poly1d(q)
- r = poly1d(r)
+ return poly1d(q), poly1d(r)
return q, r
_poly_mat = re.compile(r"[*][*]([0-9]*)")