summaryrefslogtreecommitdiff
path: root/numpy/polynomial/polyutils.py
diff options
context:
space:
mode:
authorCharles Harris <charlesr.harris@gmail.com>2019-03-17 13:29:20 -0600
committerGitHub <noreply@github.com>2019-03-17 13:29:20 -0600
commit1a92b74a5387f676dd389ffd91054e8c2733f413 (patch)
tree6314c451db19663cf921c097e5748f6248d7db93 /numpy/polynomial/polyutils.py
parent06da877ceae914a875bd1a55cd8e271332358803 (diff)
parentddbc31c2d71285f426dc16fab8ac2e00ffe6c1f8 (diff)
downloadnumpy-1a92b74a5387f676dd389ffd91054e8c2733f413.tar.gz
Merge pull request #13146 from eric-wieser/poly-pow
MAINT: Unify polynomial power functions
Diffstat (limited to 'numpy/polynomial/polyutils.py')
-rw-r--r--numpy/polynomial/polyutils.py33
1 files changed, 33 insertions, 0 deletions
diff --git a/numpy/polynomial/polyutils.py b/numpy/polynomial/polyutils.py
index 1a73f47d8..5128e35e0 100644
--- a/numpy/polynomial/polyutils.py
+++ b/numpy/polynomial/polyutils.py
@@ -690,6 +690,39 @@ def _fit(vander_f, x, y, deg, rcond=None, full=False, w=None):
return c
+def _pow(mul_f, c, pow, maxpower):
+ """
+ Helper function used to implement the ``<type>pow`` functions.
+
+ Parameters
+ ----------
+ vander_f : function(array_like, int) -> ndarray
+ The 1d vander function, such as ``polyvander``
+ pow, maxpower :
+ See the ``<type>pow`` functions for more detail
+ mul_f : function(array_like, array_like) -> ndarray
+ The ``<type>mul`` function, such as ``polymul``
+ """
+ # c is a trimmed copy
+ [c] = as_series([c])
+ power = int(pow)
+ if power != pow or power < 0:
+ raise ValueError("Power must be a non-negative integer.")
+ elif maxpower is not None and power > maxpower:
+ raise ValueError("Power is too large")
+ elif power == 0:
+ return np.array([1], dtype=c.dtype)
+ elif power == 1:
+ return c
+ else:
+ # This can be made more efficient by using powers of two
+ # in the usual way.
+ prd = c
+ for i in range(2, power + 1):
+ prd = mul_f(prd, c)
+ return prd
+
+
def _deprecate_as_int(x, desc):
"""
Like `operator.index`, but emits a deprecation warning when passed a float