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.
Files changed (58) hide show
  1. schubmult/__init__.py +96 -1
  2. schubmult/perm_lib.py +254 -819
  3. schubmult/poly_lib/__init__.py +31 -0
  4. schubmult/poly_lib/poly_lib.py +276 -0
  5. schubmult/poly_lib/schub_poly.py +148 -0
  6. schubmult/poly_lib/variables.py +204 -0
  7. schubmult/rings/__init__.py +18 -0
  8. schubmult/rings/_quantum_schubert_polynomial_ring.py +752 -0
  9. schubmult/rings/_schubert_polynomial_ring.py +1031 -0
  10. schubmult/rings/_tensor_schub_ring.py +128 -0
  11. schubmult/rings/_utils.py +55 -0
  12. schubmult/{sage_integration → sage}/__init__.py +4 -1
  13. schubmult/{sage_integration → sage}/_fast_double_schubert_polynomial_ring.py +67 -109
  14. schubmult/{sage_integration → sage}/_fast_schubert_polynomial_ring.py +33 -28
  15. schubmult/{sage_integration → sage}/_indexing.py +9 -5
  16. schubmult/schub_lib/__init__.py +51 -0
  17. schubmult/{schubmult_double/_funcs.py → schub_lib/double.py} +532 -596
  18. schubmult/{schubmult_q/_funcs.py → schub_lib/quantum.py} +54 -53
  19. schubmult/schub_lib/quantum_double.py +954 -0
  20. schubmult/schub_lib/schub_lib.py +659 -0
  21. schubmult/{schubmult_py/_funcs.py → schub_lib/single.py} +45 -35
  22. schubmult/schub_lib/tests/__init__.py +0 -0
  23. schubmult/schub_lib/tests/legacy_perm_lib.py +946 -0
  24. schubmult/schub_lib/tests/test_vs_old.py +109 -0
  25. schubmult/scripts/__init__.py +0 -0
  26. schubmult/scripts/schubmult_double.py +378 -0
  27. schubmult/scripts/schubmult_py.py +84 -0
  28. schubmult/scripts/schubmult_q.py +109 -0
  29. schubmult/scripts/schubmult_q_double.py +207 -0
  30. schubmult/utils/__init__.py +0 -0
  31. schubmult/{_base_argparse.py → utils/argparse.py} +29 -5
  32. schubmult/utils/logging.py +16 -0
  33. schubmult/utils/parsing.py +20 -0
  34. schubmult/utils/perm_utils.py +135 -0
  35. schubmult/utils/test_utils.py +65 -0
  36. schubmult-3.0.1.dist-info/METADATA +1234 -0
  37. schubmult-3.0.1.dist-info/RECORD +41 -0
  38. {schubmult-2.0.4.dist-info → schubmult-3.0.1.dist-info}/WHEEL +1 -1
  39. schubmult-3.0.1.dist-info/entry_points.txt +5 -0
  40. schubmult/_tests.py +0 -24
  41. schubmult/schubmult_double/__init__.py +0 -12
  42. schubmult/schubmult_double/__main__.py +0 -6
  43. schubmult/schubmult_double/_script.py +0 -474
  44. schubmult/schubmult_py/__init__.py +0 -12
  45. schubmult/schubmult_py/__main__.py +0 -6
  46. schubmult/schubmult_py/_script.py +0 -97
  47. schubmult/schubmult_q/__init__.py +0 -8
  48. schubmult/schubmult_q/__main__.py +0 -6
  49. schubmult/schubmult_q/_script.py +0 -166
  50. schubmult/schubmult_q_double/__init__.py +0 -10
  51. schubmult/schubmult_q_double/__main__.py +0 -6
  52. schubmult/schubmult_q_double/_funcs.py +0 -540
  53. schubmult/schubmult_q_double/_script.py +0 -396
  54. schubmult-2.0.4.dist-info/METADATA +0 -542
  55. schubmult-2.0.4.dist-info/RECORD +0 -30
  56. schubmult-2.0.4.dist-info/entry_points.txt +0 -5
  57. {schubmult-2.0.4.dist-info → schubmult-3.0.1.dist-info}/licenses/LICENSE +0 -0
  58. {schubmult-2.0.4.dist-info → schubmult-3.0.1.dist-info}/top_level.txt +0 -0
@@ -1,8 +0,0 @@
1
- from ._funcs import mult_poly, schubmult, schubmult_db
2
-
3
- __all__ = [
4
- "mult_poly",
5
- "schubmult",
6
- "schubmult_db",
7
- ]
8
-
@@ -1,6 +0,0 @@
1
- import sys
2
-
3
- from ._script import main
4
-
5
- if __name__ == "__main__":
6
- sys.exit(main(sys.argv))
@@ -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))
@@ -1,10 +0,0 @@
1
- from ._funcs import factor_out_q_keep_factored, mult_poly, schubmult, schubmult_db, schubpoly_quantum
2
-
3
- __all__ = [
4
- "factor_out_q_keep_factored",
5
- "mult_poly",
6
- "schubmult",
7
- "schubmult_db",
8
- "schubpoly_quantum",
9
- ]
10
-
@@ -1,6 +0,0 @@
1
- import sys
2
-
3
- from ._script import main
4
-
5
- if __name__ == "__main__":
6
- sys.exit(main(sys.argv))