passagemath-categories 10.6.32__cp314-cp314t-musllinux_1_2_aarch64.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 (719) hide show
  1. passagemath_categories-10.6.32.dist-info/METADATA +156 -0
  2. passagemath_categories-10.6.32.dist-info/RECORD +719 -0
  3. passagemath_categories-10.6.32.dist-info/WHEEL +5 -0
  4. passagemath_categories-10.6.32.dist-info/top_level.txt +2 -0
  5. passagemath_categories.libs/libgcc_s-2d945d6c.so.1 +0 -0
  6. passagemath_categories.libs/libgmp-28992bcb.so.10.5.0 +0 -0
  7. passagemath_categories.libs/libstdc++-85f2cd6d.so.6.0.33 +0 -0
  8. sage/all__sagemath_categories.py +28 -0
  9. sage/arith/all.py +38 -0
  10. sage/arith/constants.pxd +27 -0
  11. sage/arith/functions.cpython-314t-aarch64-linux-musl.so +0 -0
  12. sage/arith/functions.pxd +4 -0
  13. sage/arith/functions.pyx +221 -0
  14. sage/arith/misc.py +6552 -0
  15. sage/arith/multi_modular.cpython-314t-aarch64-linux-musl.so +0 -0
  16. sage/arith/multi_modular.pxd +39 -0
  17. sage/arith/multi_modular.pyx +994 -0
  18. sage/arith/rational_reconstruction.cpython-314t-aarch64-linux-musl.so +0 -0
  19. sage/arith/rational_reconstruction.pxd +4 -0
  20. sage/arith/rational_reconstruction.pyx +115 -0
  21. sage/arith/srange.cpython-314t-aarch64-linux-musl.so +0 -0
  22. sage/arith/srange.pyx +571 -0
  23. sage/calculus/all__sagemath_categories.py +2 -0
  24. sage/calculus/functional.py +481 -0
  25. sage/calculus/functions.py +151 -0
  26. sage/categories/additive_groups.py +73 -0
  27. sage/categories/additive_magmas.py +1044 -0
  28. sage/categories/additive_monoids.py +114 -0
  29. sage/categories/additive_semigroups.py +184 -0
  30. sage/categories/affine_weyl_groups.py +238 -0
  31. sage/categories/algebra_ideals.py +95 -0
  32. sage/categories/algebra_modules.py +96 -0
  33. sage/categories/algebras.py +349 -0
  34. sage/categories/algebras_with_basis.py +377 -0
  35. sage/categories/all.py +160 -0
  36. sage/categories/aperiodic_semigroups.py +29 -0
  37. sage/categories/associative_algebras.py +47 -0
  38. sage/categories/bialgebras.py +101 -0
  39. sage/categories/bialgebras_with_basis.py +414 -0
  40. sage/categories/bimodules.py +206 -0
  41. sage/categories/chain_complexes.py +268 -0
  42. sage/categories/classical_crystals.py +480 -0
  43. sage/categories/coalgebras.py +405 -0
  44. sage/categories/coalgebras_with_basis.py +232 -0
  45. sage/categories/coercion_methods.cpython-314t-aarch64-linux-musl.so +0 -0
  46. sage/categories/coercion_methods.pyx +52 -0
  47. sage/categories/commutative_additive_groups.py +104 -0
  48. sage/categories/commutative_additive_monoids.py +45 -0
  49. sage/categories/commutative_additive_semigroups.py +48 -0
  50. sage/categories/commutative_algebra_ideals.py +87 -0
  51. sage/categories/commutative_algebras.py +94 -0
  52. sage/categories/commutative_ring_ideals.py +58 -0
  53. sage/categories/commutative_rings.py +736 -0
  54. sage/categories/complete_discrete_valuation.py +293 -0
  55. sage/categories/complex_reflection_groups.py +145 -0
  56. sage/categories/complex_reflection_or_generalized_coxeter_groups.py +1249 -0
  57. sage/categories/coxeter_group_algebras.py +186 -0
  58. sage/categories/coxeter_groups.py +3402 -0
  59. sage/categories/crystals.py +2628 -0
  60. sage/categories/cw_complexes.py +216 -0
  61. sage/categories/dedekind_domains.py +137 -0
  62. sage/categories/discrete_valuation.py +325 -0
  63. sage/categories/distributive_magmas_and_additive_magmas.py +100 -0
  64. sage/categories/division_rings.py +114 -0
  65. sage/categories/domains.py +95 -0
  66. sage/categories/drinfeld_modules.py +789 -0
  67. sage/categories/dual.py +42 -0
  68. sage/categories/enumerated_sets.py +1146 -0
  69. sage/categories/euclidean_domains.py +271 -0
  70. sage/categories/examples/algebras_with_basis.py +102 -0
  71. sage/categories/examples/all.py +1 -0
  72. sage/categories/examples/commutative_additive_monoids.py +130 -0
  73. sage/categories/examples/commutative_additive_semigroups.py +199 -0
  74. sage/categories/examples/coxeter_groups.py +8 -0
  75. sage/categories/examples/crystals.py +236 -0
  76. sage/categories/examples/cw_complexes.py +163 -0
  77. sage/categories/examples/facade_sets.py +187 -0
  78. sage/categories/examples/filtered_algebras_with_basis.py +204 -0
  79. sage/categories/examples/filtered_modules_with_basis.py +154 -0
  80. sage/categories/examples/finite_coxeter_groups.py +252 -0
  81. sage/categories/examples/finite_dimensional_algebras_with_basis.py +148 -0
  82. sage/categories/examples/finite_dimensional_lie_algebras_with_basis.py +495 -0
  83. sage/categories/examples/finite_enumerated_sets.py +208 -0
  84. sage/categories/examples/finite_monoids.py +150 -0
  85. sage/categories/examples/finite_semigroups.py +190 -0
  86. sage/categories/examples/finite_weyl_groups.py +191 -0
  87. sage/categories/examples/graded_connected_hopf_algebras_with_basis.py +152 -0
  88. sage/categories/examples/graded_modules_with_basis.py +168 -0
  89. sage/categories/examples/graphs.py +122 -0
  90. sage/categories/examples/hopf_algebras_with_basis.py +145 -0
  91. sage/categories/examples/infinite_enumerated_sets.py +190 -0
  92. sage/categories/examples/lie_algebras.py +352 -0
  93. sage/categories/examples/lie_algebras_with_basis.py +196 -0
  94. sage/categories/examples/magmas.py +162 -0
  95. sage/categories/examples/manifolds.py +94 -0
  96. sage/categories/examples/monoids.py +144 -0
  97. sage/categories/examples/posets.py +178 -0
  98. sage/categories/examples/semigroups.py +580 -0
  99. sage/categories/examples/semigroups_cython.cpython-314t-aarch64-linux-musl.so +0 -0
  100. sage/categories/examples/semigroups_cython.pyx +221 -0
  101. sage/categories/examples/semirings.py +249 -0
  102. sage/categories/examples/sets_cat.py +706 -0
  103. sage/categories/examples/sets_with_grading.py +101 -0
  104. sage/categories/examples/with_realizations.py +542 -0
  105. sage/categories/fields.py +991 -0
  106. sage/categories/filtered_algebras.py +63 -0
  107. sage/categories/filtered_algebras_with_basis.py +548 -0
  108. sage/categories/filtered_hopf_algebras_with_basis.py +138 -0
  109. sage/categories/filtered_modules.py +210 -0
  110. sage/categories/filtered_modules_with_basis.py +1209 -0
  111. sage/categories/finite_complex_reflection_groups.py +1506 -0
  112. sage/categories/finite_coxeter_groups.py +1138 -0
  113. sage/categories/finite_crystals.py +103 -0
  114. sage/categories/finite_dimensional_algebras_with_basis.py +1860 -0
  115. sage/categories/finite_dimensional_bialgebras_with_basis.py +33 -0
  116. sage/categories/finite_dimensional_coalgebras_with_basis.py +33 -0
  117. sage/categories/finite_dimensional_graded_lie_algebras_with_basis.py +231 -0
  118. sage/categories/finite_dimensional_hopf_algebras_with_basis.py +38 -0
  119. sage/categories/finite_dimensional_lie_algebras_with_basis.py +2774 -0
  120. sage/categories/finite_dimensional_modules_with_basis.py +1407 -0
  121. sage/categories/finite_dimensional_nilpotent_lie_algebras_with_basis.py +167 -0
  122. sage/categories/finite_dimensional_semisimple_algebras_with_basis.py +270 -0
  123. sage/categories/finite_enumerated_sets.py +769 -0
  124. sage/categories/finite_fields.py +252 -0
  125. sage/categories/finite_groups.py +256 -0
  126. sage/categories/finite_lattice_posets.py +242 -0
  127. sage/categories/finite_monoids.py +316 -0
  128. sage/categories/finite_permutation_groups.py +339 -0
  129. sage/categories/finite_posets.py +1994 -0
  130. sage/categories/finite_semigroups.py +136 -0
  131. sage/categories/finite_sets.py +93 -0
  132. sage/categories/finite_weyl_groups.py +39 -0
  133. sage/categories/finitely_generated_lambda_bracket_algebras.py +112 -0
  134. sage/categories/finitely_generated_lie_conformal_algebras.py +114 -0
  135. sage/categories/finitely_generated_magmas.py +57 -0
  136. sage/categories/finitely_generated_semigroups.py +214 -0
  137. sage/categories/function_fields.py +76 -0
  138. sage/categories/g_sets.py +77 -0
  139. sage/categories/gcd_domains.py +65 -0
  140. sage/categories/generalized_coxeter_groups.py +94 -0
  141. sage/categories/graded_algebras.py +85 -0
  142. sage/categories/graded_algebras_with_basis.py +258 -0
  143. sage/categories/graded_bialgebras.py +32 -0
  144. sage/categories/graded_bialgebras_with_basis.py +32 -0
  145. sage/categories/graded_coalgebras.py +65 -0
  146. sage/categories/graded_coalgebras_with_basis.py +51 -0
  147. sage/categories/graded_hopf_algebras.py +41 -0
  148. sage/categories/graded_hopf_algebras_with_basis.py +169 -0
  149. sage/categories/graded_lie_algebras.py +91 -0
  150. sage/categories/graded_lie_algebras_with_basis.py +44 -0
  151. sage/categories/graded_lie_conformal_algebras.py +74 -0
  152. sage/categories/graded_modules.py +133 -0
  153. sage/categories/graded_modules_with_basis.py +329 -0
  154. sage/categories/graphs.py +138 -0
  155. sage/categories/group_algebras.py +430 -0
  156. sage/categories/groupoid.py +94 -0
  157. sage/categories/groups.py +667 -0
  158. sage/categories/h_trivial_semigroups.py +64 -0
  159. sage/categories/hecke_modules.py +185 -0
  160. sage/categories/highest_weight_crystals.py +980 -0
  161. sage/categories/hopf_algebras.py +219 -0
  162. sage/categories/hopf_algebras_with_basis.py +309 -0
  163. sage/categories/infinite_enumerated_sets.py +115 -0
  164. sage/categories/integral_domains.py +203 -0
  165. sage/categories/j_trivial_semigroups.py +29 -0
  166. sage/categories/kac_moody_algebras.py +82 -0
  167. sage/categories/kahler_algebras.py +203 -0
  168. sage/categories/l_trivial_semigroups.py +63 -0
  169. sage/categories/lambda_bracket_algebras.py +280 -0
  170. sage/categories/lambda_bracket_algebras_with_basis.py +107 -0
  171. sage/categories/lattice_posets.py +89 -0
  172. sage/categories/left_modules.py +49 -0
  173. sage/categories/lie_algebras.py +1070 -0
  174. sage/categories/lie_algebras_with_basis.py +261 -0
  175. sage/categories/lie_conformal_algebras.py +350 -0
  176. sage/categories/lie_conformal_algebras_with_basis.py +147 -0
  177. sage/categories/lie_groups.py +73 -0
  178. sage/categories/loop_crystals.py +1290 -0
  179. sage/categories/magmas.py +1189 -0
  180. sage/categories/magmas_and_additive_magmas.py +149 -0
  181. sage/categories/magmatic_algebras.py +365 -0
  182. sage/categories/manifolds.py +352 -0
  183. sage/categories/matrix_algebras.py +40 -0
  184. sage/categories/metric_spaces.py +387 -0
  185. sage/categories/modular_abelian_varieties.py +78 -0
  186. sage/categories/modules.py +989 -0
  187. sage/categories/modules_with_basis.py +2794 -0
  188. sage/categories/monoid_algebras.py +38 -0
  189. sage/categories/monoids.py +739 -0
  190. sage/categories/noetherian_rings.py +87 -0
  191. sage/categories/number_fields.py +242 -0
  192. sage/categories/ore_modules.py +189 -0
  193. sage/categories/partially_ordered_monoids.py +49 -0
  194. sage/categories/permutation_groups.py +63 -0
  195. sage/categories/pointed_sets.py +42 -0
  196. sage/categories/polyhedra.py +74 -0
  197. sage/categories/poor_man_map.py +270 -0
  198. sage/categories/posets.py +722 -0
  199. sage/categories/principal_ideal_domains.py +270 -0
  200. sage/categories/quantum_group_representations.py +543 -0
  201. sage/categories/quotient_fields.py +728 -0
  202. sage/categories/r_trivial_semigroups.py +45 -0
  203. sage/categories/regular_crystals.py +898 -0
  204. sage/categories/regular_supercrystals.py +170 -0
  205. sage/categories/right_modules.py +49 -0
  206. sage/categories/ring_ideals.py +74 -0
  207. sage/categories/rings.py +1904 -0
  208. sage/categories/rngs.py +175 -0
  209. sage/categories/schemes.py +393 -0
  210. sage/categories/semigroups.py +1060 -0
  211. sage/categories/semirings.py +71 -0
  212. sage/categories/semisimple_algebras.py +114 -0
  213. sage/categories/sets_with_grading.py +235 -0
  214. sage/categories/shephard_groups.py +43 -0
  215. sage/categories/signed_tensor.py +120 -0
  216. sage/categories/simplicial_complexes.py +134 -0
  217. sage/categories/simplicial_sets.py +1206 -0
  218. sage/categories/super_algebras.py +149 -0
  219. sage/categories/super_algebras_with_basis.py +144 -0
  220. sage/categories/super_hopf_algebras_with_basis.py +126 -0
  221. sage/categories/super_lie_conformal_algebras.py +193 -0
  222. sage/categories/super_modules.py +229 -0
  223. sage/categories/super_modules_with_basis.py +193 -0
  224. sage/categories/supercommutative_algebras.py +99 -0
  225. sage/categories/supercrystals.py +406 -0
  226. sage/categories/tensor.py +110 -0
  227. sage/categories/topological_spaces.py +170 -0
  228. sage/categories/triangular_kac_moody_algebras.py +439 -0
  229. sage/categories/tutorial.py +58 -0
  230. sage/categories/unique_factorization_domains.py +318 -0
  231. sage/categories/unital_algebras.py +426 -0
  232. sage/categories/vector_bundles.py +159 -0
  233. sage/categories/vector_spaces.py +357 -0
  234. sage/categories/weyl_groups.py +853 -0
  235. sage/combinat/all__sagemath_categories.py +34 -0
  236. sage/combinat/backtrack.py +180 -0
  237. sage/combinat/combinat.py +2269 -0
  238. sage/combinat/combinat_cython.cpython-314t-aarch64-linux-musl.so +0 -0
  239. sage/combinat/combinat_cython.pxd +6 -0
  240. sage/combinat/combinat_cython.pyx +390 -0
  241. sage/combinat/combination.py +796 -0
  242. sage/combinat/combinatorial_map.py +416 -0
  243. sage/combinat/composition.py +2192 -0
  244. sage/combinat/dlx.py +510 -0
  245. sage/combinat/integer_lists/__init__.py +7 -0
  246. sage/combinat/integer_lists/base.cpython-314t-aarch64-linux-musl.so +0 -0
  247. sage/combinat/integer_lists/base.pxd +16 -0
  248. sage/combinat/integer_lists/base.pyx +713 -0
  249. sage/combinat/integer_lists/invlex.cpython-314t-aarch64-linux-musl.so +0 -0
  250. sage/combinat/integer_lists/invlex.pxd +4 -0
  251. sage/combinat/integer_lists/invlex.pyx +1650 -0
  252. sage/combinat/integer_lists/lists.py +328 -0
  253. sage/combinat/integer_lists/nn.py +48 -0
  254. sage/combinat/integer_vector.py +1818 -0
  255. sage/combinat/integer_vector_weighted.py +413 -0
  256. sage/combinat/matrices/all__sagemath_categories.py +5 -0
  257. sage/combinat/matrices/dancing_links.cpython-314t-aarch64-linux-musl.so +0 -0
  258. sage/combinat/matrices/dancing_links.pyx +1159 -0
  259. sage/combinat/matrices/dancing_links_c.h +380 -0
  260. sage/combinat/matrices/dlxcpp.py +136 -0
  261. sage/combinat/partition.py +10070 -0
  262. sage/combinat/partitions.cpython-314t-aarch64-linux-musl.so +0 -0
  263. sage/combinat/partitions.pyx +743 -0
  264. sage/combinat/permutation.py +10168 -0
  265. sage/combinat/permutation_cython.cpython-314t-aarch64-linux-musl.so +0 -0
  266. sage/combinat/permutation_cython.pxd +11 -0
  267. sage/combinat/permutation_cython.pyx +407 -0
  268. sage/combinat/q_analogues.py +1090 -0
  269. sage/combinat/ranker.py +268 -0
  270. sage/combinat/subset.py +1561 -0
  271. sage/combinat/subsets_hereditary.py +202 -0
  272. sage/combinat/subsets_pairwise.py +184 -0
  273. sage/combinat/tools.py +63 -0
  274. sage/combinat/tuple.py +348 -0
  275. sage/data_structures/all.py +2 -0
  276. sage/data_structures/all__sagemath_categories.py +2 -0
  277. sage/data_structures/binary_matrix.pxd +138 -0
  278. sage/data_structures/binary_search.cpython-314t-aarch64-linux-musl.so +0 -0
  279. sage/data_structures/binary_search.pxd +3 -0
  280. sage/data_structures/binary_search.pyx +66 -0
  281. sage/data_structures/bitset.cpython-314t-aarch64-linux-musl.so +0 -0
  282. sage/data_structures/bitset.pxd +40 -0
  283. sage/data_structures/bitset.pyx +2385 -0
  284. sage/data_structures/bitset_base.cpython-314t-aarch64-linux-musl.so +0 -0
  285. sage/data_structures/bitset_base.pxd +926 -0
  286. sage/data_structures/bitset_base.pyx +117 -0
  287. sage/data_structures/bitset_intrinsics.h +487 -0
  288. sage/data_structures/blas_dict.cpython-314t-aarch64-linux-musl.so +0 -0
  289. sage/data_structures/blas_dict.pxd +12 -0
  290. sage/data_structures/blas_dict.pyx +469 -0
  291. sage/data_structures/list_of_pairs.cpython-314t-aarch64-linux-musl.so +0 -0
  292. sage/data_structures/list_of_pairs.pxd +16 -0
  293. sage/data_structures/list_of_pairs.pyx +122 -0
  294. sage/data_structures/mutable_poset.py +3312 -0
  295. sage/data_structures/pairing_heap.cpython-314t-aarch64-linux-musl.so +0 -0
  296. sage/data_structures/pairing_heap.h +346 -0
  297. sage/data_structures/pairing_heap.pxd +88 -0
  298. sage/data_structures/pairing_heap.pyx +1464 -0
  299. sage/data_structures/sparse_bitset.pxd +62 -0
  300. sage/data_structures/stream.py +5070 -0
  301. sage/databases/all__sagemath_categories.py +7 -0
  302. sage/databases/sql_db.py +2236 -0
  303. sage/ext/all__sagemath_categories.py +3 -0
  304. sage/ext/fast_callable.cpython-314t-aarch64-linux-musl.so +0 -0
  305. sage/ext/fast_callable.pxd +4 -0
  306. sage/ext/fast_callable.pyx +2746 -0
  307. sage/ext/fast_eval.cpython-314t-aarch64-linux-musl.so +0 -0
  308. sage/ext/fast_eval.pxd +1 -0
  309. sage/ext/fast_eval.pyx +102 -0
  310. sage/ext/interpreters/__init__.py +1 -0
  311. sage/ext/interpreters/all__sagemath_categories.py +2 -0
  312. sage/ext/interpreters/wrapper_el.cpython-314t-aarch64-linux-musl.so +0 -0
  313. sage/ext/interpreters/wrapper_el.pxd +18 -0
  314. sage/ext/interpreters/wrapper_el.pyx +148 -0
  315. sage/ext/interpreters/wrapper_py.cpython-314t-aarch64-linux-musl.so +0 -0
  316. sage/ext/interpreters/wrapper_py.pxd +17 -0
  317. sage/ext/interpreters/wrapper_py.pyx +133 -0
  318. sage/functions/airy.py +937 -0
  319. sage/functions/all.py +97 -0
  320. sage/functions/bessel.py +2102 -0
  321. sage/functions/error.py +784 -0
  322. sage/functions/exp_integral.py +1529 -0
  323. sage/functions/gamma.py +1087 -0
  324. sage/functions/generalized.py +672 -0
  325. sage/functions/hyperbolic.py +747 -0
  326. sage/functions/hypergeometric.py +1156 -0
  327. sage/functions/jacobi.py +1705 -0
  328. sage/functions/log.py +1402 -0
  329. sage/functions/min_max.py +338 -0
  330. sage/functions/orthogonal_polys.py +3106 -0
  331. sage/functions/other.py +2303 -0
  332. sage/functions/piecewise.py +1505 -0
  333. sage/functions/prime_pi.cpython-314t-aarch64-linux-musl.so +0 -0
  334. sage/functions/prime_pi.pyx +262 -0
  335. sage/functions/special.py +1212 -0
  336. sage/functions/spike_function.py +278 -0
  337. sage/functions/transcendental.py +690 -0
  338. sage/functions/trig.py +1062 -0
  339. sage/functions/wigner.py +726 -0
  340. sage/geometry/abc.cpython-314t-aarch64-linux-musl.so +0 -0
  341. sage/geometry/abc.pyx +82 -0
  342. sage/geometry/all__sagemath_categories.py +1 -0
  343. sage/groups/all__sagemath_categories.py +11 -0
  344. sage/groups/generic.py +1733 -0
  345. sage/groups/groups_catalog.py +113 -0
  346. sage/groups/perm_gps/all__sagemath_categories.py +1 -0
  347. sage/groups/perm_gps/partn_ref/all.py +1 -0
  348. sage/groups/perm_gps/partn_ref/all__sagemath_categories.py +1 -0
  349. sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.cpython-314t-aarch64-linux-musl.so +0 -0
  350. sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.pxd +52 -0
  351. sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.pyx +906 -0
  352. sage/groups/perm_gps/partn_ref/canonical_augmentation.cpython-314t-aarch64-linux-musl.so +0 -0
  353. sage/groups/perm_gps/partn_ref/canonical_augmentation.pxd +85 -0
  354. sage/groups/perm_gps/partn_ref/canonical_augmentation.pyx +534 -0
  355. sage/groups/perm_gps/partn_ref/data_structures.cpython-314t-aarch64-linux-musl.so +0 -0
  356. sage/groups/perm_gps/partn_ref/data_structures.pxd +576 -0
  357. sage/groups/perm_gps/partn_ref/data_structures.pyx +1792 -0
  358. sage/groups/perm_gps/partn_ref/double_coset.cpython-314t-aarch64-linux-musl.so +0 -0
  359. sage/groups/perm_gps/partn_ref/double_coset.pxd +45 -0
  360. sage/groups/perm_gps/partn_ref/double_coset.pyx +739 -0
  361. sage/groups/perm_gps/partn_ref/refinement_lists.cpython-314t-aarch64-linux-musl.so +0 -0
  362. sage/groups/perm_gps/partn_ref/refinement_lists.pxd +18 -0
  363. sage/groups/perm_gps/partn_ref/refinement_lists.pyx +82 -0
  364. sage/groups/perm_gps/partn_ref/refinement_python.cpython-314t-aarch64-linux-musl.so +0 -0
  365. sage/groups/perm_gps/partn_ref/refinement_python.pxd +16 -0
  366. sage/groups/perm_gps/partn_ref/refinement_python.pyx +564 -0
  367. sage/groups/perm_gps/partn_ref/refinement_sets.cpython-314t-aarch64-linux-musl.so +0 -0
  368. sage/groups/perm_gps/partn_ref/refinement_sets.pxd +60 -0
  369. sage/groups/perm_gps/partn_ref/refinement_sets.pyx +858 -0
  370. sage/interfaces/abc.py +140 -0
  371. sage/interfaces/all.py +58 -0
  372. sage/interfaces/all__sagemath_categories.py +1 -0
  373. sage/interfaces/expect.py +1643 -0
  374. sage/interfaces/interface.py +1682 -0
  375. sage/interfaces/process.cpython-314t-aarch64-linux-musl.so +0 -0
  376. sage/interfaces/process.pxd +5 -0
  377. sage/interfaces/process.pyx +288 -0
  378. sage/interfaces/quit.py +167 -0
  379. sage/interfaces/sage0.py +604 -0
  380. sage/interfaces/sagespawn.cpython-314t-aarch64-linux-musl.so +0 -0
  381. sage/interfaces/sagespawn.pyx +308 -0
  382. sage/interfaces/tab_completion.py +101 -0
  383. sage/misc/all__sagemath_categories.py +78 -0
  384. sage/misc/allocator.cpython-314t-aarch64-linux-musl.so +0 -0
  385. sage/misc/allocator.pxd +6 -0
  386. sage/misc/allocator.pyx +47 -0
  387. sage/misc/binary_tree.cpython-314t-aarch64-linux-musl.so +0 -0
  388. sage/misc/binary_tree.pxd +29 -0
  389. sage/misc/binary_tree.pyx +537 -0
  390. sage/misc/callable_dict.cpython-314t-aarch64-linux-musl.so +0 -0
  391. sage/misc/callable_dict.pyx +89 -0
  392. sage/misc/citation.cpython-314t-aarch64-linux-musl.so +0 -0
  393. sage/misc/citation.pyx +159 -0
  394. sage/misc/converting_dict.py +293 -0
  395. sage/misc/defaults.py +129 -0
  396. sage/misc/derivative.cpython-314t-aarch64-linux-musl.so +0 -0
  397. sage/misc/derivative.pyx +223 -0
  398. sage/misc/functional.py +2005 -0
  399. sage/misc/html.py +589 -0
  400. sage/misc/latex.py +2673 -0
  401. sage/misc/latex_macros.py +236 -0
  402. sage/misc/latex_standalone.py +1833 -0
  403. sage/misc/map_threaded.py +38 -0
  404. sage/misc/mathml.py +76 -0
  405. sage/misc/method_decorator.py +88 -0
  406. sage/misc/mrange.py +755 -0
  407. sage/misc/multireplace.py +41 -0
  408. sage/misc/object_multiplexer.py +92 -0
  409. sage/misc/parser.cpython-314t-aarch64-linux-musl.so +0 -0
  410. sage/misc/parser.pyx +1107 -0
  411. sage/misc/random_testing.py +264 -0
  412. sage/misc/rest_index_of_methods.py +377 -0
  413. sage/misc/search.cpython-314t-aarch64-linux-musl.so +0 -0
  414. sage/misc/search.pxd +2 -0
  415. sage/misc/search.pyx +68 -0
  416. sage/misc/stopgap.cpython-314t-aarch64-linux-musl.so +0 -0
  417. sage/misc/stopgap.pyx +95 -0
  418. sage/misc/table.py +853 -0
  419. sage/monoids/all__sagemath_categories.py +1 -0
  420. sage/monoids/indexed_free_monoid.py +1071 -0
  421. sage/monoids/monoid.py +82 -0
  422. sage/numerical/all__sagemath_categories.py +1 -0
  423. sage/numerical/backends/all__sagemath_categories.py +1 -0
  424. sage/numerical/backends/generic_backend.cpython-314t-aarch64-linux-musl.so +0 -0
  425. sage/numerical/backends/generic_backend.pxd +61 -0
  426. sage/numerical/backends/generic_backend.pyx +1893 -0
  427. sage/numerical/backends/generic_sdp_backend.cpython-314t-aarch64-linux-musl.so +0 -0
  428. sage/numerical/backends/generic_sdp_backend.pxd +38 -0
  429. sage/numerical/backends/generic_sdp_backend.pyx +755 -0
  430. sage/parallel/all.py +6 -0
  431. sage/parallel/decorate.py +575 -0
  432. sage/parallel/map_reduce.py +1997 -0
  433. sage/parallel/multiprocessing_sage.py +76 -0
  434. sage/parallel/ncpus.py +35 -0
  435. sage/parallel/parallelism.py +364 -0
  436. sage/parallel/reference.py +47 -0
  437. sage/parallel/use_fork.py +333 -0
  438. sage/rings/abc.cpython-314t-aarch64-linux-musl.so +0 -0
  439. sage/rings/abc.pxd +31 -0
  440. sage/rings/abc.pyx +526 -0
  441. sage/rings/algebraic_closure_finite_field.py +1154 -0
  442. sage/rings/all__sagemath_categories.py +91 -0
  443. sage/rings/big_oh.py +227 -0
  444. sage/rings/continued_fraction.py +2754 -0
  445. sage/rings/continued_fraction_gosper.py +220 -0
  446. sage/rings/factorint.cpython-314t-aarch64-linux-musl.so +0 -0
  447. sage/rings/factorint.pyx +295 -0
  448. sage/rings/fast_arith.cpython-314t-aarch64-linux-musl.so +0 -0
  449. sage/rings/fast_arith.pxd +21 -0
  450. sage/rings/fast_arith.pyx +535 -0
  451. sage/rings/finite_rings/all__sagemath_categories.py +9 -0
  452. sage/rings/finite_rings/conway_polynomials.py +542 -0
  453. sage/rings/finite_rings/element_base.cpython-314t-aarch64-linux-musl.so +0 -0
  454. sage/rings/finite_rings/element_base.pxd +12 -0
  455. sage/rings/finite_rings/element_base.pyx +1176 -0
  456. sage/rings/finite_rings/finite_field_base.cpython-314t-aarch64-linux-musl.so +0 -0
  457. sage/rings/finite_rings/finite_field_base.pxd +7 -0
  458. sage/rings/finite_rings/finite_field_base.pyx +2171 -0
  459. sage/rings/finite_rings/finite_field_constructor.py +827 -0
  460. sage/rings/finite_rings/finite_field_prime_modn.py +372 -0
  461. sage/rings/finite_rings/galois_group.py +154 -0
  462. sage/rings/finite_rings/hom_finite_field.cpython-314t-aarch64-linux-musl.so +0 -0
  463. sage/rings/finite_rings/hom_finite_field.pxd +23 -0
  464. sage/rings/finite_rings/hom_finite_field.pyx +856 -0
  465. sage/rings/finite_rings/hom_prime_finite_field.cpython-314t-aarch64-linux-musl.so +0 -0
  466. sage/rings/finite_rings/hom_prime_finite_field.pxd +15 -0
  467. sage/rings/finite_rings/hom_prime_finite_field.pyx +164 -0
  468. sage/rings/finite_rings/homset.py +357 -0
  469. sage/rings/finite_rings/integer_mod.cpython-314t-aarch64-linux-musl.so +0 -0
  470. sage/rings/finite_rings/integer_mod.pxd +56 -0
  471. sage/rings/finite_rings/integer_mod.pyx +4586 -0
  472. sage/rings/finite_rings/integer_mod_limits.h +11 -0
  473. sage/rings/finite_rings/integer_mod_ring.py +2044 -0
  474. sage/rings/finite_rings/residue_field.cpython-314t-aarch64-linux-musl.so +0 -0
  475. sage/rings/finite_rings/residue_field.pxd +30 -0
  476. sage/rings/finite_rings/residue_field.pyx +1811 -0
  477. sage/rings/finite_rings/stdint.pxd +19 -0
  478. sage/rings/fraction_field.py +1452 -0
  479. sage/rings/fraction_field_element.cpython-314t-aarch64-linux-musl.so +0 -0
  480. sage/rings/fraction_field_element.pyx +1357 -0
  481. sage/rings/function_field/all.py +7 -0
  482. sage/rings/function_field/all__sagemath_categories.py +2 -0
  483. sage/rings/function_field/constructor.py +218 -0
  484. sage/rings/function_field/element.cpython-314t-aarch64-linux-musl.so +0 -0
  485. sage/rings/function_field/element.pxd +11 -0
  486. sage/rings/function_field/element.pyx +1008 -0
  487. sage/rings/function_field/element_rational.cpython-314t-aarch64-linux-musl.so +0 -0
  488. sage/rings/function_field/element_rational.pyx +513 -0
  489. sage/rings/function_field/extensions.py +230 -0
  490. sage/rings/function_field/function_field.py +1468 -0
  491. sage/rings/function_field/function_field_rational.py +1005 -0
  492. sage/rings/function_field/ideal.py +1155 -0
  493. sage/rings/function_field/ideal_rational.py +629 -0
  494. sage/rings/function_field/jacobian_base.py +826 -0
  495. sage/rings/function_field/jacobian_hess.py +1053 -0
  496. sage/rings/function_field/jacobian_khuri_makdisi.py +1027 -0
  497. sage/rings/function_field/maps.py +1039 -0
  498. sage/rings/function_field/order.py +281 -0
  499. sage/rings/function_field/order_basis.py +586 -0
  500. sage/rings/function_field/order_rational.py +576 -0
  501. sage/rings/function_field/place.py +426 -0
  502. sage/rings/function_field/place_rational.py +181 -0
  503. sage/rings/generic.py +320 -0
  504. sage/rings/homset.py +332 -0
  505. sage/rings/ideal.py +1885 -0
  506. sage/rings/ideal_monoid.py +215 -0
  507. sage/rings/infinity.py +1890 -0
  508. sage/rings/integer.cpython-314t-aarch64-linux-musl.so +0 -0
  509. sage/rings/integer.pxd +45 -0
  510. sage/rings/integer.pyx +7874 -0
  511. sage/rings/integer_ring.cpython-314t-aarch64-linux-musl.so +0 -0
  512. sage/rings/integer_ring.pxd +8 -0
  513. sage/rings/integer_ring.pyx +1693 -0
  514. sage/rings/laurent_series_ring.py +931 -0
  515. sage/rings/laurent_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
  516. sage/rings/laurent_series_ring_element.pxd +11 -0
  517. sage/rings/laurent_series_ring_element.pyx +1927 -0
  518. sage/rings/lazy_series.py +7815 -0
  519. sage/rings/lazy_series_ring.py +4356 -0
  520. sage/rings/localization.py +1043 -0
  521. sage/rings/morphism.cpython-314t-aarch64-linux-musl.so +0 -0
  522. sage/rings/morphism.pxd +39 -0
  523. sage/rings/morphism.pyx +3299 -0
  524. sage/rings/multi_power_series_ring.py +1145 -0
  525. sage/rings/multi_power_series_ring_element.py +2184 -0
  526. sage/rings/noncommutative_ideals.cpython-314t-aarch64-linux-musl.so +0 -0
  527. sage/rings/noncommutative_ideals.pyx +423 -0
  528. sage/rings/number_field/all__sagemath_categories.py +1 -0
  529. sage/rings/number_field/number_field_base.cpython-314t-aarch64-linux-musl.so +0 -0
  530. sage/rings/number_field/number_field_base.pxd +8 -0
  531. sage/rings/number_field/number_field_base.pyx +507 -0
  532. sage/rings/number_field/number_field_element_base.cpython-314t-aarch64-linux-musl.so +0 -0
  533. sage/rings/number_field/number_field_element_base.pxd +6 -0
  534. sage/rings/number_field/number_field_element_base.pyx +36 -0
  535. sage/rings/number_field/number_field_ideal.py +3550 -0
  536. sage/rings/padics/all__sagemath_categories.py +4 -0
  537. sage/rings/padics/local_generic.py +1670 -0
  538. sage/rings/padics/local_generic_element.cpython-314t-aarch64-linux-musl.so +0 -0
  539. sage/rings/padics/local_generic_element.pxd +5 -0
  540. sage/rings/padics/local_generic_element.pyx +1017 -0
  541. sage/rings/padics/misc.py +256 -0
  542. sage/rings/padics/padic_generic.py +1911 -0
  543. sage/rings/padics/pow_computer.cpython-314t-aarch64-linux-musl.so +0 -0
  544. sage/rings/padics/pow_computer.pxd +38 -0
  545. sage/rings/padics/pow_computer.pyx +671 -0
  546. sage/rings/padics/precision_error.py +24 -0
  547. sage/rings/polynomial/all__sagemath_categories.py +25 -0
  548. sage/rings/polynomial/commutative_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
  549. sage/rings/polynomial/commutative_polynomial.pxd +6 -0
  550. sage/rings/polynomial/commutative_polynomial.pyx +24 -0
  551. sage/rings/polynomial/cyclotomic.cpython-314t-aarch64-linux-musl.so +0 -0
  552. sage/rings/polynomial/cyclotomic.pyx +404 -0
  553. sage/rings/polynomial/flatten.py +711 -0
  554. sage/rings/polynomial/ideal.py +102 -0
  555. sage/rings/polynomial/infinite_polynomial_element.py +1768 -0
  556. sage/rings/polynomial/infinite_polynomial_ring.py +1653 -0
  557. sage/rings/polynomial/laurent_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
  558. sage/rings/polynomial/laurent_polynomial.pxd +18 -0
  559. sage/rings/polynomial/laurent_polynomial.pyx +2190 -0
  560. sage/rings/polynomial/laurent_polynomial_ideal.py +590 -0
  561. sage/rings/polynomial/laurent_polynomial_ring.py +832 -0
  562. sage/rings/polynomial/laurent_polynomial_ring_base.py +708 -0
  563. sage/rings/polynomial/multi_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
  564. sage/rings/polynomial/multi_polynomial.pxd +12 -0
  565. sage/rings/polynomial/multi_polynomial.pyx +3082 -0
  566. sage/rings/polynomial/multi_polynomial_element.py +2570 -0
  567. sage/rings/polynomial/multi_polynomial_ideal.py +5771 -0
  568. sage/rings/polynomial/multi_polynomial_ring.py +947 -0
  569. sage/rings/polynomial/multi_polynomial_ring_base.cpython-314t-aarch64-linux-musl.so +0 -0
  570. sage/rings/polynomial/multi_polynomial_ring_base.pxd +15 -0
  571. sage/rings/polynomial/multi_polynomial_ring_base.pyx +1855 -0
  572. sage/rings/polynomial/multi_polynomial_sequence.py +2204 -0
  573. sage/rings/polynomial/polydict.cpython-314t-aarch64-linux-musl.so +0 -0
  574. sage/rings/polynomial/polydict.pxd +45 -0
  575. sage/rings/polynomial/polydict.pyx +2701 -0
  576. sage/rings/polynomial/polynomial_compiled.cpython-314t-aarch64-linux-musl.so +0 -0
  577. sage/rings/polynomial/polynomial_compiled.pxd +59 -0
  578. sage/rings/polynomial/polynomial_compiled.pyx +509 -0
  579. sage/rings/polynomial/polynomial_element.cpython-314t-aarch64-linux-musl.so +0 -0
  580. sage/rings/polynomial/polynomial_element.pxd +64 -0
  581. sage/rings/polynomial/polynomial_element.pyx +13255 -0
  582. sage/rings/polynomial/polynomial_element_generic.py +1637 -0
  583. sage/rings/polynomial/polynomial_fateman.py +97 -0
  584. sage/rings/polynomial/polynomial_quotient_ring.py +2465 -0
  585. sage/rings/polynomial/polynomial_quotient_ring_element.py +779 -0
  586. sage/rings/polynomial/polynomial_ring.py +3784 -0
  587. sage/rings/polynomial/polynomial_ring_constructor.py +1051 -0
  588. sage/rings/polynomial/polynomial_ring_homomorphism.cpython-314t-aarch64-linux-musl.so +0 -0
  589. sage/rings/polynomial/polynomial_ring_homomorphism.pxd +5 -0
  590. sage/rings/polynomial/polynomial_ring_homomorphism.pyx +121 -0
  591. sage/rings/polynomial/polynomial_singular_interface.py +549 -0
  592. sage/rings/polynomial/symmetric_ideal.py +989 -0
  593. sage/rings/polynomial/symmetric_reduction.cpython-314t-aarch64-linux-musl.so +0 -0
  594. sage/rings/polynomial/symmetric_reduction.pxd +8 -0
  595. sage/rings/polynomial/symmetric_reduction.pyx +669 -0
  596. sage/rings/polynomial/term_order.py +2279 -0
  597. sage/rings/polynomial/toy_buchberger.py +449 -0
  598. sage/rings/polynomial/toy_d_basis.py +387 -0
  599. sage/rings/polynomial/toy_variety.py +362 -0
  600. sage/rings/power_series_mpoly.cpython-314t-aarch64-linux-musl.so +0 -0
  601. sage/rings/power_series_mpoly.pxd +9 -0
  602. sage/rings/power_series_mpoly.pyx +161 -0
  603. sage/rings/power_series_poly.cpython-314t-aarch64-linux-musl.so +0 -0
  604. sage/rings/power_series_poly.pxd +10 -0
  605. sage/rings/power_series_poly.pyx +1317 -0
  606. sage/rings/power_series_ring.py +1441 -0
  607. sage/rings/power_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
  608. sage/rings/power_series_ring_element.pxd +12 -0
  609. sage/rings/power_series_ring_element.pyx +3028 -0
  610. sage/rings/puiseux_series_ring.py +487 -0
  611. sage/rings/puiseux_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
  612. sage/rings/puiseux_series_ring_element.pxd +7 -0
  613. sage/rings/puiseux_series_ring_element.pyx +1055 -0
  614. sage/rings/qqbar_decorators.py +167 -0
  615. sage/rings/quotient_ring.py +1598 -0
  616. sage/rings/quotient_ring_element.py +979 -0
  617. sage/rings/rational.cpython-314t-aarch64-linux-musl.so +0 -0
  618. sage/rings/rational.pxd +20 -0
  619. sage/rings/rational.pyx +4284 -0
  620. sage/rings/rational_field.py +1730 -0
  621. sage/rings/real_double.cpython-314t-aarch64-linux-musl.so +0 -0
  622. sage/rings/real_double.pxd +16 -0
  623. sage/rings/real_double.pyx +2218 -0
  624. sage/rings/real_lazy.cpython-314t-aarch64-linux-musl.so +0 -0
  625. sage/rings/real_lazy.pxd +30 -0
  626. sage/rings/real_lazy.pyx +1773 -0
  627. sage/rings/ring.cpython-314t-aarch64-linux-musl.so +0 -0
  628. sage/rings/ring.pxd +30 -0
  629. sage/rings/ring.pyx +850 -0
  630. sage/rings/semirings/all.py +3 -0
  631. sage/rings/semirings/non_negative_integer_semiring.py +107 -0
  632. sage/rings/semirings/tropical_mpolynomial.py +972 -0
  633. sage/rings/semirings/tropical_polynomial.py +997 -0
  634. sage/rings/semirings/tropical_semiring.cpython-314t-aarch64-linux-musl.so +0 -0
  635. sage/rings/semirings/tropical_semiring.pyx +676 -0
  636. sage/rings/semirings/tropical_variety.py +1701 -0
  637. sage/rings/sum_of_squares.cpython-314t-aarch64-linux-musl.so +0 -0
  638. sage/rings/sum_of_squares.pxd +3 -0
  639. sage/rings/sum_of_squares.pyx +336 -0
  640. sage/rings/tests.py +504 -0
  641. sage/schemes/affine/affine_homset.py +508 -0
  642. sage/schemes/affine/affine_morphism.py +1574 -0
  643. sage/schemes/affine/affine_point.py +460 -0
  644. sage/schemes/affine/affine_rational_point.py +308 -0
  645. sage/schemes/affine/affine_space.py +1264 -0
  646. sage/schemes/affine/affine_subscheme.py +592 -0
  647. sage/schemes/affine/all.py +25 -0
  648. sage/schemes/all__sagemath_categories.py +5 -0
  649. sage/schemes/generic/algebraic_scheme.py +2092 -0
  650. sage/schemes/generic/all.py +5 -0
  651. sage/schemes/generic/ambient_space.py +400 -0
  652. sage/schemes/generic/divisor.py +465 -0
  653. sage/schemes/generic/divisor_group.py +313 -0
  654. sage/schemes/generic/glue.py +84 -0
  655. sage/schemes/generic/homset.py +820 -0
  656. sage/schemes/generic/hypersurface.py +234 -0
  657. sage/schemes/generic/morphism.py +2107 -0
  658. sage/schemes/generic/point.py +237 -0
  659. sage/schemes/generic/scheme.py +1190 -0
  660. sage/schemes/generic/spec.py +199 -0
  661. sage/schemes/product_projective/all.py +6 -0
  662. sage/schemes/product_projective/homset.py +236 -0
  663. sage/schemes/product_projective/morphism.py +517 -0
  664. sage/schemes/product_projective/point.py +568 -0
  665. sage/schemes/product_projective/rational_point.py +550 -0
  666. sage/schemes/product_projective/space.py +1301 -0
  667. sage/schemes/product_projective/subscheme.py +466 -0
  668. sage/schemes/projective/all.py +24 -0
  669. sage/schemes/projective/proj_bdd_height.py +453 -0
  670. sage/schemes/projective/projective_homset.py +718 -0
  671. sage/schemes/projective/projective_morphism.py +2792 -0
  672. sage/schemes/projective/projective_point.py +1484 -0
  673. sage/schemes/projective/projective_rational_point.py +569 -0
  674. sage/schemes/projective/projective_space.py +2571 -0
  675. sage/schemes/projective/projective_subscheme.py +1574 -0
  676. sage/sets/all.py +17 -0
  677. sage/sets/cartesian_product.py +376 -0
  678. sage/sets/condition_set.py +525 -0
  679. sage/sets/disjoint_set.cpython-314t-aarch64-linux-musl.so +0 -0
  680. sage/sets/disjoint_set.pxd +36 -0
  681. sage/sets/disjoint_set.pyx +998 -0
  682. sage/sets/disjoint_union_enumerated_sets.py +625 -0
  683. sage/sets/family.cpython-314t-aarch64-linux-musl.so +0 -0
  684. sage/sets/family.pxd +12 -0
  685. sage/sets/family.pyx +1556 -0
  686. sage/sets/finite_enumerated_set.py +406 -0
  687. sage/sets/finite_set_map_cy.cpython-314t-aarch64-linux-musl.so +0 -0
  688. sage/sets/finite_set_map_cy.pxd +34 -0
  689. sage/sets/finite_set_map_cy.pyx +708 -0
  690. sage/sets/finite_set_maps.py +591 -0
  691. sage/sets/image_set.py +448 -0
  692. sage/sets/integer_range.py +829 -0
  693. sage/sets/non_negative_integers.py +241 -0
  694. sage/sets/positive_integers.py +93 -0
  695. sage/sets/primes.py +188 -0
  696. sage/sets/real_set.py +2760 -0
  697. sage/sets/recursively_enumerated_set.cpython-314t-aarch64-linux-musl.so +0 -0
  698. sage/sets/recursively_enumerated_set.pxd +31 -0
  699. sage/sets/recursively_enumerated_set.pyx +2082 -0
  700. sage/sets/set.py +2083 -0
  701. sage/sets/set_from_iterator.py +1021 -0
  702. sage/sets/totally_ordered_finite_set.py +329 -0
  703. sage/symbolic/all__sagemath_categories.py +1 -0
  704. sage/symbolic/function.cpython-314t-aarch64-linux-musl.so +0 -0
  705. sage/symbolic/function.pxd +29 -0
  706. sage/symbolic/function.pyx +1488 -0
  707. sage/symbolic/symbols.py +56 -0
  708. sage/tests/all__sagemath_categories.py +1 -0
  709. sage/tests/cython.cpython-314t-aarch64-linux-musl.so +0 -0
  710. sage/tests/cython.pyx +37 -0
  711. sage/tests/stl_vector.cpython-314t-aarch64-linux-musl.so +0 -0
  712. sage/tests/stl_vector.pyx +171 -0
  713. sage/typeset/all.py +6 -0
  714. sage/typeset/ascii_art.py +295 -0
  715. sage/typeset/character_art.py +789 -0
  716. sage/typeset/character_art_factory.py +572 -0
  717. sage/typeset/symbols.py +334 -0
  718. sage/typeset/unicode_art.py +183 -0
  719. sage/typeset/unicode_characters.py +101 -0
@@ -0,0 +1,743 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ r"""
3
+ Iterators over the partitions of an integer
4
+
5
+ The iterators generate partitions in either increasing or decreasing
6
+ lexicographic orders and a partition `P` is represented either in ascending
7
+ (`P_i \leq P_{i+1}`) or descending (`P_i \geq P_{i+1}`) orders::
8
+
9
+ sage: from sage.combinat.partitions import ZS1_iterator
10
+ sage: for p in ZS1_iterator(4):
11
+ ....: print(p)
12
+ [4]
13
+ [3, 1]
14
+ [2, 2]
15
+ [2, 1, 1]
16
+ [1, 1, 1, 1]
17
+ sage: from sage.combinat.partitions import AccelDesc_iterator
18
+ sage: for p in AccelDesc_iterator(4):
19
+ ....: print(p)
20
+ [4]
21
+ [3, 1]
22
+ [2, 2]
23
+ [2, 1, 1]
24
+ [1, 1, 1, 1]
25
+ sage: from sage.combinat.partitions import ZS2_iterator
26
+ sage: for p in ZS2_iterator(4):
27
+ ....: print(p)
28
+ [1, 1, 1, 1]
29
+ [2, 1, 1]
30
+ [2, 2]
31
+ [3, 1]
32
+ [4]
33
+ sage: from sage.combinat.partitions import AccelAsc_iterator
34
+ sage: for p in AccelAsc_iterator(4):
35
+ ....: print(p)
36
+ [1, 1, 1, 1]
37
+ [1, 1, 2]
38
+ [1, 3]
39
+ [2, 2]
40
+ [4]
41
+
42
+ For each of these iterators, this module also provides a ``next`` method that
43
+ takes a partition as input and return the next partition in the corresponding
44
+ ordering::
45
+
46
+ sage: from sage.combinat.partitions import ZS1_next
47
+ sage: ZS1_next([2, 2])
48
+ [2, 1, 1]
49
+ sage: from sage.combinat.partitions import AccelDesc_next
50
+ sage: AccelDesc_next([2, 2])
51
+ [2, 1, 1]
52
+ sage: from sage.combinat.partitions import ZS2_next
53
+ sage: ZS2_next([2, 2])
54
+ [3, 1]
55
+ sage: from sage.combinat.partitions import AccelAsc_next
56
+ sage: AccelAsc_next([2, 2])
57
+ [4]
58
+
59
+ It is also possible to iterate over the partitions of bounded length::
60
+
61
+ sage: from sage.combinat.partitions import ZS1_iterator_nk
62
+ sage: for p in ZS1_iterator_nk(6, 3):
63
+ ....: print(p)
64
+ [6]
65
+ [5, 1]
66
+ [4, 2]
67
+ [4, 1, 1]
68
+ [3, 3]
69
+ [3, 2, 1]
70
+ [2, 2, 2]
71
+
72
+ AUTHOR:
73
+
74
+ - William Stein (2007-07-28): initial version
75
+ - Jonathan Bober (2007-07-28): wrote the program ``partitions_c.cc``
76
+ that does all the actual heavy lifting.
77
+ - David Coudert (2024-06-01): reshape method :meth:`ZS1_iterator` to ease the
78
+ implementation of :meth:`ZS1_next` and add iterators and next methods based on
79
+ ``ZS2``, ``AccelAsc`` and ``AccelDesc`` from [ZS1998]_ and [KS2012]_.
80
+ """
81
+
82
+ # ****************************************************************************
83
+ # Copyright (C) 2007 William Stein <wstein@gmail.com>
84
+ # 2007 Jonathan Bober <jwbober@gmail.com>
85
+ # 2024 David Coudert <david.coudert@inria.fr>
86
+ #
87
+ # This program is free software: you can redistribute it and/or modify
88
+ # it under the terms of the GNU General Public License as published by
89
+ # the Free Software Foundation, either version 2 of the License, or
90
+ # (at your option) any later version.
91
+ # https://www.gnu.org/licenses/
92
+ # ****************************************************************************
93
+
94
+
95
+ cdef inline ZS1_step(list P, int n, int *m, int *h):
96
+ r"""
97
+ Compute the partition following ``P`` in the ordering of the ZS1 algorithm.
98
+
99
+ This is a helper method for methods :meth:`ZS1_iterator` and :meth:`ZS1_next`.
100
+ Partition ``P`` is modified in place.
101
+
102
+ INPUT:
103
+
104
+ - ``P`` -- list of size `n` storing a partition of `n`
105
+
106
+ - ``n`` -- integer; the sum of the elements of the partition stored in ``P``
107
+
108
+ - ``m`` -- pointer to the index of the last element of the partition
109
+
110
+ - ``h`` -- pointer to the last value larger than 1 in ``P``
111
+
112
+ .. WARNING::
113
+
114
+ The method assumes that input parameters are valid and consistent with
115
+ the ZS1 algorithm as proposed in [ZS1998]_. It modifies the content of
116
+ ``P`` and the values pointed by ``m`` and ``h``.
117
+
118
+ EXAMPLES::
119
+
120
+ sage: from sage.combinat.partitions import ZS1_iterator
121
+ sage: it = ZS1_iterator(4)
122
+ sage: next(it)
123
+ [4]
124
+ sage: type(_)
125
+ <class 'list'>
126
+ """
127
+ # Invariants
128
+ # (A) P[:m+1] is a partition of n.
129
+ # (B) P[h+1:] is an array of n-(h+1) ones.
130
+ # (C) P[i] > 1 for each i <= h.
131
+ # (D) 0 <= h <= m.
132
+ cdef int r, t
133
+ cdef int mm = m[0]
134
+ cdef int hh = h[0]
135
+ if P[hh] == 2:
136
+ mm += 1
137
+ P[hh] = 1
138
+ hh -= 1
139
+ else:
140
+ t = mm - hh + 1
141
+ r = P[hh] - 1
142
+ P[hh] = r
143
+ while t >= r:
144
+ hh += 1
145
+ P[hh] = r
146
+ t -= r
147
+ if t == 0:
148
+ mm = hh
149
+ else:
150
+ mm = hh + 1
151
+ if t > 1:
152
+ hh += 1
153
+ P[hh] = t
154
+ m[0] = mm
155
+ h[0] = hh
156
+
157
+
158
+ def ZS1_iterator(int n):
159
+ r"""
160
+ Return an iterator over the partitions of ``n``.
161
+
162
+ The partitions are generated in the decreasing lexicographic order and each
163
+ partition is represented as a list ``P`` in descending order (i.e.,
164
+ `P_i \geq P_{i+1}`). The method yields lists and not objects of type
165
+ :class:`~sage.combinat.partition.Partition`.
166
+
167
+ This is an implementation of the ZS1 algorithm found in [ZS1998]_.
168
+
169
+ .. SEEALSO::
170
+
171
+ - :meth:`sage.combinat.partitions.ZS2_iterator`
172
+ - :meth:`sage.combinat.partitions.AccelDesc_iterator`
173
+
174
+ EXAMPLES::
175
+
176
+ sage: from sage.combinat.partitions import ZS1_iterator
177
+ sage: for p in ZS1_iterator(4):
178
+ ....: print(p)
179
+ [4]
180
+ [3, 1]
181
+ [2, 2]
182
+ [2, 1, 1]
183
+ [1, 1, 1, 1]
184
+ sage: next(ZS1_iterator(4))
185
+ [4]
186
+ sage: type(_)
187
+ <class 'list'>
188
+ """
189
+ # Easy cases.
190
+ if n < 0:
191
+ return
192
+ if not n:
193
+ yield []
194
+ return
195
+ cdef list P = [1] * n
196
+ P[0] = n
197
+ cdef int m = 0
198
+ cdef int h = 0
199
+ yield [n]
200
+ while P[0] != 1:
201
+ ZS1_step(P, n, &m, &h)
202
+ yield P[:m+1]
203
+
204
+
205
+ def ZS1_next(list P):
206
+ r"""
207
+ Return the partition after ``P`` in the ordering of the ZS1 algorithm.
208
+
209
+ INPUT:
210
+
211
+ - ``P`` -- list encoding a partition of an integer `n` in descending order
212
+ (i.e., `P_i \geq P_{i+1}`)
213
+
214
+ EXAMPLES::
215
+
216
+ sage: from sage.combinat.partitions import ZS1_iterator, ZS1_next
217
+ sage: P = [4]
218
+ sage: while P:
219
+ ....: print(P)
220
+ ....: P = ZS1_next(P)
221
+ [4]
222
+ [3, 1]
223
+ [2, 2]
224
+ [2, 1, 1]
225
+ [1, 1, 1, 1]
226
+ sage: A = [list(p) for p in Partitions(7)]
227
+ sage: all(ZS1_next(p) == q for p, q in zip(A, A[1:]))
228
+ True
229
+ """
230
+ if P[0] == 1:
231
+ return
232
+ if P[-1] != 1:
233
+ return P[:-1] + [P[-1] - 1, 1]
234
+
235
+ cdef int n = sum(P)
236
+ cdef int m = len(P) - 1 # index of the last element in P
237
+ # Search for the index h of the last value > 1 in P
238
+ cdef int h = m
239
+ while P[h] == 1:
240
+ h -= 1
241
+ # Let Q be such that Q[:m+1] == P and Q[h+1:] is an array of n-(h+1) ones
242
+ cdef list Q = P + [1] * (n - m - 1)
243
+ ZS1_step(Q, n, &m, &h)
244
+ return Q[:m+1]
245
+
246
+
247
+ def ZS1_iterator_nk(int n, int k):
248
+ r"""
249
+ An iterator for the partitions of `n` of length at most `k` (in the
250
+ decreasing lexicographic order) which returns lists and not objects of type
251
+ :class:`~sage.combinat.partition.Partition`.
252
+
253
+ The algorithm is a mild variation on :func:`ZS1_iterator`;
254
+ I would not vow for its speed.
255
+
256
+ EXAMPLES::
257
+
258
+ sage: from sage.combinat.partitions import ZS1_iterator_nk
259
+ sage: it = ZS1_iterator_nk(4, 3)
260
+ sage: next(it)
261
+ [4]
262
+ sage: type(_)
263
+ <class 'list'>
264
+ """
265
+ # Easy cases.
266
+ if n <= 0:
267
+ if n == 0 and k >= 0:
268
+ yield []
269
+ return
270
+ if k <= 1:
271
+ if k == 1:
272
+ yield [n]
273
+ return
274
+ x = [1]*k
275
+ x[0] = n
276
+
277
+ cdef int m = 0
278
+ cdef int h = 0
279
+ cdef int r, t
280
+ yield [n]
281
+ while x[0] != 1:
282
+ # Loop invariants at this point:
283
+ # (A) x[:m+1] is a partition of n.
284
+ # (B) x[h+1:m+1] is an array of m-h ones.
285
+ # (C) x[i] > 1 for each i <= h.
286
+ # (D) 0 <= h <= m < k.
287
+ # Note that x[m+1:] might contain leftover from
288
+ # previous steps; we don't clean up after ourselves.
289
+ if x[h] == 2 and m + 1 < k:
290
+ # We have a 2 in the partition, and the space to
291
+ # spread it into two 1s.
292
+ m += 1
293
+ x[h] = 1
294
+ x[m] = 1
295
+ h -= 1
296
+ yield x[:m+1]
297
+ else:
298
+ t = m - h + 1 # 1 + "the number of 1s to the right of x[h] that belong to the partition"
299
+ r = x[h] - 1
300
+
301
+ # This loop finds the largest h such that x[:h] can be completed
302
+ # with integers smaller-or-equal to r=x[h]-1 into a partition of n.
303
+ #
304
+ # We decrement h until it becomes possible.
305
+ while t > (k-h-1) * r:
306
+ # Loop invariants:
307
+ # t = n - sum(x[:h+1]) + 1;
308
+ # r = x[h] - 1; x[h] > 1.
309
+ if h == 0:
310
+ # No way to make the current partition
311
+ # lexicographically smaller.
312
+ return
313
+ h -= 1
314
+ t += r + 1
315
+ r = x[h] - 1
316
+ # Decrement x[h] from r + 1 to r, and replace
317
+ # x[h+1:] by the lexicographically highest array
318
+ # it could possibly be. This means replacing
319
+ # x[h+1:] by the array [r, r, r, ..., r, s],
320
+ # where s is the residue of t modulo r (or
321
+ # nothing if that residue is 0).
322
+ x[h] = r
323
+ while t >= r:
324
+ # Loop invariants: t = n - sum(x[:h+1]) + 1;
325
+ # r = x[h] > 1.
326
+ h += 1
327
+ x[h] = r
328
+ t -= r
329
+ if t == 0:
330
+ m = h
331
+ else:
332
+ m = h + 1
333
+ if t > 1:
334
+ h += 1
335
+ x[m] = t
336
+ yield x[:m+1]
337
+ # free(x)
338
+
339
+
340
+ cdef inline ZS2_step(list P, int n, int *m, int *h):
341
+ r"""
342
+ Compute the partition following ``P`` in the ordering of the ZS2 algorithm.
343
+
344
+ This is a helper method for methods :meth:`ZS2_iterator` and :meth:`ZS2_next`.
345
+ Partition ``P`` is modified in place.
346
+
347
+ INPUT:
348
+
349
+ - ``P`` -- list of size `n` storing a partition of `n`
350
+
351
+ - ``n`` -- integer; the sum of the elements of the partition stored in ``P``
352
+
353
+ - ``m`` -- pointer to the index of the last element of the partition
354
+
355
+ - ``h`` -- pointer to the last value larger than 1 in ``P``
356
+
357
+ .. WARNING::
358
+
359
+ The method assumes that input parameters are valid and consistent with
360
+ the ZS2 algorithm as proposed in [ZS1998]_. It modifies the content of
361
+ ``P`` and the values pointed by ``m`` and ``h``.
362
+
363
+ EXAMPLES::
364
+
365
+ sage: from sage.combinat.partitions import ZS2_iterator
366
+ sage: it = ZS2_iterator(4)
367
+ sage: next(it)
368
+ [1, 1, 1, 1]
369
+ sage: type(_)
370
+ <class 'list'>
371
+ """
372
+ # Invariants
373
+ # (A) P[:m+1] is a partition of n.
374
+ # (B) P[h+1:] is an array of n-(h+1) ones.
375
+ # (C) P[i] > 1 for each i <= h.
376
+ # (D) 0 <= h <= m.
377
+ cdef int mm = m[0]
378
+ cdef int hh = h[0]
379
+ cdef int t, r
380
+ if mm - hh > 1:
381
+ hh += 1
382
+ P[hh] = 2
383
+ mm -= 1
384
+ else:
385
+ t = mm - 2
386
+ while P[t] == P[mm - 1]:
387
+ P[t] = 1
388
+ t -= 1
389
+ hh = t + 1
390
+ P[hh] = P[mm - 1] + 1
391
+ r = P[mm] + P[mm - 1] * (mm - hh - 1)
392
+ P[mm] = 1
393
+ if mm - hh > 1:
394
+ P[mm - 1] = 1
395
+ mm = hh + r - 1
396
+ m[0] = mm
397
+ h[0] = hh
398
+
399
+
400
+ def ZS2_iterator(int n):
401
+ r"""
402
+ Return an iterator over the partitions of ``n``.
403
+
404
+ The partitions are generated in the increasing lexicographic order and each
405
+ partition is represented as a list in descending order (i.e., `p_i \geq
406
+ p_{i+1}`).
407
+
408
+ This is an implementation of the ZS2 algorithm found in [ZS1998]_.
409
+
410
+ .. SEEALSO::
411
+
412
+ :meth:`sage.combinat.partitions.ZS1_iterator`
413
+
414
+ EXAMPLES::
415
+
416
+ sage: from sage.combinat.partitions import ZS2_iterator
417
+ sage: for p in ZS2_iterator(4):
418
+ ....: print(p)
419
+ [1, 1, 1, 1]
420
+ [2, 1, 1]
421
+ [2, 2]
422
+ [3, 1]
423
+ [4]
424
+ sage: next(ZS2_iterator(4))
425
+ [1, 1, 1, 1]
426
+ sage: type(_)
427
+ <class 'list'>
428
+ """
429
+ # Easy cases.
430
+ if n < 0:
431
+ return
432
+ yield [1] * n
433
+ if n <= 1:
434
+ return
435
+ cdef list P = [1]*n
436
+ P[0] = 2
437
+ cdef int h = 0
438
+ cdef int m = n - 2 # index of the last element of the partition
439
+ yield P[:m+1]
440
+ while P[0] != n:
441
+ ZS2_step(P, n, &m, &h)
442
+ yield P[:m+1]
443
+
444
+
445
+ def ZS2_next(list P):
446
+ r"""
447
+ Return the partition after ``P`` in the ordering of the ZS2 algorithm.
448
+
449
+ INPUT:
450
+
451
+ - ``P`` -- list encoding a partition of an integer `n` in descending order
452
+ (i.e., `P_i \geq P_{i+1}`)
453
+
454
+ EXAMPLES::
455
+
456
+ sage: from sage.combinat.partitions import ZS2_iterator, ZS2_next
457
+ sage: P = [1, 1, 1, 1]
458
+ sage: while P:
459
+ ....: print(P)
460
+ ....: P = ZS2_next(P)
461
+ [1, 1, 1, 1]
462
+ [2, 1, 1]
463
+ [2, 2]
464
+ [3, 1]
465
+ [4]
466
+ """
467
+ if len(P) <= 1:
468
+ return
469
+ if P[0] == 1:
470
+ return [2] + P[:-2]
471
+ cdef int n = sum(P)
472
+ cdef int m = len(P) - 1 # index of the last element in P
473
+ # Search for the index h of the last value > 1 in P
474
+ cdef int h = m
475
+ while P[h] == 1:
476
+ h -= 1
477
+ # Let Q be such that Q[:m+1] == P and Q[h+1:] is an array of n-(h+1) ones
478
+ cdef list Q = P + [1] * (n - m - 1)
479
+ ZS2_step(Q, n, &m, &h)
480
+ return Q[:m+1]
481
+
482
+
483
+ cdef inline AccelDesc_step(list P, int n, int* m, int* h):
484
+ r"""
485
+ Compute the partition following ``P`` in the ordering of the AccelDesc algorithm.
486
+
487
+ This is a helper method for methods :meth:`AccelDesc_iterator` and
488
+ :meth:`AccelDesc_next`. Partition ``P`` is modified in place.
489
+
490
+ INPUT:
491
+
492
+ - ``P`` -- list of size `n` storing a partition of `n`
493
+
494
+ - ``n`` -- integer; the sum of the elements of the partition stored in ``P``
495
+
496
+ - ``m`` -- pointer to the index of the last element of the partition
497
+
498
+ - ``h`` -- pointer to the last value larger than 1 in ``P``
499
+
500
+ .. WARNING::
501
+
502
+ The method assumes that input parameters are valid and consistent with
503
+ the AccelDesc algorithm as proposed in [ZS2012]_. It modifies the
504
+ content of ``P`` and the values pointed by ``m`` and ``h``.
505
+
506
+ EXAMPLES::
507
+
508
+ sage: from sage.combinat.partitions import AccelDesc_iterator
509
+ sage: it = AccelDesc_iterator(4)
510
+ sage: next(it)
511
+ [4]
512
+ sage: type(_)
513
+ <class 'list'>
514
+ """
515
+ # Invariants
516
+ # (A) P[:m+1] is a partition of n.
517
+ # (B) P[h+1:] is an array of n-(h+1) ones.
518
+ # (C) P[i] > 1 for each i <= h.
519
+ # (D) 0 <= h <= m.
520
+ cdef int mm = m[0]
521
+ cdef int hh = h[0]
522
+ cdef int r, t
523
+ if P[hh] == 2:
524
+ mm += 1
525
+ P[hh] = 1
526
+ hh -= 1
527
+ else:
528
+ r = P[hh] - 1
529
+ t = mm - hh + 1
530
+ P[hh] = r
531
+ while t >= r:
532
+ hh += 1
533
+ P[hh] = r
534
+ t -= r
535
+ if not t:
536
+ mm = hh
537
+ else:
538
+ mm = hh + 1
539
+ if t > 1:
540
+ hh += 1
541
+ P[hh] = t
542
+ m[0] = mm
543
+ h[0] = hh
544
+
545
+
546
+ def AccelDesc_iterator(int n):
547
+ r"""
548
+ Return an iterator over the partitions of ``n``.
549
+
550
+ The partitions are generated in the increasing lexicographic order and each
551
+ partition is represented as a list in descending order (i.e., `p_i \geq
552
+ p_{i+1}`).
553
+
554
+ This is an implementation of the AccelDesc algorithm found in [KS2012]_.
555
+
556
+ .. SEEALSO::
557
+
558
+ :meth:`sage.combinat.partitions.ZS1_iterator`
559
+
560
+ EXAMPLES::
561
+
562
+ sage: from sage.combinat.partitions import AccelDesc_iterator
563
+ sage: for p in AccelDesc_iterator(4):
564
+ ....: print(p)
565
+ [4]
566
+ [3, 1]
567
+ [2, 2]
568
+ [2, 1, 1]
569
+ [1, 1, 1, 1]
570
+ sage: next(AccelDesc_iterator(4))
571
+ [4]
572
+ sage: type(_)
573
+ <class 'list'>
574
+
575
+ Check that :meth:`ZS1_iterator` and :meth:`AccelDesc_iterator` generate
576
+ partitions in the same order::
577
+
578
+ sage: from sage.combinat.partitions import ZS1_iterator
579
+ sage: from sage.misc.prandom import randint
580
+ sage: n = randint(1, 50)
581
+ sage: all(p == q for p, q in zip(ZS1_iterator(n), AccelDesc_iterator(n))) # long time
582
+ True
583
+ """
584
+ # Easy cases.
585
+ if n < 0:
586
+ return
587
+ if n <= 1:
588
+ yield [1] * n
589
+ return
590
+ cdef list P = [1] * n
591
+ P[0] = n
592
+ yield [n]
593
+ cdef int m = 0
594
+ cdef int h = 0
595
+ while h >= 0:
596
+ AccelDesc_step(P, n, &m, &h)
597
+ yield P[:m+1]
598
+
599
+
600
+ def AccelDesc_next(list P):
601
+ r"""
602
+ Return the partition after ``P`` in the ordering of the AccelDesc algorithm.
603
+
604
+ INPUT:
605
+
606
+ - ``P`` -- list encoding a partition of an integer `n` in descending order
607
+ (i.e., `P_i \geq P_{i+1}`)
608
+
609
+ EXAMPLES::
610
+
611
+ sage: from sage.combinat.partitions import AccelDesc_iterator, AccelDesc_next
612
+ sage: P = [4]
613
+ sage: while P:
614
+ ....: print(P)
615
+ ....: P = AccelDesc_next(P)
616
+ [4]
617
+ [3, 1]
618
+ [2, 2]
619
+ [2, 1, 1]
620
+ [1, 1, 1, 1]
621
+ sage: A = [list(p) for p in Partitions(7)]
622
+ sage: all(AccelDesc_next(p) == q for p, q in zip(A, A[1:]))
623
+ True
624
+ """
625
+ if P[0] == 1:
626
+ return
627
+ if P[-1] != 1:
628
+ return P[:-1] + [P[-1] - 1, 1]
629
+
630
+ cdef int n = sum(P)
631
+ cdef int m = len(P) - 1 # index of the last element in P
632
+ # Search for the index h of the last value > 1 in P
633
+ cdef int h = m
634
+ while P[h] == 1:
635
+ h -= 1
636
+ # Let Q be such that Q[:m+1] == P and Q[h+1:] is an array of n-(h+1) ones
637
+ cdef list Q = P + [1]*(n - m - 1)
638
+ AccelDesc_step(Q, n, &m, &h)
639
+ return Q[:m+1]
640
+
641
+
642
+ def AccelAsc_iterator(int n):
643
+ r"""
644
+ Return an iterator over the partitions of ``n``.
645
+
646
+ The partitions are generated in the increasing lexicographic order and each
647
+ partition is represented as a list in ascending order (i.e., `p_i \leq
648
+ p_{i+1}`).
649
+
650
+ This is an implementation of the ``AccelAsc`` algorithm found in [KS2012]_.
651
+
652
+ .. SEEALSO::
653
+
654
+ :meth:`sage.combinat.partitions.ZS1_iterator`
655
+
656
+ EXAMPLES::
657
+
658
+ sage: from sage.combinat.partitions import AccelAsc_iterator
659
+ sage: for p in AccelAsc_iterator(4):
660
+ ....: print(p)
661
+ [1, 1, 1, 1]
662
+ [1, 1, 2]
663
+ [1, 3]
664
+ [2, 2]
665
+ [4]
666
+ sage: next(AccelAsc_iterator(4))
667
+ [1, 1, 1, 1]
668
+ sage: type(_)
669
+ <class 'list'>
670
+ """
671
+ # Easy cases.
672
+ if n < 0:
673
+ return
674
+ if n <= 1:
675
+ yield [1] * n
676
+ return
677
+ cdef list P = [0] * n
678
+ cdef int k = 1
679
+ cdef int y = n - 1
680
+ cdef int x, ell
681
+ while k:
682
+ k -= 1
683
+ x = P[k] + 1
684
+ while 2 * x <= y:
685
+ P[k] = x
686
+ y -= x
687
+ k += 1
688
+ ell = k + 1
689
+ while x <= y:
690
+ P[k] = x
691
+ P[ell] = y
692
+ yield P[:ell + 1]
693
+ x += 1
694
+ y -= 1
695
+ y += x - 1
696
+ P[k] = y + 1
697
+ yield P[:k + 1]
698
+
699
+
700
+ def AccelAsc_next(list P):
701
+ r"""
702
+ Return the partition after ``P`` in the ordering of the ``AccelAsc`` algorithm.
703
+
704
+ INPUT:
705
+
706
+ - ``P`` -- list encoding a partition of an integer `n` in ascending order
707
+ (i.e., `P_i \leq P_{i+1}`)
708
+
709
+ EXAMPLES::
710
+
711
+ sage: from sage.combinat.partitions import AccelAsc_next
712
+ sage: P = [1, 1, 1, 1]
713
+ sage: while P:
714
+ ....: print(P)
715
+ ....: P = AccelAsc_next(P)
716
+ [1, 1, 1, 1]
717
+ [1, 1, 2]
718
+ [1, 3]
719
+ [2, 2]
720
+ [4]
721
+ """
722
+ if len(P) <= 1:
723
+ return
724
+
725
+ cdef int n = sum(P)
726
+ cdef int m = len(P) - 1 # index of the last element in P
727
+ # Let Q be such that Q[:m+1] == P and Q[m+1:] is an array of n-(m+1) ones
728
+ cdef list Q = P + [0]*(n - m - 1)
729
+ cdef int x, y
730
+ cdef int k = m - 1
731
+ x = Q[k] + 1
732
+ y = P[m] - 1
733
+ while 2 * x <= y:
734
+ Q[k] = x
735
+ y -= x
736
+ k += 1
737
+ if x <= y:
738
+ Q[k] = x
739
+ Q[k + 1] = y
740
+ return Q[:k + 2]
741
+ y += x - 1
742
+ Q[k] = y + 1
743
+ return Q[:k + 1]