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,542 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ """
3
+ Routines for Conway and pseudo-Conway polynomials
4
+
5
+ AUTHORS:
6
+
7
+ - David Roe
8
+
9
+ - Jean-Pierre Flori
10
+
11
+ - Peter Bruin
12
+ """
13
+
14
+ from sage.misc.fast_methods import WithEqualityById
15
+ from sage.misc.lazy_import import lazy_import
16
+ from sage.structure.sage_object import SageObject
17
+ from sage.rings.finite_rings.finite_field_constructor import FiniteField
18
+ from sage.rings.integer import Integer
19
+
20
+ lazy_import('sage.databases.conway', 'ConwayPolynomials')
21
+
22
+
23
+ def conway_polynomial(p, n):
24
+ """
25
+ Return the Conway polynomial of degree `n` over ``GF(p)``.
26
+
27
+ If the requested polynomial is not known, this function raises a
28
+ :exc:`RuntimeError` exception.
29
+
30
+ INPUT:
31
+
32
+ - ``p`` -- prime number
33
+
34
+ - ``n`` -- positive integer
35
+
36
+ OUTPUT:
37
+
38
+ - the Conway polynomial of degree `n` over the finite field
39
+ ``GF(p)``, loaded from a table.
40
+
41
+ .. NOTE::
42
+
43
+ The first time this function is called a table is read from
44
+ disk, which takes a fraction of a second. Subsequent calls do
45
+ not require reloading the table.
46
+
47
+ See also the ``ConwayPolynomials()`` object, which is the table of
48
+ Conway polynomials used by this function.
49
+
50
+ EXAMPLES::
51
+
52
+ sage: conway_polynomial(2,5) # needs conway_polynomials
53
+ x^5 + x^2 + 1
54
+ sage: conway_polynomial(101,5) # needs conway_polynomials
55
+ x^5 + 2*x + 99
56
+ sage: conway_polynomial(97,101) # needs conway_polynomials
57
+ Traceback (most recent call last):
58
+ ...
59
+ RuntimeError: requested Conway polynomial not in database.
60
+ """
61
+ (p, n) = (int(p), int(n))
62
+ R = FiniteField(p)['x']
63
+ try:
64
+ return R(ConwayPolynomials()[p][n])
65
+ except KeyError:
66
+ raise RuntimeError("requested Conway polynomial not in database.")
67
+
68
+
69
+ def exists_conway_polynomial(p, n):
70
+ """
71
+ Check whether the Conway polynomial of degree `n` over ``GF(p)``
72
+ is known.
73
+
74
+ INPUT:
75
+
76
+ - ``p`` -- prime number
77
+
78
+ - ``n`` -- positive integer
79
+
80
+ OUTPUT:
81
+
82
+ - boolean: ``True`` if the Conway polynomial of degree `n` over
83
+ ``GF(p)`` is in the database, ``False`` otherwise.
84
+
85
+ If the Conway polynomial is in the database, it can be obtained
86
+ using the command ``conway_polynomial(p,n)``.
87
+
88
+ EXAMPLES::
89
+
90
+ sage: exists_conway_polynomial(2,3) # needs conway_polynomials
91
+ True
92
+ sage: exists_conway_polynomial(2,-1)
93
+ False
94
+ sage: exists_conway_polynomial(97,200)
95
+ False
96
+ sage: exists_conway_polynomial(6,6)
97
+ False
98
+ """
99
+ try:
100
+ return ConwayPolynomials().has_polynomial(p,n)
101
+ except ImportError:
102
+ return False
103
+
104
+
105
+ class PseudoConwayLattice(WithEqualityById, SageObject):
106
+ r"""
107
+ A pseudo-Conway lattice over a given finite prime field.
108
+
109
+ The Conway polynomial `f_n` of degree `n` over `\Bold{F}_p` is
110
+ defined by the following four conditions:
111
+
112
+ - `f_n` is irreducible.
113
+
114
+ - In the quotient field `\Bold{F}_p[x]/(f_n)`, the element
115
+ `x\bmod f_n` generates the multiplicative group.
116
+
117
+ - The minimal polynomial of `(x\bmod f_n)^{\frac{p^n-1}{p^m-1}}`
118
+ equals the Conway polynomial `f_m`, for every divisor `m` of
119
+ `n`.
120
+
121
+ - `f_n` is lexicographically least among all such polynomials,
122
+ under a certain ordering.
123
+
124
+ The final condition is needed only in order to make the Conway
125
+ polynomial unique. We define a pseudo-Conway lattice to be any
126
+ family of polynomials, indexed by the positive integers,
127
+ satisfying the first three conditions.
128
+
129
+ INPUT:
130
+
131
+ - ``p`` -- prime number
132
+
133
+ - ``use_database`` -- boolean. If ``True``, use actual Conway
134
+ polynomials whenever they are available in the database. If
135
+ ``False``, always compute pseudo-Conway polynomials.
136
+
137
+ EXAMPLES::
138
+
139
+ sage: # needs sage.rings.finite_rings
140
+ sage: from sage.rings.finite_rings.conway_polynomials import PseudoConwayLattice
141
+ sage: PCL = PseudoConwayLattice(2, use_database=False)
142
+ sage: PCL.polynomial(3) # random
143
+ x^3 + x + 1
144
+
145
+ TESTS::
146
+
147
+ sage: from sage.rings.finite_rings.conway_polynomials import PseudoConwayLattice
148
+ sage: PCL = PseudoConwayLattice(3)
149
+ sage: hash(PCL) # random
150
+ 8738829832350
151
+
152
+ sage: from sage.rings.finite_rings.conway_polynomials import PseudoConwayLattice
153
+ sage: PseudoConwayLattice(3) == PseudoConwayLattice(3)
154
+ False
155
+ sage: PseudoConwayLattice(3) != PseudoConwayLattice(3)
156
+ True
157
+ sage: P = PseudoConwayLattice(5)
158
+ sage: P == P
159
+ True
160
+ sage: P != P
161
+ False
162
+ """
163
+ def __init__(self, p, use_database=True):
164
+ """
165
+ TESTS::
166
+
167
+ sage: # needs sage.rings.finite_rings
168
+ sage: from sage.rings.finite_rings.conway_polynomials import PseudoConwayLattice
169
+ sage: PCL = PseudoConwayLattice(3)
170
+ sage: PCL.polynomial(3) # random
171
+ x^3 + 2*x + 1
172
+
173
+ sage: # needs sage.rings.finite_rings
174
+ sage: PCL = PseudoConwayLattice(5, use_database=False)
175
+ sage: PCL.polynomial(12) # random
176
+ x^12 + 4*x^11 + 2*x^10 + 4*x^9 + 2*x^8 + 2*x^7 + 4*x^6 + x^5 + 2*x^4 + 2*x^2 + x + 2
177
+ sage: PCL.polynomial(6) # random
178
+ x^6 + x^5 + 4*x^4 + 3*x^3 + 3*x^2 + 2*x + 2
179
+ sage: PCL.polynomial(11) # random
180
+ x^11 + x^6 + 3*x^3 + 4*x + 3
181
+ """
182
+ self.p = p
183
+ from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
184
+ self.ring = PolynomialRing(FiniteField(p), 'x')
185
+ if use_database:
186
+ try:
187
+ C = ConwayPolynomials()
188
+ except ImportError:
189
+ self.nodes = {}
190
+ else:
191
+ self.nodes = {n: self.ring(C.polynomial(p, n))
192
+ for n in C.degrees(p)}
193
+ else:
194
+ self.nodes = {}
195
+
196
+ def polynomial(self, n):
197
+ r"""
198
+ Return the pseudo-Conway polynomial of degree `n` in this
199
+ lattice.
200
+
201
+ INPUT:
202
+
203
+ - ``n`` -- positive integer
204
+
205
+ OUTPUT: a pseudo-Conway polynomial of degree `n` for the prime `p`
206
+
207
+ ALGORITHM:
208
+
209
+ Uses an algorithm described in [HL1999]_, modified to find
210
+ pseudo-Conway polynomials rather than Conway polynomials. The
211
+ major difference is that we stop as soon as we find a
212
+ primitive polynomial.
213
+
214
+ EXAMPLES::
215
+
216
+ sage: # needs sage.rings.finite_rings
217
+ sage: from sage.rings.finite_rings.conway_polynomials import PseudoConwayLattice
218
+ sage: PCL = PseudoConwayLattice(2, use_database=False)
219
+ sage: PCL.polynomial(3) # random
220
+ x^3 + x + 1
221
+ sage: PCL.polynomial(4) # random
222
+ x^4 + x^3 + 1
223
+ sage: PCL.polynomial(60) # random
224
+ x^60 + x^59 + x^58 + x^55 + x^54 + x^53 + x^52 + x^51 + x^48 + x^46 + x^45 + x^42 + x^41 + x^39 + x^38 + x^37 + x^35 + x^32 + x^31 + x^30 + x^28 + x^24 + x^22 + x^21 + x^18 + x^17 + x^16 + x^15 + x^14 + x^10 + x^8 + x^7 + x^5 + x^3 + x^2 + x + 1
225
+ """
226
+ if n in self.nodes:
227
+ return self.nodes[n]
228
+
229
+ p = self.p
230
+ n = Integer(n)
231
+
232
+ if n == 1:
233
+ f = self.ring.gen() - FiniteField(p).multiplicative_generator()
234
+ self.nodes[1] = f
235
+ return f
236
+
237
+ # Work in an arbitrary field K of order p**n.
238
+ K = FiniteField(p**n, names='a')
239
+
240
+ # TODO: something like the following
241
+ # gcds = [n.gcd(d) for d in self.nodes.keys()]
242
+ # xi = { m: (...) for m in gcds }
243
+ xi = {q: self.polynomial(n//q).any_root(K, n//q, assume_squarefree=True, assume_equal_deg=True)
244
+ for q in n.prime_divisors()}
245
+
246
+ # The following is needed to ensure that in the concrete instantiation
247
+ # of the "new" extension all previous choices are compatible.
248
+ _frobenius_shift(K, xi)
249
+
250
+ # Construct a compatible element having order the lcm of orders
251
+ q, x = xi.popitem()
252
+ v = p**(n//q) - 1
253
+ for q, xitem in xi.items():
254
+ w = p**(n//q) - 1
255
+ g, alpha, beta = v.xgcd(w)
256
+ x = x**beta * xitem**alpha
257
+ v = v.lcm(w)
258
+
259
+ r = p**n - 1
260
+ # Get the missing part of the order to be primitive
261
+ g = r // v
262
+ # Iterate through g-th roots of x until a primitive one is found
263
+ z = x.nth_root(g)
264
+ root = K.multiplicative_generator()**v
265
+ while z.multiplicative_order() != r:
266
+ z *= root
267
+ # The following should work but tries to create a huge list
268
+ # whose length overflows Python's ints for large parameters
269
+ #Z = x.nth_root(g, all=True)
270
+ #for z in Z:
271
+ # if z.multiplicative_order() == r:
272
+ # break
273
+ f = z.minimal_polynomial()
274
+ self.nodes[n] = f
275
+ return f
276
+
277
+ def check_consistency(self, n):
278
+ """
279
+ Check that the pseudo-Conway polynomials of degree dividing
280
+ `n` in this lattice satisfy the required compatibility
281
+ conditions.
282
+
283
+ EXAMPLES::
284
+
285
+ sage: # needs sage.rings.finite_rings
286
+ sage: from sage.rings.finite_rings.conway_polynomials import PseudoConwayLattice
287
+ sage: PCL = PseudoConwayLattice(2, use_database=False)
288
+ sage: PCL.check_consistency(6)
289
+ sage: PCL.check_consistency(60) # long time
290
+ """
291
+ p = self.p
292
+ K = FiniteField(p**n, modulus=self.polynomial(n), names='a')
293
+ a = K.gen()
294
+ for m in n.divisors():
295
+ assert (a**((p**n-1)//(p**m-1))).minimal_polynomial() == self.polynomial(m)
296
+
297
+
298
+ def _find_pow_of_frobenius(p, n, x, y):
299
+ """
300
+ Find the power of Frobenius which yields `x` when applied to `y`.
301
+
302
+ INPUT:
303
+
304
+ - ``p`` -- prime number
305
+
306
+ - ``n`` -- positive integer
307
+
308
+ - ``x`` -- an element of a field `K` of `p^n` elements so that
309
+ the multiplicative order of `x` is `p^n - 1`
310
+
311
+ - ``y`` -- an element of `K` with the same minimal polynomial as `x`
312
+
313
+ OUTPUT: an element `i` of the integers modulo `n` such that `x = y^{p^i}`
314
+
315
+ EXAMPLES::
316
+
317
+ sage: # needs sage.rings.finite_rings
318
+ sage: from sage.rings.finite_rings.conway_polynomials import _find_pow_of_frobenius
319
+ sage: K.<a> = GF(3^14)
320
+ sage: x = K.multiplicative_generator()
321
+ sage: y = x^27
322
+ sage: _find_pow_of_frobenius(3, 14, x, y)
323
+ 11
324
+ """
325
+ from .integer_mod import mod
326
+ for i in range(n):
327
+ if x == y:
328
+ break
329
+ y = y**p
330
+ else:
331
+ raise RuntimeError("No appropriate power of Frobenius found")
332
+ return mod(i, n)
333
+
334
+
335
+ def _crt_non_coprime(running, a):
336
+ """
337
+ Extension of the ``crt`` method of ``IntegerMod`` to the case of
338
+ non-relatively prime modulus.
339
+
340
+ EXAMPLES::
341
+
342
+ sage: from sage.rings.finite_rings.conway_polynomials import _crt_non_coprime
343
+ sage: a = _crt_non_coprime(mod(14, 18), mod(20,30)); a
344
+ 50
345
+ sage: a.modulus()
346
+ 90
347
+ sage: _crt_non_coprime(mod(13, 18), mod(20,30))
348
+ Traceback (most recent call last):
349
+ ...
350
+ AssertionError
351
+ """
352
+ g = running.modulus().gcd(a.modulus())
353
+ if g == 1:
354
+ return running.crt(a)
355
+ else:
356
+ assert running % g == a % g
357
+ running_modulus = running.modulus()
358
+ a_modulus = a.modulus()
359
+ for qq in g.prime_divisors():
360
+ a_val_unit = a_modulus.val_unit(qq)
361
+ running_val_unit = running_modulus.val_unit(qq)
362
+ if a_val_unit[0] > running_val_unit[0]:
363
+ running_modulus = running_val_unit[1]
364
+ else:
365
+ a_modulus = a_val_unit[1]
366
+ return (running % running_modulus).crt(a % a_modulus)
367
+
368
+
369
+ def _frobenius_shift(K, generators, check_only=False):
370
+ """
371
+ Given a field `K` of degree `n` over ``GF(p)`` and a dictionary
372
+ holding, for each divisor `q` of `n`, an element with minimal
373
+ polynomial a pseudo-Conway polynomial of degree `n/q`, modify
374
+ these generators into a compatible system.
375
+
376
+ Such a system of generators is said to be compatible if for each
377
+ pair of prime divisors `q_1` and `q_2` and each common divisor `m`
378
+ of `n/q_1` and `n/q_2`, the equality
379
+
380
+ ``generators[q1]^((p^(n/q1)-1)/(p^m-1)) == generators[q2]^((p^(n/q2)-1)/(p^m-1))``
381
+
382
+ holds.
383
+
384
+ INPUT:
385
+
386
+ - ``K`` -- a finite field of degree `n` over its prime field
387
+
388
+ - ``generators`` -- dictionary, indexed by prime divisors `q` of
389
+ `n`, whose entries are elements of `K` satisfying the `n/q`
390
+ pseudo-Conway polynomial
391
+
392
+ - ``check_only`` -- if ``True``, just check that the given
393
+ generators form a compatible system
394
+
395
+ EXAMPLES::
396
+
397
+ sage: # needs sage.libs.ntl sage.rings.finite_rings
398
+ sage: R.<x> = GF(2)[]
399
+ sage: f30 = x^30 + x^28 + x^27 + x^25 + x^24 + x^20 + x^19 + x^18 + x^16 + x^15 + x^12 + x^10 + x^7 + x^2 + 1
400
+ sage: f20 = x^20 + x^19 + x^15 + x^13 + x^12 + x^11 + x^9 + x^8 + x^7 + x^4 + x^2 + x + 1
401
+ sage: f12 = x^12 + x^10 + x^9 + x^8 + x^4 + x^2 + 1
402
+ sage: K.<a> = GF(2^60, modulus='first_lexicographic')
403
+ sage: x30 = f30.roots(K, multiplicities=False)[0]
404
+ sage: x20 = f20.roots(K, multiplicities=False)[0]
405
+ sage: x12 = f12.roots(K, multiplicities=False)[0]
406
+ sage: generators = {2: x30, 3: x20, 5: x12}
407
+ sage: from sage.rings.finite_rings.conway_polynomials import _frobenius_shift, _find_pow_of_frobenius
408
+ sage: _frobenius_shift(K, generators)
409
+ sage: _find_pow_of_frobenius(2, 30, x30, generators[2])
410
+ 0
411
+ sage: _find_pow_of_frobenius(2, 20, x20, generators[3])
412
+ 13
413
+ sage: _find_pow_of_frobenius(2, 12, x12, generators[5])
414
+ 8
415
+ """
416
+ if len(generators) == 1:
417
+ return generators
418
+ p = K.characteristic()
419
+ n = K.degree()
420
+ compatible = {}
421
+ from .integer_mod import mod
422
+ for m in n.divisors():
423
+ compatible[m] = {}
424
+ for q, x in generators.items():
425
+ for m in (n//q).divisors():
426
+ compatible[m][q] = x**((p**(n//q)-1)//(p**m-1))
427
+ if check_only:
428
+ for m in n.divisors():
429
+ try:
430
+ q, x = compatible[m].popitem()
431
+ except KeyError:
432
+ break
433
+ for xx in compatible[m].values():
434
+ assert x == xx
435
+ return
436
+ crt = {}
437
+ qlist = sorted(generators.keys())
438
+ for j in range(1, len(qlist)):
439
+ for i in range(j):
440
+ crt[(i, j)] = []
441
+ for m in n.divisors():
442
+ mqlist = sorted(compatible[m].keys())
443
+ for k in range(1,len(mqlist)):
444
+ j = qlist.index(mqlist[k])
445
+ i = qlist.index(mqlist[k-1])
446
+ crt[(i,j)].append(_find_pow_of_frobenius(p, m, compatible[m][qlist[j]], compatible[m][qlist[i]]))
447
+ for i, j in list(crt):
448
+ L = crt[(i,j)]
449
+ running = mod(0, 1)
450
+ for a in L:
451
+ running = _crt_non_coprime(running, a)
452
+ crt[(i,j)] = [(mod(running, qq**(running.modulus().valuation(qq))),
453
+ running.modulus().valuation(qq)) for qq in qlist]
454
+ crt[(j,i)] = [(-a, level) for a, level in crt[(i,j)]]
455
+ # Let x_j be the power of Frobenius we apply to generators[qlist[j]], for 0 < j < len(qlist)
456
+ # We have some direct conditions on the x_j: x_j reduces to each entry in crt[(0,j)].
457
+ # But we also have the equations x_j - x_i reduces to each entry in crt[(i,j)].
458
+ # We solve for x_j one prime at a time. For each prime, we have an equations of the form
459
+ # x_j - x_i = c_ij. The modulus of the currently known value of x_j, x_i and c_ij will all be powers
460
+ # (possibly 0, possibly different) of the same prime.
461
+
462
+ # We can set x_0=0 everywhere, can get an initial setting of x_j from the c_0j.
463
+ # We go through prime by prime.
464
+ import bisect
465
+ frob_powers = [mod(0, 1) for _ in qlist]
466
+
467
+ def find_leveller(qindex, level, x, xleveled, searched, i):
468
+ searched[i] = True
469
+ crt_possibles = []
470
+ for j in range(1,len(qlist)):
471
+ if i == j:
472
+ continue
473
+ if crt[(i,j)][qindex][1] >= level:
474
+ if xleveled[j]:
475
+ return [j]
476
+ elif j not in searched:
477
+ crt_possibles.append(j)
478
+ for j in crt_possibles:
479
+ path = find_leveller(qindex, level, x, xleveled, searched, j)
480
+ if path is not None:
481
+ path.append(j)
482
+ return path
483
+ return None
484
+
485
+ def propagate_levelling(qindex, level, x, xleveled, i):
486
+ for j in range(1, len(qlist)):
487
+ if i == j:
488
+ continue
489
+ if not xleveled[j] and crt[(i,j)][qindex][1] >= level:
490
+ newxj = x[i][0] + crt[(i,j)][qindex][0]
491
+ x[j] = (newxj, min(x[i][1], crt[(i,j)][qindex][1]))
492
+ xleveled[j] = True
493
+ propagate_levelling(qindex, level, x, xleveled, j)
494
+
495
+ for qindex in range(len(qlist)):
496
+ q = qlist[qindex]
497
+ # We include the initial 0 to match up our indexing with crt.
498
+ x = [0] + [crt[(0,j)][qindex] for j in range(1,len(qlist))]
499
+ # We first check that our equations are consistent and
500
+ # determine which powers of q occur as moduli.
501
+ levels = []
502
+ for j in range(2, len(qlist)):
503
+ for i in range(j):
504
+ # we need crt[(0,j)] = crt[(0,i)] + crt[(i,j)]
505
+ if i != 0:
506
+ assert x[j][0] == x[i][0] + crt[(i,j)][qindex][0]
507
+ level = crt[(i,j)][qindex][1]
508
+ if level > 0:
509
+ ins = bisect.bisect_left(levels,level)
510
+ if ins == len(levels):
511
+ levels.append(level)
512
+ elif levels[ins] != level:
513
+ levels.insert(ins, level)
514
+ for level in levels:
515
+ xleveled = [0] + [x[i][1] >= level for i in range(1,len(qlist))]
516
+ while True:
517
+ try:
518
+ i = xleveled.index(False, 1)
519
+ searched = {}
520
+ levelling_path = find_leveller(qindex, level, x, xleveled, searched, i)
521
+ if levelling_path is None:
522
+ # Any lift will work, since there are no constraints.
523
+ x[i] = (mod(x[i][0].lift(), q**level), level)
524
+ xleveled[i] = True
525
+ propagate_levelling(qindex, level, x, xleveled, i)
526
+ else:
527
+ levelling_path.append(i)
528
+ for m in range(1,len(path)):
529
+ # This point on the path may have already
530
+ # been leveled in a previous propagation.
531
+ if not xleveled[path[m]]:
532
+ newx = x[path[m-1]][0] + crt[(path[m-1],path[m])][qindex][0]
533
+ x[path[m]] = (newx, min(x[path[m-1]][1], crt[(path[m-1],path[m])][qindex][1]))
534
+ xleveled[path[m]] = True
535
+ propagate_levelling(qindex, level, x, xleveled, path[m])
536
+ except ValueError:
537
+ break
538
+ for j in range(1,len(qlist)):
539
+ frob_powers[j] = frob_powers[j].crt(x[j][0])
540
+ for j in range(1, len(qlist)):
541
+ generators[qlist[j]] = generators[qlist[j]]**(p**(-frob_powers[j]).lift())
542
+ _frobenius_shift(K, generators, check_only=True)
@@ -0,0 +1,12 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ from sage.structure.element cimport CommutativeRingElement
3
+ from sage.structure.sage_object cimport SageObject
4
+
5
+ cdef class FiniteRingElement(CommutativeRingElement):
6
+ pass
7
+
8
+ cdef class FinitePolyExtElement(FiniteRingElement):
9
+ pass
10
+
11
+ cdef class Cache_base(SageObject):
12
+ cpdef FinitePolyExtElement fetch_int(self, number)