schubmult 5.3.0__tar.gz → 5.4.0__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 (484) hide show
  1. {schubmult-5.3.0 → schubmult-5.4.0}/CHANGELOG.md +74 -0
  2. schubmult-5.4.0/CITATION.cff +30 -0
  3. {schubmult-5.3.0/src/schubmult.egg-info → schubmult-5.4.0}/PKG-INFO +147 -4
  4. {schubmult-5.3.0 → schubmult-5.4.0}/README.md +145 -3
  5. {schubmult-5.3.0 → schubmult-5.4.0}/docs/API.md +2871 -2859
  6. {schubmult-5.3.0 → schubmult-5.4.0}/docs/index.md +14 -0
  7. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/README.md +7 -6
  8. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/_scripts/grothmult_double.md +2 -1
  9. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/_scripts/grothmult_q_double.md +5 -1
  10. {schubmult-5.3.0/docs/modules/schubmult/combinatorics → schubmult-5.4.0/docs/modules/schubmult/combinatorics/experimental}/chute_move_element.md +10 -10
  11. {schubmult-5.3.0/docs/modules/schubmult/combinatorics → schubmult-5.4.0/docs/modules/schubmult/combinatorics/experimental}/hecke_plactic.md +9 -9
  12. {schubmult-5.3.0/docs/modules/schubmult/combinatorics → schubmult-5.4.0/docs/modules/schubmult/combinatorics/experimental}/hpd.md +77 -67
  13. schubmult-5.4.0/docs/modules/schubmult/combinatorics/experimental/index.md +8 -0
  14. {schubmult-5.3.0/docs/modules/schubmult/combinatorics → schubmult-5.4.0/docs/modules/schubmult/combinatorics/experimental}/inversions_tableau.md +22 -22
  15. {schubmult-5.3.0/docs/modules/schubmult/combinatorics → schubmult-5.4.0/docs/modules/schubmult/combinatorics/experimental}/quasi_crystal_graph.md +18 -18
  16. {schubmult-5.3.0/docs/modules/schubmult/combinatorics → schubmult-5.4.0/docs/modules/schubmult/combinatorics/experimental}/root_tableau.md +41 -41
  17. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/combinatorics/index.md +4 -1
  18. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/combinatorics/rc_graph.md +6 -0
  19. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/combinatorial/chute_move_ring.md +2 -2
  20. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/schubert/quantum_double_schubert_ring.md +13 -7
  21. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/schubert/quantum_schubert_ring.md +5 -1
  22. schubmult-5.4.0/examples/duan_khlaif_zou_qk.py +303 -0
  23. {schubmult-5.3.0 → schubmult-5.4.0}/pyproject.toml +1 -0
  24. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/__init__.py +8 -6
  25. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/_scripts/grothmult_double.py +24 -11
  26. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/_scripts/grothmult_py.py +1 -1
  27. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/_scripts/grothmult_q.py +7 -3
  28. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/_scripts/grothmult_q_double.py +19 -12
  29. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/_version.py +3 -3
  30. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/combinatorics/__init__.py +4 -1
  31. schubmult-5.4.0/src/schubmult/combinatorics/experimental/__init__.py +32 -0
  32. {schubmult-5.3.0/src/schubmult/combinatorics → schubmult-5.4.0/src/schubmult/combinatorics/experimental}/chute_move_element.py +1 -1
  33. {schubmult-5.3.0/src/schubmult/combinatorics → schubmult-5.4.0/src/schubmult/combinatorics/experimental}/hecke_plactic.py +3 -4
  34. {schubmult-5.3.0/src/schubmult/combinatorics → schubmult-5.4.0/src/schubmult/combinatorics/experimental}/hpd.py +3 -3
  35. {schubmult-5.3.0/src/schubmult/combinatorics → schubmult-5.4.0/src/schubmult/combinatorics/experimental}/inversions_tableau.py +4 -4
  36. {schubmult-5.3.0/src/schubmult/combinatorics → schubmult-5.4.0/src/schubmult/combinatorics/experimental}/quasi_crystal_graph.py +2 -2
  37. {schubmult-5.3.0/src/schubmult/combinatorics → schubmult-5.4.0/src/schubmult/combinatorics/experimental}/root_tableau.py +6 -6
  38. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/combinatorics/rc_graph.py +6 -3
  39. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/mult/positivity.py +3 -4
  40. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/mult/quantum_double.py +3 -0
  41. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/combinatorial/alt_rc_graph_ring.py +2 -1
  42. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/combinatorial/chute_move_ring.py +3 -3
  43. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/free_algebra/elementary_basis.py +1 -1
  44. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/free_algebra/schur_elementary_basis.py +1 -1
  45. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/polynomial_algebra/elem_sym_poly_basis.py +4 -4
  46. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/polynomial_algebra/fundamental_slide_poly_basis.py +1 -1
  47. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/polynomial_algebra/monomial_slide_poly_basis.py +1 -1
  48. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/polynomial_algebra/schubert_poly_basis.py +2 -2
  49. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/printing.py +14 -0
  50. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/schubert/__init__.py +7 -0
  51. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/schubert/double_schubert_ring.py +5 -5
  52. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/schubert/parabolic_quantum_double_schubert_ring.py +1 -1
  53. schubmult-5.4.0/src/schubmult/rings/schubert/quantum_double_grothendieck_ring.py +173 -0
  54. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/schubert/quantum_double_schubert_ring.py +44 -26
  55. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/schubert/quantum_schubert_ring.py +11 -12
  56. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/symbolic/poly/schub_poly.py +3 -3
  57. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/symbolic/poly/variables.py +189 -39
  58. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/symbolic/symmetric_polynomials/complete_sym.py +3 -3
  59. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/symbolic/symmetric_polynomials/elem_sym.py +3 -3
  60. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/symbolic/symmetric_polynomials/qelem_sym.py +16 -6
  61. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/utils/argparse.py +36 -0
  62. {schubmult-5.3.0 → schubmult-5.4.0/src/schubmult.egg-info}/PKG-INFO +147 -4
  63. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult.egg-info/SOURCES.txt +24 -12
  64. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult.egg-info/scm_file_list.json +26 -12
  65. schubmult-5.4.0/src/schubmult.egg-info/scm_version.json +8 -0
  66. schubmult-5.4.0/tests/combinatorics/test_experimental_namespace.py +83 -0
  67. {schubmult-5.3.0 → schubmult-5.4.0}/tests/combinatorics/test_inversions_tableau.py +1 -1
  68. schubmult-5.4.0/tests/rings/test_quantum_double_grothendieck_ring.py +219 -0
  69. schubmult-5.4.0/tests/rings/test_quantum_schubert_ring.py +119 -0
  70. schubmult-5.4.0/tests/scripts/test_grothmult_beta.py +124 -0
  71. schubmult-5.4.0/tests/scripts/test_multiplicative_variables.py +113 -0
  72. {schubmult-5.3.0 → schubmult-5.4.0}/tests/test_api_surface.py +5 -4
  73. schubmult-5.4.0/tests/test_duan_khlaif_zou_examples.py +198 -0
  74. schubmult-5.4.0/tests/utils/test_variables.py +172 -0
  75. {schubmult-5.3.0 → schubmult-5.4.0}/tests/web/test_download_limits.py +76 -0
  76. schubmult-5.3.0/src/schubmult.egg-info/scm_version.json +0 -8
  77. {schubmult-5.3.0 → schubmult-5.4.0}/LICENSE +0 -0
  78. {schubmult-5.3.0 → schubmult-5.4.0}/MANIFEST.in +0 -0
  79. {schubmult-5.3.0 → schubmult-5.4.0}/benchmark_equivcalc.py +0 -0
  80. {schubmult-5.3.0 → schubmult-5.4.0}/benchmark_qk_kato.py +0 -0
  81. {schubmult-5.3.0 → schubmult-5.4.0}/benchmark_schubmult.py +0 -0
  82. {schubmult-5.3.0 → schubmult-5.4.0}/cpp/Makefile +0 -0
  83. {schubmult-5.3.0 → schubmult-5.4.0}/cpp/compare.py +0 -0
  84. {schubmult-5.3.0 → schubmult-5.4.0}/cpp/expr.h +0 -0
  85. {schubmult-5.3.0 → schubmult-5.4.0}/cpp/kernel_double.h +0 -0
  86. {schubmult-5.3.0 → schubmult-5.4.0}/cpp/kernel_double_alt.h +0 -0
  87. {schubmult-5.3.0 → schubmult-5.4.0}/cpp/kernel_q.h +0 -0
  88. {schubmult-5.3.0 → schubmult-5.4.0}/cpp/kernel_q_double.h +0 -0
  89. {schubmult-5.3.0 → schubmult-5.4.0}/cpp/kernel_single.h +0 -0
  90. {schubmult-5.3.0 → schubmult-5.4.0}/cpp/kernel_transition.h +0 -0
  91. {schubmult-5.3.0 → schubmult-5.4.0}/cpp/positivity.h +0 -0
  92. {schubmult-5.3.0 → schubmult-5.4.0}/cpp/schub_common.h +0 -0
  93. {schubmult-5.3.0 → schubmult-5.4.0}/cpp/schub_quantum.h +0 -0
  94. {schubmult-5.3.0 → schubmult-5.4.0}/cpp/schub_symbolic.h +0 -0
  95. {schubmult-5.3.0 → schubmult-5.4.0}/cpp/schubmult_api.h +0 -0
  96. {schubmult-5.3.0 → schubmult-5.4.0}/cpp/schubmult_core.cpp +0 -0
  97. {schubmult-5.3.0 → schubmult-5.4.0}/cpp/schubmult_double_core.cpp +0 -0
  98. {schubmult-5.3.0 → schubmult-5.4.0}/cpp/schubmult_module.cpp +0 -0
  99. {schubmult-5.3.0 → schubmult-5.4.0}/cpp/schubmult_q_core.cpp +0 -0
  100. {schubmult-5.3.0 → schubmult-5.4.0}/cpp/schubmult_q_double_core.cpp +0 -0
  101. {schubmult-5.3.0 → schubmult-5.4.0}/docs/README.md +0 -0
  102. {schubmult-5.3.0 → schubmult-5.4.0}/docs/generate_docs.py +0 -0
  103. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/_scripts/grothmult_py.md +0 -0
  104. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/_scripts/grothmult_q.md +0 -0
  105. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/_scripts/index.md +0 -0
  106. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/_scripts/schubmult_double.md +0 -0
  107. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/_scripts/schubmult_py.md +0 -0
  108. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/_scripts/schubmult_q.md +0 -0
  109. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/_scripts/schubmult_q_double.md +0 -0
  110. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/abc.md +0 -0
  111. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/combinatorics/anti_rc_graph.md +0 -0
  112. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/combinatorics/bpd.md +0 -0
  113. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/combinatorics/crystal_graph.md +0 -0
  114. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/combinatorics/double_forest.md +0 -0
  115. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/combinatorics/increasing_tableau.md +0 -0
  116. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/combinatorics/indexed_forests.md +0 -0
  117. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/combinatorics/mbpd.md +0 -0
  118. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/combinatorics/nilplactic.md +0 -0
  119. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/combinatorics/permutation.md +0 -0
  120. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/combinatorics/pipe_dream.md +0 -0
  121. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/combinatorics/plactic.md +0 -0
  122. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/combinatorics/planar_history.md +0 -0
  123. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/combinatorics/schub_poly.md +0 -0
  124. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/combinatorics/schubert_monomial_graph.md +0 -0
  125. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/combinatorics/set_valued_tableau.md +0 -0
  126. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/combinatorics/set_word.md +0 -0
  127. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/combinatorics/wc_graph.md +0 -0
  128. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/index.md +0 -0
  129. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/mult/_accel.md +0 -0
  130. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/mult/double.md +0 -0
  131. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/mult/groth.md +0 -0
  132. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/mult/groth_double.md +0 -0
  133. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/mult/groth_quantum.md +0 -0
  134. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/mult/groth_quantum_double.md +0 -0
  135. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/mult/index.md +0 -0
  136. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/mult/positivity.md +0 -0
  137. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/mult/quantum.md +0 -0
  138. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/mult/quantum_double.md +0 -0
  139. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/mult/separated_descents.md +0 -0
  140. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/mult/single.md +0 -0
  141. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/base_ring.md +0 -0
  142. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/combinatorial/alt_rc_graph_ring.md +0 -0
  143. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/combinatorial/bounded_rc_factor_algebra.md +0 -0
  144. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/combinatorial/bounded_rc_forest_factor_algebra.md +0 -0
  145. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/combinatorial/bounded_wc_factor_algebra.md +0 -0
  146. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/combinatorial/bpd_ring.md +0 -0
  147. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/combinatorial/crystal_graph_ring.md +0 -0
  148. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/combinatorial/dual_rc_graph_ring.md +0 -0
  149. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/combinatorial/eg_plactic_ring.md +0 -0
  150. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/combinatorial/eg_ring.md +0 -0
  151. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/combinatorial/forest_invariant_rc_ring.md +0 -0
  152. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/combinatorial/forest_rc_ring.md +0 -0
  153. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/combinatorial/grass_tensor_algebra.md +0 -0
  154. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/combinatorial/grove_wc_ring.md +0 -0
  155. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/combinatorial/hw_rc_ring.md +0 -0
  156. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/combinatorial/index.md +0 -0
  157. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/combinatorial/key_rc_ring.md +0 -0
  158. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/combinatorial/plactic_algebra.md +0 -0
  159. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/combinatorial/qy_rc_graph_ring.md +0 -0
  160. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/combinatorial/rc_graph_ring.md +0 -0
  161. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/combinatorial/rc_schubert_ring.md +0 -0
  162. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/combinatorial/schubert_monomial_ring.md +0 -0
  163. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/combinatorial/schubert_rc_ring.md +0 -0
  164. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/combinatorial/slide_rc_ring.md +0 -0
  165. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/combinatorial/wc_graph_ring.md +0 -0
  166. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/direct_product_ring.md +0 -0
  167. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/free_algebra/_core.md +0 -0
  168. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/free_algebra/composition_schubert_basis.md +0 -0
  169. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/free_algebra/elementary_basis.md +0 -0
  170. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/free_algebra/forest_basis.md +0 -0
  171. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/free_algebra/free_algebra_basis.md +0 -0
  172. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/free_algebra/fundamental_slide_basis.md +0 -0
  173. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/free_algebra/glide_basis.md +0 -0
  174. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/free_algebra/grothendieck_basis.md +0 -0
  175. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/free_algebra/grove_basis.md +0 -0
  176. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/free_algebra/index.md +0 -0
  177. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/free_algebra/j_basis.md +0 -0
  178. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/free_algebra/jt_basis.md +0 -0
  179. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/free_algebra/key_basis.md +0 -0
  180. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/free_algebra/lascoux_basis.md +0 -0
  181. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/free_algebra/monomial_slide_basis.md +0 -0
  182. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/free_algebra/nelementary_basis.md +0 -0
  183. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/free_algebra/schubert_basis.md +0 -0
  184. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/free_algebra/schubert_schur_basis.md +0 -0
  185. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/free_algebra/schur_elementary_basis.md +0 -0
  186. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/free_algebra/separated_descents_basis.md +0 -0
  187. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/free_algebra/word_basis.md +0 -0
  188. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/free_algebra/z_basis.md +0 -0
  189. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/index.md +0 -0
  190. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/nsym.md +0 -0
  191. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/polynomial_algebra/_core.md +0 -0
  192. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/polynomial_algebra/anti_schubert_poly_basis.md +0 -0
  193. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/polynomial_algebra/base_polynomial_basis.md +0 -0
  194. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/polynomial_algebra/composition_schubert_poly_basis.md +0 -0
  195. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/polynomial_algebra/double_forest_poly_basis.md +0 -0
  196. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/polynomial_algebra/elem_sym_poly_basis.md +0 -0
  197. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/polynomial_algebra/forest_poly_basis.md +0 -0
  198. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/polynomial_algebra/fundamental_slide_poly_basis.md +0 -0
  199. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/polynomial_algebra/glide_poly_basis.md +0 -0
  200. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/polynomial_algebra/grothendieck_poly_basis.md +0 -0
  201. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/polynomial_algebra/grove_poly_basis.md +0 -0
  202. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/polynomial_algebra/index.md +0 -0
  203. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/polynomial_algebra/key_poly_basis.md +0 -0
  204. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/polynomial_algebra/lascoux_poly_basis.md +0 -0
  205. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/polynomial_algebra/monomial_basis.md +0 -0
  206. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/polynomial_algebra/monomial_slide_poly_basis.md +0 -0
  207. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/polynomial_algebra/polynomial_basis.md +0 -0
  208. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/polynomial_algebra/schubert_poly_basis.md +0 -0
  209. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/polynomial_algebra/sepdesc_poly_basis.md +0 -0
  210. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/printing.md +0 -0
  211. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/product_ring.md +0 -0
  212. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/quasisymmetric_functions.md +0 -0
  213. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/schubert/base_schubert_ring.md +0 -0
  214. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/schubert/beta_coxeter.md +0 -0
  215. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/schubert/chevalley.md +0 -0
  216. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/schubert/double_grothendieck_ring.md +0 -0
  217. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/schubert/double_schubert_ring.md +0 -0
  218. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/schubert/grothendieck_ring.md +0 -0
  219. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/schubert/index.md +0 -0
  220. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/schubert/nil_hecke.md +0 -0
  221. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/schubert/parabolic_quantum_double_schubert_ring.md +0 -0
  222. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/schubert/parabolic_quantum_schubert_ring.md +0 -0
  223. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/schubert/schubert_ring.md +0 -0
  224. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/schubert/separated_descents.md +0 -0
  225. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/tensor_ring.md +0 -0
  226. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/rings/thompson_algebra.md +0 -0
  227. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/sage/_common.md +0 -0
  228. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/sage/_convert.md +0 -0
  229. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/sage/double_schubert.md +0 -0
  230. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/sage/grothendieck.md +0 -0
  231. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/sage/index.md +0 -0
  232. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/sage/polynomial_algebra.md +0 -0
  233. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/sage/quantum_schubert.md +0 -0
  234. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/symbolic/common_polys.md +0 -0
  235. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/symbolic/domain.md +0 -0
  236. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/symbolic/functions.md +0 -0
  237. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/symbolic/index.md +0 -0
  238. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/symbolic/poly/index.md +0 -0
  239. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/symbolic/poly/schub_poly.md +0 -0
  240. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/symbolic/poly/variables.md +0 -0
  241. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/symbolic/symmetric_polynomials/complete_sym.md +0 -0
  242. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/symbolic/symmetric_polynomials/elem_sym.md +0 -0
  243. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/symbolic/symmetric_polynomials/functions.md +0 -0
  244. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/symbolic/symmetric_polynomials/index.md +0 -0
  245. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/symbolic/symmetric_polynomials/qelem_sym.md +0 -0
  246. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/utils/_grid_print.md +0 -0
  247. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/utils/_lazy.md +0 -0
  248. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/utils/_mul_utils.md +0 -0
  249. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/utils/_printable.md +0 -0
  250. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/utils/argparse.md +0 -0
  251. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/utils/index.md +0 -0
  252. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/utils/logging.md +0 -0
  253. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/utils/parsing.md +0 -0
  254. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/utils/perm_utils.md +0 -0
  255. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/utils/schub_lib.md +0 -0
  256. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/utils/test_utils.md +0 -0
  257. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/utils/tuple_utils.md +0 -0
  258. {schubmult-5.3.0 → schubmult-5.4.0}/docs/modules/schubmult/visualization.md +0 -0
  259. {schubmult-5.3.0 → schubmult-5.4.0}/images/algostick.png +0 -0
  260. {schubmult-5.3.0 → schubmult-5.4.0}/images/figure.png +0 -0
  261. {schubmult-5.3.0 → schubmult-5.4.0}/mkdocs.yml +0 -0
  262. {schubmult-5.3.0 → schubmult-5.4.0}/requirements.txt +0 -0
  263. {schubmult-5.3.0 → schubmult-5.4.0}/setup.cfg +0 -0
  264. {schubmult-5.3.0 → schubmult-5.4.0}/setup.py +0 -0
  265. {schubmult-5.3.0 → schubmult-5.4.0}/src/requirements.txt +0 -0
  266. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/_scripts/__init__.py +0 -0
  267. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/_scripts/schubmult_double.py +0 -0
  268. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/_scripts/schubmult_py.py +0 -0
  269. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/_scripts/schubmult_q.py +0 -0
  270. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/_scripts/schubmult_q_double.py +0 -0
  271. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/_typing.py +0 -0
  272. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/abc.py +0 -0
  273. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/combinatorics/anti_rc_graph.py +0 -0
  274. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/combinatorics/bpd.py +0 -0
  275. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/combinatorics/crystal_graph.py +0 -0
  276. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/combinatorics/double_forest.py +0 -0
  277. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/combinatorics/increasing_tableau.py +0 -0
  278. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/combinatorics/indexed_forests.py +0 -0
  279. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/combinatorics/mbpd.py +0 -0
  280. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/combinatorics/nilplactic.py +0 -0
  281. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/combinatorics/permutation.py +0 -0
  282. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/combinatorics/pipe_dream.py +0 -0
  283. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/combinatorics/plactic.py +0 -0
  284. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/combinatorics/planar_history.py +0 -0
  285. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/combinatorics/schub_poly.py +0 -0
  286. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/combinatorics/schubert_monomial_graph.py +0 -0
  287. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/combinatorics/set_valued_tableau.py +0 -0
  288. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/combinatorics/set_word.py +0 -0
  289. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/combinatorics/wc_graph.py +0 -0
  290. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/mult/__init__.py +0 -0
  291. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/mult/_accel.py +0 -0
  292. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/mult/_shadow.py +0 -0
  293. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/mult/double.py +0 -0
  294. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/mult/groth.py +0 -0
  295. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/mult/groth_double.py +0 -0
  296. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/mult/groth_quantum.py +0 -0
  297. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/mult/groth_quantum_double.py +0 -0
  298. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/mult/quantum.py +0 -0
  299. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/mult/separated_descents.py +0 -0
  300. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/mult/single.py +0 -0
  301. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/mult/transition.py +0 -0
  302. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/__init__.py +0 -0
  303. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/base_ring.py +0 -0
  304. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/combinatorial/__init__.py +0 -0
  305. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/combinatorial/bounded_rc_factor_algebra.py +0 -0
  306. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/combinatorial/bounded_rc_forest_factor_algebra.py +0 -0
  307. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/combinatorial/bounded_wc_factor_algebra.py +0 -0
  308. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/combinatorial/bpd_ring.py +0 -0
  309. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/combinatorial/crystal_graph_ring.py +0 -0
  310. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/combinatorial/dual_rc_graph_ring.py +0 -0
  311. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/combinatorial/eg_plactic_ring.py +0 -0
  312. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/combinatorial/eg_ring.py +0 -0
  313. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/combinatorial/forest_invariant_rc_ring.py +0 -0
  314. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/combinatorial/forest_rc_ring.py +0 -0
  315. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/combinatorial/grass_tensor_algebra.py +0 -0
  316. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/combinatorial/grove_wc_ring.py +0 -0
  317. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/combinatorial/hw_rc_ring.py +0 -0
  318. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/combinatorial/key_rc_ring.py +0 -0
  319. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/combinatorial/plactic_algebra.py +0 -0
  320. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/combinatorial/qy_rc_graph_ring.py +0 -0
  321. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/combinatorial/rc_graph_ring.py +0 -0
  322. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/combinatorial/rc_schubert_ring.py +0 -0
  323. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/combinatorial/schubert_monomial_ring.py +0 -0
  324. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/combinatorial/schubert_rc_ring.py +0 -0
  325. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/combinatorial/slide_rc_ring.py +0 -0
  326. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/combinatorial/wc_graph_ring.py +0 -0
  327. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/direct_product_ring.py +0 -0
  328. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/free_algebra/__init__.py +0 -0
  329. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/free_algebra/_core.py +0 -0
  330. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/free_algebra/composition_schubert_basis.py +0 -0
  331. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/free_algebra/forest_basis.py +0 -0
  332. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/free_algebra/free_algebra_basis.py +0 -0
  333. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/free_algebra/fundamental_slide_basis.py +0 -0
  334. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/free_algebra/glide_basis.py +0 -0
  335. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/free_algebra/grothendieck_basis.py +0 -0
  336. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/free_algebra/grove_basis.py +0 -0
  337. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/free_algebra/j_basis.py +0 -0
  338. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/free_algebra/jt_basis.py +0 -0
  339. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/free_algebra/key_basis.py +0 -0
  340. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/free_algebra/lascoux_basis.py +0 -0
  341. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/free_algebra/monomial_slide_basis.py +0 -0
  342. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/free_algebra/nelementary_basis.py +0 -0
  343. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/free_algebra/schubert_basis.py +0 -0
  344. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/free_algebra/schubert_schur_basis.py +0 -0
  345. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/free_algebra/separated_descents_basis.py +0 -0
  346. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/free_algebra/word_basis.py +0 -0
  347. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/free_algebra/z_basis.py +0 -0
  348. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/nsym.py +0 -0
  349. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/polynomial_algebra/__init__.py +0 -0
  350. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/polynomial_algebra/_core.py +0 -0
  351. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/polynomial_algebra/anti_schubert_poly_basis.py +0 -0
  352. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/polynomial_algebra/base_polynomial_basis.py +0 -0
  353. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/polynomial_algebra/composition_schubert_poly_basis.py +0 -0
  354. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/polynomial_algebra/double_forest_poly_basis.py +0 -0
  355. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/polynomial_algebra/forest_poly_basis.py +0 -0
  356. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/polynomial_algebra/glide_poly_basis.py +0 -0
  357. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/polynomial_algebra/grothendieck_poly_basis.py +0 -0
  358. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/polynomial_algebra/grove_poly_basis.py +0 -0
  359. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/polynomial_algebra/key_poly_basis.py +0 -0
  360. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/polynomial_algebra/lascoux_poly_basis.py +0 -0
  361. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/polynomial_algebra/monomial_basis.py +0 -0
  362. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/polynomial_algebra/polynomial_basis.py +0 -0
  363. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/polynomial_algebra/sepdesc_poly_basis.py +0 -0
  364. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/product_ring.py +0 -0
  365. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/quasisymmetric_functions.py +0 -0
  366. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/schubert/base_schubert_ring.py +0 -0
  367. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/schubert/beta_coxeter.py +0 -0
  368. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/schubert/chevalley.py +0 -0
  369. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/schubert/double_grothendieck_ring.py +0 -0
  370. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/schubert/grothendieck_ring.py +0 -0
  371. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/schubert/nil_hecke.py +0 -0
  372. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/schubert/parabolic_quantum_schubert_ring.py +0 -0
  373. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/schubert/schubert_ring.py +0 -0
  374. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/schubert/separated_descents.py +0 -0
  375. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/tensor_ring.py +0 -0
  376. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/rings/thompson_algebra.py +0 -0
  377. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/sage/__init__.py +0 -0
  378. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/sage/_common.py +0 -0
  379. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/sage/_convert.py +0 -0
  380. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/sage/double_schubert.py +0 -0
  381. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/sage/grothendieck.py +0 -0
  382. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/sage/polynomial_algebra.py +0 -0
  383. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/sage/quantum_schubert.py +0 -0
  384. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/sage/symengine_ring.py +0 -0
  385. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/symbolic/__init__.py +0 -0
  386. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/symbolic/common_polys.py +0 -0
  387. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/symbolic/domain.py +0 -0
  388. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/symbolic/functions.py +0 -0
  389. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/symbolic/poly/__init__.py +0 -0
  390. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/symbolic/symmetric_polynomials/__init__.py +0 -0
  391. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/symbolic/symmetric_polynomials/functions.py +0 -0
  392. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/utils/__init__.py +0 -0
  393. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/utils/_grid_print.py +0 -0
  394. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/utils/_lazy.py +0 -0
  395. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/utils/_mul_utils.py +0 -0
  396. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/utils/_printable.py +0 -0
  397. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/utils/logging.py +0 -0
  398. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/utils/parsing.py +0 -0
  399. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/utils/perm_utils.py +0 -0
  400. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/utils/schub_lib.py +0 -0
  401. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/utils/test_utils.py +0 -0
  402. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/utils/tuple_utils.py +0 -0
  403. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult/visualization.py +0 -0
  404. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult.egg-info/dependency_links.txt +0 -0
  405. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult.egg-info/entry_points.txt +0 -0
  406. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult.egg-info/requires.txt +0 -0
  407. {schubmult-5.3.0 → schubmult-5.4.0}/src/schubmult.egg-info/top_level.txt +0 -0
  408. {schubmult-5.3.0 → schubmult-5.4.0}/tests/combinatorics/test_anti_rc_graph.py +0 -0
  409. {schubmult-5.3.0 → schubmult-5.4.0}/tests/combinatorics/test_bpd.py +0 -0
  410. {schubmult-5.3.0 → schubmult-5.4.0}/tests/combinatorics/test_indexed_forests.py +0 -0
  411. {schubmult-5.3.0 → schubmult-5.4.0}/tests/combinatorics/test_mbpd.py +0 -0
  412. {schubmult-5.3.0 → schubmult-5.4.0}/tests/combinatorics/test_nilplactic.py +0 -0
  413. {schubmult-5.3.0 → schubmult-5.4.0}/tests/combinatorics/test_permutation_order.py +0 -0
  414. {schubmult-5.3.0 → schubmult-5.4.0}/tests/combinatorics/test_pipe_dream.py +0 -0
  415. {schubmult-5.3.0 → schubmult-5.4.0}/tests/combinatorics/test_rc_graph.py +0 -0
  416. {schubmult-5.3.0 → schubmult-5.4.0}/tests/combinatorics/test_wc_graph.py +0 -0
  417. {schubmult-5.3.0 → schubmult-5.4.0}/tests/mult/test_accel.py +0 -0
  418. {schubmult-5.3.0 → schubmult-5.4.0}/tests/mult/test_double.py +0 -0
  419. {schubmult-5.3.0 → schubmult-5.4.0}/tests/mult/test_groth.py +0 -0
  420. {schubmult-5.3.0 → schubmult-5.4.0}/tests/mult/test_groth_double.py +0 -0
  421. {schubmult-5.3.0 → schubmult-5.4.0}/tests/mult/test_groth_quantum.py +0 -0
  422. {schubmult-5.3.0 → schubmult-5.4.0}/tests/mult/test_groth_quantum_double.py +0 -0
  423. {schubmult-5.3.0 → schubmult-5.4.0}/tests/mult/test_positivity.py +0 -0
  424. {schubmult-5.3.0 → schubmult-5.4.0}/tests/mult/test_probabilistic.py +0 -0
  425. {schubmult-5.3.0 → schubmult-5.4.0}/tests/mult/test_quantum.py +0 -0
  426. {schubmult-5.3.0 → schubmult-5.4.0}/tests/mult/test_quantum_double.py +0 -0
  427. {schubmult-5.3.0 → schubmult-5.4.0}/tests/mult/test_separated_descents.py +0 -0
  428. {schubmult-5.3.0 → schubmult-5.4.0}/tests/mult/test_single.py +0 -0
  429. {schubmult-5.3.0 → schubmult-5.4.0}/tests/mult/test_transition.py +0 -0
  430. {schubmult-5.3.0 → schubmult-5.4.0}/tests/rings/test_combinatorial.py +0 -0
  431. {schubmult-5.3.0 → schubmult-5.4.0}/tests/rings/test_duality.py +0 -0
  432. {schubmult-5.3.0 → schubmult-5.4.0}/tests/rings/test_forest_rc_ring.py +0 -0
  433. {schubmult-5.3.0 → schubmult-5.4.0}/tests/rings/test_free_algebra.py +0 -0
  434. {schubmult-5.3.0 → schubmult-5.4.0}/tests/rings/test_parabolic_quantum_ring.py +0 -0
  435. {schubmult-5.3.0 → schubmult-5.4.0}/tests/rings/test_polynomial_algebra.py +0 -0
  436. {schubmult-5.3.0 → schubmult-5.4.0}/tests/rings/test_public_imports.py +0 -0
  437. {schubmult-5.3.0 → schubmult-5.4.0}/tests/rings/test_schubert_rings.py +0 -0
  438. {schubmult-5.3.0 → schubmult-5.4.0}/tests/sage/test_polynomial_algebra.py +0 -0
  439. {schubmult-5.3.0 → schubmult-5.4.0}/tests/sage/test_sage_rings.py +0 -0
  440. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/_cmd_line_json.py +0 -0
  441. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/data/grothmult_double/grothmult_double_1_3_2T2_1_3_mixed-var.json +0 -0
  442. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/data/grothmult_double/grothmult_double_1_3_2T2_1_3_mixed-var_display-positive.json +0 -0
  443. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/data/grothmult_double/grothmult_double_2_1_3T2_1_3.json +0 -0
  444. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/data/grothmult_double/grothmult_double_code_1_1T0_1T1.json +0 -0
  445. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/data/grothmult_double/grothmult_double_code_2_0_1T1_1_mixed-var.json +0 -0
  446. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/data/grothmult_double/grothmult_double_display-mode_raw_2_1_4_3T1_3_2_mixed-var.json +0 -0
  447. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/data/grothmult_py/grothmult_py_1_3_2T1_3_2T2_1_3.json +0 -0
  448. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/data/grothmult_py/grothmult_py_2_1_4_3T1_3_2.json +0 -0
  449. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/data/grothmult_py/grothmult_py_3_1_2T2_1_3.json +0 -0
  450. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/data/grothmult_py/grothmult_py_code_1_0_1T0_1.json +0 -0
  451. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/data/grothmult_py/grothmult_py_display-mode_raw_3_1_2T1_3_2.json +0 -0
  452. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/data/grothmult_q/grothmult_q_1_3_2T1_3_2T2_1_3.json +0 -0
  453. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/data/grothmult_q/grothmult_q_2_1T2_1.json +0 -0
  454. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/data/grothmult_q/grothmult_q_2_3_1T3_1_2.json +0 -0
  455. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/data/grothmult_q/grothmult_q_code_0_2T1_1.json +0 -0
  456. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/data/grothmult_q/grothmult_q_code_1_1T2_0.json +0 -0
  457. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/data/grothmult_q/grothmult_q_display-mode_raw_3_1_2T1_3_2.json +0 -0
  458. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/data/grothmult_q_double/grothmult_q_double_1_3_2T2_1_3_mixed-var.json +0 -0
  459. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/data/grothmult_q_double/grothmult_q_double_2_1T2_1.json +0 -0
  460. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/data/grothmult_q_double/grothmult_q_double_2_1T2_1_mixed-var.json +0 -0
  461. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/data/grothmult_q_double/grothmult_q_double_code_1_0T1_0T1_0.json +0 -0
  462. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/data/grothmult_q_double/grothmult_q_double_code_1_1T0_1_mixed-var.json +0 -0
  463. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/data/grothmult_q_double/grothmult_q_double_display-mode_raw_2_3_1T1_3_2_mixed-var.json +0 -0
  464. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/data/schubmult_double/schubmult_double_3_6_1_5_2_4T2_3_5_4_1_6_mixed-var_display-positive.json +0 -0
  465. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/data/schubmult_double/schubmult_double_code_3_0_3T2_1_0_2_display-positive.json +0 -0
  466. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/data/schubmult_double/schubmult_double_code_coprod_5_0_1_2T2_3_display-positive.json +0 -0
  467. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/data/schubmult_double/schubmult_double_coprod_3_6_1_5_2_4T2_4_display-positive_mixed-var.json +0 -0
  468. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/data/schubmult_double/schubmult_double_mixed-var_display-positive_coprod_code_1_0_2_0_1T2_4.json +0 -0
  469. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/data/schubmult_py/schubmult_py_code_5_0_3_1_2T1_0_3_2_0_5.json +0 -0
  470. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/data/schubmult_q/schubmult_q_code_2_0_5T3_0_2.json +0 -0
  471. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/data/schubmult_q/schubmult_q_parabolic_2_3_code_1_2T1_3.json +0 -0
  472. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/data/schubmult_q_double/schubmult_q_double_code_1_0_3T2_0_2_mixed-var_display-positive.json +0 -0
  473. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/data/schubmult_q_double/schubmult_q_double_code_2_0_5T3_0_2.json +0 -0
  474. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/data/schubmult_q_double/schubmult_q_double_code_2_0_5T3_0_2_display-positive.json +0 -0
  475. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/data/schubmult_q_double/schubmult_q_double_parabolic_2_3_code_1_2T1_3_display-positive.json +0 -0
  476. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/test_grothmult_double.py +0 -0
  477. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/test_grothmult_py.py +0 -0
  478. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/test_grothmult_q.py +0 -0
  479. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/test_grothmult_q_double.py +0 -0
  480. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/test_schubmult_double.py +0 -0
  481. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/test_schubmult_py.py +0 -0
  482. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/test_schubmult_q.py +0 -0
  483. {schubmult-5.3.0 → schubmult-5.4.0}/tests/scripts/test_schubmult_q_double.py +0 -0
  484. {schubmult-5.3.0 → schubmult-5.4.0}/tests/utils/test_perm_utils.py +0 -0
@@ -1,5 +1,79 @@
1
1
  # Changelog
2
2
 
3
+ ## 5.4.0
4
+
5
+ New quantum double Grothendieck and change-of-variables APIs, custom quantum alphabets,
6
+ multiplicative equivariant variables, on-demand generating-set growth, and Python 3.15 wheel support.
7
+
8
+ ### Added
9
+
10
+ - **Change of variables** (#45). `ChangeOfVariables(source, target, rule)` provides lazy indexed
11
+ images of a generating set, with labels inherited from the target alphabet.
12
+ For example, `ChangeOfVariables(x, t, lambda i, target: 1 - 1 / target[i])` represents
13
+ $x_i \mapsto 1 - 1/t_i$. Indexing computes individual images on demand, and `.subs(expr)`
14
+ substitutes source variables in an expression. Exported from `schubmult`.
15
+ - **Quantum double Grothendieck ring** (#44). `QDGx` and `QuantumDoubleGrothendieckRing`
16
+ provide stable elements supporting linear combinations, multiplication through the conjectural
17
+ equivariant quantum K-Pieri kernel, coefficient simplification, and explicit Lenart--Maeno
18
+ quantum polynomial expansion. Beta is symbolic by default; `QDGx(w, beta=-1)` specializes it,
19
+ mixed coefficient alphabets are supported, and `QDGx(w, "0")` uses the zero alphabet.
20
+ Arbitrary x-polynomial conversion and coproducts are not implemented. Products retain
21
+ permutations outside any chosen finite symmetric group; finite-flag comparisons must handle
22
+ those separately.
23
+ - **`--beta EXPR` on all four `grothmult_*` commands** (#44). Accepts a sympified expression,
24
+ such as `--beta=-1`, `--beta 0`, or `--beta "1/2"`; omitting it keeps beta symbolic.
25
+ `grothmult_double --mixed-var --display-positive` constructs the positive representation with
26
+ symbolic beta before specialization. For the quantum commands, `--parabolic --beta 0` defers
27
+ specialization until after Kato projection so inverse powers of beta can cancel.
28
+ - **Custom quantum alphabets** (#52). `QuantumDoubleSchubertRing`, `QuantumSingleSchubertRing`,
29
+ and `QDSx(w, genset, q_var=...)` accept a `q_var` generating set in place of the default
30
+ `GeneratingSet("q")`, including a finite `CustomGeneratingSet` with entries such as `t[i]**2`.
31
+ Products, positive products, quantum elementary and factorial elementary symmetric functions, and
32
+ polynomial expansion use the ring's quantum alphabet. Rings with different quantum alphabets
33
+ compare and hash as distinct, so their products are cached separately.
34
+ - **`--multiplicative-variables` for `grothmult_double` and `grothmult_q_double`** (#51).
35
+ Calculates at `beta=-1` with coefficient coordinates `1-1/y_i` (also `1-1/z_i` with
36
+ `--mixed-var`) through `ChangeOfVariables`, matching the multiplicative equivariant-character
37
+ convention. An explicit `--beta=-1` is allowed; other beta values and `--display-positive`
38
+ are rejected. Combine with `--simplify` to cancel the resulting rational coefficients. Quantum
39
+ parameters are unchanged, and the quantum command supports `--parabolic`.
40
+ - **Multiplicative variables in the web widget** (#51). A *Multiplicative variables* checkbox
41
+ (`"multiplicative_variables"` in the JSON API) is available for the double Grothendieck
42
+ flavors, including mixed variables, simplification, parabolic projection, and downloads.
43
+ Non-boolean values are rejected, and the option is ignored for other flavors.
44
+ - **Duan--Khlaif--Zou equivariant quantum K-theory examples** (#51).
45
+ `examples/duan_khlaif_zou_qk.py` computes 156 distinct explicit products listed in
46
+ [arXiv:2606.15261v2](https://arxiv.org/abs/2606.15261v2), with page references, `--list`,
47
+ `--example`, and `--section` selection, and optional standalone TeX output (`--tex`). It
48
+ computes new answers rather than automatically checking the paper's right-hand sides. Regression
49
+ tests cover the inventory, finite-flag projections, and selected coefficient identities.
50
+ - **Citation metadata** (#53). `CITATION.cff` enables GitHub's *Cite this repository*, and the
51
+ README and documentation explain how to cite `schubmult`, including the version or commit used.
52
+
53
+ ### Changed
54
+
55
+ - **Generating sets grow on demand** (#46). `GeneratingSet` starts with 10 cached symbols and
56
+ grows geometrically for nonnegative indexing and explicitly bounded slices, removing the
57
+ previous fixed index limit. `len()`, iteration, negative indexing, and open-ended slices
58
+ describe only the currently cached prefix; use explicit slice bounds when a computation needs
59
+ a particular number of variables. Masked sets and polynomial consumers follow the growing
60
+ alphabet. `CustomGeneratingSet` remains finite.
61
+ - **Experimental combinatorics modules moved** (#54). The `chute_move_element`, `hecke_plactic`,
62
+ `hpd`, `inversions_tableau`, `quasi_crystal_graph`, and `root_tableau` modules now live in
63
+ `schubmult.combinatorics.experimental`. Their former module paths and top-level `schubmult`
64
+ exports are no longer available. Pickles referencing the former module paths will not load
65
+ without migration.
66
+ - **CPython 3.15 wheels** (#49). The release workflow upgrades cibuildwheel to v4.3.4 and targets
67
+ CPython 3.10-3.15 on Linux (x86_64 and aarch64), macOS (Intel and Apple Silicon), and Windows
68
+ (x86_64). Package metadata also lists Python 3.15. Pull requests changing the wheel workflow
69
+ build and smoke-test wheels; publishing remains restricted to release tags.
70
+
71
+ ## 5.3.0
72
+
73
+ The `5.3.0` and `5.2.0` tags have identical source trees. Their published source distributions
74
+ contain the same code, with only generated version and commit metadata differing. Features
75
+ previously listed as 5.3.0 are included in 5.4.0 above.
76
+
3
77
  ## 5.2.0
4
78
 
5
79
  Final release of 5.2.0, including the changes in 5.2.0b2 and 5.2.0b3.
@@ -0,0 +1,30 @@
1
+ cff-version: 1.2.0
2
+ message: "If you use schubmult in your research, please cite it as below and include the version or Git commit you used."
3
+ title: schubmult
4
+ abstract: "Fast Schubert calculus in Python: Littlewood-Richardson coefficients, Schubert/Grothendieck rings, and the combinatorics behind them."
5
+ type: software
6
+ authors:
7
+ - family-names: Samuel
8
+ given-names: Matt
9
+ repository-code: "https://github.com/matthematics/schubmult"
10
+ url: "https://matthematics.github.io/schubmult/"
11
+ license: GPL-3.0-or-later
12
+ keywords:
13
+ - Schubert calculus
14
+ - Schubert polynomials
15
+ - Grothendieck polynomials
16
+ - Littlewood-Richardson coefficients
17
+ - algebraic combinatorics
18
+
19
+ # arXiv preprint template: replace every XXXX.XXXXX, <PAPER_TITLE>, and <YEAR>, then uncomment.
20
+ # GitHub's "Cite this repository" button will then show the preprint as the preferred citation.
21
+ # preferred-citation:
22
+ # type: article
23
+ # authors:
24
+ # - family-names: Samuel
25
+ # given-names: Matt
26
+ # title: "<PAPER_TITLE>"
27
+ # year: <YEAR>
28
+ # journal: "arXiv preprint arXiv:XXXX.XXXXX"
29
+ # doi: 10.48550/arXiv.XXXX.XXXXX
30
+ # url: "https://arxiv.org/abs/XXXX.XXXXX"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: schubmult
3
- Version: 5.3.0
3
+ Version: 5.4.0
4
4
  Summary: Package for algebraic computation with single, double, and quantum Schubert polynomials
5
5
  Author-email: Matt Samuel <schubmult@gmail.com>
6
6
  Maintainer-email: Matt Samuel <schubmult@gmail.com>
@@ -15,6 +15,7 @@ Classifier: Programming Language :: Python :: 3.11
15
15
  Classifier: Programming Language :: Python :: 3.12
16
16
  Classifier: Programming Language :: Python :: 3.13
17
17
  Classifier: Programming Language :: Python :: 3.14
18
+ Classifier: Programming Language :: Python :: 3.15
18
19
  Classifier: Programming Language :: C++
19
20
  Classifier: Operating System :: OS Independent
20
21
  Requires-Python: >=3.10
@@ -53,6 +54,8 @@ Dynamic: license-file
53
54
 
54
55
  **Documentation:** <https://matthematics.github.io/schubmult/>
55
56
 
57
+ **Citation:** [How to cite](#how-to-cite)
58
+
56
59
  ---
57
60
 
58
61
  ## Installation
@@ -74,7 +77,7 @@ Requires Python 3.10+. To build the documentation locally, install the `docs` ex
74
77
  ### Python
75
78
 
76
79
  ```python
77
- from schubmult import Sx, DSx, QSx, QDSx, Gx, DGx, Permutation
80
+ from schubmult import Sx, DSx, QSx, QDSx, Gx, DGx, QDGx, Permutation
78
81
  from schubmult.abc import x, y, z
79
82
 
80
83
  # Ordinary Schubert polynomials: S_312 * S_132 = S_321 + S_4123
@@ -111,6 +114,13 @@ Gx([2, 1, 3]) * Gx([2, 1, 3]) # 𝔊_(3, 1, 2)(x)
111
114
  # -------------------------- + -----------------------------
112
115
  # y_2*β + 1 y_2*β + 1
113
116
 
117
+ # Quantum double Grothendieck polynomials (conjectural equivariant quantum K-Pieri rule)
118
+ g = QDGx([1, 3, 2], beta=-1)
119
+ h = QDGx([2, 1, 3], beta=-1)
120
+ product = (g * h).simplify() # multiplication uses the combinatorial kernel
121
+ product.expand() # explicit Lenart--Maeno quantum polynomials
122
+ g * QDGx([2, 1, 3], "z", beta=-1) # mixed coefficient alphabets
123
+
114
124
  # Permutations use one-line notation; Lehmer codes are available too
115
125
  w = Permutation([3, 1, 4, 2])
116
126
  w.code, w.inv, w.descents() # ([2, 0, 1], 3, {0, 2})
@@ -118,6 +128,55 @@ w.code, w.inv, w.descents() # ([2, 0, 1], 3, {0, 2})
118
128
 
119
129
  Ring objects: `Sx` (single), `DSx` (double), `QSx`/`QDSx` (quantum, quantum double), `QPSx`/`QPDSx` (parabolic quantum), `Gx`/`DGx` (single/double Grothendieck). Elements are dictionaries `{Permutation: coefficient}` with `*`, `+`, `.expand()`, `.coproduct()`, and change of basis between them. The underlying multiplication kernels live in `schubmult.mult` (`single`, `double`, `quantum`, `quantum_double`, `groth`, `groth_double`).
120
130
 
131
+ `QDGx` constructs stable quantum double Grothendieck elements, with symbolic beta by default.
132
+ It supports linear combinations, kernel multiplication, coefficient simplification, and explicit
133
+ polynomial expansion; `QDGx(w, "0")` uses the zero coefficient alphabet. The ring class is
134
+ `QuantumDoubleGrothendieckRing(x_alphabet, y_alphabet, beta=None)`. Arbitrary x-polynomial
135
+ conversion and coproducts are not implemented. Products retain permutations outside any chosen
136
+ finite symmetric group; a finite-flag comparison must handle those separately.
137
+
138
+ ### Paper examples: equivariant quantum K-theory
139
+
140
+ [examples/duan_khlaif_zou_qk.py](examples/duan_khlaif_zou_qk.py) computes all 156 distinct
141
+ explicit equivariant Schubert-class products in [Duan--Khlaif--Zou, arXiv:2606.15261v2](https://arxiv.org/abs/2606.15261v2):
142
+ Table 3.2 (Fl(3)), Appendix A.1 (Fl(4)), Appendix A.2 (Fl(1,3;4)), and Appendix A.3 (Fl(1,2;4)).
143
+ The script records printed page references and notes the repeated product in A.2 and the
144
+ omitted equivariant square in A.3. It generates new answers, rather than automatically comparing
145
+ against the paper's printed right-hand sides.
146
+
147
+ ```bash
148
+ PYTHONPATH=src python examples/duan_khlaif_zou_qk.py --list
149
+ PYTHONPATH=src python examples/duan_khlaif_zou_qk.py --example fl4-04
150
+ PYTHONPATH=src python examples/duan_khlaif_zou_qk.py --section fl134
151
+ PYTHONPATH=src python examples/duan_khlaif_zou_qk.py --tex --output products.tex
152
+ ```
153
+
154
+ It uses `QuantumDoubleGrothendieckRing` at `beta=-1` with `ChangeOfVariables` implementing
155
+ `z_i -> 1-1/y_i`, the paper's multiplicative equivariant-character convention. Finite-flag
156
+ projection removes stable terms outside `S_n`; partial flags additionally use the existing
157
+ Kato projection, with consecutive quantum-parameter indices. TeX output is a standalone
158
+ document using `\widetilde{\mathfrak{G}}_w(x;y)`. Add `--non-equivariant` to specialize the
159
+ selected products at `y_i=1`. The underlying equivariant quantum K-Pieri multiplication
160
+ rule remains conjectural.
161
+
162
+ ### Generating sets
163
+
164
+ `GeneratingSet("x")` supports any nonnegative index, including indices above 100.
165
+ It starts with 10 cached symbols and grows geometrically on demand. Bounded slices
166
+ such as `x[1:151]` also generate the requested variables. `len(x)`, iteration,
167
+ negative indexing, and open-ended slices describe only the currently cached prefix;
168
+ use explicit slice bounds when a computation needs a particular number of variables.
169
+ `CustomGeneratingSet` remains a finite sequence.
170
+
171
+ ```python
172
+ from schubmult import ChangeOfVariables, GeneratingSet
173
+
174
+ x, t = GeneratingSet("x"), GeneratingSet("t")
175
+ change = ChangeOfVariables(x, t, lambda i, target: 1 - 1 / target[i])
176
+ change[150] # 1 - 1/t_150
177
+ change.subs(x[150] + x[1]**2) # simultaneous substitution of source variables
178
+ ```
179
+
121
180
  ### Command line
122
181
 
123
182
  Each ring has a CLI. Permutations are space-separated, factors are separated by `-`:
@@ -132,10 +191,22 @@ grothmult_py 2 1 3 - 2 1 3 # Grothendieck
132
191
  grothmult_double 2 1 3 - 2 1 3 # double Grothendieck (coefficients in y and β)
133
192
  grothmult_q 2 1 - 2 1 # quantum Grothendieck (conjectural quantum K-Pieri rule; coefficients in q and β)
134
193
  grothmult_q_double 2 1 - 2 1 --mixed-var # quantum double Grothendieck (coefficients in y, z, q and β)
194
+ grothmult_q_double 2 1 - 2 1 --multiplicative-variables --simplify # beta=-1, coordinates 1-1/y_i
135
195
  ```
136
196
 
197
+ Both `grothmult_double` and `grothmult_q_double` support
198
+ `--multiplicative-variables`: this uses `ChangeOfVariables` to calculate with
199
+ `1-1/y_i` coefficient coordinates and fixes `beta=-1`. With `--mixed-var`, the
200
+ second coefficient alphabet is also changed to `1-1/z_i`. Explicit
201
+ `--beta=-1` is allowed; other beta values and `--display-positive` conflict
202
+ with this mode and are rejected. Add `--simplify` to cancel the rational
203
+ coefficients. Without the flag, the existing conventions are unchanged.
204
+
137
205
  `--display-positive` writes double and quantum double coefficients as manifestly positive expressions in the differences `y_i - z_j` (Graham positivity), using integer programming to find a positive representative. Run any script with `--help` for the full option list.
138
206
 
207
+ All four `grothmult_*` scripts accept `--beta EXPR` to use a sympified expression as beta in the multiplication, for example `--beta=-1`, `--beta 0`, or `--beta "1/2"`. Without this option, beta remains symbolic.
208
+ For `--display-positive`, the positive expression is constructed with symbolic beta before specialization. With `--parabolic --beta 0`, specialization is deferred until after Kato projection so inverse powers of beta can cancel.
209
+
139
210
  ## Combinatorics
140
211
 
141
212
  The `schubmult.combinatorics` package provides the objects that index Schubert calculus, with conversions between them:
@@ -143,8 +214,8 @@ The `schubmult.combinatorics` package provides the objects that index Schubert c
143
214
  - **`Permutation`** -- one-line notation, Lehmer codes (`uncode`), reduced words, Bruhat order, descents, dominant/Grassmannian tests.
144
215
  - **`RCGraph`** -- reduced compatible sequences / pipe dreams, with enumeration (`RCGraph.all_rc_graphs(w, n)`), Kashiwara crystal operators (`raising_operator(i)`, `lowering_operator(i)`), Edelman-Greene insertion, and the crystal products used in the transition formulas.
145
216
  - **`BPD`** -- bumpless pipe dreams with droop moves, the Gao-Huang bijection to RC graphs (`BPD.from_rc_graph`, `.to_rc_graph()`), and marked/unreduced variants for Grothendieck polynomials.
146
- - **`WCGraph`**, **`PipeDream`**, **`HPD`** -- K-theoretic and hybrid pipe dream models.
147
- - **Tableaux** -- `Plactic` (semistandard, jeu de taquin), `NilPlactic` (Edelman-Greene), `RootTableau`, `IncreasingTableau`, `SetValuedTableau`, `HeckePlactic`.
217
+ - **`WCGraph`**, **`PipeDream`** -- K-theoretic pipe dream models.
218
+ - **Tableaux** -- `Plactic` (semistandard, jeu de taquin), `NilPlactic` (Edelman-Greene), `IncreasingTableau`, and `SetValuedTableau`.
148
219
  - **Forests** -- indexed forests and the Thompson monoid factorization behind the forest and grove bases.
149
220
 
150
221
  ```python
@@ -160,6 +231,33 @@ bpd = BPD.from_rc_graph(rc) # Gao-Huang bijection
160
231
  assert bpd.to_rc_graph() == rc
161
232
  ```
162
233
 
234
+ ### Experimental combinatorics
235
+
236
+ The `schubmult.combinatorics.experimental` namespace contains exploratory
237
+ implementations that may be incomplete or incorrect:
238
+
239
+ | Module | Main objects |
240
+ | --- | --- |
241
+ | `chute_move_element` | `ChuteMoveElement` |
242
+ | `hecke_plactic` | `HeckePlactic` |
243
+ | `hpd` | `HPD`, `HPDTile` |
244
+ | `inversions_tableau` | `InversionsTableau` |
245
+ | `quasi_crystal_graph` | `QuasiCrystalGraph`, `QuasiCrystalGraphTensor` |
246
+ | `root_tableau` | `RootTableau` |
247
+
248
+ These objects can be imported from the experimental namespace or their
249
+ individual modules:
250
+
251
+ ```python
252
+ from schubmult.combinatorics.experimental import HPD
253
+ from schubmult.combinatorics.experimental.root_tableau import RootTableau
254
+ ```
255
+
256
+ The former `schubmult.combinatorics.<module>` paths and top-level
257
+ `schubmult` exports for these objects are no longer provided.
258
+ Pickles referencing the former module paths will not load without migration.
259
+ `ChuteMoveRing` remains available, but its basis uses `ChuteMoveElement`.
260
+
163
261
  ## Rings and algebras
164
262
 
165
263
  Beyond the Schubert rings, `schubmult.rings` includes:
@@ -229,6 +327,51 @@ pytest
229
327
 
230
328
  Tests live in `tests/`; the script tests compare CLI output against stored JSON cases in `tests/scripts/data`. `ruff check src/schubmult` should pass.
231
329
 
330
+ ## How to cite
331
+
332
+ If you use `schubmult` in your research, please cite the software and, once available,
333
+ the accompanying preprint. Include the version number (or Git commit hash for a
334
+ development checkout) used for your computations.
335
+
336
+ On GitHub, the **Cite this repository** button in the repository sidebar gives
337
+ APA and BibTeX citations generated from [CITATION.cff](CITATION.cff).
338
+
339
+ ### Software
340
+
341
+ Use this BibTeX template, replacing `<YEAR>` with the year of the cited release or
342
+ commit and `<VERSION_OR_COMMIT>` with the version number or commit hash you used:
343
+
344
+ ```bibtex
345
+ @misc{schubmult,
346
+ author = {Samuel, Matt},
347
+ title = {{schubmult}},
348
+ year = {<YEAR>},
349
+ url = {https://github.com/matthematics/schubmult},
350
+ note = {Version <VERSION_OR_COMMIT>}
351
+ }
352
+ ```
353
+
354
+ ### Preprint (template)
355
+
356
+ **arXiv link:** `<ARXIV_URL>`
357
+
358
+ The preprint citation is not yet filled in. Replace the placeholders below with
359
+ the paper's authors, title, year, arXiv identifier, and URL before citing it, or
360
+ paste the BibTeX entry exported by arXiv. Also fill in and uncomment the
361
+ `preferred-citation` block in [CITATION.cff](CITATION.cff). The software citation
362
+ above can be used in the meantime.
363
+
364
+ ```bibtex
365
+ @misc{schubmult_paper,
366
+ author = {<AUTHORS>},
367
+ title = {<PAPER_TITLE>},
368
+ year = {<YEAR>},
369
+ eprint = {<ARXIV_ID>},
370
+ archivePrefix = {arXiv},
371
+ url = {<ARXIV_URL>}
372
+ }
373
+ ```
374
+
232
375
  ## License
233
376
 
234
377
  GPL-3.0-or-later. See [LICENSE](LICENSE).
@@ -10,6 +10,8 @@
10
10
 
11
11
  **Documentation:** <https://matthematics.github.io/schubmult/>
12
12
 
13
+ **Citation:** [How to cite](#how-to-cite)
14
+
13
15
  ---
14
16
 
15
17
  ## Installation
@@ -31,7 +33,7 @@ Requires Python 3.10+. To build the documentation locally, install the `docs` ex
31
33
  ### Python
32
34
 
33
35
  ```python
34
- from schubmult import Sx, DSx, QSx, QDSx, Gx, DGx, Permutation
36
+ from schubmult import Sx, DSx, QSx, QDSx, Gx, DGx, QDGx, Permutation
35
37
  from schubmult.abc import x, y, z
36
38
 
37
39
  # Ordinary Schubert polynomials: S_312 * S_132 = S_321 + S_4123
@@ -68,6 +70,13 @@ Gx([2, 1, 3]) * Gx([2, 1, 3]) # 𝔊_(3, 1, 2)(x)
68
70
  # -------------------------- + -----------------------------
69
71
  # y_2*β + 1 y_2*β + 1
70
72
 
73
+ # Quantum double Grothendieck polynomials (conjectural equivariant quantum K-Pieri rule)
74
+ g = QDGx([1, 3, 2], beta=-1)
75
+ h = QDGx([2, 1, 3], beta=-1)
76
+ product = (g * h).simplify() # multiplication uses the combinatorial kernel
77
+ product.expand() # explicit Lenart--Maeno quantum polynomials
78
+ g * QDGx([2, 1, 3], "z", beta=-1) # mixed coefficient alphabets
79
+
71
80
  # Permutations use one-line notation; Lehmer codes are available too
72
81
  w = Permutation([3, 1, 4, 2])
73
82
  w.code, w.inv, w.descents() # ([2, 0, 1], 3, {0, 2})
@@ -75,6 +84,55 @@ w.code, w.inv, w.descents() # ([2, 0, 1], 3, {0, 2})
75
84
 
76
85
  Ring objects: `Sx` (single), `DSx` (double), `QSx`/`QDSx` (quantum, quantum double), `QPSx`/`QPDSx` (parabolic quantum), `Gx`/`DGx` (single/double Grothendieck). Elements are dictionaries `{Permutation: coefficient}` with `*`, `+`, `.expand()`, `.coproduct()`, and change of basis between them. The underlying multiplication kernels live in `schubmult.mult` (`single`, `double`, `quantum`, `quantum_double`, `groth`, `groth_double`).
77
86
 
87
+ `QDGx` constructs stable quantum double Grothendieck elements, with symbolic beta by default.
88
+ It supports linear combinations, kernel multiplication, coefficient simplification, and explicit
89
+ polynomial expansion; `QDGx(w, "0")` uses the zero coefficient alphabet. The ring class is
90
+ `QuantumDoubleGrothendieckRing(x_alphabet, y_alphabet, beta=None)`. Arbitrary x-polynomial
91
+ conversion and coproducts are not implemented. Products retain permutations outside any chosen
92
+ finite symmetric group; a finite-flag comparison must handle those separately.
93
+
94
+ ### Paper examples: equivariant quantum K-theory
95
+
96
+ [examples/duan_khlaif_zou_qk.py](examples/duan_khlaif_zou_qk.py) computes all 156 distinct
97
+ explicit equivariant Schubert-class products in [Duan--Khlaif--Zou, arXiv:2606.15261v2](https://arxiv.org/abs/2606.15261v2):
98
+ Table 3.2 (Fl(3)), Appendix A.1 (Fl(4)), Appendix A.2 (Fl(1,3;4)), and Appendix A.3 (Fl(1,2;4)).
99
+ The script records printed page references and notes the repeated product in A.2 and the
100
+ omitted equivariant square in A.3. It generates new answers, rather than automatically comparing
101
+ against the paper's printed right-hand sides.
102
+
103
+ ```bash
104
+ PYTHONPATH=src python examples/duan_khlaif_zou_qk.py --list
105
+ PYTHONPATH=src python examples/duan_khlaif_zou_qk.py --example fl4-04
106
+ PYTHONPATH=src python examples/duan_khlaif_zou_qk.py --section fl134
107
+ PYTHONPATH=src python examples/duan_khlaif_zou_qk.py --tex --output products.tex
108
+ ```
109
+
110
+ It uses `QuantumDoubleGrothendieckRing` at `beta=-1` with `ChangeOfVariables` implementing
111
+ `z_i -> 1-1/y_i`, the paper's multiplicative equivariant-character convention. Finite-flag
112
+ projection removes stable terms outside `S_n`; partial flags additionally use the existing
113
+ Kato projection, with consecutive quantum-parameter indices. TeX output is a standalone
114
+ document using `\widetilde{\mathfrak{G}}_w(x;y)`. Add `--non-equivariant` to specialize the
115
+ selected products at `y_i=1`. The underlying equivariant quantum K-Pieri multiplication
116
+ rule remains conjectural.
117
+
118
+ ### Generating sets
119
+
120
+ `GeneratingSet("x")` supports any nonnegative index, including indices above 100.
121
+ It starts with 10 cached symbols and grows geometrically on demand. Bounded slices
122
+ such as `x[1:151]` also generate the requested variables. `len(x)`, iteration,
123
+ negative indexing, and open-ended slices describe only the currently cached prefix;
124
+ use explicit slice bounds when a computation needs a particular number of variables.
125
+ `CustomGeneratingSet` remains a finite sequence.
126
+
127
+ ```python
128
+ from schubmult import ChangeOfVariables, GeneratingSet
129
+
130
+ x, t = GeneratingSet("x"), GeneratingSet("t")
131
+ change = ChangeOfVariables(x, t, lambda i, target: 1 - 1 / target[i])
132
+ change[150] # 1 - 1/t_150
133
+ change.subs(x[150] + x[1]**2) # simultaneous substitution of source variables
134
+ ```
135
+
78
136
  ### Command line
79
137
 
80
138
  Each ring has a CLI. Permutations are space-separated, factors are separated by `-`:
@@ -89,10 +147,22 @@ grothmult_py 2 1 3 - 2 1 3 # Grothendieck
89
147
  grothmult_double 2 1 3 - 2 1 3 # double Grothendieck (coefficients in y and β)
90
148
  grothmult_q 2 1 - 2 1 # quantum Grothendieck (conjectural quantum K-Pieri rule; coefficients in q and β)
91
149
  grothmult_q_double 2 1 - 2 1 --mixed-var # quantum double Grothendieck (coefficients in y, z, q and β)
150
+ grothmult_q_double 2 1 - 2 1 --multiplicative-variables --simplify # beta=-1, coordinates 1-1/y_i
92
151
  ```
93
152
 
153
+ Both `grothmult_double` and `grothmult_q_double` support
154
+ `--multiplicative-variables`: this uses `ChangeOfVariables` to calculate with
155
+ `1-1/y_i` coefficient coordinates and fixes `beta=-1`. With `--mixed-var`, the
156
+ second coefficient alphabet is also changed to `1-1/z_i`. Explicit
157
+ `--beta=-1` is allowed; other beta values and `--display-positive` conflict
158
+ with this mode and are rejected. Add `--simplify` to cancel the rational
159
+ coefficients. Without the flag, the existing conventions are unchanged.
160
+
94
161
  `--display-positive` writes double and quantum double coefficients as manifestly positive expressions in the differences `y_i - z_j` (Graham positivity), using integer programming to find a positive representative. Run any script with `--help` for the full option list.
95
162
 
163
+ All four `grothmult_*` scripts accept `--beta EXPR` to use a sympified expression as beta in the multiplication, for example `--beta=-1`, `--beta 0`, or `--beta "1/2"`. Without this option, beta remains symbolic.
164
+ For `--display-positive`, the positive expression is constructed with symbolic beta before specialization. With `--parabolic --beta 0`, specialization is deferred until after Kato projection so inverse powers of beta can cancel.
165
+
96
166
  ## Combinatorics
97
167
 
98
168
  The `schubmult.combinatorics` package provides the objects that index Schubert calculus, with conversions between them:
@@ -100,8 +170,8 @@ The `schubmult.combinatorics` package provides the objects that index Schubert c
100
170
  - **`Permutation`** -- one-line notation, Lehmer codes (`uncode`), reduced words, Bruhat order, descents, dominant/Grassmannian tests.
101
171
  - **`RCGraph`** -- reduced compatible sequences / pipe dreams, with enumeration (`RCGraph.all_rc_graphs(w, n)`), Kashiwara crystal operators (`raising_operator(i)`, `lowering_operator(i)`), Edelman-Greene insertion, and the crystal products used in the transition formulas.
102
172
  - **`BPD`** -- bumpless pipe dreams with droop moves, the Gao-Huang bijection to RC graphs (`BPD.from_rc_graph`, `.to_rc_graph()`), and marked/unreduced variants for Grothendieck polynomials.
103
- - **`WCGraph`**, **`PipeDream`**, **`HPD`** -- K-theoretic and hybrid pipe dream models.
104
- - **Tableaux** -- `Plactic` (semistandard, jeu de taquin), `NilPlactic` (Edelman-Greene), `RootTableau`, `IncreasingTableau`, `SetValuedTableau`, `HeckePlactic`.
173
+ - **`WCGraph`**, **`PipeDream`** -- K-theoretic pipe dream models.
174
+ - **Tableaux** -- `Plactic` (semistandard, jeu de taquin), `NilPlactic` (Edelman-Greene), `IncreasingTableau`, and `SetValuedTableau`.
105
175
  - **Forests** -- indexed forests and the Thompson monoid factorization behind the forest and grove bases.
106
176
 
107
177
  ```python
@@ -117,6 +187,33 @@ bpd = BPD.from_rc_graph(rc) # Gao-Huang bijection
117
187
  assert bpd.to_rc_graph() == rc
118
188
  ```
119
189
 
190
+ ### Experimental combinatorics
191
+
192
+ The `schubmult.combinatorics.experimental` namespace contains exploratory
193
+ implementations that may be incomplete or incorrect:
194
+
195
+ | Module | Main objects |
196
+ | --- | --- |
197
+ | `chute_move_element` | `ChuteMoveElement` |
198
+ | `hecke_plactic` | `HeckePlactic` |
199
+ | `hpd` | `HPD`, `HPDTile` |
200
+ | `inversions_tableau` | `InversionsTableau` |
201
+ | `quasi_crystal_graph` | `QuasiCrystalGraph`, `QuasiCrystalGraphTensor` |
202
+ | `root_tableau` | `RootTableau` |
203
+
204
+ These objects can be imported from the experimental namespace or their
205
+ individual modules:
206
+
207
+ ```python
208
+ from schubmult.combinatorics.experimental import HPD
209
+ from schubmult.combinatorics.experimental.root_tableau import RootTableau
210
+ ```
211
+
212
+ The former `schubmult.combinatorics.<module>` paths and top-level
213
+ `schubmult` exports for these objects are no longer provided.
214
+ Pickles referencing the former module paths will not load without migration.
215
+ `ChuteMoveRing` remains available, but its basis uses `ChuteMoveElement`.
216
+
120
217
  ## Rings and algebras
121
218
 
122
219
  Beyond the Schubert rings, `schubmult.rings` includes:
@@ -186,6 +283,51 @@ pytest
186
283
 
187
284
  Tests live in `tests/`; the script tests compare CLI output against stored JSON cases in `tests/scripts/data`. `ruff check src/schubmult` should pass.
188
285
 
286
+ ## How to cite
287
+
288
+ If you use `schubmult` in your research, please cite the software and, once available,
289
+ the accompanying preprint. Include the version number (or Git commit hash for a
290
+ development checkout) used for your computations.
291
+
292
+ On GitHub, the **Cite this repository** button in the repository sidebar gives
293
+ APA and BibTeX citations generated from [CITATION.cff](CITATION.cff).
294
+
295
+ ### Software
296
+
297
+ Use this BibTeX template, replacing `<YEAR>` with the year of the cited release or
298
+ commit and `<VERSION_OR_COMMIT>` with the version number or commit hash you used:
299
+
300
+ ```bibtex
301
+ @misc{schubmult,
302
+ author = {Samuel, Matt},
303
+ title = {{schubmult}},
304
+ year = {<YEAR>},
305
+ url = {https://github.com/matthematics/schubmult},
306
+ note = {Version <VERSION_OR_COMMIT>}
307
+ }
308
+ ```
309
+
310
+ ### Preprint (template)
311
+
312
+ **arXiv link:** `<ARXIV_URL>`
313
+
314
+ The preprint citation is not yet filled in. Replace the placeholders below with
315
+ the paper's authors, title, year, arXiv identifier, and URL before citing it, or
316
+ paste the BibTeX entry exported by arXiv. Also fill in and uncomment the
317
+ `preferred-citation` block in [CITATION.cff](CITATION.cff). The software citation
318
+ above can be used in the meantime.
319
+
320
+ ```bibtex
321
+ @misc{schubmult_paper,
322
+ author = {<AUTHORS>},
323
+ title = {<PAPER_TITLE>},
324
+ year = {<YEAR>},
325
+ eprint = {<ARXIV_ID>},
326
+ archivePrefix = {arXiv},
327
+ url = {<ARXIV_URL>}
328
+ }
329
+ ```
330
+
189
331
  ## License
190
332
 
191
333
  GPL-3.0-or-later. See [LICENSE](LICENSE).