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,826 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ # sage.doctest: needs sage.schemes
3
+ r"""
4
+ Jacobians of function fields
5
+
6
+ This module provides base classes for Jacobians of function fields.
7
+
8
+ Jacobian
9
+ --------
10
+
11
+ The Jacobian of a function field is created by default in the Hess model, with
12
+ a base divisor of degree `g` the genus of the function field. The base divisor
13
+ is automatically chosen if not given. ::
14
+
15
+ sage: P2.<x,y,z> = ProjectiveSpace(GF(29), 2)
16
+ sage: C = Curve(x^3 + 5*z^3 - y^2*z, P2)
17
+ sage: F = C.function_field()
18
+ sage: J = F.jacobian()
19
+ sage: J
20
+ Jacobian of Function field in z defined by z^3 + 23*y^2*z + 6 (Hess model)
21
+ sage: J.base_divisor().degree()
22
+ 1
23
+
24
+ Explicitly specify a model if you want Jacobians in different models. ::
25
+
26
+ sage: J_km = F.jacobian(model='km_large')
27
+ sage: J_km
28
+ Jacobian of Function field in z defined by z^3 + 23*y^2*z + 6 (Khuri-Makdisi large model)
29
+
30
+ Group of rational points
31
+ ------------------------
32
+
33
+ The group of rational points of a Jacobian is created from the Jacobian. A
34
+ point of the Jacobian group is determined by a divisor of degree zero. To
35
+ represent the point, a divisor of the form `D-B` is selected where `D` is an
36
+ effective divisor of the same degree with the base divisor `B`. Hence the point
37
+ is simply represented by the divisor `D`. ::
38
+
39
+ sage: G = J.group()
40
+ sage: G.order()
41
+ 30
42
+ sage: pl1 = C([1,8,1]).place()
43
+ sage: pl2 = C([2,10,1]).place()
44
+ sage: p1 = G.point(pl1 - pl2)
45
+ sage: p1
46
+ [Place (y + 1, z + 6)]
47
+ sage: p2 = G.point(pl2 - pl1)
48
+ sage: p2
49
+ [Place (y + 28, z + 6)]
50
+ sage: p1 + p2 == G.zero()
51
+ True
52
+ sage: p1.order()
53
+ 5
54
+
55
+ We can get the corresponding point in the Jacobian in a different model. ::
56
+
57
+ sage: p1km = J_km(p1)
58
+ sage: p1km.order()
59
+ 5
60
+ sage: p1km
61
+ Point of Jacobian determined by
62
+ [ 1 0 0 0 0 0 11 0 0]
63
+ [ 0 1 0 0 0 0 18 0 0]
64
+ [ 0 0 1 0 0 0 11 0 0]
65
+ [ 0 0 0 1 0 0 18 1 0]
66
+ [ 0 0 0 0 1 0 25 0 19]
67
+ [ 0 0 0 0 0 1 8 8 0]
68
+
69
+ AUTHORS:
70
+
71
+ - Kwankyu Lee (2022-01-24): initial version
72
+ """
73
+
74
+ # ****************************************************************************
75
+ # Copyright (C) 2022 Kwankyu Lee <ekwankyu@gmail.com>
76
+ #
77
+ # This program is free software: you can redistribute it and/or modify
78
+ # it under the terms of the GNU General Public License as published by
79
+ # the Free Software Foundation, either version 2 of the License, or
80
+ # (at your option) any later version.
81
+ # https://www.gnu.org/licenses/
82
+ # ****************************************************************************
83
+
84
+ import math
85
+
86
+ from sage.arith.misc import integer_floor, integer_ceil
87
+
88
+ from sage.structure.parent import Parent
89
+ from sage.structure.element import ModuleElement
90
+
91
+ from sage.categories.commutative_additive_groups import CommutativeAdditiveGroups
92
+ from sage.categories.schemes import Jacobians
93
+ from sage.categories.pushout import ConstructionFunctor, pushout
94
+
95
+ from sage.rings.integer_ring import IntegerRing
96
+ from sage.rings.integer import Integer
97
+
98
+
99
+ class JacobianPoint_base(ModuleElement):
100
+ """
101
+ Abstract base class of points of Jacobian groups.
102
+ """
103
+ pass
104
+
105
+
106
+ class JacobianPoint_finite_field_base(JacobianPoint_base):
107
+ """
108
+ Points of Jacobians over finite fields.
109
+ """
110
+ def order(self):
111
+ """
112
+ Return the order of this point.
113
+
114
+ EXAMPLES::
115
+
116
+ sage: P2.<x,y,z> = ProjectiveSpace(GF(29), 2)
117
+ sage: C = Curve(x^3 + 5*z^3 - y^2*z, P2)
118
+ sage: F = C.function_field()
119
+ sage: h = C.function(y/x).divisor_of_poles()
120
+ sage: J = C.jacobian(model='km_large', base_div=h)
121
+ sage: G = J.group()
122
+ sage: b = F.get_place(1)
123
+ sage: pl = C([-1,2,1]).place()
124
+ sage: p = G.point(pl - b)
125
+ sage: p.order()
126
+ 15
127
+
128
+ ALGORITHM: Shanks' Baby Step Giant Step
129
+ """
130
+ G = self.parent()
131
+ B = G._bound_on_order()
132
+ q = integer_ceil(B.sqrt())
133
+ zero = G.zero()
134
+
135
+ # baby steps
136
+ b = [zero]
137
+ g = self
138
+ for i in range(q - 1):
139
+ if g == zero:
140
+ return i + 1
141
+ b.append(g)
142
+ g = g + self
143
+
144
+ # giant steps
145
+ g0 = self.multiple(-q)
146
+ g = g0
147
+ for i in range(q - 1):
148
+ for r in range(q):
149
+ if g == b[r]:
150
+ return q * (i + 1) + r
151
+ g = g + g0
152
+
153
+ # order is neither smaller or nor larger than this
154
+ return q**2
155
+
156
+ def frobenius(self):
157
+ """
158
+ Return the image of the point acted by the Frobenius automorphism.
159
+
160
+ EXAMPLES::
161
+
162
+ sage: k = GF(7)
163
+ sage: A.<x,y> = AffineSpace(k,2)
164
+ sage: C = Curve(y^2 + x^3 + 2*x + 1).projective_closure()
165
+ sage: J = C.jacobian(model='hess')
166
+ sage: G1 = J.group()
167
+ sage: G1.order()
168
+ 11
169
+ sage: K = k.extension(3)
170
+ sage: G3 = J.group(K)
171
+ sage: pts1 = G1.get_points(11)
172
+ sage: pts3 = G3.get_points(12)
173
+ sage: pt = next(pt for pt in pts3 if pt not in pts1)
174
+ sage: pt.frobenius() == pt
175
+ False
176
+ sage: pt.frobenius().frobenius().frobenius() == pt
177
+ True
178
+ """
179
+ G = self.parent()
180
+ return G._frobenius_on(self)
181
+
182
+
183
+ class JacobianGroupFunctor(ConstructionFunctor):
184
+ """
185
+ A construction functor for Jacobian groups.
186
+
187
+ EXAMPLES::
188
+
189
+ sage: k = GF(7)
190
+ sage: P2.<x,y,z> = ProjectiveSpace(k, 2)
191
+ sage: C = Curve(x^3 + 5*z^3 - y^2*z, P2)
192
+ sage: J = C.jacobian(model='hess')
193
+ sage: G = J.group()
194
+ sage: F, obj = G.construction()
195
+ sage: F
196
+ JacobianGroupFunctor
197
+ """
198
+ rank = 20
199
+
200
+ def __init__(self, base_field, field):
201
+ """
202
+ Initialize.
203
+
204
+ TESTS::
205
+
206
+ sage: k = GF(7)
207
+ sage: P2.<x,y,z> = ProjectiveSpace(k, 2)
208
+ sage: C = Curve(x^3 + 5*z^3 - y^2*z, P2)
209
+ sage: J = C.jacobian(model='hess')
210
+ sage: K = k.extension(2)
211
+ sage: G = J.group(K)
212
+ sage: F, obj = G.construction()
213
+ sage: TestSuite(F).run()
214
+ """
215
+ super().__init__(Jacobians(base_field), CommutativeAdditiveGroups())
216
+
217
+ self._field = field
218
+
219
+ def _apply_functor(self, jacobian):
220
+ """
221
+ Apply this functor to ``jacobian``.
222
+
223
+ INPUT:
224
+
225
+ - ``jacobian`` -- a Jacobian
226
+
227
+ EXAMPLES::
228
+
229
+ sage: k = GF(7)
230
+ sage: P2.<x,y,z> = ProjectiveSpace(k, 2)
231
+ sage: C = Curve(x^3 + 5*z^3 - y^2*z, P2)
232
+ sage: J = C.jacobian(model='hess')
233
+ sage: K = k.extension(2)
234
+ sage: G = J.group(K)
235
+ sage: F, obj = G.construction()
236
+ sage: F(obj) is G # indirect doctest
237
+ True
238
+ """
239
+ return jacobian.group(self._field)
240
+
241
+ def merge(self, other):
242
+ """
243
+ Return the functor merging ``self`` and ``other``.
244
+
245
+ INPUT:
246
+
247
+ - ``other`` -- a functor
248
+
249
+ EXAMPLES::
250
+
251
+ sage: k = GF(7)
252
+ sage: P2.<x,y,z> = ProjectiveSpace(k, 2)
253
+ sage: C = Curve(x^3 + 5*z^3 - y^2*z, P2)
254
+ sage: J = C.jacobian(model='hess')
255
+ sage: K2 = k.extension(2)
256
+ sage: G2 = J.group(K2)
257
+ sage: K3 = k.extension(3)
258
+ sage: G3 = J.group(K3)
259
+ sage: sage.categories.pushout.pushout(G2, G3) # indirect doctest
260
+ Group of rational points of Jacobian over Finite Field in z6 of size 7^6 (Hess model)
261
+ """
262
+ if not isinstance(other, JacobianGroupFunctor):
263
+ return None
264
+ if not self.domain() == other.domain():
265
+ return None
266
+ K = pushout(self._field, other._field)
267
+ return JacobianGroupFunctor(self.domain().base(), K)
268
+
269
+
270
+ class JacobianGroup_base(Parent):
271
+ """
272
+ Groups of rational points of Jacobians.
273
+
274
+ INPUT:
275
+
276
+ - ``parent`` -- a Jacobian
277
+
278
+ - ``function_field`` -- a function field
279
+
280
+ - ``base_div`` -- an effective divisor of the function field
281
+
282
+ EXAMPLES::
283
+
284
+ sage: P2.<x,y,z> = ProjectiveSpace(GF(7), 2)
285
+ sage: C = Curve(x^3 + 5*z^3 - y^2*z, P2)
286
+ sage: J = C.jacobian(model='hess')
287
+ sage: J.group()
288
+ Group of rational points of Jacobian over Finite Field of size 7 (Hess model)
289
+ """
290
+ _embedding_map_class = None
291
+
292
+ def __init__(self, parent, function_field, base_div):
293
+ """
294
+ Initialize.
295
+
296
+ TESTS::
297
+
298
+ sage: P2.<x,y,z> = ProjectiveSpace(GF(7), 2)
299
+ sage: C = Curve(x^3 + 5*z^3 - y^2*z, P2)
300
+ sage: J = C.jacobian(model='hess')
301
+ sage: G = J.group()
302
+ sage: TestSuite(G).run(skip=['_test_elements', '_test_pickling'])
303
+ """
304
+ super().__init__(base=IntegerRing(), category=CommutativeAdditiveGroups())
305
+
306
+ self._parent = parent
307
+ self._function_field = function_field
308
+ self._genus = parent._function_field.genus() # equals function_field.genus()
309
+ self._base_div = base_div
310
+
311
+ def _repr_(self):
312
+ """
313
+ Return the string representation of ``self``.
314
+
315
+ EXAMPLES::
316
+
317
+ sage: P2.<x,y,z> = ProjectiveSpace(GF(7), 2)
318
+ sage: C = Curve(x^3 + 5*z^3 - y^2*z, P2)
319
+ sage: b = C([0,1,0]).place()
320
+ sage: J = C.jacobian(model='hess', base_div=b)
321
+ sage: J.group()
322
+ Group of rational points of Jacobian over Finite Field of size 7 (Hess model)
323
+ """
324
+ F = self._function_field
325
+ k = F.constant_base_field()
326
+ return f'Group of rational points of Jacobian over {k}'
327
+
328
+ def _coerce_map_from_(self, S):
329
+ """
330
+ Return the coerce map from ``S`` if ``S`` is embedded to ``self``.
331
+
332
+ EXAMPLES::
333
+
334
+ sage: k = GF(7)
335
+ sage: P2.<x,y,z> = ProjectiveSpace(k, 2)
336
+ sage: C = Curve(x^3 + 5*z^3 - y^2*z, P2)
337
+ sage: b = C([0,1,0]).place()
338
+ sage: J = C.jacobian(model='hess', base_div=b)
339
+ sage: G1 = J.group()
340
+ sage: K = k.extension(3)
341
+ sage: G3 = J.group(K)
342
+ sage: G3.has_coerce_map_from(G1)
343
+ True
344
+ """
345
+ if isinstance(S, JacobianGroup_base) and S.parent() is self.parent():
346
+ K = self._function_field.constant_base_field()
347
+ k = S._function_field.constant_base_field()
348
+ if K.has_coerce_map_from(k):
349
+ return self._embedding_map_class(S, self)
350
+ return None
351
+
352
+ def construction(self):
353
+ """
354
+ Return the data for a functorial construction of this Jacobian group.
355
+
356
+ EXAMPLES::
357
+
358
+ sage: k = GF(7)
359
+ sage: P2.<x,y,z> = ProjectiveSpace(k, 2)
360
+ sage: C = Curve(x^3 + 5*z^3 - y^2*z, P2)
361
+ sage: J = C.jacobian(model='hess')
362
+ sage: K2 = k.extension(2)
363
+ sage: G2 = J.group(K2)
364
+ sage: K3= k.extension(3)
365
+ sage: G3 = J.group(K3)
366
+ sage: p1, p2 = G2.get_points(2)
367
+ sage: q1, q2 = G3.get_points(2)
368
+ sage: (p1 + q1).parent() is (p2 + q2).parent()
369
+ True
370
+ """
371
+ k = self._parent._function_field.constant_base_field()
372
+ K = self._function_field.constant_base_field()
373
+ return (JacobianGroupFunctor(k, K), self._parent)
374
+
375
+ def parent(self):
376
+ """
377
+ Return the Jacobian to which this Jacobian group belongs.
378
+
379
+ EXAMPLES::
380
+
381
+ sage: P2.<x,y,z> = ProjectiveSpace(GF(7), 2)
382
+ sage: C = Curve(x^3 + 5*z^3 - y^2*z, P2)
383
+ sage: J = C.jacobian(model='hess')
384
+ sage: G = J.group()
385
+ sage: G.parent()
386
+ Jacobian of Projective Plane Curve over Finite Field of size 7
387
+ defined by x^3 - y^2*z - 2*z^3 (Hess model)
388
+ """
389
+ return self._parent
390
+
391
+ def function_field(self):
392
+ """
393
+ Return the function field to which this Jacobian group attached.
394
+
395
+ EXAMPLES::
396
+
397
+ sage: P2.<x,y,z> = ProjectiveSpace(GF(7), 2)
398
+ sage: C = Curve(x^3 + 5*z^3 - y^2*z, P2)
399
+ sage: J = C.jacobian(model='hess')
400
+ sage: G = J.group()
401
+ sage: G.function_field()
402
+ Function field in z defined by z^3 + 4*y^2*z + 3
403
+ """
404
+ return self._function_field
405
+
406
+ def base_divisor(self):
407
+ """
408
+ Return the base divisor that is used to represent points of this group.
409
+
410
+ EXAMPLES::
411
+
412
+ sage: P2.<x,y,z> = ProjectiveSpace(GF(7), 2)
413
+ sage: C = Curve(x^3 + 5*z^3 - y^2*z, P2)
414
+ sage: b = C([0,1,0]).place()
415
+ sage: J = C.jacobian(model='hess', base_div=b)
416
+ sage: G = J.group()
417
+ sage: G.base_divisor()
418
+ Place (1/y, 1/y*z)
419
+ sage: _ == 1*b
420
+ True
421
+
422
+ The base divisor is the denominator (negative part) of the divisor of
423
+ degree zero that represents a point. ::
424
+
425
+ sage: p = C([-1,2,1]).place()
426
+ sage: G.point(p - b).divisor()
427
+ - Place (1/y, 1/y*z)
428
+ + Place (y + 2, z + 1)
429
+ """
430
+ return self._base_div
431
+
432
+
433
+ class JacobianGroup_finite_field_base(JacobianGroup_base):
434
+ """
435
+ Jacobian groups of function fields over finite fields.
436
+
437
+ EXAMPLES::
438
+
439
+ sage: P2.<x,y,z> = ProjectiveSpace(GF(7), 2)
440
+ sage: C = Curve(x^3 + 5*z^3 - y^2*z, P2)
441
+ sage: b = C([0,1,0]).place()
442
+ sage: J = C.jacobian(model='hess', base_div=b)
443
+ sage: J.group()
444
+ Group of rational points of Jacobian over Finite Field of size 7 (Hess model)
445
+ """
446
+ def _bound_on_order(self):
447
+ """
448
+ Return an upper bound on the order of the abelian group.
449
+
450
+ This bound depends on the genus and the order of the constant field
451
+ of the function field. This simple bound is from [Hes2004]_.
452
+
453
+ EXAMPLES::
454
+
455
+ sage: P2.<x,y,z> = ProjectiveSpace(GF(7), 2)
456
+ sage: C = Curve(x^3 + 5*z^3 - y^2*z, P2)
457
+ sage: b = C([0,1,0]).place()
458
+ sage: J = C.jacobian(model='hess', base_div=b)
459
+ sage: G = J.group()
460
+ sage: G._bound_on_order()
461
+ 23
462
+ """
463
+ F = self._function_field
464
+ q = F.constant_base_field().order()
465
+ g = self._genus
466
+
467
+ c = 2*g/(q.sqrt() - 1)
468
+ return integer_floor(math.exp(c)*q**g)
469
+
470
+ def order(self, algorithm='numeric'):
471
+ """
472
+ Return the order of the Jacobian group.
473
+
474
+ INPUT:
475
+
476
+ - ``algorithm`` -- ``'numeric'`` (default) or ``'algebraic'``
477
+
478
+ EXAMPLES::
479
+
480
+ sage: P2.<x,y,z> = ProjectiveSpace(GF(7), 2)
481
+ sage: C = Curve(x^3 + 5*z^3 - y^2*z, P2)
482
+ sage: b = C([0,1,0]).place()
483
+ sage: J = C.jacobian(model='hess', base_div=b)
484
+ sage: G = J.group()
485
+ sage: G.order()
486
+ 7
487
+ """
488
+ F = self._parent._function_field
489
+ g = F.genus()
490
+ b = self._function_field.constant_base_field().degree() // F.constant_base_field().degree()
491
+
492
+ f = F.L_polynomial()
493
+
494
+ if algorithm == 'numeric':
495
+ # numeric method - fast but might be inaccurate by numerical noise
496
+ from sage.rings.qqbar import AlgebraicField
497
+ h = Integer(math.prod([(1-a**(-b))**m for a, m in f.change_ring(AlgebraicField()).roots()]))
498
+ return h
499
+
500
+ # algebraic method - slow
501
+
502
+ es = []
503
+ s = -1
504
+ for i in range(1, 2*g + 1):
505
+ es.append(s*f[i])
506
+ s = -s
507
+ es
508
+
509
+ ps = [es[0]]
510
+ for i in range(1, 2*g):
511
+ p = 0
512
+ s = 1
513
+ for j in range(i):
514
+ p = p + s*es[j]*ps[-j-1]
515
+ s = -s
516
+ ps.append(p + s*(i + 1)*es[i])
517
+
518
+ while len(ps) < b*2*g:
519
+ p = 0
520
+ s = 1
521
+ for j in range(2*g):
522
+ p = p + s*es[j]*ps[-j-1]
523
+ s = -s
524
+ ps.append(p)
525
+
526
+ qs = [ps[b*(i + 1) - 1] for i in range(2*g)]
527
+
528
+ fs = [qs[0]]
529
+ for i in range(1, 2*g):
530
+ k = qs[i]
531
+ s = -1
532
+ for j in range(i):
533
+ k = k + s*fs[j]*qs[i - j - 1]
534
+ s = -s
535
+ fs.append(-s*k // (i + 1))
536
+
537
+ bs = [1]
538
+ s = -1
539
+ for i in range(2*g):
540
+ bs.append(s*fs[i])
541
+ s = -s
542
+
543
+ return sum(bs)
544
+
545
+ def get_points(self, n):
546
+ """
547
+ Return `n` points of the Jacobian group.
548
+
549
+ If `n` is greater than the order of the group, then returns
550
+ all points of the group.
551
+
552
+ INPUT:
553
+
554
+ - ``n`` -- integer
555
+
556
+ EXAMPLES::
557
+
558
+ sage: k = GF(7)
559
+ sage: A.<x,y> = AffineSpace(k,2)
560
+ sage: C = Curve(y^2 + x^3 + 2*x + 1).projective_closure()
561
+ sage: J = C.jacobian(model='hess')
562
+ sage: G = J.group()
563
+ sage: pts = G.get_points(G.order())
564
+ sage: len(pts)
565
+ 11
566
+ """
567
+ lst = []
568
+ S = iter(self)
569
+ try:
570
+ for i in range(n):
571
+ lst.append(next(S))
572
+ except StopIteration:
573
+ pass
574
+
575
+ return lst
576
+
577
+
578
+ class Jacobian_base(Parent):
579
+ """
580
+ Jacobians of function fields.
581
+
582
+ EXAMPLES::
583
+
584
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
585
+ sage: F.<y> = K.extension(Y^2 + Y + x + 1/x)
586
+ sage: F.jacobian()
587
+ Jacobian of Function field in y defined by y^2 + y + (x^2 + 1)/x (Hess model)
588
+ """
589
+ def __init__(self, function_field, base_div, **kwds):
590
+ """
591
+ Initialize.
592
+
593
+ TESTS::
594
+
595
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
596
+ sage: F.<y> = K.extension(Y^2 + Y + x + 1/x)
597
+ sage: J = F.jacobian()
598
+ sage: TestSuite(J).run()
599
+ """
600
+ self._function_field = function_field
601
+ self._base_div = base_div
602
+ self._system = {}
603
+ self._base_place = None
604
+ self._curve = kwds.get('curve')
605
+ super().__init__(category=Jacobians(function_field.constant_base_field()),
606
+ base=function_field.constant_base_field(),
607
+ facade=True)
608
+
609
+ def _repr_(self):
610
+ """
611
+ Return the string representation of ``self``.
612
+
613
+ EXAMPLES::
614
+
615
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
616
+ sage: F.<y> = K.extension(Y^2 + Y + x + 1/x)
617
+ sage: F.jacobian()
618
+ Jacobian of Function field in y defined by y^2 + y + (x^2 + 1)/x (Hess model)
619
+ """
620
+ return f'Jacobian of {self.base_curve()}'
621
+
622
+ def _an_element_(self):
623
+ """
624
+ Return an element of ``self``.
625
+
626
+ TESTS::
627
+
628
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
629
+ sage: F.<y> = K.extension(Y^2 + Y + x + 1/x)
630
+ sage: J = F.jacobian()
631
+ sage: J.an_element()
632
+ [Place (1/x, 1/x*y)]
633
+ """
634
+ return next(iter(self.group()))
635
+
636
+ def __call__(self, x):
637
+ """
638
+ Return the point of ``self`` constructed from ``x``.
639
+
640
+ It is assumed that ``self`` and ``x`` are points of the Jacobians
641
+ attached to the same function field.
642
+
643
+ TESTS::
644
+
645
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
646
+ sage: F.<y> = K.extension(Y^2 + Y + x + 1/x)
647
+ sage: J_hess = F.jacobian(model='hess')
648
+ sage: G = J_hess.group()
649
+ sage: p = G.get_points(3)[2]
650
+ sage: Jkm = F.jacobian(model='km_large')
651
+ sage: q = Jkm(p)
652
+ sage: p.order() == q.order()
653
+ True
654
+ sage: J_hess(q) == p
655
+ True
656
+
657
+ If ``x`` is an effective divisor, it is checked that the degree
658
+ is equal to the degree of the base divisor. See :issue:`38623`.
659
+
660
+ sage: K.<x> = FunctionField(GF(7))
661
+ sage: _.<t> = K[]
662
+ sage: F.<y> = K.extension(t^2 - x^6 - 3)
663
+ sage: O = F.maximal_order()
664
+ sage: D1 = (O.ideal(x + 1, y + 2) * O.ideal(x + 2, y + 2)).divisor()
665
+ sage: I = O.ideal(x + 3, y+5) * O.ideal(x + 4, y + 5) * O.ideal(x + 5, y + 5)
666
+ sage: D2 = I.divisor()
667
+ sage: J = F.jacobian(model='hess')
668
+ sage: J(D1)
669
+ [Place (x + 1, y + 2) + Place (x + 2, y + 2)]
670
+ sage: J(D2)
671
+ Traceback (most recent call last):
672
+ ...
673
+ ValueError: effective divisor is not of degree 2
674
+ sage: J.base_divisor().degree()
675
+ 2
676
+ """
677
+ F = self._function_field
678
+ if isinstance(x, JacobianPoint_base):
679
+ Gx = x.parent()
680
+ Jx = Gx.parent()
681
+ if Jx._function_field is F:
682
+ k = Gx._function_field.constant_base_field()
683
+ G = self.group(k)
684
+ K = G._function_field
685
+ return G.point(K.divisor_group()(x.divisor()))
686
+ if x in F.place_set():
687
+ return self(x - x.degree()*self._base_place)
688
+ if x == 0:
689
+ return self.group().zero()
690
+ if x in F.divisor_group():
691
+ return self.group()(x)
692
+ raise ValueError(f"cannot create a point of the Jacobian from {x}")
693
+
694
+ def curve(self):
695
+ """
696
+ Return the projective curve to which this Jacobian is attached.
697
+
698
+ If the Jacobian was constructed from a function field, then returns nothing.
699
+
700
+ EXAMPLES::
701
+
702
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
703
+ sage: F.<y> = K.extension(Y^2 + Y + x + 1/x)
704
+ sage: J = F.jacobian()
705
+ sage: J.curve()
706
+ """
707
+ return self._curve
708
+
709
+ def base_curve(self):
710
+ """
711
+ Return the base curve or the function field that abstractly defines a curve.
712
+
713
+ EXAMPLES::
714
+
715
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
716
+ sage: F.<y> = K.extension(Y^2 + Y + x + 1/x)
717
+ sage: J = F.jacobian()
718
+ sage: J.base_curve()
719
+ Function field in y defined by y^2 + y + (x^2 + 1)/x
720
+ """
721
+ return self._function_field if self._curve is None else self._curve
722
+
723
+ def facade_for(self):
724
+ """
725
+ Return the system of groups that this Jacobian is a facade for.
726
+
727
+ The Jacobian can be seen as a facade for all groups of rational points
728
+ over field extensions of the base constant field of the function field.
729
+ This method returns only the internally constructed system of such
730
+ groups.
731
+
732
+ EXAMPLES::
733
+
734
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
735
+ sage: F.<y> = K.extension(Y^2 + Y + x + 1/x)
736
+ sage: J = F.jacobian()
737
+ sage: J.facade_for()
738
+ [Group of rational points of Jacobian over Finite Field of size 2 (Hess model)]
739
+ """
740
+ if not self._system:
741
+ return [self.group()]
742
+ return [self.group(k) for k in self._system]
743
+
744
+ def base_divisor(self):
745
+ """
746
+ Return the base divisor used to construct the Jacobian.
747
+
748
+ EXAMPLES::
749
+
750
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
751
+ sage: F.<y> = K.extension(Y^2 + Y + x + 1/x)
752
+ sage: b = F.get_place(1)
753
+ sage: J = F.jacobian(base_div=b)
754
+ sage: J.base_divisor() == b
755
+ True
756
+ """
757
+ return self._base_div
758
+
759
+ def group(self, k_ext=None):
760
+ """
761
+ Return the group of rational points of the Jacobian.
762
+
763
+ EXAMPLES::
764
+
765
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
766
+ sage: F.<y> = K.extension(Y^2 + Y + x + 1/x)
767
+ sage: b = F.get_place(1)
768
+ sage: J = F.jacobian(base_div=b)
769
+ sage: J.group()
770
+ Group of rational points of Jacobian over Finite Field of size 2 (Hess model)
771
+ """
772
+ F = self._function_field
773
+ k = F.constant_base_field()
774
+
775
+ if k_ext in self._system:
776
+ return self._system[k_ext][0]
777
+
778
+ if k_ext is None or k_ext is k:
779
+ ext = F.extension_constant_field(k)
780
+ grp = self._group_class(self, F, self._base_div)
781
+ if self._base_place is not None:
782
+ grp._base_place = self._base_place
783
+ self._system[k] = (grp, ext)
784
+ else:
785
+ ext = F.extension_constant_field(k_ext)
786
+ base_div = ext.conorm_divisor(self._base_div)
787
+ grp = self._group_class(self, ext.top(), base_div)
788
+ if self._base_place is not None:
789
+ grp._base_place = ext.conorm_place(self._base_place)
790
+ self._system[k_ext] = (grp, ext)
791
+
792
+ return grp
793
+
794
+ def set_base_place(self, place):
795
+ """
796
+ Set ``place`` as the base place.
797
+
798
+ INPUT:
799
+
800
+ - ``place`` -- a rational place of the function field
801
+
802
+ The base place `B` is used to map a rational place `P` of the function
803
+ field to the point of the Jacobian defined by the divisor `P - B`.
804
+
805
+ EXAMPLES::
806
+
807
+ sage: K.<x> = FunctionField(GF(2)); _.<Y> = K[]
808
+ sage: F.<y> = K.extension(Y^2 + Y + x + 1/x)
809
+ sage: J = F.jacobian()
810
+ sage: B = F.get_place(1)
811
+ sage: J.set_base_place(B)
812
+ sage: Q = F.places()[-1]
813
+ sage: J(Q)
814
+ [Place (x + 1, x*y + 1)]
815
+ sage: J(Q).parent()
816
+ Group of rational points of Jacobian over Finite Field of size 2 (Hess model)
817
+ sage: J(B)
818
+ [Place (x, x*y)]
819
+ sage: J(B).is_zero()
820
+ True
821
+ """
822
+ self._base_place = place
823
+
824
+ for k in self._system:
825
+ grp, ext = self._system[k]
826
+ grp._base_place = ext.conorm_place(place)