hand
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
# Impl routines common for all backends
|
||||
from itertools import combinations_with_replacement
|
||||
from math import comb
|
||||
|
||||
def _monomial_powers_impl(ndim, degree):
|
||||
"""Return the powers for each monomial in a polynomial.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
ndim : int
|
||||
Number of variables in the polynomial.
|
||||
degree : int
|
||||
Degree of the polynomial.
|
||||
|
||||
Returns
|
||||
-------
|
||||
(nmonos, ndim) int ndarray
|
||||
Array where each row contains the powers for each variable in a
|
||||
monomial.
|
||||
|
||||
"""
|
||||
nmonos = comb(degree + ndim, ndim)
|
||||
out = [[0]*ndim for _ in range(nmonos)]
|
||||
count = 0
|
||||
for deg in range(degree + 1):
|
||||
for mono in combinations_with_replacement(range(ndim), deg):
|
||||
# `mono` is a tuple of variables in the current monomial with
|
||||
# multiplicity indicating power (e.g., (0, 1, 1) represents x*y**2)
|
||||
for var in mono:
|
||||
out[count][var] += 1
|
||||
count += 1
|
||||
return out
|
||||
Reference in New Issue
Block a user