summaryrefslogtreecommitdiff
path: root/numpy
diff options
context:
space:
mode:
authorEric Wieser <wieser.eric@gmail.com>2019-03-12 21:17:10 -0700
committerGitHub <noreply@github.com>2019-03-12 21:17:10 -0700
commita1d6cf7c319ad89988f03a1478783aaf0630a27c (patch)
tree367de7c41c411e1ac357777d428b3362ac65dd61 /numpy
parent35a905f85e6efef6d3292103e151dc3002c72406 (diff)
parentfcea19a3dd586bbf9d62719de551ac75d3b4e17a (diff)
downloadnumpy-a1d6cf7c319ad89988f03a1478783aaf0630a27c.tar.gz
Merge pull request #13107 from eric-wieser/simplify-val-nd
MAINT: Unify polynomial valnd functions
Diffstat (limited to 'numpy')
-rw-r--r--numpy/polynomial/chebyshev.py28
-rw-r--r--numpy/polynomial/hermite.py28
-rw-r--r--numpy/polynomial/hermite_e.py28
-rw-r--r--numpy/polynomial/laguerre.py28
-rw-r--r--numpy/polynomial/legendre.py28
-rw-r--r--numpy/polynomial/polynomial.py28
-rw-r--r--numpy/polynomial/polyutils.py48
7 files changed, 72 insertions, 144 deletions
diff --git a/numpy/polynomial/chebyshev.py b/numpy/polynomial/chebyshev.py
index 70527ec79..8eb365de7 100644
--- a/numpy/polynomial/chebyshev.py
+++ b/numpy/polynomial/chebyshev.py
@@ -1224,14 +1224,7 @@ def chebval2d(x, y, c):
.. versionadded:: 1.7.0
"""
- try:
- x, y = np.array((x, y), copy=0)
- except Exception:
- raise ValueError('x, y are incompatible')
-
- c = chebval(x, c)
- c = chebval(y, c, tensor=False)
- return c
+ return pu._valnd(chebval, c, x, y)
def chebgrid2d(x, y, c):
@@ -1284,9 +1277,7 @@ def chebgrid2d(x, y, c):
.. versionadded:: 1.7.0
"""
- c = chebval(x, c)
- c = chebval(y, c)
- return c
+ return pu._gridnd(chebval, c, x, y)
def chebval3d(x, y, z, c):
@@ -1337,15 +1328,7 @@ def chebval3d(x, y, z, c):
.. versionadded:: 1.7.0
"""
- try:
- x, y, z = np.array((x, y, z), copy=0)
- except Exception:
- 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
+ return pu._valnd(chebval, c, x, y, z)
def chebgrid3d(x, y, z, c):
@@ -1401,10 +1384,7 @@ def chebgrid3d(x, y, z, c):
.. versionadded:: 1.7.0
"""
- c = chebval(x, c)
- c = chebval(y, c)
- c = chebval(z, c)
- return c
+ return pu._gridnd(chebval, c, x, y, z)
def chebvander(x, deg):
diff --git a/numpy/polynomial/hermite.py b/numpy/polynomial/hermite.py
index 80cbbef0b..3e0e92cb2 100644
--- a/numpy/polynomial/hermite.py
+++ b/numpy/polynomial/hermite.py
@@ -981,14 +981,7 @@ def hermval2d(x, y, c):
.. versionadded:: 1.7.0
"""
- try:
- x, y = np.array((x, y), copy=0)
- except Exception:
- raise ValueError('x, y are incompatible')
-
- c = hermval(x, c)
- c = hermval(y, c, tensor=False)
- return c
+ return pu._valnd(hermval, c, x, y)
def hermgrid2d(x, y, c):
@@ -1041,9 +1034,7 @@ def hermgrid2d(x, y, c):
.. versionadded:: 1.7.0
"""
- c = hermval(x, c)
- c = hermval(y, c)
- return c
+ return pu._gridnd(hermval, c, x, y)
def hermval3d(x, y, z, c):
@@ -1094,15 +1085,7 @@ def hermval3d(x, y, z, c):
.. versionadded:: 1.7.0
"""
- try:
- x, y, z = np.array((x, y, z), copy=0)
- except Exception:
- 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
+ return pu._valnd(hermval, c, x, y, z)
def hermgrid3d(x, y, z, c):
@@ -1158,10 +1141,7 @@ def hermgrid3d(x, y, z, c):
.. versionadded:: 1.7.0
"""
- c = hermval(x, c)
- c = hermval(y, c)
- c = hermval(z, c)
- return c
+ return pu._gridnd(hermval, c, x, y, z)
def hermvander(x, deg):
diff --git a/numpy/polynomial/hermite_e.py b/numpy/polynomial/hermite_e.py
index 282d5da90..b28881013 100644
--- a/numpy/polynomial/hermite_e.py
+++ b/numpy/polynomial/hermite_e.py
@@ -975,14 +975,7 @@ def hermeval2d(x, y, c):
.. versionadded:: 1.7.0
"""
- try:
- x, y = np.array((x, y), copy=0)
- except Exception:
- raise ValueError('x, y are incompatible')
-
- c = hermeval(x, c)
- c = hermeval(y, c, tensor=False)
- return c
+ return pu._valnd(hermeval, c, x, y)
def hermegrid2d(x, y, c):
@@ -1035,9 +1028,7 @@ def hermegrid2d(x, y, c):
.. versionadded:: 1.7.0
"""
- c = hermeval(x, c)
- c = hermeval(y, c)
- return c
+ return pu._gridnd(hermeval, c, x, y)
def hermeval3d(x, y, z, c):
@@ -1088,15 +1079,7 @@ def hermeval3d(x, y, z, c):
.. versionadded:: 1.7.0
"""
- try:
- x, y, z = np.array((x, y, z), copy=0)
- except Exception:
- 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
+ return pu._valnd(hermeval, c, x, y, z)
def hermegrid3d(x, y, z, c):
@@ -1152,10 +1135,7 @@ def hermegrid3d(x, y, z, c):
.. versionadded:: 1.7.0
"""
- c = hermeval(x, c)
- c = hermeval(y, c)
- c = hermeval(z, c)
- return c
+ return pu._gridnd(hermeval, c, x, y, z)
def hermevander(x, deg):
diff --git a/numpy/polynomial/laguerre.py b/numpy/polynomial/laguerre.py
index 337c71dd3..575c5b2bc 100644
--- a/numpy/polynomial/laguerre.py
+++ b/numpy/polynomial/laguerre.py
@@ -981,14 +981,7 @@ def lagval2d(x, y, c):
.. versionadded:: 1.7.0
"""
- try:
- x, y = np.array((x, y), copy=0)
- except Exception:
- raise ValueError('x, y are incompatible')
-
- c = lagval(x, c)
- c = lagval(y, c, tensor=False)
- return c
+ return pu._valnd(lagval, c, x, y)
def laggrid2d(x, y, c):
@@ -1041,9 +1034,7 @@ def laggrid2d(x, y, c):
.. versionadded:: 1.7.0
"""
- c = lagval(x, c)
- c = lagval(y, c)
- return c
+ return pu._gridnd(lagval, c, x, y)
def lagval3d(x, y, z, c):
@@ -1094,15 +1085,7 @@ def lagval3d(x, y, z, c):
.. versionadded:: 1.7.0
"""
- try:
- x, y, z = np.array((x, y, z), copy=0)
- except Exception:
- 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
+ return pu._valnd(lagval, c, x, y, z)
def laggrid3d(x, y, z, c):
@@ -1158,10 +1141,7 @@ def laggrid3d(x, y, z, c):
.. versionadded:: 1.7.0
"""
- c = lagval(x, c)
- c = lagval(y, c)
- c = lagval(z, c)
- return c
+ return pu._gridnd(lagval, c, x, y, z)
def lagvander(x, deg):
diff --git a/numpy/polynomial/legendre.py b/numpy/polynomial/legendre.py
index 0037f3ad0..6cd4360da 100644
--- a/numpy/polynomial/legendre.py
+++ b/numpy/polynomial/legendre.py
@@ -1025,14 +1025,7 @@ def legval2d(x, y, c):
.. versionadded:: 1.7.0
"""
- try:
- x, y = np.array((x, y), copy=0)
- except Exception:
- raise ValueError('x, y are incompatible')
-
- c = legval(x, c)
- c = legval(y, c, tensor=False)
- return c
+ return pu._valnd(legval, c, x, y)
def leggrid2d(x, y, c):
@@ -1085,9 +1078,7 @@ def leggrid2d(x, y, c):
.. versionadded:: 1.7.0
"""
- c = legval(x, c)
- c = legval(y, c)
- return c
+ return pu._gridnd(legval, c, x, y)
def legval3d(x, y, z, c):
@@ -1138,15 +1129,7 @@ def legval3d(x, y, z, c):
.. versionadded:: 1.7.0
"""
- try:
- x, y, z = np.array((x, y, z), copy=0)
- except Exception:
- 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
+ return pu._valnd(legval, c, x, y, z)
def leggrid3d(x, y, z, c):
@@ -1202,10 +1185,7 @@ def leggrid3d(x, y, z, c):
.. versionadded:: 1.7.0
"""
- c = legval(x, c)
- c = legval(y, c)
- c = legval(z, c)
- return c
+ return pu._gridnd(legval, c, x, y, z)
def legvander(x, deg):
diff --git a/numpy/polynomial/polynomial.py b/numpy/polynomial/polynomial.py
index 2b6c9fd0a..9a50e02bc 100644
--- a/numpy/polynomial/polynomial.py
+++ b/numpy/polynomial/polynomial.py
@@ -910,14 +910,7 @@ def polyval2d(x, y, c):
.. versionadded:: 1.7.0
"""
- try:
- x, y = np.array((x, y), copy=0)
- except Exception:
- raise ValueError('x, y are incompatible')
-
- c = polyval(x, c)
- c = polyval(y, c, tensor=False)
- return c
+ return pu._valnd(polyval, c, x, y)
def polygrid2d(x, y, c):
@@ -970,9 +963,7 @@ def polygrid2d(x, y, c):
.. versionadded:: 1.7.0
"""
- c = polyval(x, c)
- c = polyval(y, c)
- return c
+ return pu._gridnd(polyval, c, x, y)
def polyval3d(x, y, z, c):
@@ -1023,15 +1014,7 @@ def polyval3d(x, y, z, c):
.. versionadded:: 1.7.0
"""
- try:
- x, y, z = np.array((x, y, z), copy=0)
- except Exception:
- 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
+ return pu._valnd(polyval, c, x, y, z)
def polygrid3d(x, y, z, c):
@@ -1087,10 +1070,7 @@ def polygrid3d(x, y, z, c):
.. versionadded:: 1.7.0
"""
- c = polyval(x, c)
- c = polyval(y, c)
- c = polyval(z, c)
- return c
+ return pu._gridnd(polyval, c, x, y, z)
def polyvander(x, deg):
diff --git a/numpy/polynomial/polyutils.py b/numpy/polynomial/polyutils.py
index 9482ed89f..db1cb2841 100644
--- a/numpy/polynomial/polyutils.py
+++ b/numpy/polynomial/polyutils.py
@@ -489,3 +489,51 @@ def _fromroots(line_f, mul_f, roots):
p = tmp
n = m
return p[0]
+
+
+def _valnd(val_f, c, *args):
+ """
+ Helper function used to implement the ``<type>val<n>d`` functions.
+
+ Parameters
+ ----------
+ val_f : function(array_like, array_like, tensor: bool) -> array_like
+ The ``<type>val`` function, such as ``polyval``
+ c, args :
+ See the ``<type>val<n>d`` functions for more detail
+ """
+ try:
+ args = tuple(np.array(args, copy=False))
+ except Exception:
+ # preserve the old error message
+ if len(args) == 2:
+ raise ValueError('x, y, z are incompatible')
+ elif len(args) == 3:
+ raise ValueError('x, y are incompatible')
+ else:
+ raise ValueError('ordinates are incompatible')
+
+ it = iter(args)
+ x0 = next(it)
+
+ # use tensor on only the first
+ c = val_f(x0, c)
+ for xi in it:
+ c = val_f(xi, c, tensor=False)
+ return c
+
+
+def _gridnd(val_f, c, *args):
+ """
+ Helper function used to implement the ``<type>grid<n>d`` functions.
+
+ Parameters
+ ----------
+ val_f : function(array_like, array_like, tensor: bool) -> array_like
+ The ``<type>val`` function, such as ``polyval``
+ c, args :
+ See the ``<type>grid<n>d`` functions for more detail
+ """
+ for xi in args:
+ c = val_f(xi, c)
+ return c