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,59 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ from sage.misc.binary_tree import BinaryTree
3
+ from sage.misc.binary_tree cimport BinaryTree
4
+
5
+
6
+ cdef class generic_pd
7
+
8
+ cdef class CompiledPolynomialFunction:
9
+ cdef generic_pd _dag
10
+ cdef object _coeffs
11
+
12
+ cdef object _parse_structure(CompiledPolynomialFunction)
13
+ cdef generic_pd _get_gap(CompiledPolynomialFunction, BinaryTree, int)
14
+ cdef void _fill_gaps_binary(CompiledPolynomialFunction, BinaryTree) noexcept
15
+ cdef object eval(CompiledPolynomialFunction, object)
16
+
17
+ cdef class generic_pd:
18
+ cdef object value
19
+ cdef int refs, hits
20
+ cdef int label
21
+ cdef int eval(self, vars, coeffs) except -2
22
+ cdef generic_pd nodummies(generic_pd)
23
+ cdef void reset(self) noexcept
24
+
25
+ cdef class dummy_pd(generic_pd):
26
+ cdef generic_pd link
27
+ cdef void fill(dummy_pd self, generic_pd link) noexcept
28
+
29
+ cdef class var_pd(generic_pd):
30
+ cdef int index
31
+
32
+ cdef class univar_pd(generic_pd):
33
+ pass
34
+
35
+ cdef class coeff_pd(generic_pd):
36
+ cdef int index
37
+
38
+
39
+ cdef class unary_pd(generic_pd):
40
+ cdef generic_pd operand
41
+
42
+ cdef class sqr_pd(unary_pd):
43
+ pass
44
+
45
+ cdef class pow_pd(unary_pd):
46
+ cdef object exponent
47
+
48
+
49
+ cdef class binary_pd(generic_pd):
50
+ cdef generic_pd left, right
51
+
52
+ cdef class add_pd(binary_pd):
53
+ pass
54
+
55
+ cdef class mul_pd(binary_pd):
56
+ pass
57
+
58
+ cdef class abc_pd(binary_pd):
59
+ cdef int index
@@ -0,0 +1,509 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ """
3
+ Polynomial Compilers
4
+
5
+ AUTHORS:
6
+
7
+ - Tom Boothby, initial design & implementation
8
+ - Robert Bradshaw, bug fixes / suggested & assisted with significant design improvements
9
+ """
10
+
11
+ ################################################################################
12
+ # Copyright (C) 2007 Tom Boothby <boothby@u.washington.edu>
13
+ #
14
+ # Distributed under the terms of the GNU General Public License (GPL)
15
+ #
16
+ # https://www.gnu.org/licenses/
17
+ ################################################################################
18
+
19
+ from sage.misc.binary_tree cimport BinaryTree
20
+
21
+
22
+ cdef class CompiledPolynomialFunction:
23
+ """
24
+ Build a reasonably optimized directed acyclic graph representation
25
+ for a given polynomial. A ``CompiledPolynomialFunction`` is callable from
26
+ python, though it is a little faster to call the eval function from
27
+ pyrex.
28
+
29
+ This class is not intended to be called by a user, rather, it is
30
+ intended to improve the performance of immutable polynomial objects.
31
+
32
+ .. TODO::
33
+
34
+ - Recursive calling
35
+ - Faster casting of coefficients / argument
36
+ - Multivariate polynomials
37
+ - Cython implementation of Pippenger's Algorithm that doesn't
38
+ depend heavily upon dicts.
39
+ - Computation of parameter sequence suggested by Pippenger
40
+ - Univariate exponentiation can use Brauer's method to improve
41
+ extremely sparse polynomials of very high degree
42
+ """
43
+
44
+ def __init__(self, coeffs, algorithm='binary'):
45
+ """
46
+ Compiles a polynomial into an evaluation DAG representation which
47
+ is at least as optimal as using Horner's Rule. For polynomials
48
+ which have a relatively large number of zero coefficients, the
49
+ improvement over Horner's Rule grows significantly.
50
+
51
+ Here is a rough description of the algorithm. Actual
52
+ implementation differs slightly, for sake of speed. Specifically,
53
+ steps 1 and 3 are done at the same time.
54
+
55
+ Step 1: Collect Coefficient Gaps.
56
+ Scan through coefficient list, and record the lengths of
57
+ sequences of zero coefficients. This corresponds to
58
+ collapsing Horner's Form into a reduced representation.
59
+ For example, ::
60
+
61
+ x^8 + x^4 + x^2 + 1
62
+ = ((((((((1)*x + 0)*x+0)*x+0)*x+1)*x+0)*x+0)*x+1)*x+0)*x+1
63
+ = ((((1)*x^4 + 1)*x^2 + 1)*x^2 + 1
64
+
65
+ gives a list of "gaps": [2,4]
66
+
67
+ Step 2: Fill in Gap Structure.
68
+ Given the list of gaps, find a reasonable sequence of
69
+ of multiplications / squarings of x that will result in
70
+ the computation of all desired exponents. Record this
71
+ sequence of steps as an evaluation DAG, and retain
72
+ references to the nodes representing the desired
73
+ exponents. For the example above, we would have::
74
+
75
+ x^2 = x*x
76
+ x^4 = (x^2) * (x^2)
77
+
78
+ Step 3: Construct Evaluation Dag.
79
+ Rescan the coefficient list, and build an evaluation DAG
80
+ representation for the reduced Horner Form as above.
81
+ Whenever a sequence of zeros is encountered, multiply by
82
+ the appropriate "gap" node. Retain a reference to the
83
+ result node.
84
+
85
+ Implementation considerations:
86
+
87
+ * By combining steps 1 and 3, we greatly improve the speed of
88
+ this construction, but some complexity is introduced. The
89
+ solution to this is that "dummy" nodes are created to represent
90
+ the desired gaps. As the structure of the gaps is filled in,
91
+ these dummies get references to usable DAG nodes. After all gaps
92
+ are filled in, we strip out dummy nodes, and are left with a
93
+ complete representation of our polynomial.
94
+
95
+ * The "binary" algorithm (currently the only algorithm; others are
96
+ forthcoming) requires the gaps to considered in order, and adds
97
+ additional dummies as it goes. Hence, the gaps are put into a
98
+ binary tree.
99
+ """
100
+ cdef generic_pd max_gap, dag
101
+ cdef BinaryTree gaps
102
+
103
+ self._coeffs = coeffs
104
+ gaps, dag = self._parse_structure()
105
+ max_gap = <generic_pd>(gaps.get_max())
106
+ if max_gap.label > 1:
107
+ if algorithm == 'binary':
108
+ self._fill_gaps_binary(gaps)
109
+ elif algorithm == 'pippenger':
110
+ raise NotImplementedError("Implementation of Pippenger's Algorithm is not ready for prime time.")
111
+ else:
112
+ raise RuntimeError("Method '%s' not supported.")
113
+
114
+ self._dag = dag.nodummies()
115
+
116
+ def __repr__(self):
117
+ return "CompiledPolynomialFunction(%s)" % self._dag
118
+
119
+ def __call__(self, x):
120
+ return self.eval(x)
121
+
122
+ cdef object eval(CompiledPolynomialFunction self, object x):
123
+ cdef object temp
124
+ try:
125
+ pd_eval(self._dag, x, self._coeffs) #see further down
126
+ temp = self._dag.value #for an explanation
127
+ pd_clean(self._dag) #of these 3 lines
128
+ return temp
129
+ except TypeError as msg:
130
+ self._dag.reset()
131
+ raise TypeError(msg)
132
+
133
+ cdef object _parse_structure(CompiledPolynomialFunction self):
134
+ """
135
+ Loop through the coefficients of the polynomial, and collect
136
+ coefficient gap widths. Meanwhile, construct the evaluation
137
+ DAG; inserting dummy nodes wherever there are gaps of width
138
+ greater than 1.
139
+
140
+ Return the resultant head DAG node, and a binary tree
141
+ containing the dummy nodes.
142
+ """
143
+ cdef BinaryTree gaps
144
+ cdef int d
145
+ cdef generic_pd s
146
+
147
+ s = univar_pd()
148
+ gaps = BinaryTree()
149
+ gaps.insert(1, s)
150
+
151
+ d = len(self._coeffs)-1
152
+
153
+ s = coeff_pd(d)
154
+ gap_width = 0
155
+
156
+ d -= 1
157
+ while d > 0:
158
+ gap_width += 1
159
+ if self._coeffs[d]:
160
+ s = abc_pd(s, self._get_gap(gaps, gap_width), d)
161
+ gap_width = 0
162
+ d-=1
163
+
164
+ gap_width += 1
165
+ if self._coeffs[0]:
166
+ s = abc_pd(s, self._get_gap(gaps, gap_width), 0)
167
+ else:
168
+ s = mul_pd(s, self._get_gap(gaps, gap_width))
169
+
170
+ return gaps, s
171
+
172
+ cdef generic_pd _get_gap(CompiledPolynomialFunction self, BinaryTree gaps, int gap):
173
+ """
174
+ Find an entry in the BinaryTree gaps, identified by the int gap.
175
+ If such an entry does not exist, create it and put it in the tree.
176
+ """
177
+
178
+ cdef generic_pd g
179
+ g = gaps.get(gap)
180
+ if g is not None:
181
+ return g
182
+ else:
183
+ g = dummy_pd(gap)
184
+ gaps.insert(gap,g)
185
+ return g
186
+
187
+ cdef void _fill_gaps_binary(CompiledPolynomialFunction self, BinaryTree gaps) noexcept:
188
+ """
189
+ The desired gaps come in a tree, filled with dummy nodes (with the
190
+ exception of the var node, which is not a dummy). The nodes are
191
+ labeled with their width. When we refer to multiplication or
192
+ squaring nodes, we give the current dummy node a usable dag of the
193
+ appropriate type, which treats the nodes being operated on as
194
+ argument. That is, if we want to multiply nodes A and B, and
195
+ give the result to M, we would call ::
196
+
197
+ M.fill(mul_pd(A,B))
198
+
199
+ and refer to this operation as ::
200
+
201
+ M = A*B
202
+
203
+ Sometimes we want a node that isn't in the tree. In that case, we
204
+ create a new dummy node, and put it into the tree. The phrase
205
+ "get the node for..." means that we obtain one with the _get_gap
206
+ method, which may create a new node.
207
+
208
+
209
+ Fill in the gaps with the following algorithm:
210
+
211
+ | Step 1:
212
+ | Remove max node from the tree, denote its width m.
213
+ | If m == 1, halt.
214
+ |
215
+ | Step 2:
216
+ | If m is even, check if m/2 is already in our tree.
217
+ | If yes, square the node corresponding to m/2, and go to step 1.
218
+ |
219
+ | Step 3:
220
+ | Peek at the next-largest, and denote its width n.
221
+ | Write m = qn+r.
222
+ | If r != 0, get the node R, whose gap-width is r.
223
+ | Also, get the node QN, whose width is qn.
224
+ | Then, set M = R*QN and go to step 1.
225
+ | If r == 0, we have two cases:
226
+ | q is even:
227
+ | get/create the node for q/n, denote it T.
228
+ | Set M = T**2 and go to step 1.
229
+ | q is odd:
230
+ | get/create the node for (Q-1)*N, denote it T.
231
+ | Set M = T*N and go to step 1.
232
+
233
+ The r == 0 case in step 3 is equivalent to binary exponentiation.
234
+ """
235
+ cdef int m,n,k,r,half
236
+ cdef generic_pd T,N,H
237
+ cdef dummy_pd M
238
+ T = gaps.pop_max()
239
+ while T is not None:
240
+ N = gaps.get_max()
241
+ if N is None:
242
+ return
243
+ else:
244
+ M = <dummy_pd>T
245
+ m = M.label
246
+ n = N.label
247
+ k = m / n
248
+ r = m % n
249
+ half = m / 2
250
+
251
+ found = False
252
+ if m % 2 == 0 and n >= half:
253
+ H = gaps.get(half)
254
+ if H is not None:
255
+ M.fill(sqr_pd(H))
256
+ found = True
257
+
258
+ if not found:
259
+ if r > 0:
260
+ M.fill(mul_pd(self._get_gap(gaps, n*k), self._get_gap(gaps, r)))
261
+ elif k % 2 == 0:
262
+ M.fill(sqr_pd(self._get_gap(gaps, n*k/2)))
263
+ else:
264
+ M.fill(mul_pd(self._get_gap(gaps, n*(k-1)), N))
265
+
266
+ T = gaps.pop_max()
267
+
268
+
269
+ ########################################################
270
+ #
271
+ # Polynomial DAG Code
272
+ #
273
+ # An "evaluation DAG" is a rather generic concept. What
274
+ # follows is a set of DAG classes which are suitable for
275
+ # evaluating polynomials in Horner's form, and very
276
+ # little else. Let's call them polydags from here down.
277
+ # DAG in all-caps is a whole graph. However,
278
+ # polydag or pd := polynomial DAG node
279
+ #
280
+ # 5 operations, and 3 types of constants are implemented:
281
+ #
282
+ # univar_pd: a variable of a univariate polynomial.
283
+ # var_pd: a variable of a multivariate polynomial.
284
+ # parametrized by an index number.
285
+ # const_pd: a coefficient of a polynomial. Also
286
+ # parametrized by an index number.
287
+ #
288
+ # unary operations:
289
+ #
290
+ # sqr_pd: takes another polydag as an argument, squares
291
+ # by multiplying argument's value by itself.
292
+ # pow_pd: takes another polydag, and an int, as arguments.
293
+ # exponentiates with the ** operator.
294
+ #
295
+ # binary operations:
296
+ #
297
+ # add_pd: adds values of two other polydags.
298
+ # mul_pd: like add_pd, but we with multiplication
299
+ # abc_pd: not technically binary, but it only depends
300
+ # upon two other polydags, so it fits into the
301
+ # class structure this way. Multiplies the
302
+ # values of two other polydags, and adds the
303
+ # coefficient corresponding to the given index.
304
+ #
305
+ # Polydag structure:
306
+ # properties:
307
+ # value: some python object. Should be None before
308
+ # and after the DAG is evaluated.
309
+ # refs: number of polydag nodes that reference self
310
+ # hits: number of times, during current computation,
311
+ # that self.value has been accessed
312
+ # label: used to identify nodes from the outside.
313
+ # specifically, when they're in a binary tree.
314
+ #
315
+ # methods:
316
+ # eval: runs the computation for which the node is
317
+ # intended, and stores the result in self.value.
318
+ # Takes 2 python objects as arguments. The first
319
+ # is the value of the variable, for univariate
320
+ # polynomials, or a tuple of values for multi-
321
+ # variate. The second is the list of coefficients.
322
+ # The reason for taking the list of coefficients,
323
+ # rather than holding references to them, is that
324
+ # we can implement recursive calling at some later
325
+ # date.
326
+ # nodummies: recursively evict dummies, replacing them
327
+ # with the non-dummy nodes that they
328
+ # reference.
329
+
330
+
331
+ # These inline functions are called wherever a node gets
332
+ # evaluated. First, pd_eval is called to ensure that the
333
+ # target DAG node will have its .value property set. It
334
+ # serves two purposes:
335
+ # 1) Count the number of times this node has been asked
336
+ # for its value.
337
+ # 2) Call the node's eval() function if and only if it
338
+ # has not been called yet. These functions are
339
+ # inlined to prevent excessive function calls.
340
+ # Then, pd_clean is called. It checks to see if all of
341
+ # the polydag's dependents have phoned in, and resets
342
+ # self.value to None if they have. Thus, we don't hold
343
+ # on to intermediate values any longer than we have to.
344
+
345
+ cdef inline int pd_eval(generic_pd pd, object vars, object coeffs) except -2:
346
+ if pd.value is None:
347
+ pd.eval(vars, coeffs)
348
+ pd.hits += 1
349
+
350
+ cdef inline void pd_clean(generic_pd pd) noexcept:
351
+ if pd.hits >= pd.refs:
352
+ pd.value = None
353
+ pd.hits = 0
354
+
355
+ cdef class generic_pd:
356
+ def __init__(generic_pd self):
357
+ self.value = None
358
+ self.hits = 0
359
+ self.refs = 0
360
+ self.label = -1
361
+
362
+ cdef int eval(generic_pd self, object vars, object coeffs) except -2:
363
+ raise NotImplementedError
364
+
365
+ cdef generic_pd nodummies(generic_pd self):
366
+ return self
367
+
368
+ cdef void reset(generic_pd self) noexcept:
369
+ self.hits = 0
370
+ self.value = None
371
+
372
+ cdef class dummy_pd(generic_pd):
373
+ def __init__(dummy_pd self, int label):
374
+ self.label = label
375
+
376
+ cdef void fill(dummy_pd self, generic_pd link) noexcept:
377
+ self.link = link
378
+
379
+ cdef generic_pd nodummies(dummy_pd self):
380
+ #sorry guys, this is my stop
381
+ self.link.refs = self.refs
382
+ return self.link.nodummies()
383
+
384
+ cdef class var_pd(generic_pd):
385
+ def __init__(var_pd self, int index):
386
+ generic_pd.__init__(self)
387
+ self.index = index
388
+ cdef int eval(var_pd self, object vars, object coeffs) except -2:
389
+ self.value = vars[self.index]
390
+
391
+ def __repr__(self):
392
+ return "x[%s]" % (self.index)
393
+
394
+
395
+ cdef class univar_pd(generic_pd):
396
+ def __init__(univar_pd self):
397
+ generic_pd.__init__(self)
398
+ self.label = 1
399
+ cdef int eval(univar_pd self, object var, object coeffs) except -2:
400
+ self.value = var
401
+
402
+ def __repr__(self):
403
+ return "x"
404
+
405
+ cdef class coeff_pd(generic_pd):
406
+ def __init__(coeff_pd self, int index):
407
+ generic_pd.__init__(self)
408
+ self.index = index
409
+ cdef int eval(coeff_pd self, object vars, object coeffs) except -2:
410
+ self.value = coeffs[self.index]
411
+
412
+ def __repr__(self):
413
+ return "a%s" % (self.index)
414
+
415
+ cdef void reset(self) noexcept:
416
+ pass
417
+
418
+ cdef class unary_pd(generic_pd):
419
+ def __init__(unary_pd self, generic_pd operand):
420
+ generic_pd.__init__(self)
421
+ self.operand = operand
422
+ self.operand.refs += 1
423
+
424
+ cdef generic_pd nodummies(self):
425
+ self.operand = self.operand.nodummies()
426
+ return self
427
+
428
+ cdef void reset(self) noexcept:
429
+ generic_pd.reset(self)
430
+ self.operand.reset()
431
+
432
+
433
+ cdef class sqr_pd(unary_pd):
434
+ cdef int eval(sqr_pd self, object vars, object coeffs) except -2:
435
+ pd_eval(self.operand, vars, coeffs)
436
+ self.value = self.operand.value * self.operand.value
437
+ pd_clean(self.operand)
438
+
439
+ def __repr__(self):
440
+ return "(%s)^2" % (self.operand)
441
+
442
+ cdef class pow_pd(unary_pd):
443
+ def __init__(unary_pd self, generic_pd base, object exponent):
444
+ unary_pd.__init__(self, base)
445
+ self.exponent = exponent
446
+
447
+ cdef int eval(pow_pd self, object vars, object coeffs) except -2:
448
+ pd_eval(self.operand, vars, coeffs)
449
+ self.value = self.operand.value ** self.exponent
450
+ pd_clean(self.operand)
451
+
452
+ def __repr__(self):
453
+ return "(%s^%s)" % (self.left, self.exponent)
454
+
455
+
456
+ cdef class binary_pd(generic_pd):
457
+ def __init__(binary_pd self, generic_pd left, generic_pd right):
458
+ generic_pd.__init__(self)
459
+ self.left = left
460
+ self.right = right
461
+ self.left.refs+= 1
462
+ self.right.refs+= 1
463
+
464
+ cdef generic_pd nodummies(self):
465
+ self.left = self.left.nodummies()
466
+ self.right = self.right.nodummies()
467
+ return self
468
+
469
+ cdef void reset(self) noexcept:
470
+ generic_pd.reset(self)
471
+ self.left.reset()
472
+ self.right.reset()
473
+
474
+ cdef class add_pd(binary_pd):
475
+ cdef int eval(add_pd self, object vars, object coeffs) except -2:
476
+ pd_eval(self.left, vars, coeffs)
477
+ pd_eval(self.right, vars, coeffs)
478
+ self.value = self.left.value + self.right.value
479
+ pd_clean(self.left)
480
+ pd_clean(self.right)
481
+
482
+ def __repr__(self):
483
+ return "(%s+%s)" % (self.left, self.right)
484
+
485
+ cdef class mul_pd(binary_pd):
486
+ cdef int eval(mul_pd self, object vars, object coeffs) except -2:
487
+ pd_eval(self.left, vars, coeffs)
488
+ pd_eval(self.right, vars, coeffs)
489
+ self.value = self.left.value * self.right.value
490
+ pd_clean(self.left)
491
+ pd_clean(self.right)
492
+
493
+ def __repr__(self):
494
+ return "(%s*%s)" % (self.left, self.right)
495
+
496
+ cdef class abc_pd(binary_pd):
497
+ def __init__(abc_pd self, generic_pd left, generic_pd right, int index):
498
+ binary_pd.__init__(self, left, right)
499
+ self.index = index
500
+
501
+ def __repr__(self):
502
+ return "(%s*%s+a%s)" % (self.left, self.right, self.index)
503
+
504
+ cdef int eval(abc_pd self, object vars, object coeffs) except -2:
505
+ pd_eval(self.left, vars, coeffs)
506
+ pd_eval(self.right, vars, coeffs)
507
+ self.value = self.left.value * self.right.value + coeffs[self.index]
508
+ pd_clean(self.left)
509
+ pd_clean(self.right)
@@ -0,0 +1,64 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ from sage.structure.element import Element
3
+ from sage.structure.element cimport Element, CommutativeAlgebraElement, ModuleElement
4
+ from sage.structure.parent cimport Parent
5
+ from sage.rings.integer cimport Integer
6
+ from sage.rings.polynomial.commutative_polynomial cimport CommutativePolynomial
7
+ from sage.rings.polynomial.polynomial_compiled cimport CompiledPolynomialFunction
8
+
9
+
10
+ cdef class Polynomial(CommutativePolynomial):
11
+ cdef Polynomial _new_generic(self, list coeffs)
12
+ cdef char _is_gen
13
+ cdef CompiledPolynomialFunction _compiled
14
+ cpdef Polynomial truncate(self, long n)
15
+ cpdef Polynomial inverse_series_trunc(self, long prec)
16
+ cdef long _hash_c(self) except -1
17
+ cpdef constant_coefficient(self)
18
+ cpdef Polynomial _new_constant_poly(self, a, Parent P)
19
+ cpdef list list(self, bint copy=*)
20
+ cpdef _mul_generic(self, right)
21
+ cdef _square_generic(self)
22
+
23
+ cpdef bint is_zero(self) except -1
24
+ cpdef bint is_one(self) except -1
25
+ cpdef bint is_term(self) except -1
26
+
27
+ cpdef dict _mpoly_dict_recursive(self, tuple variables=*, base_ring=*)
28
+
29
+ cpdef _add_(self, other)
30
+ cpdef _mul_(self, other)
31
+ cpdef _floordiv_(self, right)
32
+ cpdef Polynomial _mul_trunc_(self, Polynomial right, long n)
33
+ cpdef Polynomial _power_trunc(self, unsigned long n, long prec)
34
+ cdef Polynomial _mul_term(self, Polynomial term, bint term_on_right)
35
+
36
+ # UNSAFE, only call from an inplace operator
37
+ # may return a new element if not possible to modify inplace
38
+ cdef _inplace_truncate(self, long n)
39
+
40
+ cdef get_coeff_c(self, Py_ssize_t i)
41
+ cdef get_unsafe(self, Py_ssize_t i)
42
+ cpdef long number_of_terms(self) noexcept
43
+
44
+ # See 23227
45
+ cpdef _add_(self, right)
46
+ cpdef _mul_(self, right)
47
+ cpdef _floordiv_(self, right)
48
+
49
+ cdef public dict _cached_methods
50
+
51
+ cdef class Polynomial_generic_dense(Polynomial):
52
+ cdef Polynomial_generic_dense _new_c(self, list coeffs, Parent P)
53
+ cdef list _coeffs
54
+ cdef int _normalize(self) except -1
55
+ cpdef list list(self, bint copy=*)
56
+
57
+ cdef class Polynomial_generic_dense_inexact(Polynomial_generic_dense):
58
+ pass
59
+
60
+ cpdef is_Polynomial(f)
61
+ cpdef Polynomial generic_power_trunc(Polynomial p, Integer n, long prec)
62
+ cpdef list _dict_to_list(dict x, zero)
63
+
64
+ cpdef bint polynomial_is_variable(x) noexcept