schubmult 2.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. schubmult/__init__.py +1 -0
  2. schubmult/_base_argparse.py +174 -0
  3. schubmult/perm_lib.py +999 -0
  4. schubmult/sage_integration/__init__.py +25 -0
  5. schubmult/sage_integration/_fast_double_schubert_polynomial_ring.py +528 -0
  6. schubmult/sage_integration/_fast_schubert_polynomial_ring.py +356 -0
  7. schubmult/sage_integration/_indexing.py +44 -0
  8. schubmult/schubmult_double/__init__.py +18 -0
  9. schubmult/schubmult_double/__main__.py +5 -0
  10. schubmult/schubmult_double/_funcs.py +1590 -0
  11. schubmult/schubmult_double/_script.py +407 -0
  12. schubmult/schubmult_double/_vars.py +16 -0
  13. schubmult/schubmult_py/__init__.py +10 -0
  14. schubmult/schubmult_py/__main__.py +5 -0
  15. schubmult/schubmult_py/_funcs.py +111 -0
  16. schubmult/schubmult_py/_script.py +115 -0
  17. schubmult/schubmult_py/_vars.py +3 -0
  18. schubmult/schubmult_q/__init__.py +12 -0
  19. schubmult/schubmult_q/__main__.py +5 -0
  20. schubmult/schubmult_q/_funcs.py +304 -0
  21. schubmult/schubmult_q/_script.py +157 -0
  22. schubmult/schubmult_q/_vars.py +18 -0
  23. schubmult/schubmult_q_double/__init__.py +14 -0
  24. schubmult/schubmult_q_double/__main__.py +5 -0
  25. schubmult/schubmult_q_double/_funcs.py +507 -0
  26. schubmult/schubmult_q_double/_script.py +337 -0
  27. schubmult/schubmult_q_double/_vars.py +21 -0
  28. schubmult-2.0.0.dist-info/METADATA +455 -0
  29. schubmult-2.0.0.dist-info/RECORD +36 -0
  30. schubmult-2.0.0.dist-info/WHEEL +5 -0
  31. schubmult-2.0.0.dist-info/entry_points.txt +5 -0
  32. schubmult-2.0.0.dist-info/licenses/LICENSE +674 -0
  33. schubmult-2.0.0.dist-info/top_level.txt +2 -0
  34. tests/__init__.py +0 -0
  35. tests/test_fast_double_schubert.py +145 -0
  36. tests/test_fast_schubert.py +38 -0
@@ -0,0 +1,455 @@
1
+ Metadata-Version: 2.4
2
+ Name: schubmult
3
+ Version: 2.0.0
4
+ Summary: Package for algebraic computation with single, double, and quantum Schubert polynomials
5
+ Author-email: Matt Samuel <schubmult@gmail.com>
6
+ Maintainer-email: Matt Samuel <schubmult@gmail.com>
7
+ Project-URL: Homepage, http://schubmult.org
8
+ Project-URL: Repository, https://github.com/matthematics/schubmult
9
+ Keywords: Schubert,polynomial,double,algebra
10
+ Classifier: Programming Language :: Python
11
+ Requires-Python: >=3.9
12
+ Description-Content-Type: text/markdown
13
+ License-File: LICENSE
14
+ Requires-Dist: numpy
15
+ Requires-Dist: PuLP>=2.7.0
16
+ Requires-Dist: symengine>=0.14.0
17
+ Requires-Dist: sympy>=1.12
18
+ Requires-Dist: psutil
19
+ Requires-Dist: cachetools
20
+ Requires-Dist: sortedcontainers
21
+ Requires-Dist: setuptools>=71.0.0
22
+ Provides-Extra: sage
23
+ Requires-Dist: sagemath-standard; extra == "sage"
24
+ Dynamic: license-file
25
+
26
+ # schubmult
27
+
28
+ ## Program and package for rapid computation of Littlewood-Richardson coefficients of Schubert polynomials, with optional Sage integration
29
+
30
+ The main purpose of this python package is for executing scripts to compute coefficients of products of various types of Schubert polynomials. Coproducts can also be computed, as well as substitution of commuting difference operators for quantum double Schubert polynomials. Quantum multiplication also has parabolic subgroup support, computed via the Peterson-Woodward comparison theorem. **Note that except for quantum Schubert polynomial multiplication with the --basic-pieri option, the methodology for quantum/quantum double Schubert polynomials is conjectural at this time.**
31
+
32
+ [Docs to be hosted on Wiki](https://github.com/matthematics/schubmult/wiki/schubmult-home)
33
+
34
+ ## Basic script command lines, one-line notation
35
+
36
+ ### schubmult_py - ordinary Schubert polynmoials
37
+
38
+ ```
39
+ usage: schubmult_py [-h] [-np] [--code] [--mult MULT [MULT ...]] [--coprod] [--display-mode {basic,pretty,latex}]
40
+ hyphen-separated list of perms [hyphen-separated list of perms ...]
41
+
42
+ Compute products of ordinary Schubert polynomials
43
+
44
+ positional arguments:
45
+ hyphen-separated list of perms
46
+ Space-delimited permutations separated by hyphens, e. g. 3 4 1 2 - 5 1 2 4 3
47
+
48
+ options:
49
+ -h, --help show this help message and exit
50
+ -np, --no-print Compute the result but do not print it
51
+ --code Permutations represented by the Lehmer code
52
+ --mult MULT [MULT ...]
53
+ Some additional terms in the ring to multiply by
54
+ --coprod Compute the coproduct (different syntax: one permutation, then a hyphen, the variable index
55
+ positions to split on)
56
+ --display-mode {basic,pretty,latex}
57
+ Method of displaying the output. Default basic
58
+
59
+ Example:
60
+ schubmult_py 5 1 7 3 2 6 4 - 2 1 6 3 5 4
61
+ or equivalently
62
+ schubmult_py --code 4 0 4 1 0 1 - 1 0 3 0 1
63
+ or alternatively
64
+ schubmult_py --coprod --code 2 0 3 0 1 - 2 4
65
+ ```
66
+
67
+
68
+ <!-- ## Quantum commuting difference operators
69
+
70
+ schubmult_q_double has a feature for displaying the coefficients of the divided difference operators in the evaluation of the quantum double Schubert polynomials on the commuting difference operators of Fomin, Gelfand, and Postnikov. It is necessary to cap the value of n in the group S_n we are working in because as n increases the expression does not stabilize.
71
+ ```bash
72
+ schubmult_q_double --nil-hecke 6 --code 2 2 --display-positive
73
+ ``` -->
74
+
75
+ ### schubmult_double - Double Schubert polynmoials
76
+
77
+ ```
78
+ usage: schubmult_double [-h] [-np] [--code] [--mult MULT [MULT ...]] [--coprod] [--display-positive] [--optimizer-message] [--down] [-nc]
79
+ [--mixed-var] [--expand] [--display-mode {basic,pretty,latex}]
80
+ hyphen-separated list of perms [hyphen-separated list of perms ...]
81
+
82
+ Compute coefficients of product of double Schubert polynomials in the same or different sets of coefficient variables
83
+
84
+ positional arguments:
85
+ hyphen-separated list of perms
86
+ Space-delimited permutations separated by hyphens, e. g. 3 4 1 2 - 5 1 2 4 3
87
+
88
+ options:
89
+ -h, --help show this help message and exit
90
+ -np, --no-print Compute the result but do not print it
91
+ --code Permutations represented by the Lehmer code
92
+ --mult MULT [MULT ...]
93
+ Some additional terms in the ring to multiply by
94
+ --coprod Compute the coproduct (different syntax: one permutation, then a hyphen, the variable index
95
+ positions to split on)
96
+ --display-positive Display the result in terms of the positive roots, or if mixed variable attempt to display the
97
+ result as a positive algebraic combination of terms of the form y_i - z_j
98
+ --optimizer-message Display debug output during integer optimization for --display-positive
99
+ --down Reverse multiplication
100
+ -nc, --no-check Do not check if positive result matches the original
101
+ --mixed-var Used mixed variables y and z
102
+ --expand Expand the output rather than leaving it as originally computed (slow)
103
+ --display-mode {basic,pretty,latex}
104
+ Method of displaying the output. Default basic
105
+
106
+ Example:
107
+ schubmult_double 5 1 7 3 2 6 4 - 2 1 6 3 5 4 [ --display-positive]
108
+ or equivalently
109
+ schubmult_double --code 4 0 4 1 0 1 - 1 0 3 0 1 [ --display-positive]
110
+ or alternatively
111
+ schubmult_double --coprod --code 2 0 3 0 1 - 2 4 [ --display-positive]
112
+ ```
113
+
114
+ ### schubmult_q - Quantum Schubert polynomials
115
+
116
+ ```
117
+ usage: schubmult_q [-h] [-np] [--code] [--mult MULT [MULT ...]] [--parabolic PARABOLIC [PARABOLIC ...]] [--basic-pieri]
118
+ [--display-mode {basic,pretty,latex}]
119
+ hyphen-separated list of perms [hyphen-separated list of perms ...]
120
+
121
+ Compute products of quantum Schubert polynomials
122
+
123
+ positional arguments:
124
+ hyphen-separated list of perms
125
+ Space-delimited permutations separated by hyphens, e. g. 3 4 1 2 - 5 1 2 4 3
126
+
127
+ options:
128
+ -h, --help show this help message and exit
129
+ -np, --no-print Compute the result but do not print it
130
+ --code Permutations represented by the Lehmer code
131
+ --mult MULT [MULT ...]
132
+ Some additional terms in the ring to multiply by
133
+ --parabolic PARABOLIC [PARABOLIC ...]
134
+ Generators of the parabolic subgroup to compute quantum coeffs for
135
+ --basic-pieri Do not apply conjectural computation optimization to quantum
136
+ --display-mode {basic,pretty,latex}
137
+ Method of displaying the output. Default basic
138
+
139
+ Example:
140
+ schubmult_q 5 1 7 3 2 6 4 - 2 1 6 3 5 4
141
+ or equivalently
142
+ schubmult_q --code 4 0 4 1 0 1 - 1 0 3 0 1
143
+ ```
144
+
145
+ ### schubmult_q_double - Quantum double Schubert polynomials
146
+
147
+ ```
148
+ usage: schubmult_q_double [-h] [-np] [--code] [--mult MULT [MULT ...]] [--display-positive] [--optimizer-message] [--down]
149
+ [-nc] [--mixed-var] [--expand] [--parabolic PARABOLIC [PARABOLIC ...]] [--basic-pieri]
150
+ [--nil-hecke N] [--nil-hecke-apply N] [--display-mode {basic,pretty,latex}]
151
+ hyphen-separated list of perms [hyphen-separated list of perms ...]
152
+
153
+ Compute coefficients of products of quantum double Schubert polynomials in the same or different sets of coefficient variables
154
+
155
+ positional arguments:
156
+ hyphen-separated list of perms
157
+ Space-delimited permutations separated by hyphens, e. g. 3 4 1 2 - 5 1 2 4 3
158
+
159
+ options:
160
+ -h, --help show this help message and exit
161
+ -np, --no-print Compute the result but do not print it
162
+ --code Permutations represented by the Lehmer code
163
+ --mult MULT [MULT ...]
164
+ Some additional terms in the ring to multiply by
165
+ --display-positive Display the result in terms of the positive roots, or if mixed variable attempt to display the
166
+ result as a positive algebraic combination of terms of the form y_i - z_j
167
+ --optimizer-message Display debug output during integer optimization for --display-positive
168
+ --down Reverse multiplication
169
+ -nc, --no-check Do not check if positive result matches the original
170
+ --mixed-var Used mixed variables y and z
171
+ --expand Expand the output rather than leaving it as originally computed (slow)
172
+ --parabolic PARABOLIC [PARABOLIC ...]
173
+ Generators of the parabolic subgroup to compute quantum coeffs for
174
+ --basic-pieri Do not apply conjectural computation optimization to quantum
175
+ --nil-hecke N Substitute up to N of Fomin-Gelfand-Postnikov commuting difference operators
176
+ --nil-hecke-apply N Substitute commuting difference operators for perm1, then apply to Schub indexed by perm2
177
+ --display-mode {basic,pretty,latex}
178
+ Method of displaying the output. Default basic
179
+
180
+ Example:
181
+ schubmult_q_double 5 1 7 3 2 6 4 - 2 1 6 3 5 4 [ --display-positive]
182
+ or equivalently
183
+ schubmult_q_double --code 4 0 4 1 0 1 - 1 0 3 0 1 [ --display-positive]
184
+ ```
185
+
186
+ ## Diplaying the result positively
187
+
188
+ The command line argument `--display-positive `is available in schubmult_double and schubmult_q_double, which displays the result positively (if possible, this is still only always possible conjecturally). It will fail and print out the offending case if it finds a counterexample. This is highly processor intensive.
189
+
190
+
191
+ Runtime will vary tremendously by case. The general problem is #P-hard. Though the result is always nonnegative (which at least is known for schubmult_py, schubmult_q, schubmult_double, and schubmult_q_double) and the problem is in GapP, it is not known to be in #P at this time.
192
+
193
+ schubmult_py is for multiplying ordinary Schubert polynomials. schubmult_double is for multiplying double Schubert polynomials in different sets of coefficient variables (`--mixed-var`) or in the same set of coefficient variables (by default). Similarly, schubmult_q is for multiplying quantum Schubert polynomials, schubmult_q_double is for multiplying quantum double Schubert polynomials (in different sets of coefficient variables with the `--mixed-var` option, or the same set), or in other words it computes the Gromov-Witten invariants, equivariant Gromov-Witten invariants, and (mixed?) equivariant Gromov-Witten invariants of the complete flag variety. All have the same command line syntax as schubmult, except when using the --code option. schubmult_double/schubmult_q_double display the result with nonnegative coefficients (and the q variables) with the `--display-positive` option (either in the negative simple roots r_i, or in y_i - z_j for `--mixed-var`).
194
+
195
+ schubmult_xx --coprod allows you to split (double) Schubert polynomials along certain indices (not available for quantum). It takes one permutation as an argument, followed by a dash -, then the set of indices you would like to split on.
196
+
197
+ # Sage integration (as of version 2.0.0)
198
+
199
+ [SageMath](https://www.sagemath.org/) is a computer algebra system that, while wonderful, is monstrously large and only works on posix-based operating systems (including WSL VMs, so it is still usable on Windows). This is why Sage support is provided optionally in schubmult. The syntax to install the Sage dependencies is
200
+
201
+ ```
202
+ pip install schubmult[sage]
203
+ ```
204
+
205
+ This will install the [sagemath-standard](https://pypi.org/project/sagemath-standard/) python package in addition to the other dependencies. **Again, this only works on Linux, MacOS, or WSL.** To use with a currently installed SageMath distribution, use sage's python interpreter to install the package (the `[sage]` piece is not required in that case).
206
+
207
+ ## Basic sage example
208
+
209
+ ```python
210
+ sage: from schubmult.sage_integration import FastSchubertPolynomial, FastDoubleSchubertPolynomialRing,
211
+ FastQuantumSchubertPolynomial, FastQuantumDoubleSchubertPolynomialRing
212
+ sage: SingleRing = FastSchubertPolynomialRing(ZZ, 100, "x")
213
+ sage: SingleRing([3,4,1,2])
214
+ Sx[3, 4, 1, 2]
215
+ sage: SingleRing([3,4,1,2]) * SingleRing([5,1,4,2,3])
216
+ Sx[7, 3, 4, 1, 2, 5, 6] + Sx[7, 4, 2, 1, 3, 5, 6] + Sx[7, 5, 1, 2, 3, 4,
217
+ 6]
218
+ ```
219
+
220
+ ## Mixed variable (Molev-Sagan) type products
221
+
222
+ ```python
223
+ sage: DoubleRing = FastDoubleSchubertPolynomialRing(ZZ, 100, "x", ("y", "z"))
224
+ sage: DoubleRing([3,4,1,2])*DoubleRing([1,4,2,3])
225
+ (y1*y2-y1*y4-y2*y4+y4^2)*Sx([3, 4, 1, 2], 'y') + (-y1-y2+y4+y5)*Sx([3, 5, 1, 2, 4], 'y') + Sx([3, 6, 1,
226
+ 2, 4, 5], 'y')
227
+ sage: DoubleRing([3,4,1,2]) * DoubleRing([1,4,2,3],"z")
228
+ (y3^2+y3*y4+y4^2-y3*z1-y4*z1-y3*z2-y4*z2+z1*z2-y3*z3-y4*z3+z1*z3+z2*z3)*Sx([3, 4, 1, 2], 'y') + (y3+y4+
229
+ y5-z1-z2-z3)*Sx([3, 5, 1, 2, 4], 'y') + Sx([3, 6, 1, 2, 4, 5],
230
+ 'y')
231
+ ```
232
+
233
+ ## expand()
234
+
235
+ ```python
236
+ sage: SingleRingQ = FastQuantumSchubertPolynomialRing(ZZ, 100, "x")
237
+ sage: SingleRingQ([2,3,1,4]).expand()
238
+ x1*x2 + q_1
239
+ ```
240
+
241
+ ## Coercion
242
+
243
+ Coercion was implemented as widely as possible.
244
+ ```python
245
+ sage: DoubleRing([1,4,2,3],"z") * SingleRing([3,4,1,2])
246
+ z1^2*z4^2*Sx([1, 4, 2, 3], 'z') + (z1^2*z4+z1^2*z5)*Sx([1, 5, 2, 3, 4], 'z') + z1^2*Sx([1, 6, 2, 3, 4,
247
+ 5], 'z') + (z1*z4^2+z2*z4^2)*Sx([2, 4, 1, 3], 'z') + (z1*z4+z2*z4+z1*z5+z2*z5)*Sx([2, 5, 1, 3, 4], 'z') +
248
+ (z1+z2)*Sx([2, 6, 1, 3, 4, 5], 'z') + z4^2*Sx([3, 4, 1, 2], 'z') + (z4+z5)*Sx([3, 5, 1, 2, 4], 'z') +
249
+ Sx([3, 6, 1, 2, 4, 5], 'z')
250
+ sage: SingleRingQ([2,3,1,4]) * SingleRing([4,1,3,2])
251
+ (-2*q_1^2*q_2+q_1*q_2*q_3)*QSx[1] + q_1*q_2*QSx[1, 3, 4, 2] + (-q_1^2)*QSx[2, 3, 1] + q_1*QSx[2, 4, 3,
252
+ 1] + (-q_1*q_2)*QSx[3, 1, 2] + q_1*QSx[3, 2, 4, 1] + q_1*QSx[3, 4, 1, 2] + (-q_1)*QSx[4, 2, 1, 3] +
253
+ QSx[5, 2, 3, 1, 4] + QSx[5, 3, 1, 2, 4]
254
+ sage: R.<x1, x2> = PolynomialRing(ZZ, 2)
255
+ sage: SingleRing([1,3,2]) - x1 - x2 == 0
256
+ True
257
+ ```
258
+
259
+ ## Coproducts
260
+
261
+ FastSchubertPolynomialRing and FastDoubleSchubertPolynomialRings are bialgebras and each element implements the `coproduct()` member function. `set_coproduct_indices()` on the base ring will determine the variables to partition on.
262
+ ```ada
263
+ sage: DoubleRing.set_coproduct_indices((1,3))
264
+ sage: DoubleRing([4,1,5,2,3], "z").coproduct()
265
+ (y1^2-y1*z2-y1*z3+z2*z3)*Sx([4, 1, 2, 3], 'z') # Sx([1], 'y') + (y1+y2-z2-z3)*Sx([4, 1, 2, 3], 'z') #
266
+ Sx([2, 1], 'y') + Sx([4, 1, 2, 3], 'z') # Sx([3, 1, 2], 'y') + (y1-z3)*Sx([4, 2, 1, 3], 'z') # Sx([1],
267
+ 'y') + Sx([4, 2, 1, 3], 'z') # Sx([2, 1], 'y') + Sx([4, 3, 1, 2], 'z') # Sx([1],
268
+ 'y')
269
+ ```
270
+
271
+ ## Demonstration of quantum double mixed products
272
+
273
+ ```python
274
+ sage: QuantumDoubleRing = FastQuantumDoubleSchubertPolynomialRing(ZZ, 100, "x", ("y","z"))
275
+ sage: QuantumDoubleRing([4,1,3,2])*QuantumDoubleRing([5,1,3,2,4], "z")
276
+ (q_1*q_2*q_3*y1^3+q_1*q_2*q_3*y1^2*y4+q_1*q_2*q_3*y1*y4^2+q_1*q_2*q_3*y4^3-q_1*q_2*q_3*y1^2*z1-
277
+ q_1*q_2*q_3*y1*y4*z1-q_1*q_2*q_3*y4^2*z1-q_1*q_2*q_3*y1^2*z2-q_1*q_2*q_3*y1*y4*z2-q_1*q_2*q_3*y4^2*z2+
278
+ q_1*q_2*q_3*y1*z1*z2+q_1*q_2*q_3*y4*z1*z2-q_1*q_2*q_3*y1^2*z3-q_1*q_2*q_3*y1*y4*z3-q_1*q_2*q_3*y4^2*z3+
279
+ q_1*q_2*q_3*y1*z1*z3+q_1*q_2*q_3*y4*z1*z3+q_1*q_2*q_3*y1*z2*z3+q_1*q_2*q_3*y4*z2*z3-q_1*q_2*q_3*z1*z2*z3-
280
+ q_1*q_2*q_3*y1^2*z4-q_1*q_2*q_3*y1*y4*z4-q_1*q_2*q_3*y4^2*z4+q_1*q_2*q_3*y1*z1*z4+q_1*q_2*q_3*y4*z1*z4+
281
+ q_1*q_2*q_3*y1*z2*z4+q_1*q_2*q_3*y4*z2*z4-q_1*q_2*q_3*z1*z2*z4+q_1*q_2*q_3*y1*z3*z4+q_1*q_2*q_3*y4*z3*z4-
282
+ q_1*q_2*q_3*z1*z3*z4-q_1*q_2*q_3*z2*z3*z4)*QSx([1], 'y') + (q_1*q_2*q_3*y1^2+q_1*q_2*q_3*y1*y4+
283
+ q_1*q_2*q_3*y4^2+q_1*q_2*q_3*y1*y5+q_1*q_2*q_3*y4*y5+q_1*q_2*q_3*y5^2-q_1*q_2*q_3*y1*z1-
284
+ q_1*q_2*q_3*y4*z1-q_1*q_2*q_3*y5*z1-q_1*q_2*q_3*y1*z2-q_1*q_2*q_3*y4*z2-q_1*q_2*q_3*y5*z2+
285
+ q_1*q_2*q_3*z1*z2-q_1*q_2*q_3*y1*z3-q_1*q_2*q_3*y4*z3-q_1*q_2*q_3*y5*z3+q_1*q_2*q_3*z1*z3+
286
+ q_1*q_2*q_3*z2*z3-q_1*q_2*q_3*y1*z4-q_1*q_2*q_3*y4*z4-q_1*q_2*q_3*y5*z4+q_1*q_2*q_3*z1*z4+
287
+ q_1*q_2*q_3*z2*z4+q_1*q_2*q_3*z3*z4)*QSx([1, 2, 3, 5, 4], 'y') + (q_1*q_2*q_3*y1+q_1*q_2*q_3*y4+
288
+ q_1*q_2*q_3*y5+q_1*q_2*q_3*y6-q_1*q_2*q_3*z1-q_1*q_2*q_3*z2-q_1*q_2*q_3*z3-q_1*q_2*q_3*z4)*QSx([1, 2, 3,
289
+ 6, 4, 5], 'y') + q_1*q_2*q_3*QSx([1, 2, 3, 7, 4, 5, 6], 'y') + (q_1*q_3*y1^3+q_1*q_3*y1^2*y4+
290
+ q_1*q_3*y1*y4^2+q_1*q_3*y4^3-q_1*q_3*y1^2*z1-q_1*q_3*y1*y4*z1-q_1*q_3*y4^2*z1-q_1*q_3*y1^2*z2-
291
+ q_1*q_3*y1*y4*z2-q_1*q_3*y4^2*z2+q_1*q_3*y1*z1*z2+q_1*q_3*y4*z1*z2-q_1*q_3*y1^2*z3-q_1*q_3*y1*y4*z3-
292
+ q_1*q_3*y4^2*z3+q_1*q_3*y1*z1*z3+q_1*q_3*y4*z1*z3+q_1*q_3*y1*z2*z3+q_1*q_3*y4*z2*z3-q_1*q_3*z1*z2*z3-
293
+ q_1*q_3*y1^2*z4-q_1*q_3*y1*y4*z4-q_1*q_3*y4^2*z4+q_1*q_3*y1*z1*z4+q_1*q_3*y4*z1*z4+q_1*q_3*y1*z2*z4+
294
+ q_1*q_3*y4*z2*z4-q_1*q_3*z1*z2*z4+q_1*q_3*y1*z3*z4+q_1*q_3*y4*z3*z4-q_1*q_3*z1*z3*z4-
295
+ q_1*q_3*z2*z3*z4)*QSx([1, 4, 2, 3], 'y') + (q_1*y1^3*y3+q_1*y1^3*y4+q_1*y1^2*y3*y4+q_1*y1^2*y4^2+
296
+ q_1*y1*y3*y4^2+q_1*y1*y4^3+q_1*y3*y4^3-q_1*y1^3*z1-q_1*y1^2*y3*z1-2*q_1*y1^2*y4*z1-q_1*y1*y3*y4*z1-
297
+ 2*q_1*y1*y4^2*z1-q_1*y3*y4^2*z1-q_1*y4^3*z1+q_1*y1^2*z1^2+q_1*y1*y4*z1^2+q_1*y4^2*z1^2-q_1*y1^3*z2-
298
+ q_1*y1^2*y3*z2-2*q_1*y1^2*y4*z2-q_1*y1*y3*y4*z2-2*q_1*y1*y4^2*z2-q_1*y3*y4^2*z2-q_1*y4^3*z2+
299
+ 2*q_1*y1^2*z1*z2+q_1*y1*y3*z1*z2+3*q_1*y1*y4*z1*z2+q_1*y3*y4*z1*z2+2*q_1*y4^2*z1*z2-q_1*y1*z1^2*z2-
300
+ q_1*y4*z1^2*z2+q_1*y1^2*z2^2+q_1*y1*y4*z2^2+q_1*y4^2*z2^2-q_1*y1*z1*z2^2-q_1*y4*z1*z2^2-q_1*y1^2*y3*z3-
301
+ q_1*y1^2*y4*z3-q_1*y1*y3*y4*z3-q_1*y1*y4^2*z3-q_1*y3*y4^2*z3+q_1*y1^2*z1*z3+q_1*y1*y3*z1*z3+
302
+ 2*q_1*y1*y4*z1*z3+q_1*y3*y4*z1*z3+q_1*y4^2*z1*z3-q_1*y1*z1^2*z3-q_1*y4*z1^2*z3+q_1*y1^2*z2*z3+
303
+ q_1*y1*y3*z2*z3+2*q_1*y1*y4*z2*z3+q_1*y3*y4*z2*z3+q_1*y4^2*z2*z3-2*q_1*y1*z1*z2*z3-q_1*y3*z1*z2*z3-
304
+ 2*q_1*y4*z1*z2*z3+q_1*z1^2*z2*z3-q_1*y1*z2^2*z3-q_1*y4*z2^2*z3+q_1*z1*z2^2*z3-q_1*y1^2*y3*z4-
305
+ q_1*y1^2*y4*z4-q_1*y1*y3*y4*z4-q_1*y1*y4^2*z4-q_1*y3*y4^2*z4+q_1*y1^2*z1*z4+q_1*y1*y3*z1*z4+
306
+ 2*q_1*y1*y4*z1*z4+q_1*y3*y4*z1*z4+q_1*y4^2*z1*z4-q_1*y1*z1^2*z4-q_1*y4*z1^2*z4+q_1*y1^2*z2*z4+
307
+ q_1*y1*y3*z2*z4+2*q_1*y1*y4*z2*z4+q_1*y3*y4*z2*z4+q_1*y4^2*z2*z4-2*q_1*y1*z1*z2*z4-q_1*y3*z1*z2*z4-
308
+ 2*q_1*y4*z1*z2*z4+q_1*z1^2*z2*z4-q_1*y1*z2^2*z4-q_1*y4*z2^2*z4+q_1*z1*z2^2*z4+q_1*y1*y3*z3*z4+
309
+ q_1*y1*y4*z3*z4+q_1*y3*y4*z3*z4-q_1*y1*z1*z3*z4-q_1*y3*z1*z3*z4-q_1*y4*z1*z3*z4+q_1*z1^2*z3*z4-
310
+ q_1*y1*z2*z3*z4-q_1*y3*z2*z3*z4-q_1*y4*z2*z3*z4+q_1*z1*z2*z3*z4+q_1*z2^2*z3*z4)*QSx([1, 4, 3, 2], 'y') +
311
+ (q_1*y1^3+q_1*y1^2*y4+q_1*y1*y4^2+q_1*y4^3-q_1*y1^2*z1-q_1*y1*y4*z1-q_1*y4^2*z1-q_1*y1^2*z2-q_1*y1*y4*z2-
312
+ q_1*y4^2*z2+q_1*y1*z1*z2+q_1*y4*z1*z2-q_1*y1^2*z3-q_1*y1*y4*z3-q_1*y4^2*z3+q_1*y1*z1*z3+q_1*y4*z1*z3+
313
+ q_1*y1*z2*z3+q_1*y4*z2*z3-q_1*z1*z2*z3-q_1*y1^2*z4-q_1*y1*y4*z4-q_1*y4^2*z4+q_1*y1*z1*z4+q_1*y4*z1*z4+
314
+ q_1*y1*z2*z4+q_1*y4*z2*z4-q_1*z1*z2*z4+q_1*y1*z3*z4+q_1*y4*z3*z4-q_1*z1*z3*z4-q_1*z2*z3*z4)*QSx([1, 4,
315
+ 5, 2, 3], 'y') + (q_1*q_3*y1^2+q_1*q_3*y1*y4+q_1*q_3*y4^2+q_1*q_3*y1*y5+q_1*q_3*y4*y5+q_1*q_3*y5^2-
316
+ q_1*q_3*y1*z1-q_1*q_3*y4*z1-q_1*q_3*y5*z1-q_1*q_3*y1*z2-q_1*q_3*y4*z2-q_1*q_3*y5*z2+q_1*q_3*z1*z2-
317
+ q_1*q_3*y1*z3-q_1*q_3*y4*z3-q_1*q_3*y5*z3+q_1*q_3*z1*z3+q_1*q_3*z2*z3-q_1*q_3*y1*z4-q_1*q_3*y4*z4-
318
+ q_1*q_3*y5*z4+q_1*q_3*z1*z4+q_1*q_3*z2*z4+q_1*q_3*z3*z4)*QSx([1, 5, 2, 3, 4], 'y') + (q_1*y1^3+
319
+ q_1*y1^2*y3+q_1*y1^2*y4+q_1*y1*y3*y4+q_1*y1*y4^2+q_1*y3*y4^2+q_1*y1^2*y5+q_1*y1*y3*y5+q_1*y1*y4*y5+
320
+ q_1*y3*y4*y5+q_1*y1*y5^2+q_1*y3*y5^2-2*q_1*y1^2*z1-q_1*y1*y3*z1-2*q_1*y1*y4*z1-q_1*y3*y4*z1-q_1*y4^2*z1-
321
+ 2*q_1*y1*y5*z1-q_1*y3*y5*z1-q_1*y4*y5*z1-q_1*y5^2*z1+q_1*y1*z1^2+q_1*y4*z1^2+q_1*y5*z1^2-2*q_1*y1^2*z2-
322
+ q_1*y1*y3*z2-2*q_1*y1*y4*z2-q_1*y3*y4*z2-q_1*y4^2*z2-2*q_1*y1*y5*z2-q_1*y3*y5*z2-q_1*y4*y5*z2-
323
+ q_1*y5^2*z2+3*q_1*y1*z1*z2+q_1*y3*z1*z2+2*q_1*y4*z1*z2+2*q_1*y5*z1*z2-q_1*z1^2*z2+q_1*y1*z2^2+
324
+ q_1*y4*z2^2+q_1*y5*z2^2-q_1*z1*z2^2-q_1*y1^2*z3-q_1*y1*y3*z3-q_1*y1*y4*z3-q_1*y3*y4*z3-q_1*y1*y5*z3-
325
+ q_1*y3*y5*z3+2*q_1*y1*z1*z3+q_1*y3*z1*z3+q_1*y4*z1*z3+q_1*y5*z1*z3-q_1*z1^2*z3+2*q_1*y1*z2*z3+
326
+ q_1*y3*z2*z3+q_1*y4*z2*z3+q_1*y5*z2*z3-2*q_1*z1*z2*z3-q_1*z2^2*z3-q_1*y1^2*z4-q_1*y1*y3*z4-q_1*y1*y4*z4-
327
+ q_1*y3*y4*z4-q_1*y1*y5*z4-q_1*y3*y5*z4+2*q_1*y1*z1*z4+q_1*y3*z1*z4+q_1*y4*z1*z4+q_1*y5*z1*z4-q_1*z1^2*z4+
328
+ 2*q_1*y1*z2*z4+q_1*y3*z2*z4+q_1*y4*z2*z4+q_1*y5*z2*z4-2*q_1*z1*z2*z4-q_1*z2^2*z4+q_1*y1*z3*z4+
329
+ q_1*y3*z3*z4-q_1*z1*z3*z4-q_1*z2*z3*z4)*QSx([1, 5, 3, 2, 4], 'y') + (q_1*y1^2+q_1*y1*y4+q_1*y4^2+
330
+ q_1*y1*y5+q_1*y4*y5+q_1*y5^2-q_1*y1*z1-q_1*y4*z1-q_1*y5*z1-q_1*y1*z2-q_1*y4*z2-q_1*y5*z2+q_1*z1*z2-
331
+ q_1*y1*z3-q_1*y4*z3-q_1*y5*z3+q_1*z1*z3+q_1*z2*z3-q_1*y1*z4-q_1*y4*z4-q_1*y5*z4+q_1*z1*z4+q_1*z2*z4+
332
+ q_1*z3*z4)*QSx([1, 5, 4, 2, 3], 'y') + (q_1*q_3*y1+q_1*q_3*y4+q_1*q_3*y5+q_1*q_3*y6-q_1*q_3*z1-
333
+ q_1*q_3*z2-q_1*q_3*z3-q_1*q_3*z4)*QSx([1, 6, 2, 3, 4, 5], 'y') + (q_1*y1^2+q_1*y1*y3+q_1*y1*y4+q_1*y3*y4+
334
+ q_1*y1*y5+q_1*y3*y5+q_1*y1*y6+q_1*y3*y6-2*q_1*y1*z1-q_1*y3*z1-q_1*y4*z1-q_1*y5*z1-q_1*y6*z1+q_1*z1^2-
335
+ 2*q_1*y1*z2-q_1*y3*z2-q_1*y4*z2-q_1*y5*z2-q_1*y6*z2+2*q_1*z1*z2+q_1*z2^2-q_1*y1*z3-q_1*y3*z3+q_1*z1*z3+
336
+ q_1*z2*z3-q_1*y1*z4-q_1*y3*z4+q_1*z1*z4+q_1*z2*z4)*QSx([1, 6, 3, 2, 4, 5], 'y') + (q_1*y1+q_1*y4+q_1*y5+
337
+ q_1*y6-q_1*z1-q_1*z2-q_1*z3-q_1*z4)*QSx([1, 6, 4, 2, 3, 5], 'y') + q_1*q_3*QSx([1, 7, 2, 3, 4, 5, 6],
338
+ 'y') + (q_1*y1+q_1*y3-q_1*z1-q_1*z2)*QSx([1, 7, 3, 2, 4, 5, 6], 'y') + q_1*QSx([1, 7, 4, 2, 3, 5, 6],
339
+ 'y') + (q_1*q_2*q_3*y1^2+q_1*q_2*q_3*y1*y2+q_1*q_2*q_3*y2^2+q_1*q_2*q_3*y1*y4+q_1*q_2*q_3*y2*y4+
340
+ q_1*q_2*q_3*y4^2-q_1*q_2*q_3*y1*z1-q_1*q_2*q_3*y2*z1-q_1*q_2*q_3*y4*z1-q_1*q_2*q_3*y1*z2-
341
+ q_1*q_2*q_3*y2*z2-q_1*q_2*q_3*y4*z2+q_1*q_2*q_3*z1*z2-q_1*q_2*q_3*y1*z3-q_1*q_2*q_3*y2*z3-
342
+ q_1*q_2*q_3*y4*z3+q_1*q_2*q_3*z1*z3+q_1*q_2*q_3*z2*z3-q_1*q_2*q_3*y1*z4-q_1*q_2*q_3*y2*z4-
343
+ q_1*q_2*q_3*y4*z4+q_1*q_2*q_3*z1*z4+q_1*q_2*q_3*z2*z4+q_1*q_2*q_3*z3*z4)*QSx([2, 1], 'y') +
344
+ (q_1*q_2*q_3*y1+q_1*q_2*q_3*y2+q_1*q_2*q_3*y4+q_1*q_2*q_3*y5-q_1*q_2*q_3*z1-q_1*q_2*q_3*z2-
345
+ q_1*q_2*q_3*z3-q_1*q_2*q_3*z4)*QSx([2, 1, 3, 5, 4], 'y') + q_1*q_2*q_3*QSx([2, 1, 3, 6, 4, 5], 'y') +
346
+ (q_1*q_3*y1^2+q_1*q_3*y1*y2+q_1*q_3*y2^2+q_1*q_3*y1*y4+q_1*q_3*y2*y4+q_1*q_3*y4^2-q_1*q_3*y1*z1-
347
+ q_1*q_3*y2*z1-q_1*q_3*y4*z1-q_1*q_3*y1*z2-q_1*q_3*y2*z2-q_1*q_3*y4*z2+q_1*q_3*z1*z2-q_1*q_3*y1*z3-
348
+ q_1*q_3*y2*z3-q_1*q_3*y4*z3+q_1*q_3*z1*z3+q_1*q_3*z2*z3-q_1*q_3*y1*z4-q_1*q_3*y2*z4-q_1*q_3*y4*z4+
349
+ q_1*q_3*z1*z4+q_1*q_3*z2*z4+q_1*q_3*z3*z4)*QSx([2, 4, 1, 3], 'y') + (q_1*y1^2*y3+q_1*y1*y2*y3+
350
+ q_1*y2^2*y3+q_1*y1^2*y4+q_1*y1*y2*y4+q_1*y2^2*y4+q_1*y1*y3*y4+q_1*y2*y3*y4+q_1*y1*y4^2+q_1*y2*y4^2+
351
+ q_1*y3*y4^2+q_1*y4^3-q_1*y1^2*z1-q_1*y1*y2*z1-q_1*y2^2*z1-q_1*y1*y3*z1-q_1*y2*y3*z1-2*q_1*y1*y4*z1-
352
+ 2*q_1*y2*y4*z1-q_1*y3*y4*z1-2*q_1*y4^2*z1+q_1*y1*z1^2+q_1*y2*z1^2+q_1*y4*z1^2-q_1*y1^2*z2-q_1*y1*y2*z2-
353
+ q_1*y2^2*z2-q_1*y1*y3*z2-q_1*y2*y3*z2-2*q_1*y1*y4*z2-2*q_1*y2*y4*z2-q_1*y3*y4*z2-2*q_1*y4^2*z2+
354
+ 2*q_1*y1*z1*z2+2*q_1*y2*z1*z2+q_1*y3*z1*z2+3*q_1*y4*z1*z2-q_1*z1^2*z2+q_1*y1*z2^2+q_1*y2*z2^2+
355
+ q_1*y4*z2^2-q_1*z1*z2^2-q_1*y1*y3*z3-q_1*y2*y3*z3-q_1*y1*y4*z3-q_1*y2*y4*z3-q_1*y3*y4*z3-q_1*y4^2*z3+
356
+ q_1*y1*z1*z3+q_1*y2*z1*z3+q_1*y3*z1*z3+2*q_1*y4*z1*z3-q_1*z1^2*z3+q_1*y1*z2*z3+q_1*y2*z2*z3+q_1*y3*z2*z3+
357
+ 2*q_1*y4*z2*z3-2*q_1*z1*z2*z3-q_1*z2^2*z3-q_1*y1*y3*z4-q_1*y2*y3*z4-q_1*y1*y4*z4-q_1*y2*y4*z4-
358
+ q_1*y3*y4*z4-q_1*y4^2*z4+q_1*y1*z1*z4+q_1*y2*z1*z4+q_1*y3*z1*z4+2*q_1*y4*z1*z4-q_1*z1^2*z4+q_1*y1*z2*z4+
359
+ q_1*y2*z2*z4+q_1*y3*z2*z4+2*q_1*y4*z2*z4-2*q_1*z1*z2*z4-q_1*z2^2*z4+q_1*y3*z3*z4+q_1*y4*z3*z4-
360
+ q_1*z1*z3*z4-q_1*z2*z3*z4)*QSx([2, 4, 3, 1], 'y') + (q_1*y1^2+q_1*y1*y2+q_1*y2^2+q_1*y1*y4+q_1*y2*y4+
361
+ q_1*y4^2-q_1*y1*z1-q_1*y2*z1-q_1*y4*z1-q_1*y1*z2-q_1*y2*z2-q_1*y4*z2+q_1*z1*z2-q_1*y1*z3-q_1*y2*z3-
362
+ q_1*y4*z3+q_1*z1*z3+q_1*z2*z3-q_1*y1*z4-q_1*y2*z4-q_1*y4*z4+q_1*z1*z4+q_1*z2*z4+q_1*z3*z4)*QSx([2, 4, 5,
363
+ 1, 3], 'y') + (q_1*q_3*y1+q_1*q_3*y2+q_1*q_3*y4+q_1*q_3*y5-q_1*q_3*z1-q_1*q_3*z2-q_1*q_3*z3-
364
+ q_1*q_3*z4)*QSx([2, 5, 1, 3, 4], 'y') + (q_1*y1^2+q_1*y1*y2+q_1*y2^2+q_1*y1*y3+q_1*y2*y3+q_1*y1*y4+
365
+ q_1*y2*y4+q_1*y3*y4+q_1*y4^2+q_1*y1*y5+q_1*y2*y5+q_1*y3*y5+q_1*y4*y5+q_1*y5^2-2*q_1*y1*z1-2*q_1*y2*z1-
366
+ q_1*y3*z1-2*q_1*y4*z1-2*q_1*y5*z1+q_1*z1^2-2*q_1*y1*z2-2*q_1*y2*z2-q_1*y3*z2-2*q_1*y4*z2-2*q_1*y5*z2+
367
+ 3*q_1*z1*z2+q_1*z2^2-q_1*y1*z3-q_1*y2*z3-q_1*y3*z3-q_1*y4*z3-q_1*y5*z3+2*q_1*z1*z3+2*q_1*z2*z3-q_1*y1*z4-
368
+ q_1*y2*z4-q_1*y3*z4-q_1*y4*z4-q_1*y5*z4+2*q_1*z1*z4+2*q_1*z2*z4+q_1*z3*z4)*QSx([2, 5, 3, 1, 4], 'y') +
369
+ (q_1*y1+q_1*y2+q_1*y4+q_1*y5-q_1*z1-q_1*z2-q_1*z3-q_1*z4)*QSx([2, 5, 4, 1, 3], 'y') + q_1*q_3*QSx([2, 6,
370
+ 1, 3, 4, 5], 'y') + (q_1*y1+q_1*y2+q_1*y3+q_1*y4+q_1*y5+q_1*y6-2*q_1*z1-2*q_1*z2-q_1*z3-q_1*z4)*QSx([2,
371
+ 6, 3, 1, 4, 5], 'y') + q_1*QSx([2, 6, 4, 1, 3, 5], 'y') + q_1*QSx([2, 7, 3, 1, 4, 5, 6], 'y') +
372
+ (q_1*q_2*q_3*y1+q_1*q_2*q_3*y2+q_1*q_2*q_3*y3+q_1*q_2*q_3*y4-q_1*q_2*q_3*z1-q_1*q_2*q_3*z2-
373
+ q_1*q_2*q_3*z3-q_1*q_2*q_3*z4)*QSx([3, 1, 2], 'y') + q_1*q_2*q_3*QSx([3, 1, 2, 5, 4], 'y') +
374
+ (q_1*y1^2*y3+q_1*y1*y3^2+q_1*y1^2*y4+2*q_1*y1*y3*y4+q_1*y3^2*y4+q_1*y1*y4^2+q_1*y3*y4^2-q_1*y1^2*z1-
375
+ 2*q_1*y1*y3*z1-q_1*y3^2*z1-2*q_1*y1*y4*z1-2*q_1*y3*y4*z1-q_1*y4^2*z1+q_1*y1*z1^2+q_1*y3*z1^2+q_1*y4*z1^2-
376
+ q_1*y1^2*z2-2*q_1*y1*y3*z2-q_1*y3^2*z2-2*q_1*y1*y4*z2-2*q_1*y3*y4*z2-q_1*y4^2*z2+2*q_1*y1*z1*z2+
377
+ 2*q_1*y3*z1*z2+2*q_1*y4*z1*z2-q_1*z1^2*z2+q_1*y1*z2^2+q_1*y3*z2^2+q_1*y4*z2^2-q_1*z1*z2^2-q_1*y1*y3*z3-
378
+ q_1*y1*y4*z3-q_1*y3*y4*z3+q_1*y1*z1*z3+q_1*y3*z1*z3+q_1*y4*z1*z3-q_1*z1^2*z3+q_1*y1*z2*z3+q_1*y3*z2*z3+
379
+ q_1*y4*z2*z3-q_1*z1*z2*z3-q_1*z2^2*z3-q_1*y1*y3*z4-q_1*y1*y4*z4-q_1*y3*y4*z4+q_1*y1*z1*z4+q_1*y3*z1*z4+
380
+ q_1*y4*z1*z4-q_1*z1^2*z4+q_1*y1*z2*z4+q_1*y3*z2*z4+q_1*y4*z2*z4-q_1*z1*z2*z4-q_1*z2^2*z4+q_1*q_3*y1+
381
+ q_1*q_3*y2+q_1*q_3*y3+q_1*q_3*y4-q_1*q_3*z1-q_1*q_3*z2-q_1*q_3*z3-q_1*q_3*z4)*QSx([3, 4, 1, 2], 'y') +
382
+ (q_1*y1*y3+q_1*y2*y3+q_1*y3^2+q_1*y1*y4+q_1*y2*y4+2*q_1*y3*y4+q_1*y4^2-q_1*y1*z1-q_1*y2*z1-2*q_1*y3*z1-
383
+ 2*q_1*y4*z1+q_1*z1^2-q_1*y1*z2-q_1*y2*z2-2*q_1*y3*z2-2*q_1*y4*z2+2*q_1*z1*z2+q_1*z2^2-q_1*y3*z3-
384
+ q_1*y4*z3+q_1*z1*z3+q_1*z2*z3-q_1*y3*z4-q_1*y4*z4+q_1*z1*z4+q_1*z2*z4)*QSx([3, 4, 2, 1], 'y') + (q_1*y1+
385
+ q_1*y2+q_1*y3+q_1*y4-q_1*z1-q_1*z2-q_1*z3-q_1*z4)*QSx([3, 4, 5, 1, 2], 'y') + (q_1*y1^2+2*q_1*y1*y3+
386
+ q_1*y3^2+q_1*y1*y4+q_1*y3*y4+q_1*y1*y5+q_1*y3*y5-2*q_1*y1*z1-2*q_1*y3*z1-q_1*y4*z1-q_1*y5*z1+q_1*z1^2-
387
+ 2*q_1*y1*z2-2*q_1*y3*z2-q_1*y4*z2-q_1*y5*z2+2*q_1*z1*z2+q_1*z2^2-q_1*y1*z3-q_1*y3*z3+q_1*z1*z3+q_1*z2*z3-
388
+ q_1*y1*z4-q_1*y3*z4+q_1*z1*z4+q_1*z2*z4+q_1*q_3)*QSx([3, 5, 1, 2, 4], 'y') + (q_1*y1+q_1*y2+2*q_1*y3+
389
+ q_1*y4+q_1*y5-2*q_1*z1-2*q_1*z2-q_1*z3-q_1*z4)*QSx([3, 5, 2, 1, 4], 'y') + q_1*QSx([3, 5, 4, 1, 2], 'y')
390
+ + (q_1*y1+q_1*y3-q_1*z1-q_1*z2)*QSx([3, 6, 1, 2, 4, 5], 'y') + q_1*QSx([3, 6, 2, 1, 4, 5], 'y') +
391
+ (q_3*y4^4-q_3*y4^3*z1-q_3*y4^3*z2+q_3*y4^2*z1*z2-q_3*y4^3*z3+q_3*y4^2*z1*z3+q_3*y4^2*z2*z3-
392
+ q_3*y4*z1*z2*z3-q_3*y4^3*z4+q_3*y4^2*z1*z4+q_3*y4^2*z2*z4-q_3*y4*z1*z2*z4+q_3*y4^2*z3*z4-q_3*y4*z1*z3*z4-
393
+ q_3*y4*z2*z3*z4+q_3*z1*z2*z3*z4)*QSx([4, 1, 2, 3], 'y') + (y1*y4^4+y3*y4^4-y1*y4^3*z1-y3*y4^3*z1-y4^4*z1+
394
+ y4^3*z1^2-y1*y4^3*z2-y3*y4^3*z2-y4^4*z2+y1*y4^2*z1*z2+y3*y4^2*z1*z2+2*y4^3*z1*z2-y4^2*z1^2*z2+y4^3*z2^2-
395
+ y4^2*z1*z2^2-y1*y4^3*z3-y3*y4^3*z3+y1*y4^2*z1*z3+y3*y4^2*z1*z3+y4^3*z1*z3-y4^2*z1^2*z3+y1*y4^2*z2*z3+
396
+ y3*y4^2*z2*z3+y4^3*z2*z3-y1*y4*z1*z2*z3-y3*y4*z1*z2*z3-2*y4^2*z1*z2*z3+y4*z1^2*z2*z3-y4^2*z2^2*z3+
397
+ y4*z1*z2^2*z3-y1*y4^3*z4-y3*y4^3*z4+y1*y4^2*z1*z4+y3*y4^2*z1*z4+y4^3*z1*z4-y4^2*z1^2*z4+y1*y4^2*z2*z4+
398
+ y3*y4^2*z2*z4+y4^3*z2*z4-y1*y4*z1*z2*z4-y3*y4*z1*z2*z4-2*y4^2*z1*z2*z4+y4*z1^2*z2*z4-y4^2*z2^2*z4+
399
+ y4*z1*z2^2*z4+y1*y4^2*z3*z4+y3*y4^2*z3*z4-y1*y4*z1*z3*z4-y3*y4*z1*z3*z4-y4^2*z1*z3*z4+y4*z1^2*z3*z4-
400
+ y1*y4*z2*z3*z4-y3*y4*z2*z3*z4-y4^2*z2*z3*z4+y1*z1*z2*z3*z4+y3*z1*z2*z3*z4+2*y4*z1*z2*z3*z4-z1^2*z2*z3*z4+
401
+ y4*z2^2*z3*z4-z1*z2^2*z3*z4)*QSx([4, 1, 3, 2], 'y') + (y4^4-y4^3*z1-y4^3*z2+y4^2*z1*z2-y4^3*z3+
402
+ y4^2*z1*z3+y4^2*z2*z3-y4*z1*z2*z3-y4^3*z4+y4^2*z1*z4+y4^2*z2*z4-y4*z1*z2*z4+y4^2*z3*z4-y4*z1*z3*z4-
403
+ y4*z2*z3*z4+z1*z2*z3*z4)*QSx([4, 1, 5, 2, 3], 'y') + (y4^4-y4^3*z1-y4^3*z2+y4^2*z1*z2-y4^3*z3+y4^2*z1*z3+
404
+ y4^2*z2*z3-y4*z1*z2*z3-y4^3*z4+y4^2*z1*z4+y4^2*z2*z4-y4*z1*z2*z4+y4^2*z3*z4-y4*z1*z3*z4-y4*z2*z3*z4+
405
+ z1*z2*z3*z4)*QSx([4, 2, 3, 1], 'y') + (q_1*y1+q_1*y3+q_1*y4+q_1*y5-q_1*z1-q_1*z2-q_1*z3-q_1*z4)*QSx([4,
406
+ 5, 1, 2, 3], 'y') + q_1*QSx([4, 5, 2, 1, 3], 'y') + q_1*QSx([4, 6, 1, 2, 3, 5], 'y') + (q_3*y4^3+
407
+ q_3*y4^2*y5+q_3*y4*y5^2+q_3*y5^3-q_3*y4^2*z1-q_3*y4*y5*z1-q_3*y5^2*z1-q_3*y4^2*z2-q_3*y4*y5*z2-
408
+ q_3*y5^2*z2+q_3*y4*z1*z2+q_3*y5*z1*z2-q_3*y4^2*z3-q_3*y4*y5*z3-q_3*y5^2*z3+q_3*y4*z1*z3+q_3*y5*z1*z3+
409
+ q_3*y4*z2*z3+q_3*y5*z2*z3-q_3*z1*z2*z3-q_3*y4^2*z4-q_3*y4*y5*z4-q_3*y5^2*z4+q_3*y4*z1*z4+q_3*y5*z1*z4+
410
+ q_3*y4*z2*z4+q_3*y5*z2*z4-q_3*z1*z2*z4+q_3*y4*z3*z4+q_3*y5*z3*z4-q_3*z1*z3*z4-q_3*z2*z3*z4)*QSx([5, 1,
411
+ 2, 3, 4], 'y') + (y1*y4^3+y3*y4^3+y1*y4^2*y5+y3*y4^2*y5+y1*y4*y5^2+y3*y4*y5^2+y1*y5^3+y3*y5^3-y1*y4^2*z1-
412
+ y3*y4^2*z1-y4^3*z1-y1*y4*y5*z1-y3*y4*y5*z1-y4^2*y5*z1-y1*y5^2*z1-y3*y5^2*z1-y4*y5^2*z1-y5^3*z1+y4^2*z1^2+
413
+ y4*y5*z1^2+y5^2*z1^2-y1*y4^2*z2-y3*y4^2*z2-y4^3*z2-y1*y4*y5*z2-y3*y4*y5*z2-y4^2*y5*z2-y1*y5^2*z2-
414
+ y3*y5^2*z2-y4*y5^2*z2-y5^3*z2+y1*y4*z1*z2+y3*y4*z1*z2+2*y4^2*z1*z2+y1*y5*z1*z2+y3*y5*z1*z2+2*y4*y5*z1*z2+
415
+ 2*y5^2*z1*z2-y4*z1^2*z2-y5*z1^2*z2+y4^2*z2^2+y4*y5*z2^2+y5^2*z2^2-y4*z1*z2^2-y5*z1*z2^2-y1*y4^2*z3-
416
+ y3*y4^2*z3-y1*y4*y5*z3-y3*y4*y5*z3-y1*y5^2*z3-y3*y5^2*z3+y1*y4*z1*z3+y3*y4*z1*z3+y4^2*z1*z3+y1*y5*z1*z3+
417
+ y3*y5*z1*z3+y4*y5*z1*z3+y5^2*z1*z3-y4*z1^2*z3-y5*z1^2*z3+y1*y4*z2*z3+y3*y4*z2*z3+y4^2*z2*z3+y1*y5*z2*z3+
418
+ y3*y5*z2*z3+y4*y5*z2*z3+y5^2*z2*z3-y1*z1*z2*z3-y3*z1*z2*z3-2*y4*z1*z2*z3-2*y5*z1*z2*z3+z1^2*z2*z3-
419
+ y4*z2^2*z3-y5*z2^2*z3+z1*z2^2*z3-y1*y4^2*z4-y3*y4^2*z4-y1*y4*y5*z4-y3*y4*y5*z4-y1*y5^2*z4-y3*y5^2*z4+
420
+ y1*y4*z1*z4+y3*y4*z1*z4+y4^2*z1*z4+y1*y5*z1*z4+y3*y5*z1*z4+y4*y5*z1*z4+y5^2*z1*z4-y4*z1^2*z4-y5*z1^2*z4+
421
+ y1*y4*z2*z4+y3*y4*z2*z4+y4^2*z2*z4+y1*y5*z2*z4+y3*y5*z2*z4+y4*y5*z2*z4+y5^2*z2*z4-y1*z1*z2*z4-
422
+ y3*z1*z2*z4-2*y4*z1*z2*z4-2*y5*z1*z2*z4+z1^2*z2*z4-y4*z2^2*z4-y5*z2^2*z4+z1*z2^2*z4+y1*y4*z3*z4+
423
+ y3*y4*z3*z4+y1*y5*z3*z4+y3*y5*z3*z4-y1*z1*z3*z4-y3*z1*z3*z4-y4*z1*z3*z4-y5*z1*z3*z4+z1^2*z3*z4-
424
+ y1*z2*z3*z4-y3*z2*z3*z4-y4*z2*z3*z4-y5*z2*z3*z4+2*z1*z2*z3*z4+z2^2*z3*z4)*QSx([5, 1, 3, 2, 4], 'y') +
425
+ (y4^3+y4^2*y5+y4*y5^2+y5^3-y4^2*z1-y4*y5*z1-y5^2*z1-y4^2*z2-y4*y5*z2-y5^2*z2+y4*z1*z2+y5*z1*z2-y4^2*z3-
426
+ y4*y5*z3-y5^2*z3+y4*z1*z3+y5*z1*z3+y4*z2*z3+y5*z2*z3-z1*z2*z3-y4^2*z4-y4*y5*z4-y5^2*z4+y4*z1*z4+y5*z1*z4+
427
+ y4*z2*z4+y5*z2*z4-z1*z2*z4+y4*z3*z4+y5*z3*z4-z1*z3*z4-z2*z3*z4)*QSx([5, 1, 4, 2, 3], 'y') + (y4^3+
428
+ y4^2*y5+y4*y5^2+y5^3-y4^2*z1-y4*y5*z1-y5^2*z1-y4^2*z2-y4*y5*z2-y5^2*z2+y4*z1*z2+y5*z1*z2-y4^2*z3-
429
+ y4*y5*z3-y5^2*z3+y4*z1*z3+y5*z1*z3+y4*z2*z3+y5*z2*z3-z1*z2*z3-y4^2*z4-y4*y5*z4-y5^2*z4+y4*z1*z4+y5*z1*z4+
430
+ y4*z2*z4+y5*z2*z4-z1*z2*z4+y4*z3*z4+y5*z3*z4-z1*z3*z4-z2*z3*z4)*QSx([5, 2, 3, 1, 4], 'y') + (q_3*y4^2+
431
+ q_3*y4*y5+q_3*y5^2+q_3*y4*y6+q_3*y5*y6+q_3*y6^2-q_3*y4*z1-q_3*y5*z1-q_3*y6*z1-q_3*y4*z2-q_3*y5*z2-
432
+ q_3*y6*z2+q_3*z1*z2-q_3*y4*z3-q_3*y5*z3-q_3*y6*z3+q_3*z1*z3+q_3*z2*z3-q_3*y4*z4-q_3*y5*z4-q_3*y6*z4+
433
+ q_3*z1*z4+q_3*z2*z4+q_3*z3*z4)*QSx([6, 1, 2, 3, 4, 5], 'y') + (y1*y4^2+y3*y4^2+y1*y4*y5+y3*y4*y5+y1*y5^2+
434
+ y3*y5^2+y1*y4*y6+y3*y4*y6+y1*y5*y6+y3*y5*y6+y1*y6^2+y3*y6^2-y1*y4*z1-y3*y4*z1-y4^2*z1-y1*y5*z1-y3*y5*z1-
435
+ y4*y5*z1-y5^2*z1-y1*y6*z1-y3*y6*z1-y4*y6*z1-y5*y6*z1-y6^2*z1+y4*z1^2+y5*z1^2+y6*z1^2-y1*y4*z2-y3*y4*z2-
436
+ y4^2*z2-y1*y5*z2-y3*y5*z2-y4*y5*z2-y5^2*z2-y1*y6*z2-y3*y6*z2-y4*y6*z2-y5*y6*z2-y6^2*z2+y1*z1*z2+y3*z1*z2+
437
+ 2*y4*z1*z2+2*y5*z1*z2+2*y6*z1*z2-z1^2*z2+y4*z2^2+y5*z2^2+y6*z2^2-z1*z2^2-y1*y4*z3-y3*y4*z3-y1*y5*z3-
438
+ y3*y5*z3-y1*y6*z3-y3*y6*z3+y1*z1*z3+y3*z1*z3+y4*z1*z3+y5*z1*z3+y6*z1*z3-z1^2*z3+y1*z2*z3+y3*z2*z3+
439
+ y4*z2*z3+y5*z2*z3+y6*z2*z3-2*z1*z2*z3-z2^2*z3-y1*y4*z4-y3*y4*z4-y1*y5*z4-y3*y5*z4-y1*y6*z4-y3*y6*z4+
440
+ y1*z1*z4+y3*z1*z4+y4*z1*z4+y5*z1*z4+y6*z1*z4-z1^2*z4+y1*z2*z4+y3*z2*z4+y4*z2*z4+y5*z2*z4+y6*z2*z4-
441
+ 2*z1*z2*z4-z2^2*z4+y1*z3*z4+y3*z3*z4-z1*z3*z4-z2*z3*z4)*QSx([6, 1, 3, 2, 4, 5], 'y') + (y4^2+y4*y5+y5^2+
442
+ y4*y6+y5*y6+y6^2-y4*z1-y5*z1-y6*z1-y4*z2-y5*z2-y6*z2+z1*z2-y4*z3-y5*z3-y6*z3+z1*z3+z2*z3-y4*z4-y5*z4-
443
+ y6*z4+z1*z4+z2*z4+z3*z4)*QSx([6, 1, 4, 2, 3, 5], 'y') + (y4^2+y4*y5+y5^2+y4*y6+y5*y6+y6^2-y4*z1-y5*z1-
444
+ y6*z1-y4*z2-y5*z2-y6*z2+z1*z2-y4*z3-y5*z3-y6*z3+z1*z3+z2*z3-y4*z4-y5*z4-y6*z4+z1*z4+z2*z4+z3*z4)*QSx([6,
445
+ 2, 3, 1, 4, 5], 'y') + (q_3*y4+q_3*y5+q_3*y6+q_3*y7-q_3*z1-q_3*z2-q_3*z3-q_3*z4)*QSx([7, 1, 2, 3, 4, 5,
446
+ 6], 'y') + (y1*y4+y3*y4+y1*y5+y3*y5+y1*y6+y3*y6+y1*y7+y3*y7-y1*z1-y3*z1-y4*z1-y5*z1-y6*z1-y7*z1+z1^2-
447
+ y1*z2-y3*z2-y4*z2-y5*z2-y6*z2-y7*z2+2*z1*z2+z2^2-y1*z3-y3*z3+z1*z3+z2*z3-y1*z4-y3*z4+z1*z4+
448
+ z2*z4)*QSx([7, 1, 3, 2, 4, 5, 6], 'y') + (y4+y5+y6+y7-z1-z2-z3-z4)*QSx([7, 1, 4, 2, 3, 5, 6], 'y') + (y4+
449
+ y5+y6+y7-z1-z2-z3-z4)*QSx([7, 2, 3, 1, 4, 5, 6], 'y') + q_3*QSx([8, 1, 2, 3, 4, 5, 6, 7], 'y') + (y1+y3-
450
+ z1-z2)*QSx([8, 1, 3, 2, 4, 5, 6, 7], 'y') + QSx([8, 1, 4, 2, 3, 5, 6, 7], 'y') + QSx([8, 2, 3, 1, 4, 5,
451
+ 6, 7], 'y')
452
+ ```
453
+ This output of roughly 17,000 characters took about 2 seconds to compute on my laptop. **Again note that quantum double computations are technically conjectural, but a proof is likely forthcoming.**
454
+
455
+ [Homepage of schubmult](http://schubmult.org/)
@@ -0,0 +1,36 @@
1
+ schubmult/__init__.py,sha256=jfMYUkKiruYd9cM9tY-_mLygW0fRj75GOhW2tEhKhOI,21
2
+ schubmult/_base_argparse.py,sha256=Gpr2rKcjmXH4Ufl84e0s7mX-ezDrMUZSUiZ5PPg2ndY,5523
3
+ schubmult/perm_lib.py,sha256=Q2Z_8fIDzBE2Y-f9BMEqmxyxRWw-Auu2vuyjO02v5-k,31815
4
+ schubmult/sage_integration/__init__.py,sha256=_EeNYfhM92qVbabAPJ9jdwedhD750D--EpIhWzkAP1o,797
5
+ schubmult/sage_integration/_fast_double_schubert_polynomial_ring.py,sha256=mtlcjrqrOuJm0jXPlkDL49Kt3y4zalBZ7YcSgWBtsUw,20067
6
+ schubmult/sage_integration/_fast_schubert_polynomial_ring.py,sha256=m2CY9mp8WLdcvP8byoeud_V1piXt61vL_zsWRqiuni8,12836
7
+ schubmult/sage_integration/_indexing.py,sha256=29zYqbylKJZz9XqYGfJXFfeaYa3ifXtxpEQIvAQEfI4,1576
8
+ schubmult/schubmult_double/__init__.py,sha256=2-mZz_moyqcq1ncx7_YB6FNtztNycHZvGiJjtRlLPiE,256
9
+ schubmult/schubmult_double/__main__.py,sha256=qhN6z5Evi4PakpzTM4wXHsYCSwfA0T-M2RYDzVcmNdE,91
10
+ schubmult/schubmult_double/_funcs.py,sha256=XMf3b1RZEus10zM0zE1gQU8iHJIreYeAhEmNCVTVtds,51551
11
+ schubmult/schubmult_double/_script.py,sha256=tfkKNREFUkaIkMiSHTf4Op_PIl4wsv6ZzMmgKfrpPlM,14808
12
+ schubmult/schubmult_double/_vars.py,sha256=vGd7uBcGGBgFGQ7AeDqzEm8kXzFXiM84Mx8jraHqKX0,263
13
+ schubmult/schubmult_py/__init__.py,sha256=WCH_afeTqjjozAFkqJDyO1t62U0PRXsZF8r8JKNjs7s,102
14
+ schubmult/schubmult_py/__main__.py,sha256=qhN6z5Evi4PakpzTM4wXHsYCSwfA0T-M2RYDzVcmNdE,91
15
+ schubmult/schubmult_py/_funcs.py,sha256=G9nw3GNLIiY09Xq6L0nZVOwWx9C8q1FN2-7jhn-3_0M,3440
16
+ schubmult/schubmult_py/_script.py,sha256=w41UoMb5UXX65b45l45QlC3q5-wmyjzbWVjTiUIpirk,3919
17
+ schubmult/schubmult_py/_vars.py,sha256=10b7uZhrKg65eMdInI_74CMnhGOXMxInxhMqKbp_hco,68
18
+ schubmult/schubmult_q/__init__.py,sha256=9RA1-qRIe1A5EumnXTygFrasdeJZHh9o-WESZJ9X3tw,140
19
+ schubmult/schubmult_q/__main__.py,sha256=qhN6z5Evi4PakpzTM4wXHsYCSwfA0T-M2RYDzVcmNdE,91
20
+ schubmult/schubmult_q/_funcs.py,sha256=RQZG-zKQtpjWmlxcSmvUzOBA6Vh0zWPq4muDqc2uTQE,10453
21
+ schubmult/schubmult_q/_script.py,sha256=lRdScEcdSFPa8oJvxJkkfpnXPLTL3X6acbuGaRhvEEg,4870
22
+ schubmult/schubmult_q/_vars.py,sha256=dU1f9CgMersgRpP9dld7ViRkyLA76sqx7ejq0JM1ECs,295
23
+ schubmult/schubmult_q_double/__init__.py,sha256=lkRcgbX8kFCaOB2hBmzH5n4DUNPRN0ZClJITikoVgCU,206
24
+ schubmult/schubmult_q_double/__main__.py,sha256=qhN6z5Evi4PakpzTM4wXHsYCSwfA0T-M2RYDzVcmNdE,91
25
+ schubmult/schubmult_q_double/_funcs.py,sha256=cmxKSCkmBAan0W9FNXJA1NIZiK4iC7mrQJjDMXv8gbM,18388
26
+ schubmult/schubmult_q_double/_script.py,sha256=Vntga-N_0x57gd8IW-Gh5sAs_y3WMnsKi1l5Mphr5bI,14419
27
+ schubmult/schubmult_q_double/_vars.py,sha256=JPL4kUPRtxkBJU9FkjA4mThNMbNVev5w_SmTcEsGvoM,329
28
+ schubmult-2.0.0.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
29
+ tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
+ tests/test_fast_double_schubert.py,sha256=TGzjZ4kbsGpRncwHI-KNQlwOVo76ESQdCWuQxM3z0v4,4980
31
+ tests/test_fast_schubert.py,sha256=cF1Wckg-FBycCxv0KYASIpAPQ7AOYqmtGJl9Q_puKXA,1315
32
+ schubmult-2.0.0.dist-info/METADATA,sha256=PVM_5KxFdoEJUw8sxIp7aTtxKKh2pLrWOH4vRziu5nI,32373
33
+ schubmult-2.0.0.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
34
+ schubmult-2.0.0.dist-info/entry_points.txt,sha256=FN_a2Ct5ZWBWWjST2GKx1h-VjU_c0UIkpnNeyevHPuo,244
35
+ schubmult-2.0.0.dist-info/top_level.txt,sha256=zYdC9Gl5JX_FHOKDElw9g21WKiJTL2-cGBAXbC92Lo8,16
36
+ schubmult-2.0.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (77.0.3)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,5 @@
1
+ [console_scripts]
2
+ schubmult_double = schubmult.schubmult_double.__main__:main
3
+ schubmult_py = schubmult.schubmult_py.__main__:main
4
+ schubmult_q = schubmult.schubmult_q.__main__:main
5
+ schubmult_q_double = schubmult.schubmult_q_double.__main__:main