summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--numpy/polynomial/chebyshev.py42
-rw-r--r--numpy/polynomial/hermite.py42
-rw-r--r--numpy/polynomial/hermite_e.py42
-rw-r--r--numpy/polynomial/laguerre.py42
-rw-r--r--numpy/polynomial/legendre.py42
-rw-r--r--numpy/polynomial/polynomial.py46
6 files changed, 190 insertions, 66 deletions
diff --git a/numpy/polynomial/chebyshev.py b/numpy/polynomial/chebyshev.py
index c4d0161a2..bbf437525 100644
--- a/numpy/polynomial/chebyshev.py
+++ b/numpy/polynomial/chebyshev.py
@@ -1200,7 +1200,14 @@ def chebval2d(x, y, c):
chebval, chebgrid2d, chebval3d, chebgrid3d
"""
- return chebval(y, chebval(x, c), False)
+ try:
+ x, y = np.array((x, y), copy=0)
+ except:
+ raise ValueError('x, y are incompatible')
+
+ c = chebval(x, c)
+ c = chebval(y, c, tensor=False)
+ return c
def chebgrid2d(x, y, c):
@@ -1240,7 +1247,9 @@ def chebgrid2d(x, y, c):
chebval, chebval2d, chebval3d, chebgrid3d
"""
- return chebval(y, chebval(x, c))
+ c = chebval(x, c)
+ c = chebval(y, c)
+ return c
def chebval3d(x, y, z, c):
@@ -1277,7 +1286,15 @@ def chebval3d(x, y, z, c):
chebval, chebval2d, chebgrid2d, chebgrid3d
"""
- return chebval(z, chebval2d(x, y, c), False)
+ try:
+ x, y, z = np.array((x, y, z), copy=0)
+ except:
+ raise ValueError('x, y, z are incompatible')
+
+ c = chebval(x, c)
+ c = chebval(y, c, tensor=False)
+ c = chebval(z, c, tensor=False)
+ return c
def chebgrid3d(x, y, z, c):
@@ -1319,7 +1336,10 @@ def chebgrid3d(x, y, z, c):
chebval, chebval2d, chebgrid2d, chebval3d
"""
- return chebval(z, chebgrid2d(x, y, c))
+ c = chebval(x, c)
+ c = chebval(y, c)
+ c = chebval(z, c)
+ return c
def chebvander(x, deg) :
@@ -1401,12 +1421,12 @@ def chebvander2d(x, y, deg) :
is_valid = [id == d and id >= 0 for id, d in zip(ideg, deg)]
if is_valid != [1, 1]:
raise ValueError("degrees must be non-negative integers")
- degx, degy = deg
+ degx, degy = ideg
x, y = np.array((x, y), copy=0) + 0.0
vx = chebvander(x, degx)
vy = chebvander(y, degy)
- v = np.einsum("...i,...j->...ij", vx, vy)
+ v = vx[..., None]*vy[..., None, :]
return v.reshape(v.shape[:-2] + (-1,))
@@ -1447,13 +1467,13 @@ def chebvander3d(x, y, z, deg) :
is_valid = [id == d and id >= 0 for id, d in zip(ideg, deg)]
if is_valid != [1, 1, 1]:
raise ValueError("degrees must be non-negative integers")
- degx, degy, degz = deg
+ degx, degy, degz = ideg
x, y, z = np.array((x, y, z), copy=0) + 0.0
- vx = chebvander(x, deg_x)
- vy = chebvander(y, deg_y)
- vz = chebvander(z, deg_z)
- v = np.einsum("...i,...j,...k->...ijk", vx, vy, vz)
+ vx = chebvander(x, degx)
+ vy = chebvander(y, degy)
+ vz = chebvander(z, degz)
+ v = vx[..., None, None]*vy[..., None, :, None]*vz[..., None, None, :]
return v.reshape(v.shape[:-3] + (-1,))
diff --git a/numpy/polynomial/hermite.py b/numpy/polynomial/hermite.py
index 340e6009b..fadd866ee 100644
--- a/numpy/polynomial/hermite.py
+++ b/numpy/polynomial/hermite.py
@@ -965,7 +965,14 @@ def hermval2d(x, y, c):
hermval, hermgrid2d, hermval3d, hermgrid3d
"""
- return hermval(y, hermval(x, c), False)
+ try:
+ x, y = np.array((x, y), copy=0)
+ except:
+ raise ValueError('x, y are incompatible')
+
+ c = hermval(x, c)
+ c = hermval(y, c, tensor=False)
+ return c
def hermgrid2d(x, y, c):
@@ -1005,7 +1012,9 @@ def hermgrid2d(x, y, c):
hermval, hermval2d, hermval3d, hermgrid3d
"""
- return hermval(y, hermval(x, c))
+ c = hermval(x, c)
+ c = hermval(y, c)
+ return c
def hermval3d(x, y, z, c):
@@ -1042,7 +1051,15 @@ def hermval3d(x, y, z, c):
hermval, hermval2d, hermgrid2d, hermgrid3d
"""
- return hermval(z, hermval2d(x, y, c), False)
+ try:
+ x, y, z = np.array((x, y, z), copy=0)
+ except:
+ raise ValueError('x, y, z are incompatible')
+
+ c = hermval(x, c)
+ c = hermval(y, c, tensor=False)
+ c = hermval(z, c, tensor=False)
+ return c
def hermgrid3d(x, y, z, c):
@@ -1084,7 +1101,10 @@ def hermgrid3d(x, y, z, c):
hermval, hermval2d, hermgrid2d, hermval3d
"""
- return hermval(z, hermgrid2d(x, y, c))
+ c = hermval(x, c)
+ c = hermval(y, c)
+ c = hermval(z, c)
+ return c
def hermvander(x, deg) :
@@ -1174,12 +1194,12 @@ def hermvander2d(x, y, deg) :
is_valid = [id == d and id >= 0 for id, d in zip(ideg, deg)]
if is_valid != [1, 1]:
raise ValueError("degrees must be non-negative integers")
- degx, degy = deg
+ degx, degy = ideg
x, y = np.array((x, y), copy=0) + 0.0
vx = hermvander(x, degx)
vy = hermvander(y, degy)
- v = np.einsum("...i,...j->...ij", vx, vy)
+ v = vx[..., None]*vy[..., None, :]
return v.reshape(v.shape[:-2] + (-1,))
@@ -1220,13 +1240,13 @@ def hermvander3d(x, y, z, deg) :
is_valid = [id == d and id >= 0 for id, d in zip(ideg, deg)]
if is_valid != [1, 1, 1]:
raise ValueError("degrees must be non-negative integers")
- degx, degy, degz = deg
+ degx, degy, degz = ideg
x, y, z = np.array((x, y, z), copy=0) + 0.0
- vx = hermvander(x, deg_x)
- vy = hermvander(y, deg_y)
- vz = hermvander(z, deg_z)
- v = np.einsum("...i,...j,...k->...ijk", vx, vy, vz)
+ vx = hermvander(x, degx)
+ vy = hermvander(y, degy)
+ vz = hermvander(z, degz)
+ v = vx[..., None, None]*vy[..., None, :, None]*vz[..., None, None, :]
return v.reshape(v.shape[:-3] + (-1,))
diff --git a/numpy/polynomial/hermite_e.py b/numpy/polynomial/hermite_e.py
index ab9e397be..97749cca4 100644
--- a/numpy/polynomial/hermite_e.py
+++ b/numpy/polynomial/hermite_e.py
@@ -962,7 +962,14 @@ def hermeval2d(x, y, c):
hermeval, hermegrid2d, hermeval3d, hermegrid3d
"""
- return hermeval(y, hermeval(x, c), False)
+ try:
+ x, y = np.array((x, y), copy=0)
+ except:
+ raise ValueError('x, y are incompatible')
+
+ c = hermeval(x, c)
+ c = hermeval(y, c, tensor=False)
+ return c
def hermegrid2d(x, y, c):
@@ -1002,7 +1009,9 @@ def hermegrid2d(x, y, c):
hermeval, hermeval2d, hermeval3d, hermegrid3d
"""
- return hermeval(y, hermeval(x, c))
+ c = hermeval(x, c)
+ c = hermeval(y, c)
+ return c
def hermeval3d(x, y, z, c):
@@ -1039,7 +1048,15 @@ def hermeval3d(x, y, z, c):
hermeval, hermeval2d, hermegrid2d, hermegrid3d
"""
- return hermeval(z, hermeval2d(x, y, c), False)
+ try:
+ x, y, z = np.array((x, y, z), copy=0)
+ except:
+ raise ValueError('x, y, z are incompatible')
+
+ c = hermeval(x, c)
+ c = hermeval(y, c, tensor=False)
+ c = hermeval(z, c, tensor=False)
+ return c
def hermegrid3d(x, y, z, c):
@@ -1081,7 +1098,10 @@ def hermegrid3d(x, y, z, c):
hermeval, hermeval2d, hermegrid2d, hermeval3d
"""
- return hermeval(z, hermegrid2d(x, y, c))
+ c = hermeval(x, c)
+ c = hermeval(y, c)
+ c = hermeval(z, c)
+ return c
def hermevander(x, deg) :
@@ -1170,12 +1190,12 @@ def hermevander2d(x, y, deg) :
is_valid = [id == d and id >= 0 for id, d in zip(ideg, deg)]
if is_valid != [1, 1]:
raise ValueError("degrees must be non-negative integers")
- degx, degy = deg
+ degx, degy = ideg
x, y = np.array((x, y), copy=0) + 0.0
vx = hermevander(x, degx)
vy = hermevander(y, degy)
- v = np.einsum("...i,...j->...ij", vx, vy)
+ v = vx[..., None]*vy[..., None, :]
return v.reshape(v.shape[:-2] + (-1,))
@@ -1216,13 +1236,13 @@ def hermevander3d(x, y, z, deg) :
is_valid = [id == d and id >= 0 for id, d in zip(ideg, deg)]
if is_valid != [1, 1, 1]:
raise ValueError("degrees must be non-negative integers")
- degx, degy, degz = deg
+ degx, degy, degz = ideg
x, y, z = np.array((x, y, z), copy=0) + 0.0
- vx = hermevander(x, deg_x)
- vy = hermevander(y, deg_y)
- vz = hermevander(z, deg_z)
- v = np.einsum("...i,...j,...k->...ijk", vx, vy, vz)
+ vx = hermevander(x, degx)
+ vy = hermevander(y, degy)
+ vz = hermevander(z, degz)
+ v = vx[..., None, None]*vy[..., None, :, None]*vz[..., None, None, :]
return v.reshape(v.shape[:-3] + (-1,))
diff --git a/numpy/polynomial/laguerre.py b/numpy/polynomial/laguerre.py
index 07f943bb1..5f9d2d214 100644
--- a/numpy/polynomial/laguerre.py
+++ b/numpy/polynomial/laguerre.py
@@ -965,7 +965,14 @@ def lagval2d(x, y, c):
lagval, laggrid2d, lagval3d, laggrid3d
"""
- return lagval(y, lagval(x, c), False)
+ try:
+ x, y = np.array((x, y), copy=0)
+ except:
+ raise ValueError('x, y are incompatible')
+
+ c = lagval(x, c)
+ c = lagval(y, c, tensor=False)
+ return c
def laggrid2d(x, y, c):
@@ -1005,7 +1012,9 @@ def laggrid2d(x, y, c):
lagval, lagval2d, lagval3d, laggrid3d
"""
- return lagval(y, lagval(x, c))
+ c = lagval(x, c)
+ c = lagval(y, c)
+ return c
def lagval3d(x, y, z, c):
@@ -1042,7 +1051,15 @@ def lagval3d(x, y, z, c):
lagval, lagval2d, laggrid2d, laggrid3d
"""
- return lagval(z, lagval2d(x, y, c), False)
+ try:
+ x, y, z = np.array((x, y, z), copy=0)
+ except:
+ raise ValueError('x, y, z are incompatible')
+
+ c = lagval(x, c)
+ c = lagval(y, c, tensor=False)
+ c = lagval(z, c, tensor=False)
+ return c
def laggrid3d(x, y, z, c):
@@ -1084,7 +1101,10 @@ def laggrid3d(x, y, z, c):
lagval, lagval2d, laggrid2d, lagval3d
"""
- return lagval(z, laggrid2d(x, y, c))
+ c = lagval(x, c)
+ c = lagval(y, c)
+ c = lagval(z, c)
+ return c
def lagvander(x, deg) :
@@ -1173,12 +1193,12 @@ def lagvander2d(x, y, deg) :
is_valid = [id == d and id >= 0 for id, d in zip(ideg, deg)]
if is_valid != [1, 1]:
raise ValueError("degrees must be non-negative integers")
- degx, degy = deg
+ degx, degy = ideg
x, y = np.array((x, y), copy=0) + 0.0
vx = lagvander(x, degx)
vy = lagvander(y, degy)
- v = np.einsum("...i,...j->...ij", vx, vy)
+ v = vx[..., None]*vy[..., None, :]
return v.reshape(v.shape[:-2] + (-1,))
@@ -1219,13 +1239,13 @@ def lagvander3d(x, y, z, deg) :
is_valid = [id == d and id >= 0 for id, d in zip(ideg, deg)]
if is_valid != [1, 1, 1]:
raise ValueError("degrees must be non-negative integers")
- degx, degy, degz = deg
+ degx, degy, degz = ideg
x, y, z = np.array((x, y, z), copy=0) + 0.0
- vx = lagvander(x, deg_x)
- vy = lagvander(y, deg_y)
- vz = lagvander(z, deg_z)
- v = np.einsum("...i,...j,...k->...ijk", vx, vy, vz)
+ vx = lagvander(x, degx)
+ vy = lagvander(y, degy)
+ vz = lagvander(z, degz)
+ v = vx[..., None, None]*vy[..., None, :, None]*vz[..., None, None, :]
return v.reshape(v.shape[:-3] + (-1,))
diff --git a/numpy/polynomial/legendre.py b/numpy/polynomial/legendre.py
index 8ef439ab4..5f956b112 100644
--- a/numpy/polynomial/legendre.py
+++ b/numpy/polynomial/legendre.py
@@ -978,7 +978,14 @@ def legval2d(x, y, c):
legval, leggrid2d, legval3d, leggrid3d
"""
- return legval(y, legval(x, c), False)
+ try:
+ x, y = np.array((x, y), copy=0)
+ except:
+ raise ValueError('x, y are incompatible')
+
+ c = legval(x, c)
+ c = legval(y, c, tensor=False)
+ return c
def leggrid2d(x, y, c):
@@ -1018,7 +1025,9 @@ def leggrid2d(x, y, c):
legval, legval2d, legval3d, leggrid3d
"""
- return legval(y, legval(x, c))
+ c = legval(x, c)
+ c = legval(y, c)
+ return c
def legval3d(x, y, z, c):
@@ -1055,7 +1064,15 @@ def legval3d(x, y, z, c):
legval, legval2d, leggrid2d, leggrid3d
"""
- return legval(z, legval2d(x, y, c), False)
+ try:
+ x, y, z = np.array((x, y, z), copy=0)
+ except:
+ raise ValueError('x, y, z are incompatible')
+
+ c = legval(x, c)
+ c = legval(y, c, tensor=False)
+ c = legval(z, c, tensor=False)
+ return c
def leggrid3d(x, y, z, c):
@@ -1097,7 +1114,10 @@ def leggrid3d(x, y, z, c):
legval, legval2d, leggrid2d, legval3d
"""
- return legval(z, leggrid2d(x, y, c))
+ c = legval(x, c)
+ c = legval(y, c)
+ c = legval(z, c)
+ return c
def legvander(x, deg) :
@@ -1179,12 +1199,12 @@ def legvander2d(x, y, deg) :
is_valid = [id == d and id >= 0 for id, d in zip(ideg, deg)]
if is_valid != [1, 1]:
raise ValueError("degrees must be non-negative integers")
- degx, degy = deg
+ degx, degy = ideg
x, y = np.array((x, y), copy=0) + 0.0
vx = legvander(x, degx)
vy = legvander(y, degy)
- v = np.einsum("...i,...j->...ij", vx, vy)
+ v = vx[..., None]*vy[..., None, :]
return v.reshape(v.shape[:-2] + (-1,))
@@ -1225,13 +1245,13 @@ def legvander3d(x, y, z, deg) :
is_valid = [id == d and id >= 0 for id, d in zip(ideg, deg)]
if is_valid != [1, 1, 1]:
raise ValueError("degrees must be non-negative integers")
- degx, degy, degz = deg
+ degx, degy, degz = ideg
x, y, z = np.array((x, y, z), copy=0) + 0.0
- vx = legvander(x, deg_x)
- vy = legvander(y, deg_y)
- vz = legvander(z, deg_z)
- v = np.einsum("...i,...j,...k->...ijk", vx, vy, vz)
+ vx = legvander(x, degx)
+ vy = legvander(y, degy)
+ vz = legvander(z, degz)
+ v = vx[..., None, None]*vy[..., None, :, None]*vz[..., None, None, :]
return v.reshape(v.shape[:-3] + (-1,))
diff --git a/numpy/polynomial/polynomial.py b/numpy/polynomial/polynomial.py
index 87acfa616..345d76233 100644
--- a/numpy/polynomial/polynomial.py
+++ b/numpy/polynomial/polynomial.py
@@ -786,7 +786,14 @@ def polyval2d(x, y, c):
polyval, polygrid2d, polyval3d, polygrid3d
"""
- return polyval(y, polyval(x, c), False)
+ try:
+ x, y = np.array((x, y), copy=0)
+ except:
+ raise ValueError('x, y are incompatible')
+
+ c = polyval(x, c)
+ c = polyval(y, c, tensor=False)
+ return c
def polygrid2d(x, y, c):
@@ -826,7 +833,9 @@ def polygrid2d(x, y, c):
polyval, polyval2d, polyval3d, polygrid3d
"""
- return polyval(y, polyval(x, c))
+ c = polyval(x, c)
+ c = polyval(y, c)
+ return c
def polyval3d(x, y, z, c):
@@ -863,7 +872,15 @@ def polyval3d(x, y, z, c):
polyval, polyval2d, polygrid2d, polygrid3d
"""
- return polyval(z, polyval2d(x, y, c), False)
+ try:
+ x, y, z = np.array((x, y, z), copy=0)
+ except:
+ raise ValueError('x, y, z are incompatible')
+
+ c = polyval(x, c)
+ c = polyval(y, c, tensor=False)
+ c = polyval(z, c, tensor=False)
+ return c
def polygrid3d(x, y, z, c):
@@ -904,7 +921,10 @@ def polygrid3d(x, y, z, c):
polyval, polyval2d, polygrid2d, polyval3d
"""
- return polyval(z, polygrid2d(x, y, c))
+ c = polyval(x, c)
+ c = polyval(y, c)
+ c = polyval(z, c)
+ return c
def polyvander(x, deg) :
@@ -986,12 +1006,14 @@ def polyvander2d(x, y, deg) :
is_valid = [id == d and id >= 0 for id, d in zip(ideg, deg)]
if is_valid != [1, 1]:
raise ValueError("degrees must be non-negative integers")
- degx, degy = deg
+ degx, degy = ideg
x, y = np.array((x, y), copy=0) + 0.0
vx = polyvander(x, degx)
vy = polyvander(y, degy)
- v = np.einsum("...i,...j->...ij", vx, vy)
+ v = vx[..., None]*vy[..., None, :]
+ # einsum bug
+ #v = np.einsum("...i,...j->...ij", vx, vy)
return v.reshape(v.shape[:-2] + (-1,))
@@ -1032,13 +1054,15 @@ def polyvander3d(x, y, z, deg) :
is_valid = [id == d and id >= 0 for id, d in zip(ideg, deg)]
if is_valid != [1, 1, 1]:
raise ValueError("degrees must be non-negative integers")
- degx, degy, degz = deg
+ degx, degy, degz = ideg
x, y, z = np.array((x, y, z), copy=0) + 0.0
- vx = polyvander(x, deg_x)
- vy = polyvander(y, deg_y)
- vz = polyvander(z, deg_z)
- v = np.einsum("...i,...j,...k->...ijk", vx, vy, vz)
+ vx = polyvander(x, degx)
+ vy = polyvander(y, degy)
+ vz = polyvander(z, degz)
+ v = vx[..., None, None]*vy[..., None, :, None]*vz[..., None, None, :]
+ # einsum bug
+ #v = np.einsum("...i, ...j, ...k->...ijk", vx, vy, vz)
return v.reshape(v.shape[:-3] + (-1,))