| 1234567891011121314151617181920212223242526272829303132 |
- # 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
|