schubmult 2.0.3__tar.gz → 2.0.4__tar.gz

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 (46) hide show
  1. schubmult-2.0.4/PKG-INFO +542 -0
  2. schubmult-2.0.4/README.md +517 -0
  3. {schubmult-2.0.3 → schubmult-2.0.4}/pyproject.toml +41 -39
  4. {schubmult-2.0.3 → schubmult-2.0.4}/setup.cfg +1 -1
  5. {schubmult-2.0.3 → schubmult-2.0.4}/setup.py +1 -1
  6. schubmult-2.0.4/src/schubmult/__init__.py +1 -0
  7. {schubmult-2.0.3 → schubmult-2.0.4}/src/schubmult/_base_argparse.py +11 -6
  8. schubmult-2.0.4/src/schubmult/_tests.py +24 -0
  9. {schubmult-2.0.3 → schubmult-2.0.4}/src/schubmult/perm_lib.py +52 -112
  10. {schubmult-2.0.3 → schubmult-2.0.4}/src/schubmult/sage_integration/__init__.py +13 -14
  11. {schubmult-2.0.3 → schubmult-2.0.4}/src/schubmult/sage_integration/_fast_double_schubert_polynomial_ring.py +92 -128
  12. {schubmult-2.0.3 → schubmult-2.0.4}/src/schubmult/sage_integration/_fast_schubert_polynomial_ring.py +55 -54
  13. schubmult-2.0.4/src/schubmult/sage_integration/_indexing.py +47 -0
  14. schubmult-2.0.4/src/schubmult/schubmult_double/__init__.py +12 -0
  15. {schubmult-2.0.3/src/schubmult/schubmult_q_double → schubmult-2.0.4/src/schubmult/schubmult_double}/__main__.py +1 -0
  16. {schubmult-2.0.3 → schubmult-2.0.4}/src/schubmult/schubmult_double/_funcs.py +140 -256
  17. {schubmult-2.0.3 → schubmult-2.0.4}/src/schubmult/schubmult_double/_script.py +41 -41
  18. {schubmult-2.0.3 → schubmult-2.0.4}/src/schubmult/schubmult_py/__init__.py +3 -4
  19. {schubmult-2.0.3/src/schubmult/schubmult_double → schubmult-2.0.4/src/schubmult/schubmult_py}/__main__.py +1 -0
  20. {schubmult-2.0.3 → schubmult-2.0.4}/src/schubmult/schubmult_py/_funcs.py +18 -18
  21. {schubmult-2.0.3 → schubmult-2.0.4}/src/schubmult/schubmult_py/_script.py +12 -11
  22. schubmult-2.0.4/src/schubmult/schubmult_q/__init__.py +8 -0
  23. {schubmult-2.0.3 → schubmult-2.0.4}/src/schubmult/schubmult_q/__main__.py +1 -0
  24. {schubmult-2.0.3 → schubmult-2.0.4}/src/schubmult/schubmult_q/_funcs.py +24 -27
  25. {schubmult-2.0.3 → schubmult-2.0.4}/src/schubmult/schubmult_q/_script.py +27 -21
  26. schubmult-2.0.4/src/schubmult/schubmult_q_double/__init__.py +10 -0
  27. {schubmult-2.0.3/src/schubmult/schubmult_py → schubmult-2.0.4/src/schubmult/schubmult_q_double}/__main__.py +1 -0
  28. {schubmult-2.0.3 → schubmult-2.0.4}/src/schubmult/schubmult_q_double/_funcs.py +48 -48
  29. {schubmult-2.0.3 → schubmult-2.0.4}/src/schubmult/schubmult_q_double/_script.py +39 -41
  30. schubmult-2.0.4/src/schubmult.egg-info/PKG-INFO +542 -0
  31. schubmult-2.0.3/PKG-INFO +0 -455
  32. schubmult-2.0.3/README.md +0 -430
  33. schubmult-2.0.3/src/schubmult/__init__.py +0 -1
  34. schubmult-2.0.3/src/schubmult/_tests.py +0 -9
  35. schubmult-2.0.3/src/schubmult/sage_integration/_indexing.py +0 -51
  36. schubmult-2.0.3/src/schubmult/schubmult_double/__init__.py +0 -22
  37. schubmult-2.0.3/src/schubmult/schubmult_q/__init__.py +0 -13
  38. schubmult-2.0.3/src/schubmult/schubmult_q_double/__init__.py +0 -17
  39. schubmult-2.0.3/src/schubmult.egg-info/PKG-INFO +0 -455
  40. {schubmult-2.0.3 → schubmult-2.0.4}/LICENSE +0 -0
  41. {schubmult-2.0.3 → schubmult-2.0.4}/src/schubmult.egg-info/SOURCES.txt +0 -0
  42. {schubmult-2.0.3 → schubmult-2.0.4}/src/schubmult.egg-info/dependency_links.txt +0 -0
  43. {schubmult-2.0.3 → schubmult-2.0.4}/src/schubmult.egg-info/entry_points.txt +0 -0
  44. {schubmult-2.0.3 → schubmult-2.0.4}/src/schubmult.egg-info/requires.txt +0 -0
  45. {schubmult-2.0.3 → schubmult-2.0.4}/src/schubmult.egg-info/top_level.txt +0 -0
  46. {schubmult-2.0.3 → schubmult-2.0.4}/src/tests/__init__.py +0 -0
@@ -0,0 +1,542 @@
1
+ Metadata-Version: 2.4
2
+ Name: schubmult
3
+ Version: 2.0.4
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
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
29
+ polynomials, with optional Sage integration
30
+
31
+ The main purpose of this python package is for executing scripts to compute coefficients of products of
32
+ various types of Schubert polynomials. Coproducts can also be computed, as well as substitution of
33
+ commuting difference operators for quantum double Schubert polynomials. Quantum multiplication also has
34
+ parabolic subgroup support, computed via the Peterson-Woodward comparison theorem. **Note that except
35
+ for quantum Schubert polynomial multiplication with the --basic-pieri option, the methodology for
36
+ quantum/quantum double Schubert polynomials is conjectural at this time.**
37
+
38
+
39
+ [Docs to be hosted on Wiki](https://github.com/matthematics/schubmult/wiki/schubmult-home)
40
+
41
+
42
+ ## Basic script command lines, one-line notation
43
+
44
+ ### schubmult_py - ordinary Schubert polynmoials
45
+
46
+ ```
47
+ usage: schubmult_py [-h] [-np] [--code] [--mult MULT [MULT ...]] [--coprod] [--display-mode
48
+ {basic,pretty,latex,raw}]
49
+ hyphen-separated list of perms [hyphen-separated list of perms ...]
50
+
51
+
52
+ Compute products of ordinary Schubert polynomials
53
+
54
+ positional arguments:
55
+ hyphen-separated list of perms
56
+ Space-delimited permutations separated by hyphens, e. g. 3 4 1 2 - 5 1 2 4 3
57
+
58
+
59
+ options:
60
+ -h, --help show this help message and exit
61
+ -np, --no-print Compute the result but do not print it
62
+
63
+ --code Permutations represented by the Lehmer code
64
+
65
+ --mult MULT [MULT ...]
66
+ Some additional terms in the ring to multiply by
67
+
68
+ --coprod Compute the coproduct (different syntax: one permutation, then a hyphen, the
69
+ variable index
70
+ positions to split on)
71
+ --display-mode {basic,raw}
72
+ Method of displaying the output. Default basic
73
+
74
+
75
+ Example:
76
+ schubmult_py 5 1 7 3 2 6 4 - 2 1 6 3 5 4
77
+ or equivalently
78
+ schubmult_py --code 4 0 4 1 0 1 - 1 0 3 0 1
79
+ or alternatively
80
+ schubmult_py --coprod --code 2 0 3 0 1 - 2 4
81
+ ```
82
+
83
+
84
+ <!-- ## Quantum commuting difference operators
85
+
86
+ schubmult_q_double has a feature for displaying the coefficients of the divided difference operators in
87
+ the evaluation of the quantum double Schubert polynomials on the commuting difference operators of
88
+ Fomin, Gelfand, and Postnikov. It is necessary to cap the value of n in the group S_n we are working in
89
+ because as n increases the expression does not stabilize.
90
+ ```bash
91
+ schubmult_q_double --nil-hecke 6 --code 2 2 --display-positive
92
+
93
+ ``` -->
94
+
95
+ ### schubmult_double - Double Schubert polynmoials
96
+
97
+ ```
98
+ usage: schubmult_double [-h] [-np] [--code] [--mult MULT [MULT ...]] [--coprod] [--display-positive] [--
99
+ optimizer-message] [--down] [-nc]
100
+ [--mixed-var] [--expand] [--display-mode {basic,pretty,latex,raw}]
101
+
102
+ hyphen-separated list of perms [hyphen-separated list of perms ...]
103
+
104
+
105
+ Compute coefficients of product of double Schubert polynomials in the same or different sets of
106
+ coefficient variables
107
+
108
+ positional arguments:
109
+ hyphen-separated list of perms
110
+ Space-delimited permutations separated by hyphens, e. g. 3 4 1 2 - 5 1 2 4 3
111
+
112
+
113
+ options:
114
+ -h, --help show this help message and exit
115
+ -np, --no-print Compute the result but do not print it
116
+
117
+ --code Permutations represented by the Lehmer code
118
+
119
+ --mult MULT [MULT ...]
120
+ Some additional terms in the ring to multiply by
121
+
122
+ --coprod Compute the coproduct (different syntax: one permutation, then a hyphen, the
123
+ variable index
124
+ positions to split on)
125
+ --display-positive Display the result in terms of the positive roots, or if mixed variable attempt
126
+ to display the
127
+ result as a positive algebraic combination of terms of the form y_i - z_j
128
+
129
+ --optimizer-message Display debug output during integer optimization for --display-positive
130
+
131
+ --down Reverse multiplication
132
+ -nc, --no-check Do not check if positive result matches the original
133
+
134
+ --mixed-var Used mixed variables y and z
135
+ --expand Expand the output rather than leaving it as originally computed (slow)
136
+
137
+ --display-mode {basic,pretty,latex,raw}
138
+ Method of displaying the output. Default basic
139
+
140
+
141
+ Example:
142
+ schubmult_double 5 1 7 3 2 6 4 - 2 1 6 3 5 4 [ --display-positive]
143
+
144
+ or equivalently
145
+ schubmult_double --code 4 0 4 1 0 1 - 1 0 3 0 1 [ --display-positive]
146
+
147
+ or alternatively
148
+ schubmult_double --coprod --code 2 0 3 0 1 - 2 4 [ --display-positive]
149
+
150
+ ```
151
+
152
+ ### schubmult_q - Quantum Schubert polynomials
153
+
154
+ ```
155
+ usage: schubmult_q [-h] [-np] [--code] [--mult MULT [MULT ...]] [--parabolic PARABOLIC [PARABOLIC ...]]
156
+ [--basic-pieri]
157
+ [--display-mode {basic,pretty,latex,raw}]
158
+ hyphen-separated list of perms [hyphen-separated list of perms ...]
159
+
160
+
161
+ Compute products of quantum Schubert polynomials
162
+
163
+ positional arguments:
164
+ hyphen-separated list of perms
165
+ Space-delimited permutations separated by hyphens, e. g. 3 4 1 2 - 5 1 2 4 3
166
+
167
+
168
+ options:
169
+ -h, --help show this help message and exit
170
+ -np, --no-print Compute the result but do not print it
171
+
172
+ --code Permutations represented by the Lehmer code
173
+
174
+ --mult MULT [MULT ...]
175
+ Some additional terms in the ring to multiply by
176
+
177
+ --parabolic PARABOLIC [PARABOLIC ...]
178
+ Generators of the parabolic subgroup to compute quantum coeffs for
179
+
180
+ --basic-pieri Do not apply conjectural computation optimization to quantum
181
+
182
+ --display-mode {basic,pretty,latex,raw}
183
+ Method of displaying the output. Default basic
184
+
185
+
186
+ Example:
187
+ schubmult_q 5 1 7 3 2 6 4 - 2 1 6 3 5 4
188
+ or equivalently
189
+ schubmult_q --code 4 0 4 1 0 1 - 1 0 3 0 1
190
+ ```
191
+
192
+ ### schubmult_q_double - Quantum double Schubert polynomials
193
+
194
+
195
+ ```
196
+ usage: schubmult_q_double [-h] [-np] [--code] [--mult MULT [MULT ...]] [--display-positive] [--optimizer-
197
+ message] [--down]
198
+ [-nc] [--mixed-var] [--expand] [--parabolic PARABOLIC [PARABOLIC ...]] [--basic-pieri]
199
+
200
+ [--nil-hecke N] [--nil-hecke-apply N] [--display-mode
201
+ {basic,pretty,latex,raw}]
202
+ hyphen-separated list of perms [hyphen-separated list of perms ...]
203
+
204
+
205
+ Compute coefficients of products of quantum double Schubert polynomials in the same or different sets of
206
+ coefficient variables
207
+
208
+ positional arguments:
209
+ hyphen-separated list of perms
210
+ Space-delimited permutations separated by hyphens, e. g. 3 4 1 2 - 5 1 2 4 3
211
+
212
+
213
+ options:
214
+ -h, --help show this help message and exit
215
+ -np, --no-print Compute the result but do not print it
216
+
217
+ --code Permutations represented by the Lehmer code
218
+
219
+ --mult MULT [MULT ...]
220
+ Some additional terms in the ring to multiply by
221
+
222
+ --display-positive Display the result in terms of the positive roots, or if mixed variable attempt
223
+ to display the
224
+ result as a positive algebraic combination of terms of the form y_i - z_j
225
+
226
+ --optimizer-message Display debug output during integer optimization for --display-positive
227
+
228
+ --down Reverse multiplication
229
+ -nc, --no-check Do not check if positive result matches the original
230
+
231
+ --mixed-var Used mixed variables y and z
232
+ --expand Expand the output rather than leaving it as originally computed (slow)
233
+
234
+ --parabolic PARABOLIC [PARABOLIC ...]
235
+ Generators of the parabolic subgroup to compute quantum coeffs for
236
+
237
+ --basic-pieri Do not apply conjectural computation optimization to quantum
238
+
239
+ --nil-hecke N Substitute up to N of Fomin-Gelfand-Postnikov commuting difference operators
240
+
241
+ --nil-hecke-apply N Substitute commuting difference operators for perm1, then apply to Schub indexed
242
+ by perm2
243
+ --display-mode {basic,pretty,latex,raw}
244
+ Method of displaying the output. Default basic
245
+
246
+
247
+ Example:
248
+ schubmult_q_double 5 1 7 3 2 6 4 - 2 1 6 3 5 4 [ --display-positive]
249
+
250
+ or equivalently
251
+ schubmult_q_double --code 4 0 4 1 0 1 - 1 0 3 0 1 [ --display-positive]
252
+
253
+ ```
254
+
255
+ ## Diplaying the result positively
256
+
257
+ The command line argument `--display-positive `is available in schubmult_double and schubmult_q_double,
258
+ which displays the result positively (if possible, this is still only always possible conjecturally). It
259
+ will fail and print out the offending case if it finds a counterexample. This is highly processor
260
+ intensive.
261
+
262
+
263
+ Runtime will vary tremendously by case. The general problem is #P-hard. Though the result is always
264
+ nonnegative (which at least is known for schubmult_py, schubmult_q, schubmult_double, and
265
+ schubmult_q_double) and the problem is in GapP, it is not known to be in #P at this time.
266
+
267
+
268
+ schubmult_py is for multiplying ordinary Schubert polynomials. schubmult_double is for multiplying
269
+ double Schubert polynomials in different sets of coefficient variables (`--mixed-var`) or in the same
270
+ set of coefficient variables (by default). Similarly, schubmult_q is for multiplying quantum Schubert
271
+ polynomials, schubmult_q_double is for multiplying quantum double Schubert polynomials (in different
272
+ sets of coefficient variables with the `--mixed-var` option, or the same set), or in other words it
273
+ computes the Gromov-Witten invariants, equivariant Gromov-Witten invariants, and (mixed?) equivariant
274
+ Gromov-Witten invariants of the complete flag variety. All have the same command line syntax as
275
+ schubmult, except when using the --code option. schubmult_double/schubmult_q_double display the result
276
+ with nonnegative coefficients (and the q variables) with the `--display-positive` option (either in the
277
+ negative simple roots r_i, or in y_i - z_j for `--mixed-var`).
278
+
279
+
280
+ schubmult_xx --coprod allows you to split (double) Schubert polynomials along certain indices (not
281
+ available for quantum). It takes one permutation as an argument, followed by a dash -, then the set of
282
+ indices you would like to split on.
283
+
284
+ # Sage integration (as of version 2.0.0)
285
+
286
+ [SageMath](https://www.sagemath.org/) is a computer algebra system that, while wonderful, is monstrously
287
+ large and only works on posix-based operating systems (including WSL VMs, so it is still usable on
288
+ Windows). This is why Sage support is provided optionally in schubmult. The syntax to install the Sage
289
+ dependencies is
290
+
291
+ ```
292
+ pip install schubmult[sage]
293
+ ```
294
+
295
+ This will install the [sagemath-standard](https://pypi.org/project/sagemath-standard/) python package in
296
+ addition to the other dependencies. **Again, this only works on Linux, MacOS, or WSL.** To use with a
297
+ currently installed SageMath distribution, use sage's python interpreter to install the package (the
298
+ `[sage]` piece is not required in that case).
299
+
300
+ ## Basic sage example
301
+
302
+ ```python
303
+ sage: from schubmult.sage_integration import FastSchubertPolynomialRing,
304
+ FastDoubleSchubertPolynomialRing,
305
+ FastQuantumSchubertPolynomialRing, FastQuantumDoubleSchubertPolynomialRing
306
+
307
+ sage: SingleRing = FastSchubertPolynomialRing(ZZ, 100, "x")
308
+ sage: SingleRing([3,4,1,2])
309
+ Sx([3, 4, 1, 2])
310
+ sage: SingleRing([3,4,1,2]) * SingleRing([5,1,4,2,3])
311
+ Sx([7, 3, 4, 1, 2, 5, 6]) + Sx([7, 4, 2, 1, 3, 5, 6]) + Sx([7, 5, 1, 2, 3, 4, 6])
312
+
313
+ ```
314
+
315
+ ## Mixed variable (Molev-Sagan) type products
316
+
317
+ ```python
318
+ sage: DoubleRing = FastDoubleSchubertPolynomialRing(ZZ, 100, "x", ("y", "z"))
319
+ sage: DoubleRing([3,4,1,2])*DoubleRing([1,4,2,3])
320
+ (y1*y2-y1*y4-y2*y4+y4^2)*DSx([3, 4, 1, 2], 'y') + (-y1-y2+y4+y5)*DSx([3, 5, 1, 2, 4], 'y') + DSx([3, 6,
321
+ 1, 2, 4, 5], 'y')
322
+ sage: DoubleRing([3,4,1,2]) * DoubleRing([1,4,2,3],"z")
323
+ (y3^2+y3*y4+y4^2-y3*z1-y4*z1-y3*z2-y4*z2+z1*z2-y3*z3-y4*z3+z1*z3+z2*z3)*DSx([3, 4, 1, 2], 'y') + (y3+y4+
324
+ y5-z1-z2-z3)*DSx([3, 5, 1, 2, 4], 'y') + DSx([3, 6, 1, 2, 4, 5], 'y')
325
+ ```
326
+
327
+ ## expand()
328
+
329
+ ```python
330
+ sage: SingleRingQ = FastQuantumSchubertPolynomialRing(ZZ, 100, "x")
331
+ sage: SingleRingQ([2,3,1,4]).expand()
332
+ x1*x2 + q_1
333
+ ```
334
+
335
+ ## Coercion
336
+
337
+ Coercion was implemented as widely as possible.
338
+ ```python
339
+ sage: DoubleRing([1,4,2,3],"z") * SingleRing([3,4,1,2])
340
+ z1^2*z4^2*DSx([1, 4, 2, 3], 'z') + (z1^2*z4+z1^2*z5)*DSx([1, 5, 2, 3, 4], 'z') + z1^2*DSx([1, 6, 2, 3,
341
+ 4, 5], 'z') + (z1*z4^2+z2*z4^2)*DSx([2, 4, 1, 3], 'z') + (z1*z4+z2*z4+z1*z5+z2*z5)*DSx([2, 5, 1, 3, 4],
342
+ 'z') + (z1+z2)*DSx([2, 6, 1, 3, 4, 5], 'z') + z4^2*DSx([3, 4, 1, 2], 'z') + (z4+z5)*DSx([3, 5, 1, 2, 4],
343
+ 'z') + DSx([3, 6, 1, 2, 4, 5], 'z')
344
+ sage: SingleRingQ([2,3,1,4]) * SingleRing([4,1,3,2])
345
+ (-2*q1^2*q2+q1*q2*q3)*QSx([1]) + q1*q2*QSx([1, 3, 4, 2]) + (-q1^2)*QSx([2, 3, 1]) + q1*QSx([2, 4, 3, 1])
346
+ + (-q1*q2)*QSx([3, 1, 2]) + q1*QSx([3, 2, 4, 1]) + q1*QSx([3, 4, 1, 2]) + (-q1)*QSx([4, 2, 1, 3]) +
347
+ QSx([5, 2, 3, 1, 4]) + QSx([5, 3, 1, 2, 4])
348
+ sage: R.<x1, x2> = PolynomialRing(ZZ, 2)
349
+ sage: SingleRing([1,3,2]) - x1 - x2 == 0
350
+ True
351
+ ```
352
+
353
+ ## Coproducts
354
+
355
+ FastSchubertPolynomialRing and FastDoubleSchubertPolynomialRings are bialgebras and each element
356
+ implements the `coproduct()` member function. `set_coproduct_indices()` on the base ring will determine
357
+ the variables to partition on.
358
+ ```ada
359
+ sage: DoubleRing.set_coproduct_indices((1,3))
360
+ sage: DoubleRing([4,1,5,2,3], "z").coproduct()
361
+ (y1^2-y1*z2-y1*z3+z2*z3)*DSx([4, 1, 2, 3], 'z') # DSx([1], 'y') + (y1+y2-z2-z3)*DSx([4, 1, 2, 3], 'z') #
362
+ DSx([2, 1], 'y') + DSx([4, 1, 2, 3], 'z') # DSx([3, 1, 2], 'y') + (y1-z3)*DSx([4, 2, 1, 3], 'z') #
363
+ DSx([1], 'y') + DSx([4, 2, 1, 3], 'z') # DSx([2, 1], 'y') + DSx([4, 3, 1, 2], 'z') # DSx([1], 'y')
364
+
365
+ ```
366
+
367
+ ## Demonstration of quantum double mixed products
368
+
369
+ ```python
370
+ sage: QuantumDoubleRing = FastQuantumDoubleSchubertPolynomialRing(ZZ, 100, "x", ("y","z"))
371
+ sage: QuantumDoubleRing([4,1,3,2])*QuantumDoubleRing([5,1,3,2,4], "z")
372
+ (q1*q2*q3*y1^3+q1*q2*q3*y1^2*y4+q1*q2*q3*y1*y4^2+q1*q2*q3*y4^3-q1*q2*q3*y1^2*z1-q1*q2*q3*y1*y4*z1-
373
+ q1*q2*q3*y4^2*z1-q1*q2*q3*y1^2*z2-q1*q2*q3*y1*y4*z2-q1*q2*q3*y4^2*z2+q1*q2*q3*y1*z1*z2+q1*q2*q3*y4*z1*z2-
374
+ q1*q2*q3*y1^2*z3-q1*q2*q3*y1*y4*z3-q1*q2*q3*y4^2*z3+q1*q2*q3*y1*z1*z3+q1*q2*q3*y4*z1*z3+
375
+ q1*q2*q3*y1*z2*z3+q1*q2*q3*y4*z2*z3-q1*q2*q3*z1*z2*z3-q1*q2*q3*y1^2*z4-q1*q2*q3*y1*y4*z4-
376
+ q1*q2*q3*y4^2*z4+q1*q2*q3*y1*z1*z4+q1*q2*q3*y4*z1*z4+q1*q2*q3*y1*z2*z4+q1*q2*q3*y4*z2*z4-
377
+ q1*q2*q3*z1*z2*z4+q1*q2*q3*y1*z3*z4+q1*q2*q3*y4*z3*z4-q1*q2*q3*z1*z3*z4-q1*q2*q3*z2*z3*z4)*QDSx([1],
378
+ 'y') + (q1*q2*q3*y1^2+q1*q2*q3*y1*y4+q1*q2*q3*y4^2+q1*q2*q3*y1*y5+q1*q2*q3*y4*y5+q1*q2*q3*y5^2-
379
+ q1*q2*q3*y1*z1-q1*q2*q3*y4*z1-q1*q2*q3*y5*z1-q1*q2*q3*y1*z2-q1*q2*q3*y4*z2-q1*q2*q3*y5*z2+q1*q2*q3*z1*z2-
380
+ q1*q2*q3*y1*z3-q1*q2*q3*y4*z3-q1*q2*q3*y5*z3+q1*q2*q3*z1*z3+q1*q2*q3*z2*z3-q1*q2*q3*y1*z4-q1*q2*q3*y4*z4-
381
+ q1*q2*q3*y5*z4+q1*q2*q3*z1*z4+q1*q2*q3*z2*z4+q1*q2*q3*z3*z4)*QDSx([1, 2, 3, 5, 4], 'y') + (q1*q2*q3*y1+
382
+ q1*q2*q3*y4+q1*q2*q3*y5+q1*q2*q3*y6-q1*q2*q3*z1-q1*q2*q3*z2-q1*q2*q3*z3-q1*q2*q3*z4)*QDSx([1, 2, 3, 6,
383
+ 4, 5], 'y') + q1*q2*q3*QDSx([1, 2, 3, 7, 4, 5, 6], 'y') + (q1*q3*y1^3+q1*q3*y1^2*y4+q1*q3*y1*y4^2+
384
+ q1*q3*y4^3-q1*q3*y1^2*z1-q1*q3*y1*y4*z1-q1*q3*y4^2*z1-q1*q3*y1^2*z2-q1*q3*y1*y4*z2-q1*q3*y4^2*z2+
385
+ q1*q3*y1*z1*z2+q1*q3*y4*z1*z2-q1*q3*y1^2*z3-q1*q3*y1*y4*z3-q1*q3*y4^2*z3+q1*q3*y1*z1*z3+q1*q3*y4*z1*z3+
386
+ q1*q3*y1*z2*z3+q1*q3*y4*z2*z3-q1*q3*z1*z2*z3-q1*q3*y1^2*z4-q1*q3*y1*y4*z4-q1*q3*y4^2*z4+q1*q3*y1*z1*z4+
387
+ q1*q3*y4*z1*z4+q1*q3*y1*z2*z4+q1*q3*y4*z2*z4-q1*q3*z1*z2*z4+q1*q3*y1*z3*z4+q1*q3*y4*z3*z4-q1*q3*z1*z3*z4-
388
+ q1*q3*z2*z3*z4)*QDSx([1, 4, 2, 3], 'y') + (q1*y1^3*y3+q1*y1^3*y4+q1*y1^2*y3*y4+q1*y1^2*y4^2+
389
+ q1*y1*y3*y4^2+q1*y1*y4^3+q1*y3*y4^3-q1*y1^3*z1-q1*y1^2*y3*z1-2*q1*y1^2*y4*z1-q1*y1*y3*y4*z1-
390
+ 2*q1*y1*y4^2*z1-q1*y3*y4^2*z1-q1*y4^3*z1+q1*y1^2*z1^2+q1*y1*y4*z1^2+q1*y4^2*z1^2-q1*y1^3*z2-
391
+ q1*y1^2*y3*z2-2*q1*y1^2*y4*z2-q1*y1*y3*y4*z2-2*q1*y1*y4^2*z2-q1*y3*y4^2*z2-q1*y4^3*z2+2*q1*y1^2*z1*z2+
392
+ q1*y1*y3*z1*z2+3*q1*y1*y4*z1*z2+q1*y3*y4*z1*z2+2*q1*y4^2*z1*z2-q1*y1*z1^2*z2-q1*y4*z1^2*z2+q1*y1^2*z2^2+
393
+ q1*y1*y4*z2^2+q1*y4^2*z2^2-q1*y1*z1*z2^2-q1*y4*z1*z2^2-q1*y1^2*y3*z3-q1*y1^2*y4*z3-q1*y1*y3*y4*z3-
394
+ q1*y1*y4^2*z3-q1*y3*y4^2*z3+q1*y1^2*z1*z3+q1*y1*y3*z1*z3+2*q1*y1*y4*z1*z3+q1*y3*y4*z1*z3+q1*y4^2*z1*z3-
395
+ q1*y1*z1^2*z3-q1*y4*z1^2*z3+q1*y1^2*z2*z3+q1*y1*y3*z2*z3+2*q1*y1*y4*z2*z3+q1*y3*y4*z2*z3+q1*y4^2*z2*z3-
396
+ 2*q1*y1*z1*z2*z3-q1*y3*z1*z2*z3-2*q1*y4*z1*z2*z3+q1*z1^2*z2*z3-q1*y1*z2^2*z3-q1*y4*z2^2*z3+q1*z1*z2^2*z3-
397
+ q1*y1^2*y3*z4-q1*y1^2*y4*z4-q1*y1*y3*y4*z4-q1*y1*y4^2*z4-q1*y3*y4^2*z4+q1*y1^2*z1*z4+q1*y1*y3*z1*z4+
398
+ 2*q1*y1*y4*z1*z4+q1*y3*y4*z1*z4+q1*y4^2*z1*z4-q1*y1*z1^2*z4-q1*y4*z1^2*z4+q1*y1^2*z2*z4+q1*y1*y3*z2*z4+
399
+ 2*q1*y1*y4*z2*z4+q1*y3*y4*z2*z4+q1*y4^2*z2*z4-2*q1*y1*z1*z2*z4-q1*y3*z1*z2*z4-2*q1*y4*z1*z2*z4+
400
+ q1*z1^2*z2*z4-q1*y1*z2^2*z4-q1*y4*z2^2*z4+q1*z1*z2^2*z4+q1*y1*y3*z3*z4+q1*y1*y4*z3*z4+q1*y3*y4*z3*z4-
401
+ q1*y1*z1*z3*z4-q1*y3*z1*z3*z4-q1*y4*z1*z3*z4+q1*z1^2*z3*z4-q1*y1*z2*z3*z4-q1*y3*z2*z3*z4-q1*y4*z2*z3*z4+
402
+ q1*z1*z2*z3*z4+q1*z2^2*z3*z4)*QDSx([1, 4, 3, 2], 'y') + (q1*y1^3+q1*y1^2*y4+q1*y1*y4^2+q1*y4^3-
403
+ q1*y1^2*z1-q1*y1*y4*z1-q1*y4^2*z1-q1*y1^2*z2-q1*y1*y4*z2-q1*y4^2*z2+q1*y1*z1*z2+q1*y4*z1*z2-q1*y1^2*z3-
404
+ q1*y1*y4*z3-q1*y4^2*z3+q1*y1*z1*z3+q1*y4*z1*z3+q1*y1*z2*z3+q1*y4*z2*z3-q1*z1*z2*z3-q1*y1^2*z4-
405
+ q1*y1*y4*z4-q1*y4^2*z4+q1*y1*z1*z4+q1*y4*z1*z4+q1*y1*z2*z4+q1*y4*z2*z4-q1*z1*z2*z4+q1*y1*z3*z4+
406
+ q1*y4*z3*z4-q1*z1*z3*z4-q1*z2*z3*z4)*QDSx([1, 4, 5, 2, 3], 'y') + (q1*q3*y1^2+q1*q3*y1*y4+q1*q3*y4^2+
407
+ q1*q3*y1*y5+q1*q3*y4*y5+q1*q3*y5^2-q1*q3*y1*z1-q1*q3*y4*z1-q1*q3*y5*z1-q1*q3*y1*z2-q1*q3*y4*z2-
408
+ q1*q3*y5*z2+q1*q3*z1*z2-q1*q3*y1*z3-q1*q3*y4*z3-q1*q3*y5*z3+q1*q3*z1*z3+q1*q3*z2*z3-q1*q3*y1*z4-
409
+ q1*q3*y4*z4-q1*q3*y5*z4+q1*q3*z1*z4+q1*q3*z2*z4+q1*q3*z3*z4)*QDSx([1, 5, 2, 3, 4], 'y') + (q1*y1^3+
410
+ q1*y1^2*y3+q1*y1^2*y4+q1*y1*y3*y4+q1*y1*y4^2+q1*y3*y4^2+q1*y1^2*y5+q1*y1*y3*y5+q1*y1*y4*y5+q1*y3*y4*y5+
411
+ q1*y1*y5^2+q1*y3*y5^2-2*q1*y1^2*z1-q1*y1*y3*z1-2*q1*y1*y4*z1-q1*y3*y4*z1-q1*y4^2*z1-2*q1*y1*y5*z1-
412
+ q1*y3*y5*z1-q1*y4*y5*z1-q1*y5^2*z1+q1*y1*z1^2+q1*y4*z1^2+q1*y5*z1^2-2*q1*y1^2*z2-q1*y1*y3*z2-
413
+ 2*q1*y1*y4*z2-q1*y3*y4*z2-q1*y4^2*z2-2*q1*y1*y5*z2-q1*y3*y5*z2-q1*y4*y5*z2-q1*y5^2*z2+3*q1*y1*z1*z2+
414
+ q1*y3*z1*z2+2*q1*y4*z1*z2+2*q1*y5*z1*z2-q1*z1^2*z2+q1*y1*z2^2+q1*y4*z2^2+q1*y5*z2^2-q1*z1*z2^2-
415
+ q1*y1^2*z3-q1*y1*y3*z3-q1*y1*y4*z3-q1*y3*y4*z3-q1*y1*y5*z3-q1*y3*y5*z3+2*q1*y1*z1*z3+q1*y3*z1*z3+
416
+ q1*y4*z1*z3+q1*y5*z1*z3-q1*z1^2*z3+2*q1*y1*z2*z3+q1*y3*z2*z3+q1*y4*z2*z3+q1*y5*z2*z3-2*q1*z1*z2*z3-
417
+ q1*z2^2*z3-q1*y1^2*z4-q1*y1*y3*z4-q1*y1*y4*z4-q1*y3*y4*z4-q1*y1*y5*z4-q1*y3*y5*z4+2*q1*y1*z1*z4+
418
+ q1*y3*z1*z4+q1*y4*z1*z4+q1*y5*z1*z4-q1*z1^2*z4+2*q1*y1*z2*z4+q1*y3*z2*z4+q1*y4*z2*z4+q1*y5*z2*z4-
419
+ 2*q1*z1*z2*z4-q1*z2^2*z4+q1*y1*z3*z4+q1*y3*z3*z4-q1*z1*z3*z4-q1*z2*z3*z4)*QDSx([1, 5, 3, 2, 4], 'y') +
420
+ (q1*y1^2+q1*y1*y4+q1*y4^2+q1*y1*y5+q1*y4*y5+q1*y5^2-q1*y1*z1-q1*y4*z1-q1*y5*z1-q1*y1*z2-q1*y4*z2-
421
+ q1*y5*z2+q1*z1*z2-q1*y1*z3-q1*y4*z3-q1*y5*z3+q1*z1*z3+q1*z2*z3-q1*y1*z4-q1*y4*z4-q1*y5*z4+q1*z1*z4+
422
+ q1*z2*z4+q1*z3*z4)*QDSx([1, 5, 4, 2, 3], 'y') + (q1*q3*y1+q1*q3*y4+q1*q3*y5+q1*q3*y6-q1*q3*z1-q1*q3*z2-
423
+ q1*q3*z3-q1*q3*z4)*QDSx([1, 6, 2, 3, 4, 5], 'y') + (q1*y1^2+q1*y1*y3+q1*y1*y4+q1*y3*y4+q1*y1*y5+q1*y3*y5+
424
+ q1*y1*y6+q1*y3*y6-2*q1*y1*z1-q1*y3*z1-q1*y4*z1-q1*y5*z1-q1*y6*z1+q1*z1^2-2*q1*y1*z2-q1*y3*z2-q1*y4*z2-
425
+ q1*y5*z2-q1*y6*z2+2*q1*z1*z2+q1*z2^2-q1*y1*z3-q1*y3*z3+q1*z1*z3+q1*z2*z3-q1*y1*z4-q1*y3*z4+q1*z1*z4+
426
+ q1*z2*z4)*QDSx([1, 6, 3, 2, 4, 5], 'y') + (q1*y1+q1*y4+q1*y5+q1*y6-q1*z1-q1*z2-q1*z3-q1*z4)*QDSx([1, 6,
427
+ 4, 2, 3, 5], 'y') + q1*q3*QDSx([1, 7, 2, 3, 4, 5, 6], 'y') + (q1*y1+q1*y3-q1*z1-q1*z2)*QDSx([1, 7, 3, 2,
428
+ 4, 5, 6], 'y') + q1*QDSx([1, 7, 4, 2, 3, 5, 6], 'y') + (q1*q2*q3*y1^2+q1*q2*q3*y1*y2+q1*q2*q3*y2^2+
429
+ q1*q2*q3*y1*y4+q1*q2*q3*y2*y4+q1*q2*q3*y4^2-q1*q2*q3*y1*z1-q1*q2*q3*y2*z1-q1*q2*q3*y4*z1-q1*q2*q3*y1*z2-
430
+ q1*q2*q3*y2*z2-q1*q2*q3*y4*z2+q1*q2*q3*z1*z2-q1*q2*q3*y1*z3-q1*q2*q3*y2*z3-q1*q2*q3*y4*z3+q1*q2*q3*z1*z3+
431
+ q1*q2*q3*z2*z3-q1*q2*q3*y1*z4-q1*q2*q3*y2*z4-q1*q2*q3*y4*z4+q1*q2*q3*z1*z4+q1*q2*q3*z2*z4+
432
+ q1*q2*q3*z3*z4)*QDSx([2, 1], 'y') + (q1*q2*q3*y1+q1*q2*q3*y2+q1*q2*q3*y4+q1*q2*q3*y5-q1*q2*q3*z1-
433
+ q1*q2*q3*z2-q1*q2*q3*z3-q1*q2*q3*z4)*QDSx([2, 1, 3, 5, 4], 'y') + q1*q2*q3*QDSx([2, 1, 3, 6, 4, 5], 'y')
434
+ + (q1*q3*y1^2+q1*q3*y1*y2+q1*q3*y2^2+q1*q3*y1*y4+q1*q3*y2*y4+q1*q3*y4^2-q1*q3*y1*z1-q1*q3*y2*z1-
435
+ q1*q3*y4*z1-q1*q3*y1*z2-q1*q3*y2*z2-q1*q3*y4*z2+q1*q3*z1*z2-q1*q3*y1*z3-q1*q3*y2*z3-q1*q3*y4*z3+
436
+ q1*q3*z1*z3+q1*q3*z2*z3-q1*q3*y1*z4-q1*q3*y2*z4-q1*q3*y4*z4+q1*q3*z1*z4+q1*q3*z2*z4+
437
+ q1*q3*z3*z4)*QDSx([2, 4, 1, 3], 'y') + (q1*y1^2*y3+q1*y1*y2*y3+q1*y2^2*y3+q1*y1^2*y4+q1*y1*y2*y4+
438
+ q1*y2^2*y4+q1*y1*y3*y4+q1*y2*y3*y4+q1*y1*y4^2+q1*y2*y4^2+q1*y3*y4^2+q1*y4^3-q1*y1^2*z1-q1*y1*y2*z1-
439
+ q1*y2^2*z1-q1*y1*y3*z1-q1*y2*y3*z1-2*q1*y1*y4*z1-2*q1*y2*y4*z1-q1*y3*y4*z1-2*q1*y4^2*z1+q1*y1*z1^2+
440
+ q1*y2*z1^2+q1*y4*z1^2-q1*y1^2*z2-q1*y1*y2*z2-q1*y2^2*z2-q1*y1*y3*z2-q1*y2*y3*z2-2*q1*y1*y4*z2-
441
+ 2*q1*y2*y4*z2-q1*y3*y4*z2-2*q1*y4^2*z2+2*q1*y1*z1*z2+2*q1*y2*z1*z2+q1*y3*z1*z2+3*q1*y4*z1*z2-q1*z1^2*z2+
442
+ q1*y1*z2^2+q1*y2*z2^2+q1*y4*z2^2-q1*z1*z2^2-q1*y1*y3*z3-q1*y2*y3*z3-q1*y1*y4*z3-q1*y2*y4*z3-q1*y3*y4*z3-
443
+ q1*y4^2*z3+q1*y1*z1*z3+q1*y2*z1*z3+q1*y3*z1*z3+2*q1*y4*z1*z3-q1*z1^2*z3+q1*y1*z2*z3+q1*y2*z2*z3+
444
+ q1*y3*z2*z3+2*q1*y4*z2*z3-2*q1*z1*z2*z3-q1*z2^2*z3-q1*y1*y3*z4-q1*y2*y3*z4-q1*y1*y4*z4-q1*y2*y4*z4-
445
+ q1*y3*y4*z4-q1*y4^2*z4+q1*y1*z1*z4+q1*y2*z1*z4+q1*y3*z1*z4+2*q1*y4*z1*z4-q1*z1^2*z4+q1*y1*z2*z4+
446
+ q1*y2*z2*z4+q1*y3*z2*z4+2*q1*y4*z2*z4-2*q1*z1*z2*z4-q1*z2^2*z4+q1*y3*z3*z4+q1*y4*z3*z4-q1*z1*z3*z4-
447
+ q1*z2*z3*z4)*QDSx([2, 4, 3, 1], 'y') + (q1*y1^2+q1*y1*y2+q1*y2^2+q1*y1*y4+q1*y2*y4+q1*y4^2-q1*y1*z1-
448
+ q1*y2*z1-q1*y4*z1-q1*y1*z2-q1*y2*z2-q1*y4*z2+q1*z1*z2-q1*y1*z3-q1*y2*z3-q1*y4*z3+q1*z1*z3+q1*z2*z3-
449
+ q1*y1*z4-q1*y2*z4-q1*y4*z4+q1*z1*z4+q1*z2*z4+q1*z3*z4)*QDSx([2, 4, 5, 1, 3], 'y') + (q1*q3*y1+q1*q3*y2+
450
+ q1*q3*y4+q1*q3*y5-q1*q3*z1-q1*q3*z2-q1*q3*z3-q1*q3*z4)*QDSx([2, 5, 1, 3, 4], 'y') + (q1*y1^2+q1*y1*y2+
451
+ q1*y2^2+q1*y1*y3+q1*y2*y3+q1*y1*y4+q1*y2*y4+q1*y3*y4+q1*y4^2+q1*y1*y5+q1*y2*y5+q1*y3*y5+q1*y4*y5+q1*y5^2-
452
+ 2*q1*y1*z1-2*q1*y2*z1-q1*y3*z1-2*q1*y4*z1-2*q1*y5*z1+q1*z1^2-2*q1*y1*z2-2*q1*y2*z2-q1*y3*z2-2*q1*y4*z2-
453
+ 2*q1*y5*z2+3*q1*z1*z2+q1*z2^2-q1*y1*z3-q1*y2*z3-q1*y3*z3-q1*y4*z3-q1*y5*z3+2*q1*z1*z3+2*q1*z2*z3-
454
+ q1*y1*z4-q1*y2*z4-q1*y3*z4-q1*y4*z4-q1*y5*z4+2*q1*z1*z4+2*q1*z2*z4+q1*z3*z4)*QDSx([2, 5, 3, 1, 4], 'y') +
455
+ (q1*y1+q1*y2+q1*y4+q1*y5-q1*z1-q1*z2-q1*z3-q1*z4)*QDSx([2, 5, 4, 1, 3], 'y') + q1*q3*QDSx([2, 6, 1, 3,
456
+ 4, 5], 'y') + (q1*y1+q1*y2+q1*y3+q1*y4+q1*y5+q1*y6-2*q1*z1-2*q1*z2-q1*z3-q1*z4)*QDSx([2, 6, 3, 1, 4, 5],
457
+ 'y') + q1*QDSx([2, 6, 4, 1, 3, 5], 'y') + q1*QDSx([2, 7, 3, 1, 4, 5, 6], 'y') + (q1*q2*q3*y1+q1*q2*q3*y2+
458
+ q1*q2*q3*y3+q1*q2*q3*y4-q1*q2*q3*z1-q1*q2*q3*z2-q1*q2*q3*z3-q1*q2*q3*z4)*QDSx([3, 1, 2], 'y') +
459
+ q1*q2*q3*QDSx([3, 1, 2, 5, 4], 'y') + (q1*y1^2*y3+q1*y1*y3^2+q1*y1^2*y4+2*q1*y1*y3*y4+q1*y3^2*y4+
460
+ q1*y1*y4^2+q1*y3*y4^2-q1*y1^2*z1-2*q1*y1*y3*z1-q1*y3^2*z1-2*q1*y1*y4*z1-2*q1*y3*y4*z1-q1*y4^2*z1+
461
+ q1*y1*z1^2+q1*y3*z1^2+q1*y4*z1^2-q1*y1^2*z2-2*q1*y1*y3*z2-q1*y3^2*z2-2*q1*y1*y4*z2-2*q1*y3*y4*z2-
462
+ q1*y4^2*z2+2*q1*y1*z1*z2+2*q1*y3*z1*z2+2*q1*y4*z1*z2-q1*z1^2*z2+q1*y1*z2^2+q1*y3*z2^2+q1*y4*z2^2-
463
+ q1*z1*z2^2-q1*y1*y3*z3-q1*y1*y4*z3-q1*y3*y4*z3+q1*y1*z1*z3+q1*y3*z1*z3+q1*y4*z1*z3-q1*z1^2*z3+
464
+ q1*y1*z2*z3+q1*y3*z2*z3+q1*y4*z2*z3-q1*z1*z2*z3-q1*z2^2*z3-q1*y1*y3*z4-q1*y1*y4*z4-q1*y3*y4*z4+
465
+ q1*y1*z1*z4+q1*y3*z1*z4+q1*y4*z1*z4-q1*z1^2*z4+q1*y1*z2*z4+q1*y3*z2*z4+q1*y4*z2*z4-q1*z1*z2*z4-
466
+ q1*z2^2*z4+q1*q3*y1+q1*q3*y2+q1*q3*y3+q1*q3*y4-q1*q3*z1-q1*q3*z2-q1*q3*z3-q1*q3*z4)*QDSx([3, 4, 1, 2],
467
+ 'y') + (q1*y1*y3+q1*y2*y3+q1*y3^2+q1*y1*y4+q1*y2*y4+2*q1*y3*y4+q1*y4^2-q1*y1*z1-q1*y2*z1-2*q1*y3*z1-
468
+ 2*q1*y4*z1+q1*z1^2-q1*y1*z2-q1*y2*z2-2*q1*y3*z2-2*q1*y4*z2+2*q1*z1*z2+q1*z2^2-q1*y3*z3-q1*y4*z3+q1*z1*z3+
469
+ q1*z2*z3-q1*y3*z4-q1*y4*z4+q1*z1*z4+q1*z2*z4)*QDSx([3, 4, 2, 1], 'y') + (q1*y1+q1*y2+q1*y3+q1*y4-q1*z1-
470
+ q1*z2-q1*z3-q1*z4)*QDSx([3, 4, 5, 1, 2], 'y') + (q1*y1^2+2*q1*y1*y3+q1*y3^2+q1*y1*y4+q1*y3*y4+q1*y1*y5+
471
+ q1*y3*y5-2*q1*y1*z1-2*q1*y3*z1-q1*y4*z1-q1*y5*z1+q1*z1^2-2*q1*y1*z2-2*q1*y3*z2-q1*y4*z2-q1*y5*z2+
472
+ 2*q1*z1*z2+q1*z2^2-q1*y1*z3-q1*y3*z3+q1*z1*z3+q1*z2*z3-q1*y1*z4-q1*y3*z4+q1*z1*z4+q1*z2*z4+
473
+ q1*q3)*QDSx([3, 5, 1, 2, 4], 'y') + (q1*y1+q1*y2+2*q1*y3+q1*y4+q1*y5-2*q1*z1-2*q1*z2-q1*z3-
474
+ q1*z4)*QDSx([3, 5, 2, 1, 4], 'y') + q1*QDSx([3, 5, 4, 1, 2], 'y') + (q1*y1+q1*y3-q1*z1-q1*z2)*QDSx([3,
475
+ 6, 1, 2, 4, 5], 'y') + q1*QDSx([3, 6, 2, 1, 4, 5], 'y') + (q3*y4^4-q3*y4^3*z1-q3*y4^3*z2+q3*y4^2*z1*z2-
476
+ q3*y4^3*z3+q3*y4^2*z1*z3+q3*y4^2*z2*z3-q3*y4*z1*z2*z3-q3*y4^3*z4+q3*y4^2*z1*z4+q3*y4^2*z2*z4-
477
+ q3*y4*z1*z2*z4+q3*y4^2*z3*z4-q3*y4*z1*z3*z4-q3*y4*z2*z3*z4+q3*z1*z2*z3*z4)*QDSx([4, 1, 2, 3], 'y') +
478
+ (y1*y4^4+y3*y4^4-y1*y4^3*z1-y3*y4^3*z1-y4^4*z1+y4^3*z1^2-y1*y4^3*z2-y3*y4^3*z2-y4^4*z2+y1*y4^2*z1*z2+
479
+ y3*y4^2*z1*z2+2*y4^3*z1*z2-y4^2*z1^2*z2+y4^3*z2^2-y4^2*z1*z2^2-y1*y4^3*z3-y3*y4^3*z3+y1*y4^2*z1*z3+
480
+ y3*y4^2*z1*z3+y4^3*z1*z3-y4^2*z1^2*z3+y1*y4^2*z2*z3+y3*y4^2*z2*z3+y4^3*z2*z3-y1*y4*z1*z2*z3-
481
+ y3*y4*z1*z2*z3-2*y4^2*z1*z2*z3+y4*z1^2*z2*z3-y4^2*z2^2*z3+y4*z1*z2^2*z3-y1*y4^3*z4-y3*y4^3*z4+
482
+ y1*y4^2*z1*z4+y3*y4^2*z1*z4+y4^3*z1*z4-y4^2*z1^2*z4+y1*y4^2*z2*z4+y3*y4^2*z2*z4+y4^3*z2*z4-
483
+ 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+y4*z1*z2^2*z4+y1*y4^2*z3*z4+
484
+ 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-y1*y4*z2*z3*z4-y3*y4*z2*z3*z4-
485
+ 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+y4*z2^2*z3*z4-
486
+ z1*z2^2*z3*z4)*QDSx([4, 1, 3, 2], 'y') + (y4^4-y4^3*z1-y4^3*z2+y4^2*z1*z2-y4^3*z3+y4^2*z1*z3+y4^2*z2*z3-
487
+ 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+
488
+ z1*z2*z3*z4)*QDSx([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+y4^2*z2*z3-
489
+ 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+
490
+ z1*z2*z3*z4)*QDSx([4, 2, 3, 1], 'y') + (q1*y1+q1*y3+q1*y4+q1*y5-q1*z1-q1*z2-q1*z3-q1*z4)*QDSx([4, 5, 1,
491
+ 2, 3], 'y') + q1*QDSx([4, 5, 2, 1, 3], 'y') + q1*QDSx([4, 6, 1, 2, 3, 5], 'y') + (q3*y4^3+q3*y4^2*y5+
492
+ q3*y4*y5^2+q3*y5^3-q3*y4^2*z1-q3*y4*y5*z1-q3*y5^2*z1-q3*y4^2*z2-q3*y4*y5*z2-q3*y5^2*z2+q3*y4*z1*z2+
493
+ q3*y5*z1*z2-q3*y4^2*z3-q3*y4*y5*z3-q3*y5^2*z3+q3*y4*z1*z3+q3*y5*z1*z3+q3*y4*z2*z3+q3*y5*z2*z3-
494
+ q3*z1*z2*z3-q3*y4^2*z4-q3*y4*y5*z4-q3*y5^2*z4+q3*y4*z1*z4+q3*y5*z1*z4+q3*y4*z2*z4+q3*y5*z2*z4-
495
+ q3*z1*z2*z4+q3*y4*z3*z4+q3*y5*z3*z4-q3*z1*z3*z4-q3*z2*z3*z4)*QDSx([5, 1, 2, 3, 4], 'y') + (y1*y4^3+
496
+ 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-y3*y4^2*z1-y4^3*z1-
497
+ 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+y4*y5*z1^2+
498
+ 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-y3*y5^2*z2-
499
+ 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+
500
+ 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-
501
+ 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+
502
+ 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+
503
+ 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-
504
+ 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+
505
+ 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+
506
+ 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-
507
+ 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+
508
+ 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-
509
+ 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)*QDSx([5, 1, 3, 2, 4], 'y') +
510
+ (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-
511
+ 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+
512
+ y4*z2*z4+y5*z2*z4-z1*z2*z4+y4*z3*z4+y5*z3*z4-z1*z3*z4-z2*z3*z4)*QDSx([5, 1, 4, 2, 3], 'y') + (y4^3+
513
+ 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-
514
+ 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+
515
+ y4*z2*z4+y5*z2*z4-z1*z2*z4+y4*z3*z4+y5*z3*z4-z1*z3*z4-z2*z3*z4)*QDSx([5, 2, 3, 1, 4], 'y') + (q3*y4^2+
516
+ q3*y4*y5+q3*y5^2+q3*y4*y6+q3*y5*y6+q3*y6^2-q3*y4*z1-q3*y5*z1-q3*y6*z1-q3*y4*z2-q3*y5*z2-q3*y6*z2+
517
+ q3*z1*z2-q3*y4*z3-q3*y5*z3-q3*y6*z3+q3*z1*z3+q3*z2*z3-q3*y4*z4-q3*y5*z4-q3*y6*z4+q3*z1*z4+q3*z2*z4+
518
+ q3*z3*z4)*QDSx([6, 1, 2, 3, 4, 5], 'y') + (y1*y4^2+y3*y4^2+y1*y4*y5+y3*y4*y5+y1*y5^2+y3*y5^2+y1*y4*y6+
519
+ 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-y4*y5*z1-y5^2*z1-
520
+ 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-y4^2*z2-y1*y5*z2-
521
+ 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+2*y4*z1*z2+
522
+ 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-y3*y5*z3-
523
+ 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+y4*z2*z3+
524
+ 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+y1*z1*z4+
525
+ 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-2*z1*z2*z4-
526
+ z2^2*z4+y1*z3*z4+y3*z3*z4-z1*z3*z4-z2*z3*z4)*QDSx([6, 1, 3, 2, 4, 5], 'y') + (y4^2+y4*y5+y5^2+y4*y6+
527
+ 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-y6*z4+
528
+ z1*z4+z2*z4+z3*z4)*QDSx([6, 1, 4, 2, 3, 5], 'y') + (y4^2+y4*y5+y5^2+y4*y6+y5*y6+y6^2-y4*z1-y5*z1-y6*z1-
529
+ 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)*QDSx([6, 2,
530
+ 3, 1, 4, 5], 'y') + (q3*y4+q3*y5+q3*y6+q3*y7-q3*z1-q3*z2-q3*z3-q3*z4)*QDSx([7, 1, 2, 3, 4, 5, 6], 'y') +
531
+ (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-y1*z2-y3*z2-
532
+ 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+z2*z4)*QDSx([7, 1, 3, 2,
533
+ 4, 5, 6], 'y') + (y4+y5+y6+y7-z1-z2-z3-z4)*QDSx([7, 1, 4, 2, 3, 5, 6], 'y') + (y4+y5+y6+y7-z1-z2-z3-
534
+ z4)*QDSx([7, 2, 3, 1, 4, 5, 6], 'y') + q3*QDSx([8, 1, 2, 3, 4, 5, 6, 7], 'y') + (y1+y3-z1-z2)*QDSx([8,
535
+ 1, 3, 2, 4, 5, 6, 7], 'y') + QDSx([8, 1, 4, 2, 3, 5, 6, 7], 'y') + QDSx([8, 2, 3, 1, 4, 5, 6, 7],
536
+ 'y')
537
+ ```
538
+ This output of roughly 17,000 characters took about 2 seconds to compute on my laptop. **Again note that
539
+ quantum double computations are technically conjectural, but a proof is likely forthcoming.**
540
+
541
+
542
+ [Homepage of schubmult](http://schubmult.org/)