coefficients and monomials

55 views
Skip to first unread message

Martin R

unread,
Sep 28, 2024, 1:01:44 PM9/28/24
to sage-devel
Dear all,

in https://github.com/sagemath/sage/pull/38108, which provides a solver for functional equations in lazy completions of graded algebras with basis, I (want to) use generic methods, so that I do not have to write special code for every other algebra.  Here is an example which I find a bit depressing:

sage: s = SymmetricFunctions(QQ).s()
sage: f = (s[1,1] + s[2])^2
sage: f.monomial_coefficients()
{[2, 1, 1]: 3, [2, 2]: 2, [1, 1, 1, 1]: 1, [3, 1]: 3, [4]: 1}
sage: list(f)
[([2, 1, 1], 3), ([2, 2], 2), ([1, 1, 1, 1], 1), ([3, 1], 3), ([4], 1)]
sage: s.monomial(Partition([2,1,1]))
s[2, 1, 1]

This works for algebras subclassing CombinatorialFreeModule, for example symmetric functions and the free algebra.

However, it will not work for polynomials:

sage: R.<x,y> = QQ[]
sage: f = (x+2*y)^2
sage: list(f)
[(1, x^2), (4, x*y), (4, y^2)]
sage: R.monomial(0,2)
y^2

sage: T.<x> = QQ[]
sage: t = (x+1)^2
sage: list(t)
[1, 2, 1]

Note that

* coefficient_monomials does not exist
* list gives pairs in the multivariate case, but the coefficient comes first, and a flat list in the univariate case
* monomial takes one argument for each variable, and does not accept tuples.

My question is: do we want to keep this discrepancy forever, or should we work on resolving it.

I see the following first steps:

* slightly generalize MPolynomialRing_base.monomial and to accept also a single tuple of the correct length.
* introduce a method `monomial_coefficients` which produces a dict from exponents to coefficients.

Any opinions?

Martin R

unread,
Sep 28, 2024, 3:17:27 PM9/28/24
to sage-devel
This very first step looked easy, I have done it in https://github.com/sagemath/sage/pull/38729.  Waiting for the testbots.

Martin
Reply all
Reply to author
Forward
0 new messages