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
sage/misc/mrange.py ADDED
@@ -0,0 +1,755 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ """
3
+ Multidimensional enumeration
4
+
5
+ AUTHORS:
6
+
7
+ - Joel B. Mohler (2006-10-12)
8
+
9
+ - William Stein (2006-07-19)
10
+
11
+ - Jon Hanke
12
+ """
13
+
14
+ # *****************************************************************************
15
+ # Copyright (C) 2006 William Stein <wstein@gmail.com>
16
+ #
17
+ # This program is free software: you can redistribute it and/or modify
18
+ # it under the terms of the GNU General Public License as published by
19
+ # the Free Software Foundation, either version 2 of the License, or
20
+ # (at your option) any later version.
21
+ # http://www.gnu.org/licenses/
22
+ # *****************************************************************************
23
+ from sage.misc.misc_c import prod
24
+
25
+
26
+ def _len(L):
27
+ """
28
+ Determines the length of ``L``.
29
+
30
+ Uses either ``cardinality`` or ``__len__`` as appropriate.
31
+
32
+ EXAMPLES::
33
+
34
+ sage: from sage.misc.mrange import _len
35
+ sage: _len(ZZ)
36
+ +Infinity
37
+ sage: _len(range(4))
38
+ 4
39
+ sage: _len(4)
40
+ Traceback (most recent call last):
41
+ ...
42
+ TypeError: object of type 'sage.rings.integer.Integer' has no len()
43
+ """
44
+ try:
45
+ return L.cardinality()
46
+ except AttributeError:
47
+ return len(L)
48
+
49
+
50
+ def _is_finite(L, fallback=True):
51
+ """
52
+ Determines whether ``L`` is finite.
53
+
54
+ If ``L`` implements none of ``is_finite``, ``cardinality`` or
55
+ ``__len__``, we assume by default that it is finite for speed
56
+ reasons. This choice can be overridden by passing in
57
+ ``fallback``.
58
+
59
+ EXAMPLES::
60
+
61
+ sage: from sage.misc.mrange import _is_finite
62
+ sage: _is_finite(ZZ)
63
+ False
64
+ sage: _is_finite(range(4))
65
+ True
66
+ sage: _is_finite([])
67
+ True
68
+ sage: _is_finite(range(10^8))
69
+ True
70
+ sage: from itertools import product
71
+ sage: _is_finite(product([1],[1])) # does not provide is_finite() or __len__()
72
+ True
73
+ """
74
+ try:
75
+ return L.is_finite()
76
+ except AttributeError:
77
+ pass
78
+ except ValueError:
79
+ # L doesn't know how to determine whether it's finite
80
+ return fallback
81
+
82
+ try:
83
+ n = _len(L)
84
+ except (TypeError, AttributeError, NotImplementedError):
85
+ # We usually assume L is finite for speed reasons
86
+ return fallback
87
+
88
+ from sage.rings.infinity import infinity
89
+ if n is infinity:
90
+ return False
91
+ return True
92
+
93
+
94
+ def _xmrange_iter(iter_list, typ=list):
95
+ """
96
+ This implements the logic for :func:`mrange_iter` and :class:`xmrange_iter`.
97
+
98
+ Note that with typ==list, we will be returning a new copy each
99
+ iteration. This makes it OK to modified the returned list. This
100
+ functionality is relied on in the polynomial iterators. Here's a
101
+ doc-test to prove this::
102
+
103
+ sage: iter = sage.misc.mrange._xmrange_iter( [[1,2],[1,3]] )
104
+ sage: l1 = next(iter)
105
+ sage: l2 = next(iter)
106
+ sage: l1 is l2
107
+ False
108
+
109
+ However, if you would like to reuse the list object::
110
+
111
+ sage: iter = sage.misc.mrange._xmrange_iter( [[1,2],[1,3]], lambda x: x )
112
+ sage: l1 = next(iter)
113
+ sage: l2 = next(iter)
114
+ sage: l1 is l2 # eeek, this is freaky!
115
+ True
116
+
117
+ We check that :issue:`14285` has been resolved::
118
+
119
+ sage: iter = sage.misc.mrange._xmrange_iter([ZZ,[]])
120
+ sage: next(iter)
121
+ Traceback (most recent call last):
122
+ ...
123
+ StopIteration
124
+
125
+ We check that :issue:`28521` is fixed::
126
+
127
+ sage: next(sage.misc.mrange._xmrange_iter([[], [1]]))
128
+ Traceback (most recent call last):
129
+ ...
130
+ StopIteration
131
+ sage: next(sage.misc.mrange._xmrange_iter([[1], []]))
132
+ Traceback (most recent call last):
133
+ ...
134
+ StopIteration
135
+ sage: next(sage.misc.mrange._xmrange_iter([[1], [], [2]]))
136
+ Traceback (most recent call last):
137
+ ...
138
+ StopIteration
139
+ """
140
+ if len(iter_list) == 0:
141
+ yield typ()
142
+ return
143
+ # If any iterator in the list is infinite we need to be more careful
144
+ if any(not _is_finite(L) for L in iter_list):
145
+ for L in iter_list:
146
+ try:
147
+ n = _len(L)
148
+ except TypeError:
149
+ continue
150
+ if n == 0:
151
+ return
152
+ curr_iters = [iter(i) for i in iter_list]
153
+ try:
154
+ curr_elt = [next(i) for i in curr_iters[:-1]]
155
+ except StopIteration:
156
+ return
157
+ curr_elt.append(None)
158
+ place = len(iter_list) - 1
159
+ while True:
160
+ try:
161
+ while True:
162
+ curr_elt[place] = next(curr_iters[place])
163
+ if place < len(iter_list) - 1:
164
+ place += 1
165
+ curr_iters[place] = iter(iter_list[place])
166
+ continue
167
+ else:
168
+ yield typ(curr_elt)
169
+ except StopIteration:
170
+ place -= 1
171
+ if place == -1:
172
+ return
173
+
174
+
175
+ def mrange_iter(iter_list, typ=list):
176
+ """
177
+ Return the multirange list derived from the given list of iterators.
178
+
179
+ This is the list version of :func:`xmrange_iter`. Use :class:`xmrange_iter`
180
+ for the iterator.
181
+
182
+ More precisely, return the iterator over all objects of type ``typ`` of
183
+ n-tuples of Python ints with entries between 0 and the integers in
184
+ the sizes list. The iterator is empty if sizes is empty or contains
185
+ any nonpositive integer.
186
+
187
+ INPUT:
188
+
189
+ - ``iter_list`` -- a finite iterable of finite iterables
190
+
191
+ - ``typ`` -- (default: list) a type or class; more
192
+ generally, something that can be called with a list as input
193
+
194
+ OUTPUT: list
195
+
196
+ EXAMPLES::
197
+
198
+ sage: mrange_iter([range(3),[0,2]])
199
+ [[0, 0], [0, 2], [1, 0], [1, 2], [2, 0], [2, 2]]
200
+ sage: mrange_iter([['Monty','Flying'],['Python','Circus']], tuple)
201
+ [('Monty', 'Python'), ('Monty', 'Circus'), ('Flying', 'Python'), ('Flying', 'Circus')]
202
+ sage: mrange_iter([[2,3,5,7],[1,2]], sum)
203
+ [3, 4, 4, 5, 6, 7, 8, 9]
204
+
205
+ Examples that illustrate empty multi-ranges::
206
+
207
+ sage: mrange_iter([range(5),range(3),range(0)])
208
+ []
209
+ sage: mrange_iter([range(5), range(3), range(-2)])
210
+ []
211
+
212
+ This example is not empty, and should not be. See :issue:`6561`.
213
+
214
+ ::
215
+
216
+ sage: mrange_iter([])
217
+ [[]]
218
+
219
+ AUTHORS:
220
+
221
+ - Joel B. Mohler
222
+ """
223
+ return list(_xmrange_iter(iter_list, typ))
224
+
225
+
226
+ class xmrange_iter:
227
+ """
228
+ Return the multirange iterate derived from the given iterators and
229
+ type.
230
+
231
+ .. NOTE::
232
+
233
+ This basically gives you the Cartesian product of sets.
234
+
235
+ More precisely, return the iterator over all objects of type typ of
236
+ n-tuples of Python ints with entries between 0 and the integers in
237
+ the sizes list. The iterator is empty if sizes is empty or contains
238
+ any nonpositive integer.
239
+
240
+ Use :func:`mrange_iter` for the non-iterator form.
241
+
242
+ INPUT:
243
+
244
+ - ``iter_list`` -- list of objects usable as iterators (possibly
245
+ lists)
246
+
247
+ - ``typ`` -- (default: list) a type or class; more generally,
248
+ something that can be called with a list as input
249
+
250
+ OUTPUT: a generator
251
+
252
+ EXAMPLES: We create multi-range iterators, print them and also
253
+ iterate through a tuple version. ::
254
+
255
+ sage: z = xmrange_iter([list(range(3)),list(range(2))], tuple);z
256
+ xmrange_iter([[0, 1, 2], [0, 1]], <... 'tuple'>)
257
+ sage: for a in z:
258
+ ....: print(a)
259
+ (0, 0)
260
+ (0, 1)
261
+ (1, 0)
262
+ (1, 1)
263
+ (2, 0)
264
+ (2, 1)
265
+
266
+ We illustrate a few more iterations.
267
+
268
+ ::
269
+
270
+ sage: list(xmrange_iter([range(3),range(2)]))
271
+ [[0, 0], [0, 1], [1, 0], [1, 1], [2, 0], [2, 1]]
272
+ sage: list(xmrange_iter([range(3),range(2)], tuple))
273
+ [(0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (2, 1)]
274
+
275
+ Here we compute the sum of each element of the multi-range
276
+ iterator::
277
+
278
+ sage: list(xmrange_iter([range(3),range(2)], sum))
279
+ [0, 1, 1, 2, 2, 3]
280
+
281
+ Next we compute the product::
282
+
283
+ sage: list(xmrange_iter([range(3),range(2)], prod))
284
+ [0, 0, 0, 1, 0, 2]
285
+
286
+ Examples that illustrate empty multi-ranges.
287
+
288
+ ::
289
+
290
+ sage: list(xmrange_iter([range(5),range(3),range(-2)]))
291
+ []
292
+ sage: list(xmrange_iter([range(5),range(3),range(0)]))
293
+ []
294
+
295
+ This example is not empty, and should not be. See :issue:`6561`.
296
+
297
+ ::
298
+
299
+ sage: list(xmrange_iter([]))
300
+ [[]]
301
+
302
+ We use a multi-range iterator to iterate through the Cartesian
303
+ product of sets.
304
+
305
+ ::
306
+
307
+ sage: X = ['red', 'apple', 389]
308
+ sage: Y = ['orange', 'horse']
309
+ sage: for i,j in xmrange_iter([X, Y], tuple):
310
+ ....: print((i, j))
311
+ ('red', 'orange')
312
+ ('red', 'horse')
313
+ ('apple', 'orange')
314
+ ('apple', 'horse')
315
+ (389, 'orange')
316
+ (389, 'horse')
317
+
318
+ AUTHORS:
319
+
320
+ - Joel B. Mohler
321
+ """
322
+ def __init__(self, iter_list, typ=list):
323
+ self.iter_list = iter_list
324
+ self.typ = typ
325
+
326
+ def __repr__(self):
327
+ if self.typ == list:
328
+ return 'xmrange_iter(%s)' % self.iter_list
329
+ else:
330
+ return 'xmrange_iter(%s, %s)' % (self.iter_list, self.typ)
331
+
332
+ def __iter__(self):
333
+ return _xmrange_iter(self.iter_list, self.typ)
334
+
335
+ def __len__(self):
336
+ """
337
+ Return the cardinality of this iterator as an int.
338
+
339
+ This raises a :exc:`TypeError` if the cardinality does not fit
340
+ into a Python int.
341
+
342
+ EXAMPLES::
343
+
344
+ sage: C = cartesian_product_iterator([range(3),range(4)])
345
+ sage: len(C)
346
+ 12
347
+ sage: len(cartesian_product_iterator([]))
348
+ 1
349
+ sage: len(cartesian_product_iterator([ZZ,[]]))
350
+ 0
351
+ sage: len(cartesian_product_iterator([ZZ,ZZ]))
352
+ Traceback (most recent call last):
353
+ ...
354
+ TypeError: cardinality does not fit into a Python int
355
+ """
356
+ n = self.cardinality()
357
+ try:
358
+ n = int(n)
359
+ except TypeError:
360
+ raise TypeError("cardinality does not fit into a Python int")
361
+ return n
362
+
363
+ def cardinality(self):
364
+ """
365
+ Return the cardinality of this iterator.
366
+
367
+ EXAMPLES::
368
+
369
+ sage: C = cartesian_product_iterator([range(3),range(4)])
370
+ sage: C.cardinality()
371
+ 12
372
+ sage: C = cartesian_product_iterator([ZZ,QQ])
373
+ sage: C.cardinality()
374
+ +Infinity
375
+ sage: C = cartesian_product_iterator([ZZ,[]])
376
+ sage: C.cardinality()
377
+ 0
378
+ """
379
+ from sage.rings.integer import Integer
380
+ from sage.rings.infinity import infinity
381
+ ans = Integer(1)
382
+ found_infinity = False
383
+ for L in self.iter_list:
384
+ try:
385
+ n = L.cardinality()
386
+ except AttributeError:
387
+ n = Integer(len(L))
388
+ if n == 0:
389
+ return Integer(0)
390
+ elif n is infinity:
391
+ found_infinity = True
392
+ elif not found_infinity:
393
+ ans *= n
394
+ if found_infinity:
395
+ return infinity
396
+ else:
397
+ return ans
398
+
399
+
400
+ def _xmrange(sizes, typ=list):
401
+ n = len(sizes)
402
+ if n == 0:
403
+ yield typ([])
404
+ return
405
+ for i in sizes:
406
+ if i <= 0:
407
+ return
408
+ v = [0] * n # make a list of n 0's.
409
+ v[-1] = -1
410
+ ptr_max = n - 1
411
+ ptr = ptr_max
412
+ while True:
413
+ while True:
414
+ if ptr != -1 and v[ptr] + 1 < sizes[ptr]:
415
+ v[ptr] += 1
416
+ ptr = ptr_max
417
+ break
418
+ elif ptr != -1:
419
+ v[ptr] = 0
420
+ ptr -= 1
421
+ else:
422
+ return
423
+ yield typ(v) # make a copy of v!
424
+
425
+
426
+ def mrange(sizes, typ=list):
427
+ """
428
+ Return the multirange list with given sizes and type.
429
+
430
+ This is the list version of :class:`xmrange`.
431
+ Use :class:`xmrange` for the iterator.
432
+
433
+ More precisely, return the iterator over all objects of type typ of
434
+ n-tuples of Python ints with entries between 0 and the integers in
435
+ the sizes list. The iterator is empty if sizes is empty or contains
436
+ any nonpositive integer.
437
+
438
+ INPUT:
439
+
440
+ - ``sizes`` -- list of nonnegative integers
441
+
442
+ - ``typ`` -- (default: list) a type or class; more
443
+ generally, something that can be called with a list as input
444
+
445
+ OUTPUT: list
446
+
447
+ EXAMPLES::
448
+
449
+ sage: mrange([3,2])
450
+ [[0, 0], [0, 1], [1, 0], [1, 1], [2, 0], [2, 1]]
451
+ sage: mrange([3,2], tuple)
452
+ [(0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (2, 1)]
453
+ sage: mrange([3,2], sum)
454
+ [0, 1, 1, 2, 2, 3]
455
+
456
+ Examples that illustrate empty multi-ranges::
457
+
458
+ sage: mrange([5,3,-2])
459
+ []
460
+ sage: mrange([5,3,0])
461
+ []
462
+
463
+ This example is not empty, and should not be. See :issue:`6561`.
464
+
465
+ ::
466
+
467
+ sage: mrange([])
468
+ [[]]
469
+
470
+ AUTHORS:
471
+
472
+ - Jon Hanke
473
+
474
+ - William Stein
475
+ """
476
+ return list(_xmrange(sizes, typ))
477
+
478
+
479
+ class xmrange:
480
+ """
481
+ Return the multirange iterate with given sizes and type.
482
+
483
+ More precisely, return the iterator over all objects of type typ of
484
+ n-tuples of Python ints with entries between 0 and the integers in
485
+ the sizes list. The iterator is empty if sizes is empty or contains
486
+ any nonpositive integer.
487
+
488
+ Use mrange for the non-iterator form.
489
+
490
+ INPUT:
491
+
492
+ - ``sizes`` -- list of nonnegative integers
493
+
494
+ - ``typ`` -- (default: list) a type or class; more
495
+ generally, something that can be called with a list as input
496
+
497
+ OUTPUT: a generator
498
+
499
+ EXAMPLES: We create multi-range iterators, print them and also
500
+ iterate through a tuple version.
501
+
502
+ ::
503
+
504
+ sage: z = xmrange([3,2]);z
505
+ xmrange([3, 2])
506
+ sage: z = xmrange([3,2], tuple);z
507
+ xmrange([3, 2], <... 'tuple'>)
508
+ sage: for a in z:
509
+ ....: print(a)
510
+ (0, 0)
511
+ (0, 1)
512
+ (1, 0)
513
+ (1, 1)
514
+ (2, 0)
515
+ (2, 1)
516
+
517
+ We illustrate a few more iterations.
518
+
519
+ ::
520
+
521
+ sage: list(xmrange([3,2]))
522
+ [[0, 0], [0, 1], [1, 0], [1, 1], [2, 0], [2, 1]]
523
+ sage: list(xmrange([3,2], tuple))
524
+ [(0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (2, 1)]
525
+
526
+ Here we compute the sum of each element of the multi-range
527
+ iterator::
528
+
529
+ sage: list(xmrange([3,2], sum))
530
+ [0, 1, 1, 2, 2, 3]
531
+
532
+ Next we compute the product::
533
+
534
+ sage: list(xmrange([3,2], prod))
535
+ [0, 0, 0, 1, 0, 2]
536
+
537
+ Examples that illustrate empty multi-ranges.
538
+
539
+ ::
540
+
541
+ sage: list(xmrange([5,3,-2]))
542
+ []
543
+ sage: list(xmrange([5,3,0]))
544
+ []
545
+
546
+ This example is not empty, and should not be. See :issue:`6561`.
547
+
548
+ ::
549
+
550
+ sage: list(xmrange([]))
551
+ [[]]
552
+
553
+ We use a multi-range iterator to iterate through the Cartesian
554
+ product of sets.
555
+
556
+ ::
557
+
558
+ sage: X = ['red', 'apple', 389]
559
+ sage: Y = ['orange', 'horse']
560
+ sage: for i,j in xmrange([len(X), len(Y)]):
561
+ ....: print((X[i], Y[j]))
562
+ ('red', 'orange')
563
+ ('red', 'horse')
564
+ ('apple', 'orange')
565
+ ('apple', 'horse')
566
+ (389, 'orange')
567
+ (389, 'horse')
568
+
569
+ AUTHORS:
570
+
571
+ - Jon Hanke
572
+
573
+ - William Stein
574
+ """
575
+ def __init__(self, sizes, typ=list):
576
+ self.sizes = [int(x) for x in sizes]
577
+ self.typ = typ
578
+
579
+ def __repr__(self):
580
+ if self.typ == list:
581
+ return 'xmrange(%s)' % self.sizes
582
+ else:
583
+ return 'xmrange(%s, %s)' % (self.sizes, self.typ)
584
+
585
+ def __len__(self):
586
+ sizes = self.sizes
587
+ n = len(sizes)
588
+ if n == 0:
589
+ return 0
590
+ for i in sizes:
591
+ if i <= 0:
592
+ return 0
593
+ return prod(sizes, 1)
594
+
595
+ def __iter__(self):
596
+ return _xmrange(self.sizes, self.typ)
597
+
598
+
599
+ def cartesian_product_iterator(X):
600
+ """
601
+ Iterate over the Cartesian product.
602
+
603
+ INPUT:
604
+
605
+ - ``X`` -- list or tuple of lists
606
+
607
+ OUTPUT: iterator over the Cartesian product of the elements of X
608
+
609
+ EXAMPLES::
610
+
611
+ sage: list(cartesian_product_iterator([[1,2], ['a','b']]))
612
+ [(1, 'a'), (1, 'b'), (2, 'a'), (2, 'b')]
613
+ sage: list(cartesian_product_iterator([]))
614
+ [()]
615
+
616
+ TESTS:
617
+
618
+ Check that :issue:`28521` is fixed::
619
+
620
+ sage: list(cartesian_product_iterator([[], [1]]))
621
+ []
622
+ sage: list(cartesian_product_iterator([[1], []]))
623
+ []
624
+ sage: list(cartesian_product_iterator([[1], [], [2]]))
625
+ []
626
+ """
627
+ return xmrange_iter(X, tuple)
628
+
629
+
630
+ def cantor_product(*args, **kwds):
631
+ r"""
632
+ Return an iterator over the product of the inputs along the diagonals a la
633
+ :wikipedia:`Cantor pairing <Pairing_function#Cantor_pairing_function>`.
634
+
635
+ INPUT:
636
+
637
+ - a certain number of iterables
638
+
639
+ - ``repeat`` -- an optional integer. If it is provided, the input is
640
+ repeated ``repeat`` times
641
+
642
+ Other keyword arguments are passed to
643
+ :class:`sage.combinat.integer_lists.invlex.IntegerListsLex`.
644
+
645
+ EXAMPLES::
646
+
647
+ sage: from sage.misc.mrange import cantor_product
648
+ sage: list(cantor_product([0, 1], repeat=3))
649
+ [(0, 0, 0),
650
+ (1, 0, 0),
651
+ (0, 1, 0),
652
+ (0, 0, 1),
653
+ (1, 1, 0),
654
+ (1, 0, 1),
655
+ (0, 1, 1),
656
+ (1, 1, 1)]
657
+ sage: list(cantor_product([0, 1], [0, 1, 2, 3]))
658
+ [(0, 0), (1, 0), (0, 1), (1, 1), (0, 2), (1, 2), (0, 3), (1, 3)]
659
+
660
+ Infinite iterators are valid input as well::
661
+
662
+ sage: from itertools import islice
663
+ sage: list(islice(cantor_product(ZZ, QQ), 14r))
664
+ [(0, 0),
665
+ (1, 0),
666
+ (0, 1),
667
+ (-1, 0),
668
+ (1, 1),
669
+ (0, -1),
670
+ (2, 0),
671
+ (-1, 1),
672
+ (1, -1),
673
+ (0, 1/2),
674
+ (-2, 0),
675
+ (2, 1),
676
+ (-1, -1),
677
+ (1, 1/2)]
678
+
679
+ TESTS::
680
+
681
+ sage: C = cantor_product([0, 1], [0, 1, 2, 3], [0, 1, 2])
682
+ sage: sum(1 for _ in C) == 2*4*3
683
+ True
684
+
685
+ sage: from itertools import count
686
+ sage: list(cantor_product([], count()))
687
+ []
688
+ sage: list(cantor_product(count(), [], count()))
689
+ []
690
+
691
+ sage: list(cantor_product(count(), repeat=0))
692
+ [()]
693
+
694
+ sage: next(cantor_product(count(), repeat=-1))
695
+ Traceback (most recent call last):
696
+ ...
697
+ ValueError: repeat argument cannot be negative
698
+ sage: next(cantor_product(count(), toto='hey'))
699
+ Traceback (most recent call last):
700
+ ...
701
+ TypeError: ...__init__() got an unexpected keyword argument 'toto'
702
+
703
+ ::
704
+
705
+ sage: list(cantor_product(srange(5), repeat=2, min_slope=1))
706
+ [(0, 1), (0, 2), (1, 2), (0, 3), (1, 3),
707
+ (0, 4), (2, 3), (1, 4), (2, 4), (3, 4)]
708
+
709
+ Check that :issue:`24897` is fixed::
710
+
711
+ sage: from sage.misc.mrange import cantor_product
712
+ sage: list(cantor_product([1]))
713
+ [(1,)]
714
+ sage: list(cantor_product([1], repeat=2))
715
+ [(1, 1)]
716
+ sage: list(cantor_product([1], [1,2]))
717
+ [(1, 1), (1, 2)]
718
+ sage: list(cantor_product([1,2], [1]))
719
+ [(1, 1), (2, 1)]
720
+ """
721
+ from itertools import count
722
+ from sage.combinat.integer_lists import IntegerListsLex
723
+
724
+ m = len(args) # numer of factors
725
+ lengths = [None] * m # None or length of factors
726
+ data = [[] for _ in range(m)] # the initial slice of each factor
727
+ iterators = [iter(a) for a in args] # the iterators
728
+ repeat = int(kwds.pop('repeat', 1))
729
+ if repeat == 0:
730
+ yield ()
731
+ return
732
+ elif repeat < 0:
733
+ raise ValueError("repeat argument cannot be negative")
734
+ mm = m * repeat
735
+
736
+ for n in count(0):
737
+ # try to add one more term to each bin
738
+ for i, a in enumerate(iterators):
739
+ if lengths[i] is None:
740
+ try:
741
+ data[i].append(next(a))
742
+ except StopIteration:
743
+ assert len(data[i]) == n
744
+ if n == 0:
745
+ return
746
+ lengths[i] = n
747
+
748
+ # iterate through what we have
749
+ ceiling = [n if lengths[i] is None else lengths[i] - 1
750
+ for i in range(m)] * repeat
751
+ for v in IntegerListsLex(n, length=mm, ceiling=ceiling, **kwds):
752
+ yield tuple(data[i % m][v[i]] for i in range(mm))
753
+
754
+ if all(l is not None for l in lengths) and repeat * sum(l - 1 for l in lengths) <= n:
755
+ return