schubmult 2.0.4__py3-none-any.whl → 3.0.1__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 +96 -1
- schubmult/perm_lib.py +254 -819
- schubmult/poly_lib/__init__.py +31 -0
- schubmult/poly_lib/poly_lib.py +276 -0
- schubmult/poly_lib/schub_poly.py +148 -0
- schubmult/poly_lib/variables.py +204 -0
- schubmult/rings/__init__.py +18 -0
- schubmult/rings/_quantum_schubert_polynomial_ring.py +752 -0
- schubmult/rings/_schubert_polynomial_ring.py +1031 -0
- schubmult/rings/_tensor_schub_ring.py +128 -0
- schubmult/rings/_utils.py +55 -0
- schubmult/{sage_integration → sage}/__init__.py +4 -1
- schubmult/{sage_integration → sage}/_fast_double_schubert_polynomial_ring.py +67 -109
- schubmult/{sage_integration → sage}/_fast_schubert_polynomial_ring.py +33 -28
- schubmult/{sage_integration → sage}/_indexing.py +9 -5
- schubmult/schub_lib/__init__.py +51 -0
- schubmult/{schubmult_double/_funcs.py → schub_lib/double.py} +532 -596
- schubmult/{schubmult_q/_funcs.py → schub_lib/quantum.py} +54 -53
- schubmult/schub_lib/quantum_double.py +954 -0
- schubmult/schub_lib/schub_lib.py +659 -0
- schubmult/{schubmult_py/_funcs.py → schub_lib/single.py} +45 -35
- schubmult/schub_lib/tests/__init__.py +0 -0
- schubmult/schub_lib/tests/legacy_perm_lib.py +946 -0
- schubmult/schub_lib/tests/test_vs_old.py +109 -0
- schubmult/scripts/__init__.py +0 -0
- schubmult/scripts/schubmult_double.py +378 -0
- schubmult/scripts/schubmult_py.py +84 -0
- schubmult/scripts/schubmult_q.py +109 -0
- schubmult/scripts/schubmult_q_double.py +207 -0
- schubmult/utils/__init__.py +0 -0
- schubmult/{_base_argparse.py → utils/argparse.py} +29 -5
- schubmult/utils/logging.py +16 -0
- schubmult/utils/parsing.py +20 -0
- schubmult/utils/perm_utils.py +135 -0
- schubmult/utils/test_utils.py +65 -0
- schubmult-3.0.1.dist-info/METADATA +1234 -0
- schubmult-3.0.1.dist-info/RECORD +41 -0
- {schubmult-2.0.4.dist-info → schubmult-3.0.1.dist-info}/WHEEL +1 -1
- schubmult-3.0.1.dist-info/entry_points.txt +5 -0
- schubmult/_tests.py +0 -24
- schubmult/schubmult_double/__init__.py +0 -12
- schubmult/schubmult_double/__main__.py +0 -6
- schubmult/schubmult_double/_script.py +0 -474
- schubmult/schubmult_py/__init__.py +0 -12
- schubmult/schubmult_py/__main__.py +0 -6
- schubmult/schubmult_py/_script.py +0 -97
- schubmult/schubmult_q/__init__.py +0 -8
- schubmult/schubmult_q/__main__.py +0 -6
- schubmult/schubmult_q/_script.py +0 -166
- schubmult/schubmult_q_double/__init__.py +0 -10
- schubmult/schubmult_q_double/__main__.py +0 -6
- schubmult/schubmult_q_double/_funcs.py +0 -540
- schubmult/schubmult_q_double/_script.py +0 -396
- schubmult-2.0.4.dist-info/METADATA +0 -542
- schubmult-2.0.4.dist-info/RECORD +0 -30
- schubmult-2.0.4.dist-info/entry_points.txt +0 -5
- {schubmult-2.0.4.dist-info → schubmult-3.0.1.dist-info}/licenses/LICENSE +0 -0
- {schubmult-2.0.4.dist-info → schubmult-3.0.1.dist-info}/top_level.txt +0 -0
schubmult/schubmult_q/_script.py
DELETED
@@ -1,166 +0,0 @@
|
|
1
|
-
import sys
|
2
|
-
|
3
|
-
import numpy as np
|
4
|
-
from symengine import sympify
|
5
|
-
|
6
|
-
from schubmult._base_argparse import schub_argparse
|
7
|
-
from schubmult.perm_lib import (
|
8
|
-
check_blocks,
|
9
|
-
count_less_than,
|
10
|
-
inv,
|
11
|
-
is_parabolic,
|
12
|
-
longest_element,
|
13
|
-
mulperm,
|
14
|
-
omega,
|
15
|
-
permtrim,
|
16
|
-
q_var,
|
17
|
-
q_vector,
|
18
|
-
sg,
|
19
|
-
trimcode,
|
20
|
-
uncode,
|
21
|
-
)
|
22
|
-
from schubmult.schubmult_q._funcs import (
|
23
|
-
schubmult,
|
24
|
-
schubmult_db,
|
25
|
-
)
|
26
|
-
from schubmult.schubmult_q_double import factor_out_q_keep_factored
|
27
|
-
|
28
|
-
|
29
|
-
def _display_full(coeff_dict, args, formatter):
|
30
|
-
raw_result_dict = {}
|
31
|
-
ascode = args.ascode
|
32
|
-
parabolic_index = [int(s) for s in args.parabolic]
|
33
|
-
parabolic = len(parabolic_index) != 0
|
34
|
-
|
35
|
-
if parabolic:
|
36
|
-
w_P = longest_element(parabolic_index)
|
37
|
-
w_P_prime = [1, 2]
|
38
|
-
coeff_dict_update = {}
|
39
|
-
for w_1 in coeff_dict:
|
40
|
-
val = coeff_dict[w_1]
|
41
|
-
q_dict = factor_out_q_keep_factored(val)
|
42
|
-
for q_part in q_dict:
|
43
|
-
qv = q_vector(q_part)
|
44
|
-
w = [*w_1]
|
45
|
-
good = True
|
46
|
-
parabolic_index2 = []
|
47
|
-
for i in range(len(parabolic_index)):
|
48
|
-
if omega(parabolic_index[i], qv) == 0:
|
49
|
-
parabolic_index2 += [parabolic_index[i]]
|
50
|
-
elif omega(parabolic_index[i], qv) != -1:
|
51
|
-
good = False
|
52
|
-
break
|
53
|
-
if not good:
|
54
|
-
continue
|
55
|
-
w_P_prime = longest_element(parabolic_index2)
|
56
|
-
if not check_blocks(qv, parabolic_index):
|
57
|
-
continue
|
58
|
-
w = permtrim(mulperm(mulperm(w, w_P_prime), w_P))
|
59
|
-
if not is_parabolic(w, parabolic_index):
|
60
|
-
continue
|
61
|
-
|
62
|
-
w = tuple(permtrim(w))
|
63
|
-
|
64
|
-
new_q_part = np.prod(
|
65
|
-
[
|
66
|
-
q_var[index + 1 - count_less_than(parabolic_index, index + 1)] ** qv[index]
|
67
|
-
for index in range(len(qv))
|
68
|
-
if index + 1 not in parabolic_index
|
69
|
-
],
|
70
|
-
)
|
71
|
-
|
72
|
-
try:
|
73
|
-
new_q_part = int(new_q_part)
|
74
|
-
except Exception:
|
75
|
-
pass
|
76
|
-
q_val_part = q_dict[q_part]
|
77
|
-
coeff_dict_update[w] = coeff_dict_update.get(w, 0) + new_q_part * q_val_part
|
78
|
-
coeff_dict = coeff_dict_update
|
79
|
-
|
80
|
-
coeff_perms = list(coeff_dict.keys())
|
81
|
-
coeff_perms.sort(key=lambda x: (inv(x), *x))
|
82
|
-
|
83
|
-
for perm in coeff_perms:
|
84
|
-
val = sympify(coeff_dict[perm]).expand()
|
85
|
-
if val != 0:
|
86
|
-
if ascode:
|
87
|
-
raw_result_dict[tuple(trimcode(perm))] = val
|
88
|
-
if formatter:
|
89
|
-
print(f"{trimcode(perm)!s} {formatter(val)}")
|
90
|
-
else:
|
91
|
-
raw_result_dict[perm] = val
|
92
|
-
if formatter:
|
93
|
-
print(f"{perm!s} {formatter(val)}")
|
94
|
-
return raw_result_dict
|
95
|
-
|
96
|
-
|
97
|
-
def main(argv=None):
|
98
|
-
if argv is None:
|
99
|
-
argv = sys.argv
|
100
|
-
try:
|
101
|
-
args, formatter = schub_argparse(
|
102
|
-
"schubmult_q",
|
103
|
-
"Compute products of quantum Schubert polynomials",
|
104
|
-
argv=argv[1:],
|
105
|
-
quantum=True,
|
106
|
-
)
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
perms = args.perms
|
111
|
-
|
112
|
-
for perm in perms:
|
113
|
-
try:
|
114
|
-
for i in range(len(perm)):
|
115
|
-
perm[i] = int(perm[i])
|
116
|
-
except Exception as e:
|
117
|
-
print("Permutations must have integer values")
|
118
|
-
raise e
|
119
|
-
|
120
|
-
ascode = args.ascode
|
121
|
-
pr = args.pr
|
122
|
-
parabolic_index = [int(s) for s in args.parabolic]
|
123
|
-
parabolic = len(parabolic_index) != 0
|
124
|
-
slow = args.slow
|
125
|
-
|
126
|
-
if parabolic and len(perms) != 2:
|
127
|
-
print("Only two permutations supported for parabolic.")
|
128
|
-
exit(1)
|
129
|
-
|
130
|
-
if ascode:
|
131
|
-
for i in range(len(perms)):
|
132
|
-
perms[i] = uncode(perms[i])
|
133
|
-
|
134
|
-
if parabolic:
|
135
|
-
for i in range(len(parabolic_index)):
|
136
|
-
index = parabolic_index[i] - 1
|
137
|
-
if sg(index, perms[0]) == 1 or sg(index, perms[1]) == 1:
|
138
|
-
print(
|
139
|
-
"Parabolic given but elements are not minimal length coset representatives.",
|
140
|
-
)
|
141
|
-
exit(1)
|
142
|
-
|
143
|
-
coeff_dict = {tuple(permtrim([*perms[0]])): 1}
|
144
|
-
|
145
|
-
if not slow:
|
146
|
-
for perm in perms[1:]:
|
147
|
-
coeff_dict = schubmult_db(coeff_dict, tuple(permtrim([*perm])))
|
148
|
-
else:
|
149
|
-
for perm in perms[1:]:
|
150
|
-
coeff_dict = schubmult(coeff_dict, tuple(permtrim([*perm])))
|
151
|
-
|
152
|
-
# if mult:
|
153
|
-
# mul_exp = sympify(mulstring)
|
154
|
-
# coeff_dict = mult_poly(coeff_dict, mul_exp)
|
155
|
-
|
156
|
-
if pr or formatter is None:
|
157
|
-
raw_result_dict = _display_full(coeff_dict, args, formatter)
|
158
|
-
if formatter is None:
|
159
|
-
return raw_result_dict
|
160
|
-
except BrokenPipeError:
|
161
|
-
pass
|
162
|
-
|
163
|
-
|
164
|
-
if __name__ == "__main__":
|
165
|
-
import sys
|
166
|
-
sys.exit(main(sys.argv))
|