schubmult 2.0.1__py3-none-any.whl → 2.0.3__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.
- schubmult/__init__.py +1 -1
- schubmult/_base_argparse.py +35 -6
- schubmult/_tests.py +9 -0
- schubmult/sage_integration/__init__.py +1 -0
- schubmult/sage_integration/_fast_double_schubert_polynomial_ring.py +68 -11
- schubmult/sage_integration/_fast_schubert_polynomial_ring.py +48 -6
- schubmult/sage_integration/_indexing.py +11 -4
- schubmult/schubmult_double/__init__.py +6 -2
- schubmult/schubmult_double/__main__.py +1 -1
- schubmult/schubmult_double/_funcs.py +112 -32
- schubmult/schubmult_double/_script.py +109 -51
- schubmult/schubmult_py/__init__.py +5 -2
- schubmult/schubmult_py/__main__.py +1 -1
- schubmult/schubmult_py/_funcs.py +54 -9
- schubmult/schubmult_py/_script.py +33 -52
- schubmult/schubmult_q/__init__.py +1 -0
- schubmult/schubmult_q/__main__.py +1 -1
- schubmult/schubmult_q/_funcs.py +21 -37
- schubmult/schubmult_q/_script.py +19 -16
- schubmult/schubmult_q_double/__init__.py +5 -2
- schubmult/schubmult_q_double/__main__.py +1 -1
- schubmult/schubmult_q_double/_funcs.py +57 -24
- schubmult/schubmult_q_double/_script.py +200 -139
- {schubmult-2.0.1.dist-info → schubmult-2.0.3.dist-info}/METADATA +4 -4
- schubmult-2.0.3.dist-info/RECORD +30 -0
- {schubmult-2.0.1.dist-info → schubmult-2.0.3.dist-info}/WHEEL +1 -1
- schubmult-2.0.3.dist-info/entry_points.txt +5 -0
- {schubmult-2.0.1.dist-info → schubmult-2.0.3.dist-info}/top_level.txt +0 -1
- schubmult/schubmult_double/_vars.py +0 -18
- schubmult/schubmult_py/_vars.py +0 -3
- schubmult/schubmult_q/_vars.py +0 -18
- schubmult/schubmult_q_double/_vars.py +0 -21
- schubmult-2.0.1.dist-info/RECORD +0 -36
- schubmult-2.0.1.dist-info/entry_points.txt +0 -5
- tests/__init__.py +0 -0
- tests/test_fast_double_schubert.py +0 -145
- tests/test_fast_schubert.py +0 -38
- {schubmult-2.0.1.dist-info → schubmult-2.0.3.dist-info}/licenses/LICENSE +0 -0
@@ -1,7 +1,5 @@
|
|
1
|
-
from ._funcs import
|
2
|
-
|
3
|
-
schubmult,
|
4
|
-
)
|
1
|
+
from schubmult.schubmult_py._funcs import mult_poly, schubmult, schub_coprod
|
2
|
+
import sys
|
5
3
|
from symengine import sympify
|
6
4
|
from schubmult._base_argparse import schub_argparse
|
7
5
|
from schubmult.perm_lib import (
|
@@ -9,16 +7,18 @@ from schubmult.perm_lib import (
|
|
9
7
|
theta,
|
10
8
|
permtrim,
|
11
9
|
inv,
|
12
|
-
mulperm,
|
13
|
-
code,
|
14
10
|
uncode,
|
15
11
|
trimcode,
|
16
12
|
)
|
17
13
|
|
18
14
|
|
19
|
-
def main():
|
15
|
+
def main(argv=None):
|
16
|
+
if argv is None:
|
17
|
+
argv = sys.argv
|
20
18
|
try:
|
21
|
-
args, formatter = schub_argparse(
|
19
|
+
args, formatter = schub_argparse(
|
20
|
+
"schubmult_py", "Compute products of ordinary Schubert polynomials", argv=argv[1:]
|
21
|
+
)
|
22
22
|
|
23
23
|
mult = args.mult
|
24
24
|
mulstring = args.mulstring
|
@@ -36,55 +36,30 @@ def main():
|
|
36
36
|
ascode = args.ascode
|
37
37
|
pr = args.pr
|
38
38
|
coprod = args.coprod
|
39
|
-
|
39
|
+
raw_result_dict = {}
|
40
40
|
if coprod:
|
41
41
|
if ascode:
|
42
42
|
perms[0] = tuple(permtrim(uncode(perms[0])))
|
43
43
|
pos = [*perms[1]]
|
44
44
|
pos.sort()
|
45
|
-
mperm = perms[0]
|
45
|
+
mperm = tuple(permtrim(perms[0]))
|
46
46
|
|
47
|
-
|
48
|
-
perms[0] = mperm
|
47
|
+
coeff_dict = schub_coprod(mperm, pos)
|
49
48
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
coeff_dict = schubmult(coeff_dict, tuple(permtrim([*perms[0]])))
|
59
|
-
|
60
|
-
inv_kperm = inv(kperm)
|
61
|
-
inverse_kperm = inverse(kperm)
|
62
|
-
if pr:
|
63
|
-
for perm, val in coeff_dict.items():
|
64
|
-
downperm = mulperm(list(perm), inverse_kperm)
|
65
|
-
if inv(downperm) == inv(perm) - inv_kperm:
|
66
|
-
flag = True
|
67
|
-
for i in range(N):
|
68
|
-
if downperm[i] > N:
|
69
|
-
flag = False
|
70
|
-
break
|
71
|
-
if not flag:
|
72
|
-
continue
|
73
|
-
firstperm = downperm[0:N]
|
74
|
-
secondperm = [downperm[i] - N for i in range(N, len(downperm))]
|
75
|
-
if val != 0:
|
76
|
-
# firstcode = code(firstperm)
|
77
|
-
# while len(firstcode)>0 and firstcode[-1] == 0:
|
78
|
-
# firstcode.pop()
|
79
|
-
# secondcode = code(secondperm)
|
80
|
-
# while len(secondcode)>0 and secondcode[-1] == 0:
|
81
|
-
# secondcode.pop()
|
82
|
-
if ascode:
|
49
|
+
if pr or formatter is None:
|
50
|
+
for firstperm, secondperm in coeff_dict:
|
51
|
+
val = coeff_dict[(firstperm, secondperm)]
|
52
|
+
if val != 0:
|
53
|
+
if ascode:
|
54
|
+
if formatter is None:
|
55
|
+
raw_result_dict[(firstperm, secondperm)] = val
|
56
|
+
else:
|
83
57
|
print(f"{val} {trimcode(firstperm)} {trimcode(secondperm)}")
|
58
|
+
else:
|
59
|
+
if formatter is None:
|
60
|
+
raw_result_dict[(firstperm, secondperm)] = val
|
84
61
|
else:
|
85
|
-
print(
|
86
|
-
f"{val} {tuple(permtrim(firstperm))} {tuple(permtrim(secondperm))}"
|
87
|
-
)
|
62
|
+
print(f"{val} {firstperm} {secondperm}")
|
88
63
|
else:
|
89
64
|
if ascode:
|
90
65
|
for i in range(len(perms)):
|
@@ -100,16 +75,22 @@ def main():
|
|
100
75
|
mul_exp = sympify(mulstring)
|
101
76
|
coeff_dict = mult_poly(coeff_dict, mul_exp)
|
102
77
|
|
103
|
-
if pr:
|
78
|
+
if pr or formatter is None:
|
104
79
|
for perm, val in coeff_dict.items():
|
105
80
|
if val != 0:
|
106
81
|
if ascode:
|
107
|
-
|
82
|
+
raw_result_dict[tuple(trimcode(perm))] = val
|
83
|
+
if formatter:
|
84
|
+
print(f"{val} {trimcode(perm)}")
|
108
85
|
else:
|
109
|
-
|
86
|
+
raw_result_dict[tuple(perm)] = val
|
87
|
+
if formatter:
|
88
|
+
print(f"{val} {perm}")
|
89
|
+
if formatter is None:
|
90
|
+
return raw_result_dict
|
110
91
|
except BrokenPipeError:
|
111
92
|
pass
|
112
93
|
|
113
94
|
|
114
95
|
if __name__ == "__main__":
|
115
|
-
main()
|
96
|
+
main(sys.argv)
|
schubmult/schubmult_q/_funcs.py
CHANGED
@@ -1,7 +1,4 @@
|
|
1
|
-
from
|
2
|
-
var_x,
|
3
|
-
)
|
4
|
-
from symengine import Add, Mul, Pow
|
1
|
+
from symengine import Add, Mul, Pow, symarray
|
5
2
|
from schubmult.perm_lib import (
|
6
3
|
elem_sym_perms_q,
|
7
4
|
add_perm_dict,
|
@@ -14,41 +11,28 @@ from schubmult.perm_lib import (
|
|
14
11
|
mulperm,
|
15
12
|
code,
|
16
13
|
uncode,
|
17
|
-
double_elem_sym_q,
|
18
|
-
q_var,
|
14
|
+
double_elem_sym_q,
|
19
15
|
)
|
20
16
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
# double_elem_sym_q,
|
37
|
-
# longest_element,
|
38
|
-
# check_blocks,
|
39
|
-
# is_parabolic,
|
40
|
-
# q_vector,
|
41
|
-
# omega,
|
42
|
-
# count_less_than,
|
43
|
-
# q_var,
|
44
|
-
# sg,
|
45
|
-
# n,
|
46
|
-
# )
|
47
|
-
# import numpy as np
|
48
|
-
# from schubmult.schubmult_q_double import factor_out_q_keep_factored
|
17
|
+
from functools import cached_property
|
18
|
+
|
19
|
+
|
20
|
+
class _gvars:
|
21
|
+
@cached_property
|
22
|
+
def n(self):
|
23
|
+
return 100
|
24
|
+
|
25
|
+
@cached_property
|
26
|
+
def var_x(self):
|
27
|
+
return tuple(symarray("x", self.n).tolist())
|
28
|
+
|
29
|
+
@cached_property
|
30
|
+
def q_var(self):
|
31
|
+
return tuple(symarray("q", self.n).tolist())
|
49
32
|
|
33
|
+
_vars = _gvars()
|
50
34
|
|
51
|
-
def single_variable(coeff_dict, varnum, var_q=q_var):
|
35
|
+
def single_variable(coeff_dict, varnum, var_q=_vars.q_var):
|
52
36
|
ret = {}
|
53
37
|
for u in coeff_dict:
|
54
38
|
new_perms_k = elem_sym_perms_q(u, 1, varnum, var_q)
|
@@ -64,7 +48,7 @@ def single_variable(coeff_dict, varnum, var_q=q_var):
|
|
64
48
|
return ret
|
65
49
|
|
66
50
|
|
67
|
-
def mult_poly(coeff_dict, poly, var_x=var_x, var_q=q_var):
|
51
|
+
def mult_poly(coeff_dict, poly, var_x=_vars.var_x, var_q=_vars.q_var):
|
68
52
|
if poly in var_x:
|
69
53
|
return single_variable(coeff_dict, var_x.index(poly), var_q=var_q)
|
70
54
|
elif isinstance(poly, Mul):
|
@@ -90,7 +74,7 @@ def mult_poly(coeff_dict, poly, var_x=var_x, var_q=q_var):
|
|
90
74
|
ret[perm] = poly * coeff_dict[perm]
|
91
75
|
return ret
|
92
76
|
|
93
|
-
def schubmult_db(perm_dict, v, q_var=q_var):
|
77
|
+
def schubmult_db(perm_dict, v, q_var=_vars.q_var):
|
94
78
|
if v == (1, 2):
|
95
79
|
return perm_dict
|
96
80
|
th = medium_theta(inverse(v))
|
schubmult/schubmult_q/_script.py
CHANGED
@@ -1,7 +1,6 @@
|
|
1
|
-
from ._funcs import (
|
1
|
+
from schubmult.schubmult_q._funcs import (
|
2
2
|
schubmult,
|
3
3
|
schubmult_db,
|
4
|
-
mult_poly,
|
5
4
|
)
|
6
5
|
from symengine import sympify
|
7
6
|
from schubmult._base_argparse import schub_argparse
|
@@ -22,9 +21,10 @@ from schubmult.perm_lib import (
|
|
22
21
|
)
|
23
22
|
import numpy as np
|
24
23
|
from schubmult.schubmult_q_double import factor_out_q_keep_factored
|
25
|
-
|
24
|
+
import sys
|
26
25
|
|
27
26
|
def _display_full(coeff_dict, args, formatter):
|
27
|
+
raw_result_dict = {}
|
28
28
|
ascode = args.ascode
|
29
29
|
parabolic_index = [int(s) for s in args.parabolic]
|
30
30
|
parabolic = len(parabolic_index) != 0
|
@@ -81,25 +81,25 @@ def _display_full(coeff_dict, args, formatter):
|
|
81
81
|
val = sympify(coeff_dict[perm]).expand()
|
82
82
|
if val != 0:
|
83
83
|
if ascode:
|
84
|
+
|
84
85
|
print(f"{str(trimcode(perm))} {formatter(val)}")
|
85
86
|
else:
|
86
87
|
print(f"{str(perm)} {formatter(val)}")
|
88
|
+
return raw_result_dict
|
87
89
|
|
88
90
|
|
89
|
-
def main():
|
91
|
+
def main(argv=None):
|
92
|
+
if argv is None:
|
93
|
+
argv = sys.argv
|
90
94
|
try:
|
91
95
|
args, formatter = schub_argparse(
|
92
96
|
"schubmult_q",
|
93
97
|
"Compute products of quantum Schubert polynomials",
|
98
|
+
argv=argv[1:],
|
94
99
|
quantum=True,
|
95
100
|
)
|
96
101
|
|
97
|
-
|
98
|
-
|
99
|
-
mult = False
|
100
|
-
if args.mult is not None:
|
101
|
-
mult = True
|
102
|
-
mulstring = " ".join(args.mult)
|
102
|
+
|
103
103
|
|
104
104
|
perms = args.perms
|
105
105
|
|
@@ -143,15 +143,18 @@ def main():
|
|
143
143
|
for perm in perms[1:]:
|
144
144
|
coeff_dict = schubmult(coeff_dict, tuple(permtrim([*perm])))
|
145
145
|
|
146
|
-
if mult:
|
147
|
-
|
148
|
-
|
146
|
+
# if mult:
|
147
|
+
# mul_exp = sympify(mulstring)
|
148
|
+
# coeff_dict = mult_poly(coeff_dict, mul_exp)
|
149
149
|
|
150
|
-
if pr:
|
151
|
-
_display_full(coeff_dict, args, formatter)
|
150
|
+
if pr or formatter is None:
|
151
|
+
raw_result_dict = _display_full(coeff_dict, args, formatter)
|
152
|
+
if formatter is None:
|
153
|
+
return raw_result_dict
|
152
154
|
except BrokenPipeError:
|
153
155
|
pass
|
154
156
|
|
155
157
|
|
156
158
|
if __name__ == "__main__":
|
157
|
-
|
159
|
+
import sys
|
160
|
+
main(sys.argv)
|
@@ -2,7 +2,8 @@ from ._funcs import (
|
|
2
2
|
schubmult,
|
3
3
|
schubmult_db,
|
4
4
|
mult_poly,
|
5
|
-
factor_out_q_keep_factored
|
5
|
+
factor_out_q_keep_factored,
|
6
|
+
schubpoly_quantum
|
6
7
|
)
|
7
8
|
|
8
9
|
|
@@ -10,5 +11,7 @@ __all__ = [
|
|
10
11
|
"schubmult",
|
11
12
|
"schubmult_db",
|
12
13
|
"mult_poly",
|
13
|
-
"factor_out_q_keep_factored"
|
14
|
+
"factor_out_q_keep_factored",
|
15
|
+
"schubpoly_quantum"
|
14
16
|
]
|
17
|
+
|
@@ -1,11 +1,13 @@
|
|
1
|
-
from ._vars import (
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
)
|
8
|
-
|
1
|
+
# from ._vars import (
|
2
|
+
# var_y,
|
3
|
+
# var_x,
|
4
|
+
# var2,
|
5
|
+
# var3,
|
6
|
+
# q_var2,
|
7
|
+
# )
|
8
|
+
import schubmult.schubmult_double as norm_yz
|
9
|
+
|
10
|
+
from symengine import Add, Mul, Pow, expand, symarray
|
9
11
|
from schubmult.perm_lib import (
|
10
12
|
elem_sym_perms_q,
|
11
13
|
add_perm_dict,
|
@@ -22,16 +24,47 @@ from schubmult.perm_lib import (
|
|
22
24
|
elem_sym_perms_q_op,
|
23
25
|
elem_sym_func_q,
|
24
26
|
call_zvars,
|
25
|
-
q_var,
|
26
27
|
)
|
27
|
-
|
28
|
+
from functools import cached_property
|
29
|
+
|
30
|
+
class _gvars:
|
31
|
+
@cached_property
|
32
|
+
def n(self):
|
33
|
+
return 100
|
34
|
+
|
35
|
+
# @cached_property
|
36
|
+
# def fvar(self):
|
37
|
+
# return 100
|
38
|
+
|
39
|
+
@cached_property
|
40
|
+
def var1(self):
|
41
|
+
return tuple(symarray("x", self.n).tolist())
|
42
|
+
|
43
|
+
@cached_property
|
44
|
+
def var2(self):
|
45
|
+
return tuple(symarray("y", self.n).tolist())
|
46
|
+
|
47
|
+
@cached_property
|
48
|
+
def var3(self):
|
49
|
+
return tuple(symarray("z", self.n).tolist())
|
50
|
+
|
51
|
+
@cached_property
|
52
|
+
def q_var(self):
|
53
|
+
return tuple(symarray("q", self.n).tolist())
|
54
|
+
|
55
|
+
@cached_property
|
56
|
+
def var_r(self):
|
57
|
+
return symarray("r", 100)
|
58
|
+
|
59
|
+
|
60
|
+
_vars = _gvars()
|
28
61
|
|
29
62
|
|
30
|
-
def E(p, k, varl=
|
63
|
+
def E(p, k, varl=_vars.var2[1:],var_x=_vars.var1):
|
31
64
|
return elem_sym_poly_q(p, k, var_x[1:], varl)
|
32
65
|
|
33
66
|
|
34
|
-
def single_variable(coeff_dict, varnum, var2=var2, q_var=q_var):
|
67
|
+
def single_variable(coeff_dict, varnum, var2=_vars.var2, q_var=_vars.q_var):
|
35
68
|
ret = {}
|
36
69
|
for u in coeff_dict:
|
37
70
|
if varnum - 1 < len(u):
|
@@ -51,7 +84,7 @@ def single_variable(coeff_dict, varnum, var2=var2, q_var=q_var):
|
|
51
84
|
return ret
|
52
85
|
|
53
86
|
|
54
|
-
def mult_poly(coeff_dict, poly, var_x=
|
87
|
+
def mult_poly(coeff_dict, poly, var_x=_vars.var1, var_y=_vars.var2, q_var=_vars.q_var):
|
55
88
|
if poly in var_x:
|
56
89
|
return single_variable(coeff_dict, var_x.index(poly), var_y, q_var)
|
57
90
|
elif isinstance(poly, Mul):
|
@@ -78,7 +111,7 @@ def mult_poly(coeff_dict, poly, var_x=var_x, var_y=var_y, q_var=q_var):
|
|
78
111
|
return ret
|
79
112
|
|
80
113
|
|
81
|
-
def nil_hecke(perm_dict, v, n, var2=var2, var3=var3):
|
114
|
+
def nil_hecke(perm_dict, v, n, var2=_vars.var2, var3=_vars.var3):
|
82
115
|
if v == (1, 2):
|
83
116
|
return perm_dict
|
84
117
|
th = strict_theta(inverse(v))
|
@@ -129,7 +162,7 @@ def nil_hecke(perm_dict, v, n, var2=var2, var3=var3):
|
|
129
162
|
return ret_dict
|
130
163
|
|
131
164
|
|
132
|
-
def elem_sym_func_q_q(k, i, u1, u2, v1, v2, udiff, vdiff, varl1, varl2, q_var=q_var):
|
165
|
+
def elem_sym_func_q_q(k, i, u1, u2, v1, v2, udiff, vdiff, varl1, varl2, q_var=_vars.q_var):
|
133
166
|
newk = k - udiff
|
134
167
|
if newk < vdiff:
|
135
168
|
return 0
|
@@ -151,7 +184,7 @@ def elem_sym_func_q_q(k, i, u1, u2, v1, v2, udiff, vdiff, varl1, varl2, q_var=q_
|
|
151
184
|
return elem_sym_poly_q(newk - vdiff, newk, yvars, zvars, q_var)
|
152
185
|
|
153
186
|
|
154
|
-
def schubpoly_quantum(v, var_x=
|
187
|
+
def schubpoly_quantum(v, var_x=_vars.var1, var_y=_vars.var2, q_var=_vars.q_var, coeff=1):
|
155
188
|
th = strict_theta(inverse(v))
|
156
189
|
mu = permtrim(uncode(th))
|
157
190
|
vmu = permtrim(mulperm([*v], mu))
|
@@ -206,7 +239,7 @@ def schubpoly_quantum(v, var_x=var_x, var_y=var2, q_var=q_var, coeff=1):
|
|
206
239
|
return ret_dict[(1, 2)]
|
207
240
|
|
208
241
|
|
209
|
-
def schubmult(perm_dict, v, var2=var2, var3=var3, q_var=q_var):
|
242
|
+
def schubmult(perm_dict, v, var2=_vars.var2, var3=_vars.var3, q_var=_vars.q_var):
|
210
243
|
if v == (1, 2):
|
211
244
|
return perm_dict
|
212
245
|
th = strict_theta(inverse(v))
|
@@ -267,7 +300,7 @@ def schubmult(perm_dict, v, var2=var2, var3=var3, q_var=q_var):
|
|
267
300
|
return ret_dict
|
268
301
|
|
269
302
|
|
270
|
-
def schubmult_db(perm_dict, v, var2=var2, var3=var3, q_var=q_var):
|
303
|
+
def schubmult_db(perm_dict, v, var2=_vars.var2, var3=_vars.var3, q_var=_vars.q_var):
|
271
304
|
if v == (1, 2):
|
272
305
|
return perm_dict
|
273
306
|
th = medium_theta(inverse(v))
|
@@ -400,7 +433,7 @@ def schubmult_db(perm_dict, v, var2=var2, var3=var3, q_var=q_var):
|
|
400
433
|
return ret_dict
|
401
434
|
|
402
435
|
|
403
|
-
def div_diff(v, w, var2=var2, var3=var3):
|
436
|
+
def div_diff(v, w, var2=_vars.var2, var3=_vars.var3):
|
404
437
|
coeff_dict = {v: 1}
|
405
438
|
coeff_dict = norm_yz.schubmult_down(coeff_dict, w, var2, var3)
|
406
439
|
return coeff_dict.get((1, 2), 0)
|
@@ -427,7 +460,7 @@ def factor_out_q_keep_factored(poly):
|
|
427
460
|
if str(poly).find("q") == -1:
|
428
461
|
ret[1] = poly
|
429
462
|
return ret
|
430
|
-
elif poly in
|
463
|
+
elif poly in _vars.q_var:
|
431
464
|
ret[poly] = 1
|
432
465
|
return ret
|
433
466
|
elif isinstance(poly, Add):
|
@@ -481,24 +514,24 @@ def factor_out_q(poly):
|
|
481
514
|
for var_maybe_pow in key.args:
|
482
515
|
if isinstance(var_maybe_pow, Pow):
|
483
516
|
real_var = var_maybe_pow.args[0]
|
484
|
-
if real_var in
|
517
|
+
if real_var in _vars.q_var:
|
485
518
|
q_part *= var_maybe_pow
|
486
519
|
else:
|
487
520
|
yz_part *= var_maybe_pow
|
488
521
|
else:
|
489
522
|
real_var = var_maybe_pow
|
490
|
-
if real_var in
|
523
|
+
if real_var in _vars.q_var:
|
491
524
|
q_part *= var_maybe_pow
|
492
525
|
else:
|
493
526
|
yz_part *= var_maybe_pow
|
494
527
|
elif isinstance(key, Pow):
|
495
528
|
real_var = key.args[0]
|
496
|
-
if real_var in
|
529
|
+
if real_var in _vars.q_var:
|
497
530
|
q_part *= key
|
498
531
|
else:
|
499
532
|
yz_part *= key
|
500
533
|
else:
|
501
|
-
if key in
|
534
|
+
if key in _vars.q_var:
|
502
535
|
q_part *= key
|
503
536
|
else:
|
504
537
|
yz_part *= key
|