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,713 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ r"""
3
+ Enumerated set of lists of integers with constraints: base classes
4
+
5
+ - :class:`IntegerListsBackend`: base class for the Cython back-end of
6
+ an enumerated set of lists of integers with specified constraints.
7
+
8
+ - :class:`Envelope`: a utility class for upper (lower) envelope of a
9
+ function under constraints.
10
+ """
11
+
12
+ # ****************************************************************************
13
+ # Copyright (C) 2015 Bryan Gillespie <Brg008@gmail.com>
14
+ # Nicolas M. Thiery <nthiery at users.sf.net>
15
+ # Anne Schilling <anne@math.ucdavis.edu>
16
+ # Jeroen Demeyer <jdemeyer@cage.ugent.be>
17
+ #
18
+ # This program is free software: you can redistribute it and/or modify
19
+ # it under the terms of the GNU General Public License as published by
20
+ # the Free Software Foundation, either version 2 of the License, or
21
+ # (at your option) any later version.
22
+ # https://www.gnu.org/licenses/
23
+ # ****************************************************************************
24
+
25
+
26
+ from cpython.object cimport Py_LE, Py_EQ, Py_NE, Py_GE
27
+ from sage.misc.constant_function import ConstantFunction
28
+ from sage.structure.element cimport RingElement
29
+ from sage.rings.integer cimport Integer
30
+ from sage.rings.integer_ring import ZZ
31
+
32
+ Infinity = float('+inf')
33
+ MInfinity = float('-inf')
34
+
35
+
36
+ cdef class IntegerListsBackend():
37
+ """
38
+ Base class for the Cython back-end of an enumerated set of lists of
39
+ integers with specified constraints.
40
+
41
+ This base implements the basic operations, including checking for
42
+ containment using :meth:`_contains`, but not iteration. For
43
+ iteration, subclass this class and implement an ``_iter()`` method.
44
+
45
+ EXAMPLES::
46
+
47
+ sage: from sage.combinat.integer_lists.base import IntegerListsBackend
48
+ sage: L = IntegerListsBackend(6, max_slope=-1)
49
+ sage: L._contains([3,2,1])
50
+ True
51
+ """
52
+ def __init__(self,
53
+ n=None, length=None, *,
54
+ min_length=0, max_length=Infinity,
55
+ floor=None, ceiling=None,
56
+ min_part=0, max_part=Infinity,
57
+ min_slope=MInfinity, max_slope=Infinity,
58
+ min_sum=0, max_sum=Infinity):
59
+ """
60
+ Initialize ``self``.
61
+
62
+ TESTS::
63
+
64
+ sage: from sage.combinat.integer_lists.base import IntegerListsBackend
65
+ sage: C = IntegerListsBackend(2, length=3)
66
+ sage: C = IntegerListsBackend(min_sum=1.4) # needs sage.rings.real_mpfr
67
+ Traceback (most recent call last):
68
+ ...
69
+ TypeError: Attempt to coerce non-integral RealNumber to Integer
70
+ sage: C = IntegerListsBackend(min_sum=Infinity)
71
+ Traceback (most recent call last):
72
+ ...
73
+ TypeError: unable to coerce <class 'sage.rings.infinity.PlusInfinity'> to an integer
74
+ """
75
+ if n is not None:
76
+ min_sum = n
77
+ max_sum = n
78
+ self.min_sum = Integer(min_sum) if min_sum != -Infinity else -Infinity
79
+ self.max_sum = Integer(max_sum) if max_sum != Infinity else Infinity
80
+
81
+ if length is not None:
82
+ min_length = length
83
+ max_length = length
84
+ self.min_length = Integer(max(min_length, 0))
85
+ self.max_length = Integer(max_length) if max_length != Infinity else Infinity
86
+
87
+ self.min_slope = Integer(min_slope) if min_slope != -Infinity else -Infinity
88
+ self.max_slope = Integer(max_slope) if max_slope != Infinity else Infinity
89
+
90
+ self.min_part = Integer(min_part) if min_part != -Infinity else -Infinity
91
+ self.max_part = Integer(max_part) if max_part != Infinity else Infinity
92
+
93
+ if isinstance(floor, Envelope):
94
+ self.floor = floor
95
+ else:
96
+ if floor is None:
97
+ floor = -Infinity
98
+ elif isinstance(floor, (list, tuple)):
99
+ floor = tuple(Integer(i) for i in floor)
100
+ elif callable(floor):
101
+ pass
102
+ else:
103
+ raise TypeError("floor should be a list, tuple, or function")
104
+ self.floor = Envelope(floor, sign=-1,
105
+ min_part=self.min_part, max_part=self.max_part,
106
+ min_slope=self.min_slope, max_slope=self.max_slope,
107
+ min_length=self.min_length)
108
+
109
+ if isinstance(ceiling, Envelope):
110
+ self.ceiling = ceiling
111
+ else:
112
+ if ceiling is None:
113
+ ceiling = Infinity
114
+ elif isinstance(ceiling, (list, tuple)):
115
+ ceiling = tuple(Integer(i) if i != Infinity else Infinity
116
+ for i in ceiling)
117
+ elif callable(ceiling):
118
+ pass
119
+ else:
120
+ raise ValueError("Unable to parse value of parameter ceiling")
121
+ self.ceiling = Envelope(ceiling, sign=1,
122
+ min_part=self.min_part, max_part=self.max_part,
123
+ min_slope=self.min_slope, max_slope=self.max_slope,
124
+ min_length=self.min_length)
125
+
126
+ def __richcmp__(self, other, int op):
127
+ r"""
128
+ Basic comparison function, supporting only checking for
129
+ equality.
130
+
131
+ EXAMPLES::
132
+
133
+ sage: C = IntegerListsLex(2, length=3).backend
134
+ sage: D = IntegerListsLex(2, length=3).backend; L = list(D._iter())
135
+ sage: E = IntegerListsLex(2, min_length=3).backend
136
+ sage: G = IntegerListsLex(4, length=3).backend
137
+ sage: C >= C
138
+ True
139
+ sage: C == D
140
+ True
141
+ sage: C != D
142
+ False
143
+ sage: C == E
144
+ False
145
+ sage: C != E
146
+ True
147
+ sage: C == None
148
+ False
149
+ sage: C == G
150
+ False
151
+ sage: C <= G
152
+ Traceback (most recent call last):
153
+ ...
154
+ TypeError: IntegerListsBackend can only be compared for equality
155
+ """
156
+ cdef IntegerListsBackend left = <IntegerListsBackend>self
157
+ cdef IntegerListsBackend right = <IntegerListsBackend>other
158
+ equal = (type(left) is type(other) and
159
+ left.min_length == right.min_length and
160
+ left.max_length == right.max_length and
161
+ left.min_sum == right.min_sum and
162
+ left.max_sum == right.max_sum and
163
+ left.min_slope == right.min_slope and
164
+ left.max_slope == right.max_slope and
165
+ left.floor == right.floor and
166
+ left.ceiling == right.ceiling)
167
+ if equal:
168
+ return op == Py_EQ or op == Py_LE or op == Py_GE
169
+ if op == Py_EQ:
170
+ return False
171
+ if op == Py_NE:
172
+ return True
173
+ else:
174
+ raise TypeError("IntegerListsBackend can only be compared for equality")
175
+
176
+ def _repr_(self):
177
+ """
178
+ Return the name of this enumerated set.
179
+
180
+ EXAMPLES::
181
+
182
+ sage: from sage.combinat.integer_lists.base import IntegerListsBackend
183
+ sage: C = IntegerListsBackend(2, length=3)
184
+ sage: C._repr_()
185
+ 'Integer lists of sum 2 satisfying certain constraints'
186
+ """
187
+ if self.min_sum == self.max_sum:
188
+ return "Integer lists of sum {} satisfying certain constraints".format(self.min_sum)
189
+ elif self.max_sum == Infinity:
190
+ if self.min_sum == 0:
191
+ return "Integer lists with arbitrary sum satisfying certain constraints"
192
+ else:
193
+ return "Integer lists of sum at least {} satisfying certain constraints".format(self.min_sum)
194
+ else:
195
+ return "Integer lists of sum between {} and {} satisfying certain constraints".format(self.min_sum, self.max_sum)
196
+
197
+ def _contains(self, comp):
198
+ """
199
+ Return ``True`` if ``comp`` meets the constraints imposed
200
+ by the arguments.
201
+
202
+ EXAMPLES::
203
+
204
+ sage: C = IntegerListsLex(n=2, max_length=3, min_slope=0)
205
+ sage: all(l in C for l in C) # indirect doctest
206
+ True
207
+
208
+ TESTS::
209
+
210
+ sage: [None, 2] in C
211
+ False
212
+
213
+ sage: [1/2, 3/2] in C
214
+ False
215
+ """
216
+ if len(comp) < self.min_length or len(comp) > self.max_length:
217
+ return False
218
+ if not all(e in ZZ for e in comp):
219
+ return False
220
+ n = sum(comp)
221
+ if n < self.min_sum or n > self.max_sum:
222
+ return False
223
+ for i in range(len(comp)):
224
+ if comp[i] < self.floor(i):
225
+ return False
226
+ if comp[i] > self.ceiling(i):
227
+ return False
228
+ for i in range(len(comp)-1):
229
+ slope = comp[i+1] - comp[i]
230
+ if slope < self.min_slope or slope > self.max_slope:
231
+ return False
232
+ return True
233
+
234
+ def __getstate__(self):
235
+ """
236
+ Pickle ``self``.
237
+
238
+ EXAMPLES::
239
+
240
+ sage: from sage.combinat.integer_lists.base import IntegerListsBackend
241
+ sage: C = IntegerListsBackend(2, length=3)
242
+ sage: C.__getstate__()
243
+ {'ceiling': <sage.combinat.integer_lists.base.Envelope object at ...>,
244
+ 'floor': <sage.combinat.integer_lists.base.Envelope object at ...>,
245
+ 'max_length': 3,
246
+ 'max_part': inf,
247
+ 'max_slope': inf,
248
+ 'max_sum': 2,
249
+ 'min_length': 3,
250
+ 'min_part': 0,
251
+ 'min_slope': -inf,
252
+ 'min_sum': 2}
253
+ """
254
+ return {"min_sum": self.min_sum,
255
+ "max_sum": self.max_sum,
256
+ "min_length": self.min_length,
257
+ "max_length": self.max_length,
258
+ "min_part": self.min_part,
259
+ "max_part": self.max_part,
260
+ "min_slope": self.min_slope,
261
+ "max_slope": self.max_slope,
262
+ "floor": self.floor,
263
+ "ceiling": self.ceiling}
264
+
265
+ def __setstate__(self, state):
266
+ """
267
+ Unpickle ``self`` from the state ``state``.
268
+
269
+ EXAMPLES::
270
+
271
+ sage: from sage.combinat.integer_lists.base import IntegerListsBackend
272
+ sage: C = IntegerListsBackend(2, length=3)
273
+ sage: C == loads(dumps(C))
274
+ True
275
+ sage: C == loads(dumps(C)) # this did fail at some point, really!
276
+ True
277
+ sage: C is loads(dumps(C)) # todo: not implemented
278
+ True
279
+ """
280
+ self.__init__(**state)
281
+
282
+
283
+ cdef class Envelope():
284
+ r"""
285
+ The (currently approximated) upper (lower) envelope of a function
286
+ under the specified constraints.
287
+
288
+ INPUT:
289
+
290
+ - ``f`` -- a function, list, or tuple; if ``f`` is a list, it is
291
+ considered as the function ``f(i)=f[i]``, completed for larger
292
+ `i` with ``f(i)=max_part``.
293
+
294
+ - ``min_part``, ``max_part``, ``min_slope``, ``max_slope``, ...
295
+ as for :class:`IntegerListsLex` (please consult for details).
296
+
297
+ - ``sign`` -- (+1 or -1) multiply the input values with ``sign``
298
+ and multiply the output with ``sign``. Setting this to `-1` can
299
+ be used to implement a lower envelope.
300
+
301
+ The *upper envelope* `U(f)` of `f` is the (pointwise) largest
302
+ function which is bounded above by `f` and satisfies the
303
+ ``max_part`` and ``max_slope`` conditions. Furthermore, for
304
+ ``i,i+1<min_length``, the upper envelope also satisfies the
305
+ ``min_slope`` condition.
306
+
307
+ Upon computing `U(f)(i)`, all the previous values
308
+ for `j\leq i` are computed and cached; in particular `f(i)` will
309
+ be computed at most once for each `i`.
310
+
311
+ .. TODO::
312
+
313
+ - This class is a good candidate for Cythonization, especially
314
+ to get the critical path in ``__call__`` super fast.
315
+
316
+ - To get full envelopes, we would want both the ``min_slope``
317
+ and ``max_slope`` conditions to always be satisfied. This is
318
+ only properly defined for the restriction of `f` to a finite
319
+ interval `0,..,k`, and depends on `k`.
320
+
321
+ - This is the core "data structure" of
322
+ ``IntegerListsLex``. Improving the lookahead there
323
+ essentially depends on having functions with a good
324
+ complexity to compute the area below an envelope; and in
325
+ particular how it evolves when increasing the length.
326
+
327
+ EXAMPLES::
328
+
329
+ sage: from sage.combinat.integer_lists import Envelope
330
+
331
+ Trivial upper and lower envelopes::
332
+
333
+ sage: f = Envelope([3,2,2])
334
+ sage: [f(i) for i in range(10)]
335
+ [3, 2, 2, inf, inf, inf, inf, inf, inf, inf]
336
+ sage: f = Envelope([3,2,2], sign=-1)
337
+ sage: [f(i) for i in range(10)]
338
+ [3, 2, 2, 0, 0, 0, 0, 0, 0, 0]
339
+
340
+ A more interesting lower envelope::
341
+
342
+ sage: f = Envelope([4,1,5,3,5], sign=-1, min_part=2, min_slope=-1)
343
+ sage: [f(i) for i in range(10)]
344
+ [4, 3, 5, 4, 5, 4, 3, 2, 2, 2]
345
+
346
+ Currently, adding ``max_slope`` has no effect::
347
+
348
+ sage: f = Envelope([4,1,5,3,5], sign=-1, min_part=2, min_slope=-1, max_slope=0)
349
+ sage: [f(i) for i in range(10)]
350
+ [4, 3, 5, 4, 5, 4, 3, 2, 2, 2]
351
+
352
+ unless ``min_length`` is large enough::
353
+
354
+ sage: f = Envelope([4,1,5,3,5], sign=-1, min_part=2, min_slope=-1, max_slope=0, min_length=2)
355
+ sage: [f(i) for i in range(10)]
356
+ [4, 3, 5, 4, 5, 4, 3, 2, 2, 2]
357
+
358
+ sage: f = Envelope([4,1,5,3,5], sign=-1, min_part=2, min_slope=-1, max_slope=0, min_length=4)
359
+ sage: [f(i) for i in range(10)]
360
+ [5, 5, 5, 4, 5, 4, 3, 2, 2, 2]
361
+
362
+ sage: f = Envelope([4,1,5,3,5], sign=-1, min_part=2, min_slope=-1, max_slope=0, min_length=5)
363
+ sage: [f(i) for i in range(10)]
364
+ [5, 5, 5, 5, 5, 4, 3, 2, 2, 2]
365
+
366
+ A non trivial upper envelope::
367
+
368
+ sage: f = Envelope([9,1,5,4], max_part=7, max_slope=2)
369
+ sage: [f(i) for i in range(10)]
370
+ [7, 1, 3, 4, 6, 7, 7, 7, 7, 7]
371
+
372
+ TESTS::
373
+
374
+ sage: f = Envelope(3, min_slope=1)
375
+ sage: [f(i) for i in range(10)]
376
+ [3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
377
+
378
+ sage: f = Envelope(3, min_slope=1, min_length=5)
379
+ sage: [f(i) for i in range(10)]
380
+ [-1, 0, 1, 2, 3, 3, 3, 3, 3, 3]
381
+
382
+ sage: f = Envelope(3, sign=-1, min_slope=1)
383
+ sage: [f(i) for i in range(10)]
384
+ [3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
385
+
386
+ sage: f = Envelope(3, sign=-1, max_slope=-1, min_length=4)
387
+ sage: [f(i) for i in range(10)]
388
+ [6, 5, 4, 3, 3, 3, 3, 3, 3, 3]
389
+ """
390
+ def __init__(self, f, *,
391
+ min_part=0, max_part=Infinity,
392
+ min_slope=MInfinity, max_slope=Infinity,
393
+ min_length=0, max_length=Infinity, sign=1):
394
+ r"""
395
+ Initialize this envelope.
396
+
397
+ TESTS::
398
+
399
+ sage: from sage.combinat.integer_lists import Envelope
400
+ sage: f = Envelope(3, sign=-1, max_slope=-1, min_length=4)
401
+ sage: f.sign
402
+ -1
403
+ sage: f.max_part
404
+ -3
405
+ sage: f.max_slope
406
+ inf
407
+ sage: f.min_slope
408
+ 1
409
+ sage: TestSuite(f).run(skip='_test_pickling')
410
+ sage: Envelope(3, sign=1/3, max_slope=-1, min_length=4)
411
+ Traceback (most recent call last):
412
+ ...
413
+ TypeError: no conversion of this rational to integer
414
+ sage: Envelope(3, sign=-2, max_slope=-1, min_length=4)
415
+ Traceback (most recent call last):
416
+ ...
417
+ ValueError: sign should be +1 or -1
418
+ """
419
+ # self.sign = sign for the output values (the sign change for
420
+ # f is handled here in __init__)
421
+ self.sign = Integer(sign)
422
+ if self.sign == 1:
423
+ self.max_part = max_part
424
+ self.min_slope = min_slope
425
+ self.max_slope = max_slope
426
+ if max_part == 0:
427
+ # This uses that all entries are nonnegative.
428
+ # This is not for speed optimization but for
429
+ # setting the limit start and avoid hangs.
430
+ # See #17979: comment 389
431
+ f = Integer(0)
432
+ elif self.sign == -1:
433
+ self.max_part = -min_part
434
+ self.min_slope = -max_slope
435
+ self.max_slope = -min_slope
436
+ else:
437
+ raise ValueError("sign should be +1 or -1")
438
+
439
+ # Handle different types of f and multiply f with sign
440
+ if isinstance(f, RingElement) or f == Infinity or f == -Infinity:
441
+ limit_start = 0
442
+ self.max_part = min(self.sign * f, self.max_part)
443
+ f = ConstantFunction(Infinity)
444
+ elif isinstance(f, (list, tuple)):
445
+ limit_start = len(f)
446
+ f_tab = [self.sign * i for i in f]
447
+ f = lambda k: f_tab[k] if k < len(f_tab) else Infinity
448
+ else:
449
+ g = f
450
+ f = lambda k: self.sign * g(k)
451
+ # At this point, this is not really used
452
+ limit_start = Infinity
453
+
454
+ self.f = f
455
+ # For i >= limit_start, f is constant
456
+ # This does not necessarily means that self is constant!
457
+ self.f_limit_start = limit_start
458
+ self.precomputed = []
459
+
460
+ if min_length > 0:
461
+ self(min_length-1)
462
+ for i in range(min_length-1,0,-1):
463
+ self.precomputed[i-1] = min(self.precomputed[i-1], self.precomputed[i] - self.min_slope)
464
+
465
+ def __richcmp__(self, other, int op):
466
+ r"""
467
+ Basic comparison function, supporting only checking for
468
+ equality.
469
+
470
+ EXAMPLES::
471
+
472
+ sage: from sage.combinat.integer_lists import Envelope
473
+ sage: f = Envelope([3,2,2])
474
+ sage: g = Envelope([3,2,2])
475
+ sage: h = Envelope([3,2,2], min_part=2)
476
+ sage: f == f, f == h, f == None
477
+ (True, False, False)
478
+ sage: f < f, f != h, f != None
479
+ (False, True, True)
480
+
481
+ This would be desirable::
482
+
483
+ sage: f == g # todo: not implemented
484
+ True
485
+ """
486
+ cdef Envelope left = <Envelope>self
487
+ cdef Envelope right = <Envelope>other
488
+ equal = (type(left) is type(other) and
489
+ left.sign == right.sign and
490
+ left.f == right.f and
491
+ left.f_limit_start == right.f_limit_start and
492
+ left.max_part == right.max_part and
493
+ left.min_slope == right.min_slope and
494
+ left.max_slope == right.max_slope)
495
+ if equal:
496
+ return op == Py_EQ or op == Py_LE or op == Py_GE
497
+ if op == Py_EQ:
498
+ return False
499
+ if op == Py_NE:
500
+ return True
501
+ else:
502
+ raise TypeError("Envelopes can only be compared for equality")
503
+
504
+ def limit_start(self):
505
+ """
506
+ Return from which `i` on the bound returned by ``limit`` holds.
507
+
508
+ .. SEEALSO:: :meth:`limit` for the precise specifications.
509
+
510
+ EXAMPLES::
511
+
512
+ sage: from sage.combinat.integer_lists import Envelope
513
+ sage: Envelope([4,1,5]).limit_start()
514
+ 3
515
+ sage: Envelope([4,1,5], sign=-1).limit_start()
516
+ 3
517
+
518
+ sage: Envelope([4,1,5], max_part=2).limit_start()
519
+ 3
520
+
521
+ sage: Envelope(4).limit_start()
522
+ 0
523
+ sage: Envelope(4, sign=-1).limit_start()
524
+ 0
525
+
526
+ sage: Envelope(lambda x: 3).limit_start() == Infinity
527
+ True
528
+ sage: Envelope(lambda x: 3, max_part=2).limit_start() == Infinity
529
+ True
530
+
531
+ sage: Envelope(lambda x: 3, sign=-1, min_part=2).limit_start() == Infinity
532
+ True
533
+ """
534
+ return self.f_limit_start
535
+
536
+ def limit(self):
537
+ r"""
538
+ Return a bound on the limit of ``self``.
539
+
540
+ OUTPUT: nonnegative integer or `\infty`
541
+
542
+ This returns some upper bound for the accumulation points of
543
+ this upper envelope. For a lower envelope, a lower bound is
544
+ returned instead.
545
+
546
+ In particular this gives a bound for the value of ``self`` at
547
+ `i` for `i` large enough. Special case: for a lower envelop,
548
+ and when the limit is `\infty`, the envelope is guaranteed to
549
+ tend to `\infty` instead.
550
+
551
+ When ``s=self.limit_start()`` is finite, this bound is
552
+ guaranteed to be valid for `i>=s`.
553
+
554
+ Sometimes it's better to have a loose bound that starts early;
555
+ sometimes the converse holds. At this point which specific
556
+ bound and starting point is returned is not set in stone, in
557
+ order to leave room for later optimizations.
558
+
559
+ EXAMPLES::
560
+
561
+ sage: from sage.combinat.integer_lists import Envelope
562
+ sage: Envelope([4,1,5]).limit()
563
+ inf
564
+ sage: Envelope([4,1,5], max_part=2).limit()
565
+ 2
566
+ sage: Envelope([4,1,5], max_slope=0).limit()
567
+ 1
568
+ sage: Envelope(lambda x: 3, max_part=2).limit()
569
+ 2
570
+
571
+ Lower envelopes::
572
+
573
+ sage: Envelope(lambda x: 3, min_part=2, sign=-1).limit()
574
+ 2
575
+ sage: Envelope([4,1,5], min_slope=0, sign=-1).limit()
576
+ 5
577
+ sage: Envelope([4,1,5], sign=-1).limit()
578
+ 0
579
+
580
+ .. SEEALSO:: :meth:`limit_start`
581
+ """
582
+ if self.limit_start() < Infinity and self.max_slope <= 0:
583
+ return self(self.limit_start())
584
+ else:
585
+ return self.max_part * self.sign
586
+
587
+ def __call__(self, Py_ssize_t k):
588
+ """
589
+ Return the value of this envelope at `k`.
590
+
591
+ EXAMPLES::
592
+
593
+ sage: from sage.combinat.integer_lists import Envelope
594
+ sage: f = Envelope([4,1,5,3,5])
595
+ sage: f.__call__(2)
596
+ 5
597
+ sage: [f(i) for i in range(10)]
598
+ [4, 1, 5, 3, 5, inf, inf, inf, inf, inf]
599
+
600
+ .. NOTE::
601
+
602
+ See the documentation of :class:`Envelope` for tests and
603
+ examples.
604
+ """
605
+ if k >= len(self.precomputed):
606
+ for i in range(len(self.precomputed), k+1):
607
+ value = min(self.f(i), self.max_part)
608
+ if i > 0:
609
+ value = min(value, self.precomputed[i-1] + self.max_slope)
610
+ self.precomputed.append(value)
611
+ return self.precomputed[k] * self.sign
612
+
613
+ def adapt(self, m, j):
614
+ """
615
+ Return this envelope adapted to an additional local constraint.
616
+
617
+ INPUT:
618
+
619
+ - ``m`` -- nonnegative integer (starting value)
620
+
621
+ - ``j`` -- nonnegative integer (position)
622
+
623
+ This method adapts this envelope to the additional local
624
+ constraint imposed by having a part `m` at position `j`.
625
+ Namely, this returns a function which computes, for any `i>j`,
626
+ the minimum of the ceiling function and the value restriction
627
+ given by the slope conditions.
628
+
629
+ EXAMPLES::
630
+
631
+ sage: from sage.combinat.integer_lists import Envelope
632
+ sage: f = Envelope(3)
633
+ sage: g = f.adapt(1,1)
634
+ sage: g is f
635
+ True
636
+ sage: [g(i) for i in range(10)]
637
+ [3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
638
+
639
+ sage: f = Envelope(3, max_slope=1)
640
+ sage: g = f.adapt(1,1)
641
+ sage: [g(i) for i in range(10)]
642
+ [0, 1, 2, 3, 3, 3, 3, 3, 3, 3]
643
+
644
+ Note that, in both cases above, the adapted envelope is only
645
+ guaranteed to be valid for `i>j`! This is to leave potential
646
+ room in the future for sharing similar adapted envelopes::
647
+
648
+ sage: g = f.adapt(0,0)
649
+ sage: [g(i) for i in range(10)]
650
+ [0, 1, 2, 3, 3, 3, 3, 3, 3, 3]
651
+
652
+ sage: g = f.adapt(2,2)
653
+ sage: [g(i) for i in range(10)]
654
+ [0, 1, 2, 3, 3, 3, 3, 3, 3, 3]
655
+
656
+ sage: g = f.adapt(3,3)
657
+ sage: [g(i) for i in range(10)]
658
+ [0, 1, 2, 3, 3, 3, 3, 3, 3, 3]
659
+
660
+ Now with a lower envelope::
661
+
662
+ sage: f = Envelope(1, sign=-1, min_slope=-1)
663
+ sage: g = f.adapt(2,2)
664
+ sage: [g(i) for i in range(10)]
665
+ [4, 3, 2, 1, 1, 1, 1, 1, 1, 1]
666
+ sage: g = f.adapt(1,3)
667
+ sage: [g(i) for i in range(10)]
668
+ [4, 3, 2, 1, 1, 1, 1, 1, 1, 1]
669
+ """
670
+ if self.max_slope == Infinity:
671
+ return self
672
+ m *= self.sign
673
+ m = m - j * self.max_slope
674
+ return lambda i: self.sign * min(m + i*self.max_slope, self.sign*self(i) )
675
+
676
+ def __reduce__(self):
677
+ """
678
+ Pickle ``self``.
679
+
680
+ EXAMPLES::
681
+
682
+ sage: from sage.combinat.integer_lists import Envelope
683
+ sage: h = Envelope(3, min_part=2)
684
+ sage: loads(dumps(h)) == h
685
+ True
686
+ """
687
+ args = (type(self),
688
+ self.sign, self.f, self.f_limit_start, self.precomputed,
689
+ self.max_part, self.min_slope, self.max_slope)
690
+ return _unpickle_Envelope, args
691
+
692
+
693
+ def _unpickle_Envelope(type t, _sign, _f, _f_limit_start, _precomputed,
694
+ _max_part, _min_slope, _max_slope):
695
+ """
696
+ Internal function to support pickling for :class:`Envelope`.
697
+
698
+ EXAMPLES::
699
+
700
+ sage: from sage.combinat.integer_lists.base import Envelope, _unpickle_Envelope
701
+ sage: _unpickle_Envelope(Envelope,
702
+ ....: 1, lambda i:i, Infinity, [], 4, -1, 3)
703
+ <sage.combinat.integer_lists.base.Envelope object at ...>
704
+ """
705
+ cdef Envelope self = t.__new__(t)
706
+ self.sign = _sign
707
+ self.f = _f
708
+ self.f_limit_start = _f_limit_start
709
+ self.precomputed = _precomputed
710
+ self.max_part = _max_part
711
+ self.min_slope = _min_slope
712
+ self.max_slope = _max_slope
713
+ return self