schubmult

schubmult is a python package written by Matt Samuel for computing structure constants of Schubert polynomials. It handles ordinary Schubert polynomials, double Schubert polynomials in the same set of variables (expressed positively), and double Schubert polynomials in different sets of variables. To get the latest version,

pip install schubmult

or

pip install schubmult --upgrade

if you already have it. This will install three scripts, schubmult_py (so as not to conflict with the existing software schubmult in lrcalc by Anders Buch), schubmult_double, and schubmult_yz. Since it is written in python, it is essentially platform-independent. Example uses:

See the latest version on https://pypi.org/project/schubmult/ and the GitHub project on https://github.com/matthematics/schubmult.

New feature in version 1.1.1 for all three scripts: represent permutations using the Lehmer code.

For questions, comments, or suggestions for improvements, mail to schubmult@gmail.com.

For an explanation of what Schubert polynomials are, see Per Alexandersonn’s site at symmetricfunctions.com (Schubert polynomials).

Speed improvements in version 1.0.16

There are some cases when schubmult from lrcalc is faster than schubmult_py. However, the opposite is almost always true, at least in the cases I’ve tested, especially large ones. For the example on the pypi page, we have

For a more extreme example:

schubmult_py took 44.6 seconds, schubmult took 29 minutes, 41 seconds. For an even more extreme example:

schubmult_py took 18.6 seconds, and schubmult took 68 minutes, 32 seconds.

The reason for the speed difference is likely because schubmult seems to be using Monk’s formula from looking at the code, whereas schubmult_py uses the Pieri formula for elementary symmetric polynomials. In the ordinary Schubert polynomial case the Pieri formula is due to Sottile. For double Schubert polynomials, the Pieri formula comes from my paper “A Molev-Sagan type formula for double Schubert polynomials,” which will be publicly available shortly. For reference, see the slides of my talk on October 2nd, 2023 and the video (part 1 part 2).

--display-positive

schubmult_yz has an option --display-positive to display the result positively. This is not known to always be possible. It will exit with error if it finds a counterexample.

Example uses of schubmult – computing double Schubert polynomials themselves

Let’s say you want to compute the double Schubert polynomial corresponding to the permutation 1432. You can do that with schubmult_yz by executing
schubmult_yz 1 2 - 1 4 3 2
You then take the coefficient of the permutation (1,2).

What is this doing exactly? When the first permutation is the identity, this is the same as multiplying 1 by the second double Schubert polynomial. The result for each coefficient is just the divided difference applied to the double Schubert polynomial. In particular, for the permutation (1,2), it is the double Schubert polynomial itself.

With version 1.0.18, this is a positive formula with the --display-positive option.

Coproducts

Version 1.1.0 adds coproducts to schubmult_py. You pass the -coprod argument, a permutation, a dash, then the set of indices you would like to split the polynomial on. For example

schubmult_py -coprod 1 3 5 7 2 4 6 - 2 4

splits the Schubert polynomial corresponding to the permutation 1357246 on the indices 2 and 4. In the output, the first Schubert polynomial is in the variables x_2,x_4 and it is expressed in a product with the second polynomial, here in the variables x_1,x_3.

Coproducts can also be computed for schubmult_double and schubmult_yz as of version 1.1.3. See the video on product-coproduct duality for explanation.

The Lehmer code

As of version 1.1.1, all products and coproducts can be computed representing the permutations with the Lehmer code via the -code option.

Related papers

Matthew J. Samuel, A Molev-Sagan type formula for double Schubert polynomials, Journal of Pure and Applied Algebra, Volume 228, Issue 7, 2024.

Related videos

A Molev-Sagan type formula for double Schubert polynomials (part 1)

A Molev-Sagan type formula for double Schubert polynomials (part 2)

A dual Pieri formula for double Schubert polynomials in different sets of coefficient variables

Product-coproduct duality for double Schubert polynomials

A Pieri formula for multiplying double Schubert polynomials by certain factorial Schur polynomials