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,827 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ # sage.doctest: needs sage.rings.finite_rings
3
+ r"""
4
+ Finite fields
5
+
6
+ Sage supports arithmetic in finite prime and extension fields.
7
+ Several implementation for prime fields are implemented natively in
8
+ Sage for several sizes of primes `p`. These implementations
9
+ are
10
+
11
+
12
+ - ``sage.rings.finite_rings.integer_mod.IntegerMod_int``,
13
+
14
+ - ``sage.rings.finite_rings.integer_mod.IntegerMod_int64``, and
15
+
16
+ - ``sage.rings.finite_rings.integer_mod.IntegerMod_gmp``.
17
+
18
+
19
+ Small extension fields of cardinality `< 2^{16}` are
20
+ implemented using tables of Zech logs via the Givaro C++ library
21
+ (``sage.rings.finite_rings.finite_field_givaro.FiniteField_givaro``).
22
+ While this representation is very fast it is limited to finite
23
+ fields of small cardinality. Larger finite extension fields of
24
+ order `q >= 2^{16}` are internally represented as
25
+ polynomials over smaller finite prime fields. If the
26
+ characteristic of such a field is 2 then NTL is used internally to
27
+ represent the field
28
+ (``sage.rings.finite_rings.finite_field_ntl_gf2e.FiniteField_ntl_gf2e``).
29
+ In all other case the PARI C library is used
30
+ (``sage.rings.finite_rings.finite_field_pari_ffelt.FiniteField_pari_ffelt``).
31
+
32
+ However, this distinction is internal only and the user usually
33
+ does not have to worry about it because consistency across all
34
+ implementations is aimed for. In all extension field
35
+ implementations the user may either specify a minimal polynomial or
36
+ leave the choice to Sage.
37
+
38
+ For small finite fields the default choice are Conway polynomials.
39
+
40
+ The Conway polynomial `C_n` is the lexicographically first
41
+ monic irreducible, primitive polynomial of degree `n` over
42
+ `GF(p)` with the property that for a root `\alpha`
43
+ of `C_n` we have that
44
+ `\beta=
45
+ \alpha^{(p^n - 1)/(p^m - 1)}` is a root of
46
+ `C_m` for all `m` dividing `n`. Sage
47
+ contains a database of Conway polynomials which also can be queried
48
+ independently of finite field construction.
49
+
50
+ A pseudo-Conway polynomial satisfies all of the conditions required
51
+ of a Conway polynomial except the condition that it is lexicographically
52
+ first. They are therefore not unique. If no variable name is
53
+ specified for an extension field, Sage will fit the finite field
54
+ into a compatible lattice of field extensions defined by pseudo-Conway
55
+ polynomials. This lattice is stored in an
56
+ :class:`~sage.rings.algebraic_closure_finite_field.AlgebraicClosureFiniteField`
57
+ object; different algebraic closure objects can be created by using
58
+ a different ``prefix`` keyword to the finite field constructor.
59
+
60
+ Note that the computation of pseudo-Conway polynomials is expensive
61
+ when the degree is large and highly composite. If a variable
62
+ name is specified then a random polynomial is used instead, which
63
+ will be much faster to find.
64
+
65
+ While Sage supports basic arithmetic in finite fields some more
66
+ advanced features for computing with finite fields are still not
67
+ implemented. For instance, Sage does not calculate embeddings of
68
+ finite fields yet.
69
+
70
+ EXAMPLES::
71
+
72
+ sage: k = GF(5); type(k)
73
+ <class 'sage.rings.finite_rings.finite_field_prime_modn.FiniteField_prime_modn_with_category'>
74
+
75
+ ::
76
+
77
+ sage: k = GF(5^2,'c'); type(k) # needs sage.libs.linbox
78
+ <class 'sage.rings.finite_rings.finite_field_givaro.FiniteField_givaro_with_category'>
79
+
80
+ One can also give the cardinality `q=p^n` as the tuple `(p,n)`::
81
+
82
+ sage: k = GF((5, 2),'c'); k
83
+ Finite Field in c of size 5^2
84
+
85
+ ::
86
+
87
+ sage: k = GF(2^16,'c'); type(k) # needs sage.libs.ntl
88
+ <class 'sage.rings.finite_rings.finite_field_ntl_gf2e.FiniteField_ntl_gf2e_with_category'>
89
+
90
+ ::
91
+
92
+ sage: k = GF((3, 16),'c'); type(k)
93
+ <class 'sage.rings.finite_rings.finite_field_pari_ffelt.FiniteField_pari_ffelt_with_category'>
94
+
95
+ Finite Fields support iteration, starting with 0.
96
+
97
+ ::
98
+
99
+ sage: k = GF(9, 'a')
100
+ sage: for i,x in enumerate(k): print("{} {}".format(i, x))
101
+ 0 0
102
+ 1 a
103
+ 2 a + 1
104
+ 3 2*a + 1
105
+ 4 2
106
+ 5 2*a
107
+ 6 2*a + 2
108
+ 7 a + 2
109
+ 8 1
110
+ sage: for a in GF(5):
111
+ ....: print(a)
112
+ 0
113
+ 1
114
+ 2
115
+ 3
116
+ 4
117
+
118
+ We output the base rings of several finite fields.
119
+
120
+ ::
121
+
122
+ sage: k = GF(3); type(k)
123
+ <class 'sage.rings.finite_rings.finite_field_prime_modn.FiniteField_prime_modn_with_category'>
124
+ sage: k.base_ring()
125
+ Finite Field of size 3
126
+
127
+ ::
128
+
129
+ sage: # needs sage.libs.linbox
130
+ sage: k = GF(9,'alpha'); type(k)
131
+ <class 'sage.rings.finite_rings.finite_field_givaro.FiniteField_givaro_with_category'>
132
+ sage: k.base_ring()
133
+ Finite Field of size 3
134
+
135
+ ::
136
+
137
+ sage: k = GF((3, 40),'b'); type(k)
138
+ <class 'sage.rings.finite_rings.finite_field_pari_ffelt.FiniteField_pari_ffelt_with_category'>
139
+ sage: k.base_ring()
140
+ Finite Field of size 3
141
+
142
+ Further examples::
143
+
144
+ sage: GF(2).is_field()
145
+ True
146
+ sage: GF(next_prime(10^20)).is_field()
147
+ True
148
+ sage: GF(19^20,'a').is_field()
149
+ True
150
+ sage: GF(8,'a').is_field()
151
+ True
152
+
153
+ AUTHORS:
154
+
155
+ - William Stein: initial version
156
+
157
+ - Robert Bradshaw: prime field implementation
158
+
159
+ - Martin Albrecht: Givaro and ntl.GF2E implementations
160
+ """
161
+
162
+ # ****************************************************************************
163
+ # Copyright (C) 2006 William Stein <wstein@gmail.com>
164
+ #
165
+ # Distributed under the terms of the GNU General Public License (GPL)
166
+ #
167
+ # This code is distributed in the hope that it will be useful,
168
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
169
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
170
+ # General Public License for more details.
171
+ #
172
+ # The full text of the GPL is available at:
173
+ #
174
+ # https://www.gnu.org/licenses/
175
+ # ****************************************************************************
176
+
177
+ from collections import defaultdict
178
+ from sage.structure.category_object import normalize_names
179
+ from sage.rings.polynomial.polynomial_element import Polynomial
180
+ from sage.rings.integer import Integer
181
+
182
+ # the import below is just a redirection
183
+ from sage.rings.finite_rings.finite_field_base import is_FiniteField
184
+ assert is_FiniteField # just to silent pyflakes
185
+
186
+ try:
187
+ # We don't late import this because this means trouble with the Givaro library
188
+ # On a Macbook Pro OSX 10.5.8, this manifests as a Bus Error on exiting Sage.
189
+ # TODO: figure out why
190
+ from .finite_field_givaro import FiniteField_givaro
191
+ except ImportError:
192
+ FiniteField_givaro = None
193
+
194
+ try:
195
+ from .finite_field_ntl_gf2e import FiniteField_ntl_gf2e
196
+ except ImportError:
197
+ FiniteField_ntl_gf2e = None
198
+
199
+
200
+ from sage.structure.factory import UniqueFactory
201
+
202
+
203
+ class FiniteFieldFactory(UniqueFactory):
204
+ """
205
+ Return the globally unique finite field of given order with
206
+ generator labeled by the given name and possibly with given
207
+ modulus.
208
+
209
+ INPUT:
210
+
211
+ - ``order`` -- a prime power
212
+
213
+ - ``name`` -- string, optional. Note that there can be a
214
+ substantial speed penalty (in creating extension fields) when
215
+ omitting the variable name, since doing so triggers the
216
+ computation of pseudo-Conway polynomials in order to define a
217
+ coherent lattice of extensions of the prime field. The speed
218
+ penalty grows with the size of extension degree and with
219
+ the number of factors of the extension degree.
220
+
221
+ - ``modulus`` -- (optional) either a defining polynomial for the
222
+ field, or a string specifying an algorithm to use to generate
223
+ such a polynomial. If ``modulus`` is a string, it is passed to
224
+ :meth:`~sage.rings.polynomial.irreducible_element()` as the
225
+ parameter ``algorithm``; see there for the permissible values of
226
+ this parameter. In particular, you can specify
227
+ ``modulus="primitive"`` to get a primitive polynomial. You
228
+ may not specify a modulus if you do not specify a variable name.
229
+
230
+ - ``impl`` -- (optional) a string specifying the implementation of
231
+ the finite field. Possible values are:
232
+
233
+ - ``'modn'`` -- ring of integers modulo `p` (only for prime fields)
234
+
235
+ - ``'givaro'`` -- Givaro, which uses Zech logs (only for fields
236
+ of at most 65521 elements)
237
+
238
+ - ``'ntl'`` -- NTL using GF2X (only in characteristic 2)
239
+
240
+ - ``'pari'`` or ``'pari_ffelt'`` -- PARI's ``FFELT`` type (only
241
+ for extension fields)
242
+
243
+ - ``elem_cache`` -- (default: order < 500) cache all elements to
244
+ avoid creation time; ignored unless ``impl='givaro'``
245
+
246
+ - ``repr`` -- (default: ``'poly'``) ignored unless ``impl='givaro'``;
247
+ controls the way elements are printed to the user:
248
+
249
+ - 'log': repr is
250
+ :meth:`~sage.rings.finite_rings.element_givaro.FiniteField_givaroElement.log_repr()`
251
+
252
+ - 'int': repr is
253
+ :meth:`~sage.rings.finite_rings.element_givaro.FiniteField_givaroElement.int_repr()`
254
+
255
+ - 'poly': repr is
256
+ :meth:`~sage.rings.finite_rings.element_givaro.FiniteField_givaroElement.poly_repr()`
257
+
258
+ - ``check_irreducible`` -- verify that the polynomial modulus is
259
+ irreducible
260
+
261
+ - ``proof`` -- boolean (default: ``True``); if ``True``, use provable
262
+ primality test; otherwise only use pseudoprimality test
263
+
264
+ ALIAS: You can also use ``GF`` instead of ``FiniteField`` -- they
265
+ are identical.
266
+
267
+ EXAMPLES::
268
+
269
+ sage: k.<a> = FiniteField(9); k
270
+ Finite Field in a of size 3^2
271
+ sage: parent(a)
272
+ Finite Field in a of size 3^2
273
+ sage: charpoly(a, 'y')
274
+ y^2 + 2*y + 2
275
+
276
+ We illustrate the proof flag. The following example would hang
277
+ for a very long time if we didn't use ``proof=False``.
278
+
279
+ .. NOTE::
280
+
281
+ Magma only supports ``proof=False`` for making finite fields,
282
+ so falsely appears to be faster than Sage -- see :issue:`10975`.
283
+
284
+ ::
285
+
286
+ sage: k = FiniteField(10^1000 + 453, proof=False)
287
+ sage: k = FiniteField((10^1000 + 453)^2, 'a', proof=False) # long time -- about 5 seconds
288
+
289
+ ::
290
+
291
+ sage: F.<x> = GF(5)[]
292
+ sage: K.<a> = GF(5**5, name='a', modulus=x^5 - x +1 )
293
+ sage: f = K.modulus(); f
294
+ x^5 + 4*x + 1
295
+ sage: type(f) # needs sage.libs.flint
296
+ <class 'sage.rings.polynomial.polynomial_zmod_flint.Polynomial_zmod_flint'>
297
+
298
+ By default, the given generator is not guaranteed to be primitive
299
+ (a generator of the multiplicative group), use
300
+ ``modulus="primitive"`` if you need this::
301
+
302
+ sage: K.<a> = GF(5^45)
303
+ sage: a.multiplicative_order()
304
+ 7105427357601001858711242675781
305
+ sage: a.is_square()
306
+ True
307
+ sage: K.<b> = GF(5^45, modulus='primitive')
308
+ sage: b.multiplicative_order()
309
+ 28421709430404007434844970703124
310
+
311
+ The modulus must be irreducible::
312
+
313
+ sage: K.<a> = GF(5**5, name='a', modulus=x^5 - x)
314
+ Traceback (most recent call last):
315
+ ...
316
+ ValueError: finite field modulus must be irreducible but it is not
317
+
318
+ You can't accidentally fool the constructor into thinking the
319
+ modulus is irreducible when it is not, since it actually tests
320
+ irreducibility modulo `p`. Also, the modulus has to be of the
321
+ right degree (this is always checked)::
322
+
323
+ sage: F.<x> = QQ[]
324
+ sage: factor(x^5 + 2)
325
+ x^5 + 2
326
+ sage: K.<a> = GF(5^5, modulus=x^5 + 2)
327
+ Traceback (most recent call last):
328
+ ...
329
+ ValueError: finite field modulus must be irreducible but it is not
330
+ sage: K.<a> = GF(5^5, modulus=x^3 + 3*x + 3, check_irreducible=False)
331
+ Traceback (most recent call last):
332
+ ...
333
+ ValueError: the degree of the modulus does not equal the degree of the field
334
+
335
+ Any type which can be converted to the polynomial ring `GF(p)[x]`
336
+ is accepted as modulus::
337
+
338
+ sage: K.<a> = GF(13^3, modulus=[1,0,0,2])
339
+ sage: K.<a> = GF(13^10, modulus=pari("ffinit(13,10)"))
340
+ sage: var('x') # needs sage.symbolic
341
+ x
342
+ sage: K.<a> = GF(13^2, modulus=x^2 - 2) # needs sage.symbolic
343
+ sage: K.<a> = GF(13^2, modulus=sin(x)) # needs sage.symbolic
344
+ Traceback (most recent call last):
345
+ ...
346
+ TypeError: self must be a numeric expression
347
+
348
+ If you wish to live dangerously, you can tell the constructor not
349
+ to test irreducibility using ``check_irreducible=False``, but this
350
+ can easily lead to crashes and hangs -- so do not do it unless you
351
+ know that the modulus really is irreducible!
352
+
353
+ ::
354
+
355
+ sage: K.<a> = GF(5**2, name='a', modulus=x^2 + 2, check_irreducible=False) # needs sage.symbolic
356
+
357
+ Even for prime fields, you can specify a modulus. This will not
358
+ change how Sage computes in this field, but it will change the
359
+ result of the :meth:`modulus` and :meth:`gen` methods::
360
+
361
+ sage: k.<a> = GF(5, modulus='primitive')
362
+ sage: k.modulus()
363
+ x + 3
364
+ sage: a
365
+ 2
366
+
367
+ The order of a finite field must be a prime power::
368
+
369
+ sage: GF(1)
370
+ Traceback (most recent call last):
371
+ ...
372
+ ValueError: the order of a finite field must be at least 2
373
+ sage: GF(100)
374
+ Traceback (most recent call last):
375
+ ...
376
+ ValueError: the order of a finite field must be a prime power
377
+
378
+ Finite fields with explicit random modulus are not cached::
379
+
380
+ sage: k.<a> = GF(5**10, modulus='random')
381
+ sage: n.<a> = GF(5**10, modulus='random')
382
+ sage: while k.modulus() == n.modulus():
383
+ ....: n.<a> = GF(5**10, modulus='random')
384
+ sage: n is k
385
+ False
386
+ sage: GF(5**10, 'a') is GF(5**10, 'a')
387
+ True
388
+
389
+ We check that various ways of creating the same finite field yield
390
+ the same object, which is cached::
391
+
392
+ sage: K = GF(7, 'a')
393
+ sage: L = GF(7, 'b')
394
+ sage: K is L # name is ignored for prime fields
395
+ True
396
+ sage: K is GF(7, modulus=K.modulus())
397
+ True
398
+ sage: K = GF(4,'a'); K.modulus()
399
+ x^2 + x + 1
400
+ sage: L = GF(4,'a', K.modulus())
401
+ sage: K is L
402
+ True
403
+ sage: M = GF(4,'a', K.modulus().change_variable_name('y'))
404
+ sage: K is M
405
+ True
406
+
407
+ You may print finite field elements as integers. This currently
408
+ only works if the order of field is `<2^{16}`, though::
409
+
410
+ sage: k.<a> = GF(2^8, repr='int')
411
+ sage: a
412
+ 2
413
+
414
+ The following demonstrate coercions for finite fields using Conway
415
+ polynomials::
416
+
417
+ sage: k = GF(5^2); a = k.gen()
418
+ sage: l = GF(5^5); b = l.gen()
419
+ sage: a + b
420
+ 3*z10^5 + z10^4 + z10^2 + 3*z10 + 1
421
+
422
+ Note that embeddings are compatible in lattices of such finite
423
+ fields::
424
+
425
+ sage: m = GF(5^3); c = m.gen()
426
+ sage: (a+b)+c == a+(b+c)
427
+ True
428
+ sage: (a*b)*c == a*(b*c)
429
+ True
430
+ sage: from sage.categories.pushout import pushout
431
+ sage: n = pushout(k, l)
432
+ sage: o = pushout(l, m)
433
+ sage: q = pushout(n, o)
434
+ sage: q(o(b)) == q(n(b))
435
+ True
436
+
437
+ Another check that embeddings are defined properly::
438
+
439
+ sage: k = GF(3**10)
440
+ sage: l = GF(3**20)
441
+ sage: l(k.gen()**10) == l(k.gen())**10
442
+ True
443
+
444
+ Using pseudo-Conway polynomials is slow for highly
445
+ composite extension degrees::
446
+
447
+ sage: k = GF(3^120) # long time (about 3 seconds)
448
+ sage: GF(3^40).gen().minimal_polynomial()(k.gen()^((3^120-1)/(3^40-1))) # long time (because of previous line)
449
+ 0
450
+
451
+ Before :issue:`17569`, the boolean keyword argument ``conway``
452
+ was required when creating finite fields without a variable
453
+ name. This keyword argument is now removed (:issue:`21433`).
454
+ You can still pass in ``prefix`` as an argument, which has the
455
+ effect of changing the variable name of the algebraic closure::
456
+
457
+ sage: K = GF(3^10, prefix='w'); L = GF(3^10); K is L
458
+ False
459
+ sage: K.variable_name(), L.variable_name()
460
+ ('w10', 'z10')
461
+ sage: list(K.polynomial()) == list(L.polynomial())
462
+ True
463
+
464
+ TESTS:
465
+
466
+ Check that :issue:`16934` has been fixed::
467
+
468
+ sage: k1.<a> = GF(17^14, impl='pari')
469
+ sage: _ = a/2
470
+ sage: k2.<a> = GF(17^14, impl='pari')
471
+ sage: k1 is k2
472
+ True
473
+
474
+ Check that :issue:`21433` has been fixed::
475
+
476
+ sage: K = GF(5^2)
477
+ sage: L = GF(5^4)
478
+ sage: from sage.categories.pushout import pushout
479
+ sage: pushout(K,L) is L
480
+ True
481
+
482
+ Check that :issue:`25182` has been fixed::
483
+
484
+ sage: GF(next_prime(2^63)^6)
485
+ Finite Field in z6 of size 9223372036854775837^6
486
+
487
+ Check that :issue:`31547` has been fixed::
488
+
489
+ sage: q=2**152
490
+ sage: GF(q,'a',modulus='primitive') == GF(q,'a',modulus='primitive')
491
+ True
492
+ """
493
+ def __init__(self, *args, **kwds):
494
+ """
495
+ Initialization.
496
+
497
+ EXAMPLES::
498
+
499
+ sage: TestSuite(GF).run()
500
+ """
501
+ self._modulus_cache = defaultdict(dict)
502
+ super().__init__(*args, **kwds)
503
+
504
+ def create_key_and_extra_args(self, order, name=None, modulus=None, names=None,
505
+ impl=None, proof=None,
506
+ check_prime=True, check_irreducible=True,
507
+ prefix=None, repr=None, elem_cache=None,
508
+ **kwds):
509
+ """
510
+ EXAMPLES::
511
+
512
+ sage: GF.create_key_and_extra_args(9, 'a') # needs sage.libs.linbox
513
+ ((9, ('a',), x^2 + 2*x + 2, 'givaro', 3, 2, True, None, 'poly', True, True, True), {})
514
+
515
+ The order `q` can also be given as a pair `(p,n)`::
516
+
517
+ sage: GF.create_key_and_extra_args((3, 2), 'a') # needs sage.libs.linbox
518
+ ((9, ('a',), x^2 + 2*x + 2, 'givaro', 3, 2, True, None, 'poly', True, True, True), {})
519
+
520
+ We do not take invalid keyword arguments and raise a value error
521
+ to better ensure uniqueness::
522
+
523
+ sage: GF.create_key_and_extra_args(9, 'a', foo='value')
524
+ Traceback (most recent call last):
525
+ ...
526
+ TypeError: ...create_key_and_extra_args() got an unexpected keyword argument 'foo'
527
+
528
+ Moreover, ``repr`` and ``elem_cache`` are ignored when not
529
+ using givaro::
530
+
531
+ sage: GF.create_key_and_extra_args(16, 'a', impl='ntl', repr='poly') # needs sage.libs.ntl
532
+ ((16, ('a',), x^4 + x + 1, 'ntl', 2, 4, True, None, None, None, True, True), {})
533
+ sage: GF.create_key_and_extra_args(16, 'a', impl='ntl', elem_cache=False) # needs sage.libs.ntl
534
+ ((16, ('a',), x^4 + x + 1, 'ntl', 2, 4, True, None, None, None, True, True), {})
535
+ sage: GF(16, impl='ntl') is GF(16, impl='ntl', repr='foo') # needs sage.libs.ntl
536
+ True
537
+
538
+ We handle extra arguments for the givaro finite field and
539
+ create unique objects for their defaults::
540
+
541
+ sage: GF(25, impl='givaro') is GF(25, impl='givaro', repr='poly') # needs sage.libs.linbox
542
+ True
543
+ sage: GF(25, impl='givaro') is GF(25, impl='givaro', elem_cache=True) # needs sage.libs.linbox
544
+ True
545
+ sage: GF(625, impl='givaro') is GF(625, impl='givaro', elem_cache=False) # needs sage.libs.linbox
546
+ True
547
+
548
+ We explicitly take ``structure``, ``implementation`` and ``prec`` attributes
549
+ for compatibility with :class:`~sage.categories.pushout.AlgebraicExtensionFunctor`
550
+ but we ignore them as they are not used, see :issue:`21433`::
551
+
552
+ sage: GF.create_key_and_extra_args(9, 'a', structure=None) # needs sage.libs.linbox
553
+ ((9, ('a',), x^2 + 2*x + 2, 'givaro', 3, 2, True, None, 'poly', True, True, True), {})
554
+
555
+ TESTS::
556
+
557
+ sage: GF((6, 1), 'a') # implicit doctest
558
+ Traceback (most recent call last):
559
+ ...
560
+ ValueError: the order of a finite field must be a prime power
561
+
562
+ sage: GF((9, 1), 'a') # implicit doctest
563
+ Traceback (most recent call last):
564
+ ...
565
+ ValueError: the order of a finite field must be a prime power
566
+
567
+ sage: GF((5, 0), 'a') # implicit doctest
568
+ Traceback (most recent call last):
569
+ ...
570
+ ValueError: the order of a finite field must be a prime power
571
+
572
+ sage: GF((3, 2, 1), 'a') # implicit doctest
573
+ Traceback (most recent call last):
574
+ ...
575
+ ValueError: wrong input for finite field constructor
576
+ """
577
+ for key, val in kwds.items():
578
+ if key not in ['structure', 'implementation', 'prec', 'embedding', 'latex_names']:
579
+ raise TypeError("create_key_and_extra_args() got an unexpected keyword argument '%s'" % key)
580
+ if not (val is None or isinstance(val, list) and all(c is None for c in val)):
581
+ raise NotImplementedError("ring extension with prescribed %s is not implemented" % key)
582
+
583
+ from sage.structure.proof.all import WithProof, arithmetic
584
+ if proof is None:
585
+ proof = arithmetic()
586
+ with WithProof('arithmetic', proof):
587
+ if isinstance(order, tuple):
588
+ if len(order) != 2:
589
+ raise ValueError('wrong input for finite field constructor')
590
+ p, n = map(Integer, order)
591
+ if p < 2 or n < 1:
592
+ raise ValueError("the order of a finite field must be a prime power")
593
+ order = p**n
594
+ else:
595
+ order = Integer(order)
596
+ if order < 2:
597
+ raise ValueError("the order of a finite field must be at least 2")
598
+ p, n = order.perfect_power()
599
+ # at this point, order = p**n
600
+ # note that we haven't tested p for primality
601
+
602
+ if n == 1:
603
+ if impl is None:
604
+ impl = 'modn'
605
+ name = ('x',) # Ignore name
606
+ # Every polynomial of degree 1 is irreducible
607
+ check_irreducible = False
608
+ else:
609
+ if names is not None:
610
+ name = names
611
+ if name is None:
612
+ if prefix is None:
613
+ prefix = 'z'
614
+ name = prefix + str(n)
615
+ if modulus is not None:
616
+ raise ValueError("no modulus may be specified if variable name not given")
617
+ # Fpbar will have a strong reference, since algebraic_closure caches its results,
618
+ # and the coefficients of modulus lie in GF(p)
619
+ Fpbar = GF(p).algebraic_closure(prefix)
620
+ # This will give a Conway polynomial if p,n is small enough to be in the database
621
+ # and a pseudo-Conway polynomial if it's not.
622
+ modulus = Fpbar._get_polynomial(n)
623
+ check_irreducible = False
624
+ name = normalize_names(1, name)
625
+
626
+ if impl is None:
627
+ if order < zech_log_bound and FiniteField_givaro is not None:
628
+ impl = 'givaro'
629
+ elif p == 2 and FiniteField_ntl_gf2e is not None:
630
+ impl = 'ntl'
631
+ else:
632
+ impl = 'pari_ffelt'
633
+
634
+ # Determine modulus.
635
+ # For the 'modn' implementation, we use the following
636
+ # optimization which we also need to avoid an infinite loop:
637
+ # a modulus of None is a shorthand for x-1.
638
+ if modulus is not None or impl != 'modn':
639
+ from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
640
+ R = PolynomialRing(FiniteField(p), 'x')
641
+ if modulus is None:
642
+ modulus = R.irreducible_element(n)
643
+ if isinstance(modulus, str):
644
+ # A string specifies an algorithm to find a suitable modulus.
645
+ if modulus != "random" and modulus in self._modulus_cache[order]:
646
+ modulus = self._modulus_cache[order][modulus]
647
+ else:
648
+ self._modulus_cache[order][modulus] = modulus = R.irreducible_element(n, algorithm=modulus)
649
+ else:
650
+ if isinstance(modulus, Polynomial):
651
+ modulus = modulus.change_variable_name('x')
652
+ modulus = R(modulus).monic()
653
+
654
+ if modulus.degree() != n:
655
+ raise ValueError("the degree of the modulus does not equal the degree of the field")
656
+ # If modulus is x - 1 for impl="modn", set it to None
657
+ if impl == 'modn' and modulus.list() == [-1,1]:
658
+ modulus = None
659
+ if modulus is None:
660
+ check_irreducible = False
661
+
662
+ # Check extra arguments for givaro and setup their defaults
663
+ # TODO: ntl takes a repr, but ignores it
664
+ if impl == 'givaro':
665
+ if repr is None:
666
+ repr = 'poly'
667
+ if elem_cache is None:
668
+ elem_cache = (order < 500)
669
+ else:
670
+ # This has the effect of ignoring these keywords
671
+ repr = None
672
+ elem_cache = None
673
+
674
+ return (order, name, modulus, impl, p, n, proof, prefix, repr, elem_cache, check_prime, check_irreducible), {}
675
+
676
+ def create_object(self, version, key, **kwds):
677
+ """
678
+ EXAMPLES::
679
+
680
+ sage: K = GF(19) # indirect doctest
681
+ sage: TestSuite(K).run()
682
+
683
+ We try to create finite fields with various implementations::
684
+
685
+ sage: k = GF(2, impl='modn')
686
+ sage: k = GF(2, impl='givaro') # needs sage.libs.linbox
687
+ sage: k = GF(2, impl='ntl') # needs sage.libs.ntl
688
+ sage: k = GF(2, impl='pari')
689
+ Traceback (most recent call last):
690
+ ...
691
+ ValueError: the degree must be at least 2
692
+ sage: k = GF(2, impl='supercalifragilisticexpialidocious')
693
+ Traceback (most recent call last):
694
+ ...
695
+ ValueError: no such finite field implementation: 'supercalifragilisticexpialidocious'
696
+ sage: k.<a> = GF(2^15, impl='modn')
697
+ Traceback (most recent call last):
698
+ ...
699
+ ValueError: the 'modn' implementation requires a prime order
700
+ sage: k.<a> = GF(2^15, impl='givaro') # needs sage.libs.linbox
701
+ sage: k.<a> = GF(2^15, impl='ntl') # needs sage.libs.ntl
702
+ sage: k.<a> = GF(2^15, impl='pari')
703
+ sage: k.<a> = GF(3^60, impl='modn')
704
+ Traceback (most recent call last):
705
+ ...
706
+ ValueError: the 'modn' implementation requires a prime order
707
+ sage: k.<a> = GF(3^60, impl='givaro') # needs sage.libs.linbox
708
+ Traceback (most recent call last):
709
+ ...
710
+ ValueError: q must be < 2^16
711
+ sage: k.<a> = GF(3^60, impl='ntl') # needs sage.libs.ntl
712
+ Traceback (most recent call last):
713
+ ...
714
+ ValueError: q must be a 2-power
715
+ sage: k.<a> = GF(3^60, impl='pari')
716
+ """
717
+ # IMPORTANT! If you add a new class to the list of classes
718
+ # that get cached by this factor object, then you *must* add
719
+ # the following method to that class in order to fully support
720
+ # pickling:
721
+ #
722
+ # def __reduce__(self): # and include good doctests, please!
723
+ # return self._factory_data[0].reduce_data(self)
724
+ #
725
+ # This is not in the base class for finite fields, since some finite
726
+ # fields need not be created using this factory object, e.g., residue
727
+ # class fields.
728
+
729
+ if len(key) == 5:
730
+ # for backward compatibility of pickles (see trac 10975).
731
+ order, name, modulus, impl, _ = key
732
+ p, n = Integer(order).factor()[0]
733
+ proof = True
734
+ prefix = kwds.get('prefix', None)
735
+ # We can set the defaults here to be those for givaro
736
+ # as they are otherwise ignored
737
+ repr = 'poly'
738
+ elem_cache = (order < 500)
739
+ check_prime = check_irreducible = False
740
+ elif len(key) == 8:
741
+ # For backward compatibility of pickles (see trac #21433)
742
+ order, name, modulus, impl, _, p, n, proof = key
743
+ prefix = kwds.get('prefix', None)
744
+ # We can set the defaults here to be those for givaro
745
+ # as they are otherwise ignored
746
+ repr = kwds.get('repr', 'poly')
747
+ elem_cache = kwds.get('elem_cache', (order < 500))
748
+ check_prime = check_irreducible = False
749
+ elif len(key) == 10:
750
+ order, name, modulus, impl, p, n, proof, prefix, repr, elem_cache = key
751
+ check_prime = check_irreducible = False
752
+ else:
753
+ order, name, modulus, impl, p, n, proof, prefix, repr, elem_cache, check_prime, check_irreducible = key
754
+
755
+ from sage.structure.proof.all import WithProof
756
+ with WithProof('arithmetic', proof):
757
+ if check_prime and not p.is_prime():
758
+ raise ValueError("the order of a finite field must be a prime power")
759
+ if check_irreducible and not modulus.is_irreducible():
760
+ raise ValueError("finite field modulus must be irreducible but it is not")
761
+
762
+ if impl == 'modn':
763
+ if n != 1:
764
+ raise ValueError("the 'modn' implementation requires a prime order")
765
+ from .finite_field_prime_modn import FiniteField_prime_modn
766
+ # Using a check option here is probably a worthwhile
767
+ # compromise since this constructor is simple and used a
768
+ # huge amount.
769
+ K = FiniteField_prime_modn(order, check=False, modulus=modulus)
770
+ else:
771
+ # We have to do this with block so that the finite field
772
+ # constructors below will use the proof flag that was
773
+ # passed in when checking for primality, factoring, etc.
774
+ # Otherwise, we would have to complicate all of their
775
+ # constructors with check options.
776
+ with WithProof('arithmetic', proof):
777
+ if impl == 'givaro':
778
+ K = FiniteField_givaro(order, name, modulus, repr, elem_cache)
779
+ elif impl == 'ntl':
780
+ K = FiniteField_ntl_gf2e(order, name, modulus)
781
+ elif impl == 'pari_ffelt' or impl == 'pari':
782
+ from .finite_field_pari_ffelt import FiniteField_pari_ffelt
783
+ K = FiniteField_pari_ffelt(p, modulus, name)
784
+ else:
785
+ raise ValueError("no such finite field implementation: %r" % impl)
786
+
787
+ # Temporary; see create_key_and_extra_args() above.
788
+ if prefix is not None:
789
+ K._prefix = prefix
790
+
791
+ return K
792
+
793
+
794
+ GF = FiniteField = FiniteFieldFactory("FiniteField")
795
+
796
+
797
+ def is_PrimeFiniteField(x):
798
+ """
799
+ Return ``True`` if ``x`` is a prime finite field.
800
+
801
+ This function is deprecated.
802
+
803
+ EXAMPLES::
804
+
805
+ sage: from sage.rings.finite_rings.finite_field_constructor import is_PrimeFiniteField
806
+ sage: is_PrimeFiniteField(QQ)
807
+ doctest:...: DeprecationWarning: the function is_PrimeFiniteField is deprecated; use isinstance(x, sage.rings.finite_rings.finite_field_base.FiniteField) and x.is_prime_field() instead
808
+ See https://github.com/sagemath/sage/issues/32664 for details.
809
+ False
810
+ sage: is_PrimeFiniteField(GF(7))
811
+ True
812
+ sage: is_PrimeFiniteField(GF(7^2, 'a'))
813
+ False
814
+ sage: is_PrimeFiniteField(GF(next_prime(10^90, proof=False)))
815
+ True
816
+ """
817
+ from sage.misc.superseded import deprecation
818
+ deprecation(32664, "the function is_PrimeFiniteField is deprecated; use isinstance(x, sage.rings.finite_rings.finite_field_base.FiniteField) and x.is_prime_field() instead")
819
+
820
+ from .finite_field_prime_modn import FiniteField_prime_modn
821
+ from sage.rings.finite_rings.finite_field_base import FiniteField as FiniteField_generic
822
+
823
+ return isinstance(x, FiniteField_prime_modn) or \
824
+ (isinstance(x, FiniteField_generic) and x.degree() == 1)
825
+
826
+
827
+ zech_log_bound = 2**16